@@ -5,12 +5,13 @@ emitting code. Extend or amend this file when the system needs to grow; never
55improvise a value that is not declared here.
66
77Direction: ** "Ledger & Instrument"** — a printed scientific journal for the site
8- chrome, a precision instrument for the interactive science. Light mode reads as
9- a typeset research ledger (cool paper, hairline rules, mono metadata). Dark mode
10- and every WebGL/Molstar viewer read as the lab's instrument: deep blue-black,
11- lifted panels, the same vermilion signal accent. The two registers share one
12- hue system so the dark viewers sitting inside light pages look intentional,
13- not accidental.
8+ chrome, a precision instrument for the interactive science. Light mode is
9+ ** Korean 오방색 on White** (L21, koreancoloratlas.com): neutral white paper,
10+ near-black ink, and the five cardinal colors as working roles — 적 red signals,
11+ 청 blue links, 황 yellow highlights. Dark mode is ** Flexoki Dark** (D9,
12+ stephango.com/flexoki): warm black (not pure black), analog paper-ink text,
13+ watercolor ink accents. Interactive viewers follow the selected mode while
14+ scientific marks retain their domain colors.
1415
1516- Genre: editorial (hallmark), brand register (impeccable)
1617- Dials: ` DESIGN_VARIANCE: 6 ` · ` MOTION_INTENSITY: 4 ` · ` VISUAL_DENSITY: 5 `
@@ -20,64 +21,103 @@ not accidental.
2021 scales** . Hairline "scale rulers" with real tick marks and mono scale
2122 annotations (Å → nm → µm) structure the home page and the footer colophon.
2223
23- ## 1. Color — OKLCH only, one accent
24-
25- Anchor hues: neutrals lean cool blue (hue 250–268, chroma 0.004–0.015);
26- accent is ** vermilion** (hue 35–45). Zero other chromatic hues in chrome.
27- (Scientific content — CPK atoms, plots, orbital surfaces — keeps its own
28- domain palette; chrome never borrows from it.)
29-
30- Accent discipline: accent occupies ≤ 3% of any viewport. It marks: active nav
31- item, links, focus rings, the scale-ruler tick origin, small square heading
32- anchors, PI name highlight in author lists. It never fills buttons or sections.
33-
34- ### Light ("ledger")
24+ ## 1. Color — palette-exact hex, three accent roles
25+
26+ Anchor palettes are external systems chosen deliberately (color-palettes-v2:
27+ light ** L21 Korean 오방색 on White** , dark ** D9 Flexoki Dark** ). Token values
28+ are the exact published hex — no OKLCH re-derivation, no improvised tints
29+ beyond the derived neutrals declared below. (Scientific content — CPK atoms,
30+ plots, orbital surfaces, schematic accents — keeps its own domain palette;
31+ chrome never borrows from it.)
32+
33+ Accent policy (rev.2 — the palettes must be FELT, not glimpsed). Hue held
34+ across modes; color appears through fixed roles, several of them broad-area:
35+
36+ - ** Signal red** (적 ` #C3272B ` / Flexoki red ` #D14D41 ` ): active nav underline,
37+ focus rings, square heading anchors, scale-ruler origin tick, PI name
38+ highlight, and the ** primary button fill** (light ` #C3272B ` +` #F5F5F5 ` text,
39+ dark ` #D14D41 ` +` #FFFCF0 ` text).
40+ - ** Link blue** (청 ` #1E4C9A ` / Flexoki blue ` #4385BE ` ): links, ledger
41+ year/date numerals in margin columns.
42+ - ** Highlight yellow** (황 wash ` #F6EFD3 ` / Flexoki yellow tint ` #2F2610 ` ):
43+ selection and active-toggle background tint; never text on background.
44+ - ** Level identity colors** — the four length scales each own a color, used
45+ wherever a surface belongs to that level (instrument tabs, scene titles,
46+ mechanism panel headers and boxes, scale-ruler segment labels, home method
47+ rows): DFT ** 청** · MLFF ** 적** · 전원자 ** 황** · 메조 ** 묵** . Declared as
48+ ` --lv-{dft,mlff,aa,meso} ` triads (mark/ink + ` -line ` hairline + ` -wash `
49+ broad tint) in globals.css; light values derive from L21, dark from the
50+ Flexoki 400 inks (` #4385BE ` ` #D14D41 ` ` #D0A215 ` ) and base-300. Washes are
51+ broad-area by design (whole panel headers, plot boxes) — the old ≤3% cap
52+ applies only to signal-red marks. Colored text on a wash: headings and
53+ labels ≥14px; body text on washes stays ` --foreground ` .
54+ - Remaining Flexoki accents (orange ` #DA702C ` , green ` #879A39 ` , cyan
55+ ` #3AA99F ` , purple ` #8B7EC8 ` , magenta ` #CE5D97 ` ) stay reserved for the
56+ scientific layer.
57+
58+ ### Light ("ledger" — 오방색 on White)
3559
3660``` css
3761:root {
3862 color-scheme : light ;
39- --background : oklch( 97.6 % 0.004 250 ) ; /* paper */
40- --foreground : oklch( 21 % 0.015 260 ) ; /* ink */
41- --primary : oklch( 58 % 0.19 35 ) ; /* vermilion — marks, large type only */
42- --accent-ink : oklch( 46 % 0.165 35 ) ; /* text-grade vermilion (links) ≥4 .5:1 */
43- --primary-foreground : oklch( 97.6 % 0.004 250 ) ;
44- --card : oklch( 99 % 0.002 250 ) ; /* raised surface (rare; prefer rules) */
45- --muted : oklch( 93 % 0.006 250 ) ; /* recessed fills */
46- --muted-foreground : oklch( 43 % 0.012 255 ) ; /* secondary text ≥5 :1 */
47- --border : oklch( 88.5 % 0.006 250 ) ; /* hairline rule */
48- --border-strong : oklch( 72 % 0.01 252 ) ; /* emphasis rule / double rules */
49- --accent : oklch( 94 % 0.025 45 ) ; /* pale vermilion wash (active bg tint) */
50- --accent-foreground : oklch( 40 % 0.15 35 );
51- --surface-raised : oklch( 99 % 0.002 250 ) ;
52- --surface-sunken : oklch( 95.2 % 0.005 250 ) ;
63+ --background : #F5F5F5 ; /* 백 — neutral white */
64+ --foreground : #1A1A1A ; /* 흑 — ink, 16:1 */
65+ --primary : #C3272B ; /* 적 — signal red (marks) 5.3:1 */
66+ --accent-ink : #1E4C9A ; /* 청 — link blue 7 .5:1 */
67+ --primary-foreground : #F5F5F5 ;
68+ --card : #FCFCFC ; /* raised surface (rare; prefer rules) */
69+ --muted : #E9E9E9 ; /* recessed fills */
70+ --muted-foreground : #565656 ; /* secondary text 6.7 :1 */
71+ --border : #DCDCDC ; /* hairline rule */
72+ --border-strong : #ACACAC ; /* emphasis rule / double rules */
73+ --accent : #F6EFD3 ; /* 황 wash (selection, active bg tint) */
74+ --accent-foreground : #6E5A0A ; /* ochre text on 황 wash 5.9:1 */
75+ --surface-raised : #FCFCFC ;
76+ --surface-sunken : #EEEEEE ;
5377}
5478```
5579
56- ### Dark ("instrument")
80+ ### Dark ("instrument" — Flexoki )
5781
5882``` css
5983.dark {
6084 color-scheme : dark ;
61- --background : oklch( 14 % 0.014 268 );
62- --foreground : oklch( 92.5 % 0.008 255 );
63- --primary : oklch( 68 % 0.155 42 );
64- --accent-ink : oklch( 72 % 0.14 45 );
65- --primary-foreground : oklch( 13 % 0.014 268 );
66- --card : oklch( 17.5 % 0.014 266 );
67- --muted : oklch( 21 % 0.014 265 );
68- --muted-foreground : oklch( 71 % 0.01 255 );
69- --border : oklch( 27 % 0.012 264 );
70- --border-strong : oklch( 38 % 0.012 262 );
71- --accent : oklch( 24 % 0.04 45 );
72- --accent-foreground : oklch( 78 % 0.12 48 );
73- --surface-raised : oklch( 17.5 % 0.014 266 ) ;
74- --surface-sunken : oklch( 11.5 % 0.012 270 );
85+ --background : #100F0F ; /* Flexoki black — warm, not pure */
86+ --foreground : #CECDC3 ; /* tx (base-200) 11.9:1 */
87+ --primary : #D14D41 ; /* red-400 — signal marks, button fill */
88+ --accent-ink : #4385BE ; /* blue-400 — links 4.8:1 */
89+ --primary-foreground : #FFFCF0 ; /* paper label on red fill */
90+ --card : #1C1B1A ; /* base-950 */
91+ --muted : #282726 ; /* base-900 */
92+ --muted-foreground : #878580 ; /* tx-2 (base-500) 5.2:1 */
93+ --border : #343331 ; /* base-850 */
94+ --border-strong : #575653 ; /* base-700 */
95+ --accent : #2F2610 ; /* yellow-tint active bg */
96+ --accent-foreground : #D0A215 ; /* yellow-400, 6.6:1 on the tint */
97+ --surface-raised : #1C1B1A ;
98+ --surface-sunken : #0A0909 ; /* below-black viewer well */
7599}
76100```
77101
78- Rules: no pure #000 /#fff anywhere. Dark-mode elevation = lighter surface, never
79- shadows. Never switch hue between modes. The Molstar viewport keeps ` #050510 `
80- (instrument canvas); panels above it use the dark tokens.
102+ Level triads (` --lv-{dft,mlff,aa,meso} ` + ` -line ` + ` -wash ` , globals.css):
103+
104+ ``` css
105+ /* light inks */ #1E4C9A #C3272B #7A6000 /* 황 text-grade */ #1A1A1A
106+ /* dark inks */ #4385BE #D14D41 #D0A215 #B7B5AC /* base-300 */
107+ /* lines/washes = rgba() of the ink (light: 황 wash from #F9D537) */
108+ ```
109+
110+ Rules: no pure #000 /#fff anywhere — Flexoki black ` #100F0F ` and paper
111+ ` #FFFCF0 ` are the extremes, and paper is reserved (body text is tx ` #CECDC3 `
112+ per the Flexoki dark spec). Dark-mode elevation = lighter surface, never
113+ shadows. Accent roles never switch hue between modes; the neutral axis is
114+ neutral in light (오방색 백) and warm in dark (Flexoki base) — that
115+ temperature split is the theme, not drift. Scrim and sheet-shadow color is
116+ ` rgba(16, 15, 15, α) ` in both modes. Unused Flexoki accents (orange ` #DA702C ` ,
117+ green ` #879A39 ` , cyan ` #3AA99F ` , purple ` #8B7EC8 ` , magenta ` #CE5D97 ` ) are
118+ declared reserves — never in chrome. WebGL and Molstar viewports derive their
119+ background from the active site theme; scientific representations keep their
120+ domain palette in both modes.
81121
82122Existing Tailwind semantic names (` bg-background ` , ` text-foreground ` ,
83123` text-primary ` , ` border-border ` , ` bg-card ` , ` text-muted-foreground ` ,
@@ -128,25 +168,26 @@ engine re-skins without engine edits. New utilities: `text-accent-ink`,
128168
129169- ** Nav (masthead)** : hairline bottom rule; wordmark left = ` Yu Lab ` display-650
130170 + mono ` MMCC ` tag; links right, ` text-[13.5px] ` weight 500; active item =
131- ` text-foreground ` + 2px vermilion underline (offset 6px); inactive
171+ ` text-foreground ` + 2px signal-red underline (offset 6px); inactive
132172 ` text-muted-foreground ` . No pill backgrounds, no backdrop-blur glass. Height
133173 64px. Mobile: full-width sheet below masthead, hairline-separated rows.
134174- ** Footer (colophon)** : double rule top; one dense band: wordmark + lab full
135175 name, mono address/email block, inline link row; beneath it the ** scale
136176 ruler** : a full-width hairline with tick marks and mono labels
137177 ` Å · nm · µm ` linking DFT → MLFF → all-atom → meso pages; mono copyright line.
138- - ** Buttons** : primary = ink fill (` bg-foreground text-background ` ), sharp,
139- ` px-6 py-3 ` , weight 600, label ≤ 3 words; hover = translateY(-1px) +
140- ` bg-foreground/90 ` ; active = translateY(0). Secondary = 1px ` border-strong `
141- hairline, transparent bg; hover = ` bg-muted ` . Focus (all interactives):
142- 2px vermilion ring, 2px offset, instant.
178+ - ** Buttons** : primary = signal-red fill (` bg-primary text-primary-foreground `
179+ with light ` #F5F5F5 ` / dark ` #FFFCF0 ` label), sharp, ` px-6 py-3 ` , weight
180+ 600, label ≤ 3 words; hover = translateY(-1px) + ` bg-primary/90 ` ; active =
181+ translateY(0). Secondary = 1px ` border-strong ` hairline, transparent bg;
182+ hover = ` bg-muted ` . Focus (all interactives): 2px signal-red ring, 2px
183+ offset, instant.
143184- ** Links** : ` text-accent-ink ` , underline 1px, ` underline-offset-[3px] ` ;
144185 hover → ` text-primary ` . External links keep ↗ icon (lucide, 14px).
145186- ** Ledger row** (publications, news, funding, topic index): `border-t
146187 border-border` on each row group; left margin column mono metadata; row
147188 hover = ` bg-muted/50 ` ; no boxes.
148189- ** Section heading** : display-650 28–37px, left-aligned. Every top-level
149- section heading carries the 10px vermilion square anchor (the ruler-origin
190+ section heading carries the 10px signal-red square anchor (the ruler-origin
150191 mark); in the three sanctioned scale-ruler locations the ruler itself is the
151192 section's mark and sits below the anchored heading. Subsection headings
152193 inside a document (CV blocks, drawer internals) stay plain. Never an anchor
@@ -177,7 +218,8 @@ engine re-skins without engine edits. New utilities: `text-accent-ink`,
177218Flat + hairlines. No box-shadows in light mode (rules carry structure). Dark
178219mode: elevation via surface lightness steps only. The single permitted shadow:
179220the mobile nav sheet and the topic drawer may use
180- ` 0 8px 32px oklch(14% 0.014 268 / 0.24) ` .
221+ ` 0 8px 32px rgba(16, 15, 15, 0.24) ` ; the drawer scrim is
222+ ` rgba(16, 15, 15, 0.45) ` .
181223
182224## 7. Signature system — the scale ruler
183225
@@ -205,13 +247,14 @@ plain headings elsewhere.
205247 block reads as a short letter with a hairline frame.
206248- ** Research topics** : margin-column index rows mapped to the drawer (bento
207249 grid retired; rainbow accents retired).
208- - ** Multiscale** : instrument register preserved structurally; chrome retinted
209- to tokens (dark panels, sharp corners, mono readouts). The dark viewer inside
210- light pages is intentional and framed by a hairline + mono caption .
250+ - ** Multiscale** : instrument register preserved structurally; chrome, panels,
251+ plots, and viewer backgrounds derive from the site tokens (sharp corners,
252+ mono readouts). Scientific representation colors remain mode-stable .
211253
212254## What every page MUST share
213255
214- - The token palette (one vermilion accent, zero other chrome hues).
256+ - The token palette (signal red, link blue, highlight yellow; zero other
257+ chrome hues).
215258- Pretendard weight roles + Geist Mono metadata register.
216259- Sharp shape lock, hairline rule language, margin-column grid.
217260- CTA voice (one contact-intent label: ` 연구실 참여 ` / ` Join the lab ` ).
@@ -225,29 +268,29 @@ plain headings elsewhere.
225268
226269## Appendix — scientific layer (declared domain tokens)
227270
228- Chrome never uses these; they belong to schematics, plots, and the Molstar
229- instrument canvas . Declared here so the compliance gate can verify chrome
271+ Chrome never uses these; they belong to schematics, plots, and the molecular
272+ viewers . Declared here so the compliance gate can verify chrome
230273against them. Light: ` #334155 ` ` #64748b ` ` #2B2D42 ` ` #6b7280 ` ` #475569 `
231274` #cbd5e1 ` ` #94a3b8 ` . Dark: ` #9ca3af ` ` #57606b ` ` #c8d0db ` ` #3d4450 ` ` #b2bcc8 `
232- ` #f8fafc ` ` #6f7a89 ` . Instrument canvas: ` #050510 ` plus the msp-no-webgl
233- fallback gradient stops ` rgba(17,24,39,.92) ` ` rgba(5,5,16,.98) `
234- ` rgba(241,245,249,.9) ` . CPK/element colors inside WebGL scenes are data,
235- not design tokens.
275+ ` #f8fafc ` ` #6f7a89 ` . The WebGL bridge uses ` #ededed ` in light mode and
276+ ` #0a0909 ` in dark mode; its no-WebGL state derives from the semantic surface
277+ tokens. CPK/element colors inside WebGL scenes are data, not design tokens.
236278
237279Schematic accent tokens (` --sch-* ` in globals.css): every chromatic accent a
238280schematic animates (SCF ring, packets, force-field term colors, electron
239281density) is declared as a light/dark pair. Hue is held across modes; dark
240- raises lightness one step so animated strokes read on the instrument ground.
282+ raises lightness one step so animated strokes read on the viewer ground.
241283Light: ` --sch-amber #d97706 ` ` --sch-amber-bright #f59e0b ` `--sch-amber-label
242284#92400e` ` --sch-density #1d4ed8` ` --sch-stretch #0891b2` ` --sch-angle #16a34a`
243285` --sch-lj #7e22ce ` ` --sch-coulomb #4f46e5 ` ` --sch-delta-plus #2563eb `
244286` --sch-delta-minus #c026d3 ` ` --sch-packet #c41e3a ` ` --sch-peripheral #475569 `
245287` --sch-meso-n #7c8db0 ` ` --sch-meso-o #b07c7c ` . Dark: ` #f59e0b ` ` #fbbf24 `
246288` #fbbf24 ` ` #60a5fa ` ` #22d3ee ` ` #4ade80 ` ` #c084fc ` ` #818cf8 ` ` #60a5fa `
247289` #e879f9 ` ` #fb7185 ` ` #94a3b8 ` ` #9fb0d0 ` ` #cf9d9d ` . Mode-stable scientific
248- literals (CPK-adjacent mid tones, HOMO/LUMO, frame hairlines) stay inline:
249- ` #ef4444 ` ` #dc2626 ` ` #f1f5f9 ` ` #3b82f6 ` ` #06b6d4 ` ` #f97316 ` ` #9ca3af `
250- ` #cbd5e1 ` . MLFF force-arrow magnitude interpolants (data, ` #3b82f6 ` →` #ef4444 `
290+ literals (CPK-adjacent mid tones, HOMO/LUMO, frame hairlines, MLFF cyan
291+ packets, MLFF glyph atoms/PES mesh) stay inline: ` #ef4444 ` ` #dc2626 `
292+ ` #f1f5f9 ` ` #3b82f6 ` ` #06b6d4 ` ` #f97316 ` ` #9ca3af ` ` #cbd5e1 ` ` #67e8f9 `
293+ ` #a5f3fc ` ` #f43f5e ` ` #8b5cf6 ` ` #e2e8f0 ` ` #111a3e ` . MLFF force-arrow magnitude interpolants (data, ` #3b82f6 ` →` #ef4444 `
251294per-atom): ` #3e80f2 ` ` #3f80f1 ` ` #427fee ` ` #497ce7 ` ` #4b7ce5 ` ` #5678da `
252295` #5e75d2 ` ` #6374ce ` ` #6573cc ` ` #6d70c4 ` ` #6f6fc1 ` ` #786cb9 ` ` #97629a `
253296` #9f5f92 ` ` #a05f91 ` ` #a55d8c ` ` #a75c8a ` ` #aa5b88 ` ` #ac5a85 ` ` #b7577a `
0 commit comments