docs: add design tokens (draft) with generated reference and preview
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -0,0 +1,283 @@
|
||||
# Sst Design Tokens — v0.1.0-draft
|
||||
|
||||
**Status:** Ter goedkeuring — nog niet gebruikt door de app
|
||||
|
||||
Draagbare veldrecorder / cassettedeck uit de jaren 80 (Sony TC-D5, Marantz PMD, Nakamichi, Braun). Twee afwerkingen: ALUMINIUM (licht) en GRAPHITE (donker). Eén accent: het rode opnamelampje. Amber en groen alleen voor niveau-indicatoren.
|
||||
|
||||
Bron: `Design/tokens.json`. Dit bestand en `tokens-preview.html` worden gegenereerd met `python3 Design/build_tokens.py`; pas nooit alleen deze bestanden aan.
|
||||
|
||||
## Kleur
|
||||
|
||||
Verwijs ernaar als `color.<naam>`. Kolommen: ALUMINIUM (licht) en GRAPHITE (donker).
|
||||
|
||||
| Token | Aluminium | Graphite | Gebruik |
|
||||
|---|---|---|---|
|
||||
| `color.surface.chassis` | `#CBC8C0` | `#1C1B19` | Venster-achtergrond; het 'huis' van het apparaat |
|
||||
| `color.surface.metalHigh` | `#E3E1DB` | `#3B3A36` | Geborsteld metaal, bovenkant van de verloop |
|
||||
| `color.surface.metalLow` | `#BDBAB2` | `#262522` | Geborsteld metaal, onderkant van de verloop |
|
||||
| `color.surface.panel` | `#E2DFD5` | `#2B2A27` | Frontplaat van mat plastic; zijbalk en bedieningspanelen |
|
||||
| `color.surface.well` | `#B4B1A8` | `#131211` | Verzonken vlak: invoervelden, display-vensters |
|
||||
| `color.surface.paper` | `#EEE9D9` | `#232220` | Cassette-label crème: lijsten met transcripties en woordenboek |
|
||||
| `color.surface.keyHigh` | `#E6E3DA` | `#44433F` | Toetsdop, bovenkant |
|
||||
| `color.surface.keyLow` | `#CBC8BF` | `#33322F` | Toetsdop, onderkant |
|
||||
| `color.surface.keyPressed` | `#BEBBB2` | `#2A2927` | Ingedrukte toets |
|
||||
| `color.surface.meterFace` | `#EFE6C8` | `#D8CEA6` | Wijzerplaat van de VU-meter (blijft crème in beide afwerkingen) |
|
||||
| `color.surface.selection` | `#D4CDB2` | `#3A3828` | Geselecteerde rij in een lijst |
|
||||
| `color.surface.display` | `#1B1A18` | `#0E0D0C` | Displayglas van de teller; donker in beide afwerkingen |
|
||||
| `color.display.segmentUnlit` | `#3A3320` | `#2A2415` | Gedoofd segment op het displayglas |
|
||||
| `color.ink.primary` | `#1E1D1B` | `#ECE8DC` | Hoofdtekst en wijzer |
|
||||
| `color.ink.secondary` | `#403D38` | `#C4BFB2` | Secundaire tekst |
|
||||
| `color.ink.tertiary` | `#4D4A44` | `#ABA79B` | Zeefdruk-labels en hulptekst |
|
||||
| `color.ink.disabled` | `#8F8B82` | `#6B685F` | Uitgeschakeld; nooit voor essentiële tekst |
|
||||
| `color.ink.inverse` | `#F4EFE3` | `#F4EFE3` | Tekst op rode of donkere vulling; crème in beide afwerkingen |
|
||||
| `color.ink.onMeter` | `#1E1D1B` | `#1E1D1B` | Schaal, cijfers en wijzer op de wijzerplaat; vast donker in beide afwerkingen |
|
||||
| `color.accent.record` | `#C8281E` | `#CC2A20` | ENIGE accent: opnamelampje, REC-toets, piek-LED. Nooit voor lopende tekst |
|
||||
| `color.accent.recordUnlit` | `#7A2E28` | `#4A1F1B` | Lampje uit |
|
||||
| `color.level.green` | `#5E9E48` | `#6DB556` | Niveau-segment, brandend |
|
||||
| `color.level.amber` | `#D9A023` | `#E5B032` | Niveau-segment, waarschuwing, gecorrigeerd woord |
|
||||
| `color.level.greenUnlit` | `#A8B79C` | `#26331F` | Groen segment, uit |
|
||||
| `color.level.amberUnlit` | `#CDBA8A` | `#3D3418` | Amber segment, uit |
|
||||
| `color.line.seamDark` | `#8C8981` | `#0A0A09` | Naad tussen panelen, donkere helft |
|
||||
| `color.line.seamLight` | `#F3F1EB` | `#45433F` | Naad tussen panelen, lichte helft |
|
||||
| `color.line.hairline` | `#A9A69D` | `#3A3834` | Fijne scheidingslijn, zeefdruk-kader |
|
||||
| `color.line.focus` | `#1E1D1B` | `#ECE8DC` | Toetsenbord-focus |
|
||||
|
||||
**Regel:** `accent.record` is het enige accent en wordt nooit voor lopende tekst gebruikt. Amber en groen zijn alleen voor niveau-indicatoren en markeringen.
|
||||
|
||||
### Contrast (berekend)
|
||||
|
||||
| Tekst | Op | Afwerking | Verhouding | |
|
||||
|---|---|---|---|---|
|
||||
| `ink.primary` | `surface.chassis` | light | 10.08:1 | ok |
|
||||
| `ink.primary` | `surface.chassis` | dark | 14.05:1 | ok |
|
||||
| `ink.primary` | `surface.panel` | light | 12.63:1 | ok |
|
||||
| `ink.primary` | `surface.panel` | dark | 11.72:1 | ok |
|
||||
| `ink.primary` | `surface.paper` | light | 13.87:1 | ok |
|
||||
| `ink.primary` | `surface.paper` | dark | 12.98:1 | ok |
|
||||
| `ink.primary` | `surface.well` | light | 7.86:1 | ok |
|
||||
| `ink.primary` | `surface.well` | dark | 15.27:1 | ok |
|
||||
| `ink.primary` | `surface.selection` | light | 10.57:1 | ok |
|
||||
| `ink.primary` | `surface.selection` | dark | 9.65:1 | ok |
|
||||
| `ink.onMeter` | `surface.meterFace` | light | 13.49:1 | ok |
|
||||
| `ink.onMeter` | `surface.meterFace` | dark | 10.67:1 | ok |
|
||||
| `ink.primary` | `surface.keyHigh` | light | 13.13:1 | ok |
|
||||
| `ink.primary` | `surface.keyHigh` | dark | 8.08:1 | ok |
|
||||
| `ink.primary` | `surface.keyLow` | light | 10.07:1 | ok |
|
||||
| `ink.primary` | `surface.keyLow` | dark | 10.47:1 | ok |
|
||||
| `ink.secondary` | `surface.chassis` | light | 6.47:1 | ok |
|
||||
| `ink.secondary` | `surface.chassis` | dark | 9.38:1 | ok |
|
||||
| `ink.secondary` | `surface.panel` | light | 8.11:1 | ok |
|
||||
| `ink.secondary` | `surface.panel` | dark | 7.82:1 | ok |
|
||||
| `ink.secondary` | `surface.paper` | light | 8.90:1 | ok |
|
||||
| `ink.secondary` | `surface.paper` | dark | 8.66:1 | ok |
|
||||
| `ink.tertiary` | `surface.chassis` | light | 5.28:1 | ok |
|
||||
| `ink.tertiary` | `surface.chassis` | dark | 7.16:1 | ok |
|
||||
| `ink.tertiary` | `surface.panel` | light | 6.62:1 | ok |
|
||||
| `ink.tertiary` | `surface.panel` | dark | 5.97:1 | ok |
|
||||
| `ink.tertiary` | `surface.paper` | light | 7.27:1 | ok |
|
||||
| `ink.tertiary` | `surface.paper` | dark | 6.61:1 | ok |
|
||||
| `ink.tertiary` | `surface.metalHigh` | light | 6.75:1 | ok |
|
||||
| `ink.tertiary` | `surface.metalHigh` | dark | 4.73:1 | ok |
|
||||
| `ink.tertiary` | `surface.metalLow` | light | 4.55:1 | ok |
|
||||
| `ink.tertiary` | `surface.metalLow` | dark | 6.37:1 | ok |
|
||||
| `ink.inverse` | `accent.record` | light | 4.84:1 | ok |
|
||||
| `ink.inverse` | `accent.record` | dark | 4.67:1 | ok |
|
||||
| `level.amber` | `surface.display` | light | 7.46:1 | ok |
|
||||
| `level.amber` | `surface.display` | dark | 9.79:1 | ok |
|
||||
|
||||
## Opaciteit
|
||||
|
||||
| Token | Waarde | Gebruik |
|
||||
|---|---|---|
|
||||
| `opacity.mark` | 0.3 | Amber markering achter een gecorrigeerd woord |
|
||||
| `opacity.disabled` | 0.45 | Uitgeschakelde bediening |
|
||||
| `opacity.unlit` | 1.0 | Gedoofde lampjes gebruiken eigen 'unlit'-kleuren, geen transparantie |
|
||||
|
||||
## Lettertypen
|
||||
|
||||
| Token | Familie | Terugval | Gebruik |
|
||||
|---|---|---|---|
|
||||
| `font.family.chrome` | Helvetica Neue | Helvetica, Arial | Zeefdruk, toetsen, koppen: neutrale grotesk |
|
||||
| `font.family.text` | SF Pro Text | system-ui | Leesbare tekst: transcripties, woordenboek |
|
||||
| `font.family.mono` | SF Mono | Menlo, monospace | Teller, tijden, woordenboekbestand |
|
||||
|
||||
## Tekststijlen
|
||||
|
||||
| Token | Familie | Grootte | Gewicht | Spatiëring | Regelhoogte | Hoofdletters | Gebruik |
|
||||
|---|---|---|---|---|---|---|---|
|
||||
| `type.label` | chrome | 10 pt | 500 | 0.09 em | 12 pt | ja | Zeefdruk-label |
|
||||
| `type.labelSmall` | chrome | 9 pt | 500 | 0.1 em | 11 pt | ja | Schaalmarkeringen en eenheden |
|
||||
| `type.control` | chrome | 11 pt | 500 | 0.06 em | 14 pt | ja | Opschrift op toetsen |
|
||||
| `type.heading` | chrome | 12 pt | 500 | 0.12 em | 16 pt | ja | Paneelkop |
|
||||
| `type.body` | text | 13 pt | 400 | 0 em | 18 pt | nee | Standaardtekst |
|
||||
| `type.reading` | text | 15 pt | 400 | 0 em | 22 pt | nee | Transcript |
|
||||
| `type.meta` | text | 11 pt | 400 | 0 em | 14 pt | nee | Bijschriften |
|
||||
| `type.counter` | mono | 22 pt | 500 | 0 em | 26 pt | nee | Teller |
|
||||
| `type.counterSmall` | mono | 12 pt | 500 | 0 em | 16 pt | nee | Tijdstip in een rij |
|
||||
| `type.code` | mono | 12 pt | 400 | 0 em | 18 pt | nee | Woordenboekregels |
|
||||
|
||||
## Segmentcijfers (getekend, geen lettertype)
|
||||
|
||||
| Token | Waarde | Gebruik |
|
||||
|---|---|---|
|
||||
| `segment.digitHeight` | 36 | Hoogte van een getekend segmentcijfer |
|
||||
| `segment.digitWidth` | 20 | Breedte van een segmentcijfer |
|
||||
| `segment.thickness` | 4 | Dikte van één segment |
|
||||
| `segment.gap` | 1 | Ruimte tussen segmenten |
|
||||
| `segment.slant` | 0 | Schuinte in graden; 0 = rechtop |
|
||||
|
||||
## Ruimte
|
||||
|
||||
| Token | Waarde |
|
||||
|---|---|
|
||||
| `space.0` | 0 pt |
|
||||
| `space.1` | 2 pt |
|
||||
| `space.2` | 4 pt |
|
||||
| `space.3` | 8 pt |
|
||||
| `space.4` | 12 pt |
|
||||
| `space.5` | 16 pt |
|
||||
| `space.6` | 24 pt |
|
||||
| `space.7` | 32 pt |
|
||||
| `space.8` | 48 pt |
|
||||
|
||||
## Indeling
|
||||
|
||||
| Token | Waarde | Gebruik |
|
||||
|---|---|---|
|
||||
| `layout.window.minWidth` | 800 | Minimale vensterbreedte |
|
||||
| `layout.window.minHeight` | 560 | Minimale vensterhoogte |
|
||||
| `layout.window.defaultWidth` | 1080 | Standaard vensterbreedte |
|
||||
| `layout.window.defaultHeight` | 700 | Standaard vensterhoogte |
|
||||
| `layout.sidebar.width` | 232 | Breedte zijbalk |
|
||||
| `layout.settings.width` | 560 | Breedte instellingenvenster |
|
||||
| `layout.panel.padding` | 16 | Binnenmarge van een paneel (= space.5) |
|
||||
| `layout.panel.gap` | 12 | Afstand tussen panelen (= space.4) |
|
||||
|
||||
## Afmetingen
|
||||
|
||||
| Token | Waarde | Gebruik |
|
||||
|---|---|---|
|
||||
| `size.control.height` | 28 | Standaardhoogte van toets of veld |
|
||||
| `size.key.minWidth` | 56 | Minimale breedte van een toets |
|
||||
| `size.key.recWidth` | 64 | REC-toets, breedte |
|
||||
| `size.key.recHeight` | 44 | REC-toets, hoogte |
|
||||
| `size.lamp.diameter` | 10 | Standaard lampje |
|
||||
| `size.lamp.large` | 14 | Opnamelampje |
|
||||
| `size.switch.width` | 40 | Tuimelschakelaar, breedte |
|
||||
| `size.switch.height` | 22 | Tuimelschakelaar, hoogte |
|
||||
| `size.row.height` | 40 | Rij in transcriptielijst |
|
||||
| `size.icon.small` | 16 | Klein pictogram |
|
||||
| `size.icon.medium` | 20 | Normaal pictogram |
|
||||
| `size.hit.min` | 24 | Minimaal klikdoel |
|
||||
|
||||
## Hoekradius
|
||||
|
||||
| Token | Waarde | Gebruik |
|
||||
|---|---|---|
|
||||
| `radius.none` | 0 | Panelen en velden: scherpe randen |
|
||||
| `radius.sharp` | 1 | Toetsranden: bijna scherp |
|
||||
| `radius.sm` | 2 | Toetsen, velden |
|
||||
| `radius.md` | 4 | Grote panelen |
|
||||
| `radius.bezel` | 6 | Rand van de VU-meter |
|
||||
| `radius.lamp` | 999 | Lampjes: rond |
|
||||
|
||||
## Randen
|
||||
|
||||
| Token | Waarde | Gebruik |
|
||||
|---|---|---|
|
||||
| `border.hairline` | 1 pt | Fijne lijn |
|
||||
| `border.seam` | 2 pt | Naad: 1 donkere lijn boven, 1 lichte lijn eronder, leest als gegraveerde groef |
|
||||
| `border.bezel` | 3 pt | Rand om de VU-meter |
|
||||
| `border.focus` | 2 pt | Focusring, 2 pt offset |
|
||||
|
||||
## Schaduw en diepte
|
||||
|
||||
### `shadow.key.raised`
|
||||
|
||||
Toets in rust: lichtvang boven, donkere onderrand, valschaduw
|
||||
|
||||
| Laag | Inset | x | y | blur | spread | kleur | alpha aluminium | alpha graphite |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| 1 | ja | 0 | 1 | 0 | 0 | `#FFFFFF` | 0.65 | 0.1 |
|
||||
| 2 | ja | 0 | -1 | 0 | 0 | `#000000` | 0.25 | 0.55 |
|
||||
| 3 | nee | 0 | 2 | 2 | 0 | `#000000` | 0.35 | 0.6 |
|
||||
|
||||
### `shadow.key.pressed`
|
||||
|
||||
Ingedrukte toets: dop 1 pt omlaag, geen valschaduw Dop verschuift 1 pt omlaag.
|
||||
|
||||
| Laag | Inset | x | y | blur | spread | kleur | alpha aluminium | alpha graphite |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| 1 | ja | 0 | 2 | 4 | 0 | `#000000` | 0.5 | 0.7 |
|
||||
| 2 | ja | 0 | 0 | 0 | 1 | `#000000` | 0.35 | 0.6 |
|
||||
|
||||
### `shadow.well`
|
||||
|
||||
Verzonken vlak met lichtvang op de onderlip
|
||||
|
||||
| Laag | Inset | x | y | blur | spread | kleur | alpha aluminium | alpha graphite |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| 1 | ja | 0 | 1 | 3 | 0 | `#000000` | 0.4 | 0.7 |
|
||||
| 2 | nee | 0 | 1 | 0 | 0 | `#FFFFFF` | 0.55 | 0.07 |
|
||||
|
||||
### `shadow.panel`
|
||||
|
||||
Frontplaat boven het chassis
|
||||
|
||||
| Laag | Inset | x | y | blur | spread | kleur | alpha aluminium | alpha graphite |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| 1 | ja | 0 | 1 | 0 | 0 | `#FFFFFF` | 0.6 | 0.08 |
|
||||
| 2 | nee | 0 | 3 | 8 | 0 | `#000000` | 0.22 | 0.55 |
|
||||
|
||||
### `shadow.lamp.on`
|
||||
|
||||
Brandend lampje: kleine gloed, alleen voor lampjes en nooit voor tekst
|
||||
|
||||
| Laag | Inset | x | y | blur | spread | kleur | alpha aluminium | alpha graphite |
|
||||
|---|---|---|---|---|---|---|---|---|
|
||||
| 1 | nee | 0 | 0 | 6 | 1 | `#CC2A20` | 0.45 | 0.55 |
|
||||
| 2 | ja | 0 | -1 | 1 | 0 | `#000000` | 0.35 | 0.45 |
|
||||
|
||||
## Textuur
|
||||
|
||||
**`texture.brushed`** — Geborsteld aluminium voor chassis en zijbalk. Richting horizontaal; korrel 0.035 (aluminium) / 0.05 (graphite); surface.metalHigh naar surface.metalLow, van boven naar beneden.
|
||||
|
||||
## Meters
|
||||
|
||||
| Token | Waarde | Gebruik |
|
||||
|---|---|---|
|
||||
| `meter.vu.referenceDbfs` | -20 | 0 VU = -20 dBFS (RMS) |
|
||||
| `meter.vu.min` | -20 | Onderkant van de schaal in VU |
|
||||
| `meter.vu.max` | 3 | Bovenkant van de schaal in VU; vanaf 0 VU rood |
|
||||
| `meter.vu.arcDegrees` | 90 | Hoek tussen minimale en maximale stand |
|
||||
| `meter.vu.width` | 260 | Breedte van de meter |
|
||||
| `meter.vu.height` | 150 | Hoogte van de meter |
|
||||
| `meter.vu.needleWidth` | 1.5 | Dikte van de wijzer |
|
||||
| `meter.vu.ticks` | -20 -10 -7 -5 -3 0 +3 | Genummerde schaalmarkeringen |
|
||||
| `meter.led.segments` | 12 | Aantal segmenten: 8 groen, 3 amber, 1 rood |
|
||||
| `meter.led.segmentSize` | 6x14 | Segment in pt (breedte x hoogte) |
|
||||
| `meter.led.gap` | 2 | Ruimte tussen segmenten |
|
||||
| `meter.peak.holdMs` | 1000 | Piek-LED blijft zo lang branden |
|
||||
|
||||
## Beweging
|
||||
|
||||
| Token | Waarde | Eenheid | Gebruik |
|
||||
|---|---|---|---|
|
||||
| `motion.duration.instant` | 0 | ms | Geen overgang |
|
||||
| `motion.duration.fast` | 60 | ms | Toets in/uit |
|
||||
| `motion.duration.base` | 120 | ms | Standaardovergang |
|
||||
| `motion.duration.slow` | 220 | ms | Paneel of venster |
|
||||
| `motion.easing.mechanical` | cubic-bezier(0.2, 0, 0, 1) | | Toetsen: direct, zonder veer |
|
||||
| `motion.easing.standard` | cubic-bezier(0.4, 0, 0.2, 1) | | Overige overgangen |
|
||||
| `motion.key.press` | 50 | ms | Toets indrukken |
|
||||
| `motion.key.release` | 90 | ms | Toets loslaten |
|
||||
| `motion.lamp.on` | 30 | ms | Lampje aan |
|
||||
| `motion.lamp.off` | 200 | ms | Lampje uit: dooft langzaam, als een gloeidraad |
|
||||
| `motion.needle.response` | 0.3 | s | VU-ballistiek: 300 ms om de stand te bereiken |
|
||||
| `motion.needle.damping` | 0.8 | ratio | Veerdemping; geeft ongeveer 1,5 % overschot |
|
||||
| `motion.needle.updateHz` | 60 | Hz | Verversing van de wijzer |
|
||||
| `motion.reducedMotion` | Overgangen 0 ms; wijzer blijft bewegen maar met demping 1.0 (geen overschot) | | Systeeminstelling 'Verminder beweging' |
|
||||
|
||||
## Wat bewust ontbreekt
|
||||
|
||||
Geen neon, vaporwave, synthwave, paars-roze verlopen, gloeiende tekst, chromen letters of rasterhorizonten. Lampjes mogen een kleine gloed hebben (`shadow.lamp.on`); tekst nooit.
|
||||
Reference in New Issue
Block a user