墨观Inkstone

墨观 Inkstone

一套从 526 个中国传统颜色里长出来的代码配色。六个变体共用同一套色相骨架,切换时像同一幅画换了光线。

  • VS Code
  • Cursor
  • Windsurf
  • VSCodium
  • Ghostty
  • Kaku / WezTerm
  • OpenCode
inkstone · theme.ts
◫ ⌕ ⑂ ▷ ◈
theme.ts ×
palette.ts
kaku.lua
1// 墨观 Inkstone · 把传统色写进代码
2import { named } from "./palette";
3
4interface Ink {
5 name: string;
6 hex: `#${string}`;
7}
8
9const 墨色: Ink = {
10 name: "玄墨", hex: "#14131a",
11};
12
13/** 计算 WCAG 对比度 */
14export function contrast(a: Ink, b: Ink): number {
15 const lum = (c: Ink) => {
16 const [r, g, b] = [0, 1, 2].map((i) => channel(c.hex, i));
17 return 0.2126 * r + 0.7152 * g + 0.0722 * b;
18 };
19 const [hi, lo] = [lum(a), lum(b)].sort((x, y) => y - x);
20 return (hi + 0.05) / (lo + 0.05);
21}
22
main*|0 errors|1 warning TypeScript|墨观 · 玄墨|UTF-8
inkstone · theme.ts
◫ ⌕ ⑂ ▷ ◈
theme.ts ×
palette.ts
kaku.lua
1// 墨观 Inkstone · 把传统色写进代码
2import { named } from "./palette";
3
4interface Ink {
5 name: string;
6 hex: `#${string}`;
7}
8
9const 墨色: Ink = {
10 name: "玄墨", hex: "#19181e",
11};
12
13/** 计算 WCAG 对比度 */
14export function contrast(a: Ink, b: Ink): number {
15 const lum = (c: Ink) => {
16 const [r, g, b] = [0, 1, 2].map((i) => channel(c.hex, i));
17 return 0.2126 * r + 0.7152 * g + 0.0722 * b;
18 };
19 const [hi, lo] = [lum(a), lum(b)].sort((x, y) => y - x);
20 return (hi + 0.05) / (lo + 0.05);
21}
22
main*|0 errors|1 warning TypeScript|墨观 · 玄墨|UTF-8
inkstone · theme.ts
◫ ⌕ ⑂ ▷ ◈
theme.ts ×
palette.ts
kaku.lua
1// 墨观 Inkstone · 把传统色写进代码
2import { named } from "./palette";
3
4interface Ink {
5 name: string;
6 hex: `#${string}`;
7}
8
9const 墨色: Ink = {
10 name: "宣纸", hex: "#f7f4ed",
11};
12
13/** 计算 WCAG 对比度 */
14export function contrast(a: Ink, b: Ink): number {
15 const lum = (c: Ink) => {
16 const [r, g, b] = [0, 1, 2].map((i) => channel(c.hex, i));
17 return 0.2126 * r + 0.7152 * g + 0.0722 * b;
18 };
19 const [hi, lo] = [lum(a), lum(b)].sort((x, y) => y - x);
20 return (hi + 0.05) / (lo + 0.05);
21}
22
main*|0 errors|1 warning TypeScript|墨观 · 宣纸|UTF-8
inkstone · theme.ts
◫ ⌕ ⑂ ▷ ◈
theme.ts ×
palette.ts
kaku.lua
1// 墨观 Inkstone · 把传统色写进代码
2import { named } from "./palette";
3
4interface Ink {
5 name: string;
6 hex: `#${string}`;
7}
8
9const 墨色: Ink = {
10 name: "宣纸", hex: "#e9e2d4",
11};
12
13/** 计算 WCAG 对比度 */
14export function contrast(a: Ink, b: Ink): number {
15 const lum = (c: Ink) => {
16 const [r, g, b] = [0, 1, 2].map((i) => channel(c.hex, i));
17 return 0.2126 * r + 0.7152 * g + 0.0722 * b;
18 };
19 const [hi, lo] = [lum(a), lum(b)].sort((x, y) => y - x);
20 return (hi + 0.05) / (lo + 0.05);
21}
22
main*|0 errors|1 warning TypeScript|墨观 · 宣纸|UTF-8
inkstone · theme.ts
◫ ⌕ ⑂ ▷ ◈
theme.ts ×
palette.ts
kaku.lua
1// 墨观 Inkstone · 把传统色写进代码
2import { named } from "./palette";
3
4interface Ink {
5 name: string;
6 hex: `#${string}`;
7}
8
9const 墨色: Ink = {
10 name: "沧海", hex: "#0d1822",
11};
12
13/** 计算 WCAG 对比度 */
14export function contrast(a: Ink, b: Ink): number {
15 const lum = (c: Ink) => {
16 const [r, g, b] = [0, 1, 2].map((i) => channel(c.hex, i));
17 return 0.2126 * r + 0.7152 * g + 0.0722 * b;
18 };
19 const [hi, lo] = [lum(a), lum(b)].sort((x, y) => y - x);
20 return (hi + 0.05) / (lo + 0.05);
21}
22
main*|0 errors|1 warning TypeScript|墨观 · 沧海|UTF-8
inkstone · theme.ts
◫ ⌕ ⑂ ▷ ◈
theme.ts ×
palette.ts
kaku.lua
1// 墨观 Inkstone · 把传统色写进代码
2import { named } from "./palette";
3
4interface Ink {
5 name: string;
6 hex: `#${string}`;
7}
8
9const 墨色: Ink = {
10 name: "青瓷", hex: "#e8f0ec",
11};
12
13/** 计算 WCAG 对比度 */
14export function contrast(a: Ink, b: Ink): number {
15 const lum = (c: Ink) => {
16 const [r, g, b] = [0, 1, 2].map((i) => channel(c.hex, i));
17 return 0.2126 * r + 0.7152 * g + 0.0722 * b;
18 };
19 const [hi, lo] = [lum(a), lum(b)].sort((x, y) => y - x);
20 return (hi + 0.05) / (lo + 0.05);
21}
22
main*|0 errors|1 warning TypeScript|墨观 · 青瓷|UTF-8

