lib-theme-lucent: initial import (access-first set, 2026-07)
One of three candidates for the access-first / maximum-legibility theme family (WCAG AAA as identity): 7:1+ contrast on every pair (passes validate-theme.mjs --aaa), 1.125rem body floor with nothing under 14px, 44px controls for everyone, 3px focus rings, links underlined at rest, reduced-motion built in. Built for IGH/NDIS-facing surfaces first. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
57
README.md
Normal file
57
README.md
Normal file
@@ -0,0 +1,57 @@
|
||||
# lib-theme-lucent
|
||||
|
||||
**Lucent — cool daylight clarity.** An access-first Crema theme where WCAG AAA is the
|
||||
identity, not the compliance line. One of three candidates in the access family, built
|
||||
for NDIS participants, their families, and older support coordinators (IGH / IveGotHome
|
||||
portals): dignity, clarity, zero squinting. The discipline IS the personality.
|
||||
|
||||
## Thesis
|
||||
|
||||
GOV.UK / NHS design heritage, modernized. Light mode is a near-white cool field with
|
||||
pure white cards and TRUE near-black ink — body text lands at ~19:1, and even
|
||||
`muted-foreground` clears 7:1 on white, because in an access theme muted text is still
|
||||
reading text. One deep accessible blue does all the pointing (white label ≈ 8.5:1), and
|
||||
links are that same blue, **underlined at rest** — the underline thickens on hover.
|
||||
Dark mode is a very dark cool charcoal with very light ink (~17:1); cards step clearly
|
||||
lighter, and primary flips to a lighter blue carrying near-black ink (≈ 8.5:1).
|
||||
|
||||
The access-family DNA:
|
||||
|
||||
- **Type ramp starts larger** — body 1.125rem/1.65, label 1rem/1.5, caption 0.875rem
|
||||
(never below 14px). Generous line-heights throughout.
|
||||
- **Contrast verified, not hoped for** — body ink and muted-foreground ≥7:1 on
|
||||
background AND card in both modes; primary label ≥7:1; status pairs target ≥7:1 and
|
||||
never dip below 4.5:1. Computed ratios are stated in `theme.css` comments.
|
||||
- **Focus is loud** — 3px solid ring + 2px offset on buttons/controls; inputs get a
|
||||
border-color change plus a 2px ring. Always visible.
|
||||
- **Touch targets 44px for everyone** — not gated behind a coarse-pointer query.
|
||||
- **Borders are strong** (ink at 0.25–0.32 alpha) — visible boundaries for low vision;
|
||||
elevation stays low; separation comes from borders, not shadows.
|
||||
- **Motion minimal and quick** (120/200/300/400ms), all springs aliased to standard
|
||||
eases; a `prefers-reduced-motion` block zeroes transitions on interactive slots.
|
||||
- Radius a modest 0.5rem. No glass (inert stubs).
|
||||
|
||||
## Fonts
|
||||
|
||||
**Atkinson Hyperlegible** (Braille Institute; drawn for character disambiguation at low
|
||||
vision) for both body and headings — hierarchy comes from weight 700 and the ramp, not a
|
||||
second family. **JetBrains Mono** for code. No negative letter-spacing anywhere: the
|
||||
face was designed for legibility; don't squeeze it.
|
||||
|
||||
Consuming apps load fonts at the very top of their entry CSS (never inside `theme.css`):
|
||||
|
||||
```css
|
||||
@import url("https://fonts.googleapis.com/css2?family=Atkinson+Hyperlegible:wght@400;700&family=JetBrains+Mono:wght@400;500;600&display=swap");
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Atkinson Hyperlegible ships 400/700 only — buttons and headings use 700 (the GOV.UK
|
||||
button voice); never request intermediate weights or they'll synthesize.
|
||||
- Dark surfaces: background 0.16 → card 0.22 → popover 0.24 → muted 0.26 (popover above
|
||||
card, below muted).
|
||||
- Status pattern: light mode uses deep solid fills with white labels (dark ink on amber
|
||||
for warning); dark mode flips to bright swatches with near-black ink.
|
||||
- Headings use `color: inherit` so titles on colored slabs keep the slab's pairing;
|
||||
`[data-slot="card-title"]` is pinned to the subtitle role.
|
||||
- Validate: `node create-crema-app/scripts/validate-theme.mjs lib-theme-lucent/theme.css`
|
||||
Reference in New Issue
Block a user