Color ramps
Washi to sumi, plus the hanko vermillion and three status hues. Component code never touches these — semantic tokens only.
neutral
hanko
moss
ai
ochre
Semantic slots
What components are allowed to reference, with both theme resolutions. Every pairing is contrast-checked on build.
| Token | Paper | Sumi | Role |
|---|---|---|---|
| color.bg.canvas | #F7F3EC | #14120F | Page background. |
| color.bg.surface | #FFFDF8 | #1C1917 | Cards, panels, tables. |
| color.bg.raised | #FFFDF8 | #24201B | Modals, popovers, inputs. Same as surface on paper; separates on sumi. |
| color.bg.sunken | #F0EBE1 | #14120F | Wells, alt table rows, recessed areas. |
| color.bg.inverse | #1C1917 | #EDE7DC | Inverse blocks: active nav, tooltips. |
| color.text.primary | #1C1917 | #EDE7DC | Default ink: all reading text and headings. |
| color.text.muted | #6E675D | #A39A8A | Secondary text, captions, labels. Never below AA. |
| color.text.inverse | #F7F3EC | #1C1917 | Text on bg.inverse. |
| color.border.hairline | #E4DCCE | #3A342C | Default separators, table row lines. |
| color.border.strong | #CFC4AB | #4A443A | Input borders, meter tracks. |
| color.border.rule | #1C1917 | #948A78 | The signature 1.5px ink plate rule: card frames, table header rules, section dividers. |
| color.accent.base | #D93A2B | #F26D5B | Primary action fill. |
| color.accent.text | #B32E21 | #F26D5B | Accent-colored text/links; darker than base for AA. |
| color.accent.on-accent | #FFFDF8 | #241512 | Text on accent.base. |
| color.focus.ring | #3B5BB5 | #A9BCEA | Focus indicator. Indigo so it never collides with vermillion danger/primary. |
| color.preview.bg | #1C1917 | #1C1917 | Preview frame surface — always ink. |
| color.preview.text | #F7F3EC | #F7F3EC | Text inside the preview frame — always paper. |
| color.preview.accent | #D93A2B | #D93A2B | Accent tint inside the preview (hero gradient) — fixed, never the lifted sumi vermillion. |
| color.chart.ink | #1C1917 | #EDE7DC | The data series. Bars, lines, dots — newsprint ink. |
| color.chart.context | #A39A8A | #948A78 | De-emphasis series: previous period, reference lines, sparkline body. Sub-3:1 by design; values always reachable via labels or the table view. |
| color.chart.accent | #D93A2B | #F26D5B | The one highlighted mark — current point on a sparkline, hovered bar. A hanko stamp, never a whole series fill. |
| color.chart.grid | #E4DCCE | #3A342C | Gridlines and axis rules. Follows border.hairline in both themes — solid, 1px, recessive. |
Status trios
Wash fill + edge border + text, never color alone.
successText holds AA on this wash in both themes.
infoText holds AA on this wash in both themes.
cautionText holds AA on this wash in both themes.
dangerText holds AA on this wash in both themes.
Type scale
Public Sans for everything — headings are weight and size, not a second family. Tracking is welded to each style.
Curation is publishing
Curation is publishing
Curation is publishing
Curation is publishing
Curation is publishing
Curation is publishing
Curation is publishing
Curation is publishing
Curation is publishing
Spacing
4px base. The scale is the law.
space-14px
space-28px
space-312px
space-416px
space-520px
space-624px
space-732px
space-840px
space-948px
space-1064px
Shape & elevation
Print-plate radii; hard offset shadows only — plates lifted off the page.
radius-xs · 4px
radius-sm · 6px
radius-md · 10px
radius-lg · 14px
plate-sm
plate-md