六套色板都从同一张中国传统色谱里取色。墨纸组以纸墨为底,海瓷组以深海与青瓷釉为底;Dimmed 不是蒙一层灰,而是把房间的灯调暗。

玄墨

配色思路

松烟墨打底,朱砂作批注。深色画布把亮度让给代码,红色只留给需要被看见的地方——适合夜里长时间写代码。

Aa
画布派生色
#14131acanvas
Aa
面板派生色
#1a1922panel
Aa
浮起派生色
#22212craised
Aa
浮层派生色
#2b2a36overlay
Aa
边框派生色
#343240border
Aa
正文派生色
#d4cec411.80:1
Aa
次要文字派生色
#ada5997.57:1
Aa
弱化文字派生色
#8b85975.19:1
Aa
光标羽扇豆蓝
#619ac36.08:1
Aa
关键字海棠红 · 降彩
#da57614.85:1
Aa
函数羽扇豆蓝
#619ac36.08:1
Aa
字符串铜绿
#2bae856.59:1
Aa
数字杏黄
#f28e167.61:1
Aa
类型土黄
#d6a01d7.83:1
Aa
常量杏黄
#f28e167.61:1
Aa
注释派生色
#85809e4.90:1
Aa
装饰器萝兰紫
#c08eaf6.79:1
Aa
标签山茶红 · 降彩
#e45f6f5.42:1
Aa
错误银朱 · 降彩
#e257374.97:1

玄墨 Dimmed

配色思路

同一方墨,把灯调暗一档。画布更沉、墨色不灰,矿物颜料只退半步饱和度——适合光线柔和的房间。

Aa
画布派生色
#19181ecanvas
Aa
面板派生色
#1e1d24panel
Aa
浮起派生色
#24222braised
Aa
浮层派生色
#2b2933overlay
Aa
边框派生色
#393643border
Aa
正文派生色
#d8d2c611.72:1
Aa
次要文字派生色
#b0a99f7.58:1
Aa
弱化文字派生色
#8f89965.20:1
Aa
光标羽扇豆蓝
#619ac35.81:1
Aa
关键字山黎豆红
#c27c885.49:1
Aa
函数涧石蓝
#66a9c96.79:1
Aa
字符串梧枝绿
#69a7946.35:1
Aa
数字山鸡黄
#b78b265.66:1
Aa
类型土黄
#d6a01d7.48:1
Aa
常量土黄
#d6a01d7.48:1
Aa
注释派生色
#85809e4.69:1
Aa
装饰器萝兰紫
#c08eaf6.49:1
Aa
标签白芨红
#de78976.08:1
Aa
错误银朱 · 降彩
#e257374.75:1

宣纸

配色思路

生宣的暖白底色,松烟写字,青绿设色。纸是暖的、墨是冷的,矿物色在中间过渡;关键字用降彩的鹤顶红,像朱批而不是警告。

