[{"data":1,"prerenderedAt":219},["ShallowReactive",2],{"note-en-color-design":3},{"note":4,"next":216},{"id":5,"title":6,"body":7,"cover":204,"created":204,"date":205,"description":206,"evergreen":207,"extension":208,"kind":204,"last_modified":204,"meta":209,"navigation":210,"ogImage":204,"path":211,"seo":212,"stem":213,"updated":204,"words":214,"__hash__":215},"notes\u002Fen\u002Fnotes\u002Fcolor-design.md","How LiG defines color",{"type":8,"value":9,"toc":195},"minimark",[10,14,19,29,32,35,39,48,51,55,71,74,89,93,99,102,106,123,161,180],[11,12,13],"p",{},"LiG uses color to make structure, references and actions easier to recognize. Ordinary text stays quiet. The source palette contains more colors than code highlighting needs.",[15,16,18],"h2",{"id":17},"oklch-for-controls-oklab-for-mixing","OKLCH for controls, OKLab for mixing",[11,20,21,28],{},[22,23,27],"a",{"href":24,"rel":25},"https:\u002F\u002Fbottosson.github.io\u002Fposts\u002Foklab\u002F",[26],"nofollow","OKLab"," describes color through lightness L and two chromatic axes, a and b. OKLCH expresses those axes as chroma C and hue angle H. LiG defines its colors and variants in L\u002FC\u002FH, and mixes colors in OKLab.",[11,30,31],{},"These coordinates let us adjust lightness and chroma separately. L is not physical screen luminance, and C is not a normalized saturation percentage. Perceptual uniformity is approximate; the background, sample size and viewing conditions still matter. The neutral scale uses selected steps, and light and dark text do not need symmetrical assignments.",[11,33,34],{},"The compact chart shows design coordinates. Angle represents H, radius represents C, and a separate plot shows L. The circular plot combines colors at different lightnesses; its rings are not sRGB gamut boundaries.",[15,36,38],{"id":37},"calibrate-each-hue","Calibrate each hue",[11,40,41,42,47],{},"Identical L\u002FC values do not guarantee that every hue can be displayed. ",[22,43,46],{"href":44,"rel":45},"https:\u002F\u002Fbottosson.github.io\u002Fposts\u002Fcolorpicker\u002F",[26],"The available sRGB gamut varies with hue and lightness",". LiG adjusts each hue separately, keeps its hue identity and evaluates it against the intended background.",[11,49,50],{},"At export, the resolver reduces out-of-gamut C while keeping L\u002FH fixed, then quantizes the result to HEX. This strict boundary mapping is a project choice, rather than the browser's CSS gamut-mapping algorithm. The design chroma on the chart can therefore differ from the chroma reproduced by the exported HEX.",[15,52,54],{"id":53},"the-yellow-exception","The yellow exception",[11,56,57,58,62,63,66,67,70],{},"Earlier yellow used a lightness close to the other light-mode colors and looked olive. The current yellow has its own target: ",[59,60,61],"code",{},"L 0.79 \u002F C 0.18 \u002F H 95°",". After mapping, C is about ",[59,64,65],{},"0.162"," and the result is ",[59,68,69],{},"#dbb800",". This is a visual choice for LiG, not a value prescribed by OKLab.",[11,72,73],{},"All four themes share this yellow base. The palette, ANSI 3 and warning roles reference it; ANSI 11 references its highlight. Highlight is darker than base in light themes and lighter in dark themes. Here, “bright” means emphasis rather than a promise of larger RGB values.",[11,75,76,77,80,81,84,85,88],{},"Higher yellow lightness reduces foreground contrast on light backgrounds. Against Light's ",[59,78,79],{},"#f2f2f2",", the base measures about ",[59,82,83],{},"1.73:1"," and APCA ",[59,86,87],{},"+29 Lc",", below WCAG AA for ordinary text. The terminal demo uses the terminal canvas color as text on every filled sample, including yellow; it demonstrates reversed colors rather than a contrast-optimized badge. Terminal foreground keeps the same yellow base so this tradeoff remains visible.",[15,90,92],{"id":91},"one-color-source-several-adapters","One color source, several adapters",[11,94,95,98],{},[59,96,97],{},"core\u002Fspec.json"," maintains the colors, modes and aliases. The resolver produces semantic tokens; port adapters translate them into each editor's format. Neovim highlight groups and VS Code scopes have their own mappings, without separate palettes.",[11,100,101],{},"Syntax uses mono, struct (green), ref (blue) and action (orange). Other colors serve diagnostics, UI and terminal output. ANSI 1-6 reference the corresponding colored bases, and 9-14 reference highlights. Slots 0, 7, 8 and 15 come from neutral text tokens. ANSI 16 is a mapping of existing tokens.",[15,103,105],{"id":104},"ansi-slot-names-and-default-colors","ANSI slot names and default colors",[11,107,108,109,112,113,116,117,122],{},"ANSI 0 is named black and ANSI 7 white. These are slot identities, not a requirement to use ",[59,110,111],{},"#000000"," and ",[59,114,115],{},"#ffffff",". ",[22,118,121],{"href":119,"rel":120},"https:\u002F\u002Finvisible-island.net\u002Fxterm\u002Fctlseqs\u002Fctlseqs.html",[26],"XTerm distinguishes explicit colors from defaults",": SGR 30\u002F37 select black\u002Fwhite foreground, while 39 restores the default foreground; 40\u002F47 select black\u002Fwhite background, while 49 restores the default background. Changing the theme does not change these codes or slot names.",[11,124,125,126,131,132,135,136,139,140,116,143,148,149,152,153,156,157,160],{},"Light themes use different neutral mappings. ",[22,127,130],{"href":128,"rel":129},"https:\u002F\u002Fgithub.com\u002Fcatppuccin\u002Falacritty\u002Fblob\u002Fmain\u002Fcatppuccin-latte.toml",[26],"Catppuccin Latte"," uses light gray ",[59,133,134],{},"#bcc0cc"," for black and dark gray ",[59,137,138],{},"#5c5f77"," for white, with its background separately set to ",[59,141,142],{},"#eff1f5",[22,144,147],{"href":145,"rel":146},"https:\u002F\u002Fgithub.com\u002Frose-pine\u002Falacritty\u002Fblob\u002Fmain\u002Fdist\u002Frose-pine-dawn.toml",[26],"Rosé Pine Dawn"," similarly uses ",[59,150,151],{},"#f2e9e1"," for black and ",[59,154,155],{},"#575279"," for white against ",[59,158,159],{},"#faf4ed",". Pure black is therefore not necessary for a light terminal theme.",[11,162,163,164,167,168,171,172,175,176,179],{},"LiG keeps those conventional slot names and reverses neutral polarity in light themes. ANSI 0 now references ",[59,165,166],{},"text.dim",", rather than the identical canvas color; 7 references ",[59,169,170],{},"text.primary",", 8 ",[59,173,174],{},"text.subtle"," and 15 ",[59,177,178],{},"text.strong",". Default foreground and background remain independent tokens. This avoids an invisible ANSI 0 sample while preserving the shared gray scale. Dim slots remain low contrast and are not ordinary-text readability guarantees. Programs that hard-code assumptions about black\u002Fwhite may still behave differently across terminal themes.",[11,181,182,183,188,189],{},"WCAG 2.2 and APCA readings use the exported HEX and background. APCA is experimental; ",[22,184,187],{"href":185,"rel":186},"https:\u002F\u002Fwww.w3.org\u002FTR\u002Fwcag-3.0\u002F",[26],"WCAG 3 is still a draft"," with its contrast algorithm yet to be determined. Readability also depends on font size, weight and context",[190,191,194],"span",{"class":192,"data-anchor":193},"l-mark","final-mark",".",{"title":196,"searchDepth":197,"depth":197,"links":198},"",2,[199,200,201,202,203],{"id":17,"depth":197,"text":18},{"id":37,"depth":197,"text":38},{"id":53,"depth":197,"text":54},{"id":91,"depth":197,"text":92},{"id":104,"depth":197,"text":105},null,"2026-10-10","OKLab, shared tokens and a separate calibration for yellow.",false,"md",{},true,"\u002Fen\u002Fnotes\u002Fcolor-design",{"title":6,"description":206},"en\u002Fnotes\u002Fcolor-design",805,"DqP-13dZCA9HGeCsTHNe17z8G5t4AClBFBCCAgrI83c",{"path":217,"title":218},"\u002Fen\u002Fnotes\u002Fpaper-is-a-surface","Paper is a surface, not a promise",1792438890503]