[{"data":1,"prerenderedAt":282},["ShallowReactive",2],{"notes-en":3},[4,84],{"id":5,"title":6,"body":7,"cover":72,"created":72,"date":73,"description":74,"evergreen":75,"extension":76,"kind":72,"last_modified":72,"meta":77,"navigation":78,"ogImage":72,"path":79,"seo":80,"stem":81,"updated":72,"words":82,"__hash__":83},"notes\u002Fen\u002Fnotes\u002Fpaper-is-a-surface.md","Paper is a surface, not a promise",{"type":8,"value":9,"toc":65},"minimark",[10,14,19,31,34,38,41,45,56],[11,12,13],"p",{},"Light and dark are neutral. The two paper variants take the same colors and set them on a warmer page. This note is about what that does and does not mean.",[15,16,18],"h2",{"id":17},"a-surface-treatment","A surface treatment",[11,20,21,22,26,27,30],{},"Paper changes two things: the surfaces, and the mono inks that sit on them. The canvas of Light Paper is ",[23,24,25],"code",{},"#f4f2ec",", a low-chroma warm white. The canvas of Dark Paper is ",[23,28,29],{},"#111113",", a near-black with a faint cool lean. Text, comments and punctuation take inks from a separate paper ramp that shares that hue.",[11,32,33],{},"Everything chromatic stays where it was. Green, blue and orange keep the coordinates of the standard variant, so a keyword is the same color in Light and in Light Paper. Paper does not warm every color, and it should not.",[15,35,37],{"id":36},"why-not-simply-tint-the-neutrals","Why not simply tint the neutrals",[11,39,40],{},"The neutral scale is exactly neutral, with chroma zero. It is the most honest gray, and it is the reference the accent colors were tuned against. Paper is a second ramp with a hue of about 91.48° and a chroma of about 0.008, a little less toward the extremes. It stays quiet on purpose: just enough to read as paper, not enough to read as sepia.",[15,42,44],{"id":43},"what-it-does-not-claim","What it does not claim",[11,46,47,48,51,52,55],{},"A warm page can feel gentler. It is not evidence of less eye strain, and LiG does not say so. Contrast is the part that can be measured. Against its canvas, Light Paper's primary ink reads about ",[23,49,50],{},"5.87:1"," and Dark Paper's about ",[23,53,54],{},"9.41:1","; the muted inks are lower on purpose, because muted should look muted.",[11,57,58,59],{},"If you work in a bright room, try both and keep the one you stop noticing. That is the only test that counts",[60,61,64],"span",{"class":62,"data-anchor":63},"l-mark","final-mark",".",{"title":66,"searchDepth":67,"depth":67,"links":68},"",2,[69,70,71],{"id":17,"depth":67,"text":18},{"id":36,"depth":67,"text":37},{"id":43,"depth":67,"text":44},null,"2026-10-14","What the paper variants change, and what they leave alone.",false,"md",{},true,"\u002Fen\u002Fnotes\u002Fpaper-is-a-surface",{"title":6,"description":74},"en\u002Fnotes\u002Fpaper-is-a-surface",291,"2gDh3scEUmjM_SQFQY4k3GzeXbNZdChSHZL4IW2HVT4",{"id":85,"title":86,"body":87,"cover":72,"created":72,"date":274,"description":275,"evergreen":75,"extension":76,"kind":72,"last_modified":72,"meta":276,"navigation":78,"ogImage":72,"path":277,"seo":278,"stem":279,"updated":72,"words":280,"__hash__":281},"notes\u002Fen\u002Fnotes\u002Fcolor-design.md","How LiG defines color",{"type":8,"value":88,"toc":267},[89,92,96,106,109,112,116,125,128,132,147,150,165,169,175,178,182,199,237,256],[11,90,91],{},"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,93,95],{"id":94},"oklch-for-controls-oklab-for-mixing","OKLCH for controls, OKLab for mixing",[11,97,98,105],{},[99,100,104],"a",{"href":101,"rel":102},"https:\u002F\u002Fbottosson.github.io\u002Fposts\u002Foklab\u002F",[103],"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,107,108],{},"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,110,111],{},"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,113,115],{"id":114},"calibrate-each-hue","Calibrate each hue",[11,117,118,119,124],{},"Identical L\u002FC values do not guarantee that every hue can be displayed. ",[99,120,123],{"href":121,"rel":122},"https:\u002F\u002Fbottosson.github.io\u002Fposts\u002Fcolorpicker\u002F",[103],"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,126,127],{},"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,129,131],{"id":130},"the-yellow-exception","The yellow exception",[11,133,134,135,138,139,142,143,146],{},"Earlier yellow used a lightness close to the other light-mode colors and looked olive. The current yellow has its own target: ",[23,136,137],{},"L 0.79 \u002F C 0.18 \u002F H 95°",". After mapping, C is about ",[23,140,141],{},"0.162"," and the result is ",[23,144,145],{},"#dbb800",". This is a visual choice for LiG, not a value prescribed by OKLab.",[11,148,149],{},"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,151,152,153,156,157,160,161,164],{},"Higher yellow lightness reduces foreground contrast on light backgrounds. Against Light's ",[23,154,155],{},"#f2f2f2",", the base measures about ",[23,158,159],{},"1.73:1"," and APCA ",[23,162,163],{},"+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,166,168],{"id":167},"one-color-source-several-adapters","One color source, several adapters",[11,170,171,174],{},[23,172,173],{},"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,176,177],{},"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,179,181],{"id":180},"ansi-slot-names-and-default-colors","ANSI slot names and default colors",[11,183,184,185,188,189,192,193,198],{},"ANSI 0 is named black and ANSI 7 white. These are slot identities, not a requirement to use ",[23,186,187],{},"#000000"," and ",[23,190,191],{},"#ffffff",". ",[99,194,197],{"href":195,"rel":196},"https:\u002F\u002Finvisible-island.net\u002Fxterm\u002Fctlseqs\u002Fctlseqs.html",[103],"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,200,201,202,207,208,211,212,215,216,192,219,224,225,228,229,232,233,236],{},"Light themes use different neutral mappings. ",[99,203,206],{"href":204,"rel":205},"https:\u002F\u002Fgithub.com\u002Fcatppuccin\u002Falacritty\u002Fblob\u002Fmain\u002Fcatppuccin-latte.toml",[103],"Catppuccin Latte"," uses light gray ",[23,209,210],{},"#bcc0cc"," for black and dark gray ",[23,213,214],{},"#5c5f77"," for white, with its background separately set to ",[23,217,218],{},"#eff1f5",[99,220,223],{"href":221,"rel":222},"https:\u002F\u002Fgithub.com\u002Frose-pine\u002Falacritty\u002Fblob\u002Fmain\u002Fdist\u002Frose-pine-dawn.toml",[103],"Rosé Pine Dawn"," similarly uses ",[23,226,227],{},"#f2e9e1"," for black and ",[23,230,231],{},"#575279"," for white against ",[23,234,235],{},"#faf4ed",". Pure black is therefore not necessary for a light terminal theme.",[11,238,239,240,243,244,247,248,251,252,255],{},"LiG keeps those conventional slot names and reverses neutral polarity in light themes. ANSI 0 now references ",[23,241,242],{},"text.dim",", rather than the identical canvas color; 7 references ",[23,245,246],{},"text.primary",", 8 ",[23,249,250],{},"text.subtle"," and 15 ",[23,253,254],{},"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,257,258,259,264,265],{},"WCAG 2.2 and APCA readings use the exported HEX and background. APCA is experimental; ",[99,260,263],{"href":261,"rel":262},"https:\u002F\u002Fwww.w3.org\u002FTR\u002Fwcag-3.0\u002F",[103],"WCAG 3 is still a draft"," with its contrast algorithm yet to be determined. Readability also depends on font size, weight and context",[60,266,64],{"class":62,"data-anchor":63},{"title":66,"searchDepth":67,"depth":67,"links":268},[269,270,271,272,273],{"id":94,"depth":67,"text":95},{"id":114,"depth":67,"text":115},{"id":130,"depth":67,"text":131},{"id":167,"depth":67,"text":168},{"id":180,"depth":67,"text":181},"2026-10-10","OKLab, shared tokens and a separate calibration for yellow.",{},"\u002Fen\u002Fnotes\u002Fcolor-design",{"title":86,"description":275},"en\u002Fnotes\u002Fcolor-design",805,"DqP-13dZCA9HGeCsTHNe17z8G5t4AClBFBCCAgrI83c",1792438889037]