Aa
画布鱼肚白
#f7f4edcanvas
Aa
面板派生色
#f1ece2panel
Aa
浮起派生色
#eae3d5raised
Aa
浮层派生色
#e3dacboverlay
Aa
边框派生色
#d6ccb9border
Aa
正文派生色
#35322d11.62:1
Aa
次要文字派生色
#5b564c6.64:1
Aa
弱化文字派生色
#746b5e4.77:1
Aa
光标玉鈫蓝
#126e825.34:1
Aa
关键字鹤顶红 · 降彩
#c344354.55:1
Aa
函数飞燕草蓝
#0f59a46.40:1
Aa
字符串荷叶绿
#1a68406.17:1
Aa
数字蟹蝥红
#b14b284.89:1
Aa
类型桔梗紫
#813c856.55:1
Aa
常量蟹蝥红
#b14b284.89:1
Aa
注释派生色
#65706f4.66:1
Aa
装饰器苍黄
#8063325.10:1
Aa
标签玫瑰紫 · 降彩
#b23c7a5.00:1
Aa
错误尖晶玉红 · 降彩
#c231425.02:1

宣纸 Dimmed

配色思路

陈纸的暖灰,墨色再深一分。像旧书页在下午的光线里:纸不刺眼,颜料褪了半度,但仍认得出每一种颜色。

Aa
画布派生色
#e9e2d4canvas
Aa
面板派生色
#e3dbcbpanel
Aa
浮起派生色
#dcd3c1raised
Aa
浮层派生色
#d5cbb7overlay
Aa
边框派生色
#cbc0abborder
Aa
正文派生色
#2f2b2510.91:1
Aa
次要文字派生色
#4f4a406.83:1
Aa
弱化文字派生色
#665f534.90:1
Aa
光标玉鈫蓝
#126e824.55:1
Aa
关键字烟红
#894e544.97:1
Aa
函数鷃蓝
#144a747.21:1
Aa
字符串荷叶绿
#1a68405.26:1
Aa
数字驼色
#66462a6.58:1
Aa
类型野菊紫
#5252885.58:1
Aa
常量潭水绿
#6458225.50:1
Aa
注释鼠背灰
#73575c5.02:1
Aa
装饰器芓紫
#8942765.25:1
Aa
标签芓紫
#8942765.25:1
Aa
错误殷红
#82111f7.95:1

沧海

配色思路

深海暮色作底,青绿矿物铺开,银朱只做海面上的一点反光。冷色画布安静,但不至于单调。

Aa
画布派生色
#0d1822canvas
Aa
面板派生色
#12202bpanel
Aa
浮起派生色
#182833raised
Aa
浮层派生色
#1f3340overlay
Aa
边框派生色
#29404fborder
Aa
正文派生色
#c8d4dd11.89:1
Aa
次要文字派生色
#9aadbb7.75:1
Aa
弱化文字派生色
#788d9f5.22:1
Aa
光标涧石蓝
#66a9c96.90:1
Aa
关键字银朱 · 降彩
#dc5e414.89:1
Aa
函数霁青
#63bbd08.16:1
Aa
字符串竹绿
#1ba7845.90:1
Aa
数字土黄
#d6a01d7.61:1
Aa
类型萝兰紫
#c08eaf6.60:1
Aa
常量土黄
#d6a01d7.61:1
Aa
注释晚波蓝
#648e934.98:1
Aa
装饰器萝兰紫
#c08eaf6.60:1
Aa
标签山茶红 · 降彩
#e45f6f5.27:1
Aa
错误银朱 · 降彩
#e257374.83:1

青瓷

配色思路

月白釉底,青灰题字,雨过天青。像一件汝窑器:颜色都在釉下,不抢字;适合白天和浅色桌面。

Aa
画布派生色
#e8f0eccanvas
Aa
面板派生色
#e1eae4panel
Aa
浮起派生色
#d9e3dcraised
Aa
浮层派生色
#d1dcd4overlay
Aa
边框派生色
#c7d5ccborder
Aa
正文青灰
#2b333e11.00:1
Aa
次要文字派生色
#4f5b5a6.08:1
Aa
弱化文字派生色
#5f6b674.78:1
Aa
光标玉鈫蓝
#126e825.06:1
Aa
关键字尖晶玉红 · 降彩
#bc3a464.73:1
Aa
函数玉鈫蓝
#126e825.06:1
Aa
字符串荷叶绿
#1a68405.84:1
Aa
数字驼色
#66462a7.32:1
Aa
类型桔梗紫
#813c856.20:1
Aa
常量潭水绿
#6458226.12:1
Aa
注释战舰灰
#495c696.00:1
Aa
装饰器紫灰
#5d3f517.89:1
Aa
标签芓紫
#8942765.83:1
Aa
错误殷红
#82111f8.84:1