Skip to content

Commit 5820336

Browse files
committed
update
1 parent fdebe15 commit 5820336

715 files changed

Lines changed: 3540 additions & 54747 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,12 @@ AGENTS.md
5454
/.claude/
5555

5656
# redesign process artifacts (local only, not part of the site)
57+
/.impeccable/
5758
/.superloopy/
5859
/.hallmark/
5960
/.agents/
6061
/_workspace/
6162
/skills-lock.json
63+
64+
# generated visual-validation output
65+
/artifacts/

DESIGN.md

Lines changed: 115 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@ emitting code. Extend or amend this file when the system needs to grow; never
55
improvise a value that is not declared here.
66

77
Direction: **"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); /* vermilionmarks, 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

82122
Existing 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`,
177218
Flat + hairlines. No box-shadows in light mode (rules carry structure). Dark
178219
mode: elevation via surface lightness steps only. The single permitted shadow:
179220
the 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
230273
against 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

237279
Schematic accent tokens (`--sch-*` in globals.css): every chromatic accent a
238280
schematic animates (SCF ring, packets, force-field term colors, electron
239281
density) 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.
241283
Light: `--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`
251294
per-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

Comments
 (0)