anentrypoint-design 0.0.437 → 0.0.439

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. package/dist/247420.css +78 -23
  2. package/dist/247420.js +23 -23
  3. package/dist/colors_and_type.css +86 -42
  4. package/dist/preview/buttons.html +5 -2
  5. package/dist/preview/colors-core.html +4 -1
  6. package/dist/preview/colors-lore.html +4 -1
  7. package/dist/preview/colors-semantic.html +4 -1
  8. package/dist/preview/dateline.html +4 -1
  9. package/dist/preview/dropzone.html +4 -1
  10. package/dist/preview/file-grid.html +4 -1
  11. package/dist/preview/file-row.html +4 -1
  12. package/dist/preview/file-toolbar.html +4 -1
  13. package/dist/preview/file-viewer.html +7 -1
  14. package/dist/preview/header.html +5 -2
  15. package/dist/preview/icons-unicode.html +26 -20
  16. package/dist/preview/index-row.html +4 -1
  17. package/dist/preview/inputs.html +4 -1
  18. package/dist/preview/manifesto.html +4 -1
  19. package/dist/preview/rules.html +4 -1
  20. package/dist/preview/spacing.html +17 -12
  21. package/dist/preview/stamps-lore.html +4 -1
  22. package/dist/preview/stamps.html +4 -1
  23. package/dist/preview/theme-ink.html +4 -1
  24. package/dist/preview/type-display.html +4 -1
  25. package/dist/preview/type-mono.html +4 -1
  26. package/dist/preview/type-prose.html +5 -2
  27. package/dist/preview/type-scale.html +40 -15
  28. package/dist/preview/wordmarks.html +18 -22
  29. package/dist/src/components/content.js +2 -1
  30. package/dist/src/components.js +21 -5
  31. package/dist/src/kits/os/theme.css +38 -5
  32. package/dist/ui_kits/aicat/app.js +1 -1
  33. package/dist/ui_kits/gallery/app.js +27 -7
  34. package/dist/ui_kits/signin/app.js +51 -10
  35. package/dist/ui_kits/system_primer/app.js +189 -3
  36. package/dist/ui_kits/terminal/app.js +56 -10
  37. package/package.json +1 -1
  38. package/src/components/content/cli.js +7 -1
  39. package/src/components/content/panel.js +7 -2
  40. package/src/components/shell/app-shell.js +7 -2
  41. package/src/components/shell/icons.js +4 -1
  42. package/src/css/app-shell/kits-appended.css +58 -21
  43. package/src/css/app-shell/panel-row.css +14 -0
  44. package/src/css/app-shell/responsive2-workspace.css +5 -1
  45. package/src/css/app-shell/topbar.css +1 -1
  46. package/src/kits/os/files-app.js +9 -2
  47. package/src/kits/os/icons.js +5 -0
  48. package/src/kits/os/launcher.css +7 -2
  49. package/src/kits/os/launcher.js +27 -3
  50. package/src/kits/os/monitor-app.js +8 -2
  51. package/src/kits/os/shell.js +55 -12
  52. package/src/kits/os/theme.css +20 -2
  53. package/src/kits/os/wm.js +41 -11
  54. package/types/components.d.ts +2 -0
  55. package/dist/slides/deck-stage-overlay.js +0 -63
  56. package/dist/slides/deck-stage-state.js +0 -81
  57. package/dist/slides/deck-stage-style.js +0 -117
  58. package/dist/slides/deck-stage.js +0 -159
  59. package/dist/src/kits/os/freddie/helpers.js +0 -59
  60. package/dist/src/kits/os/validator-app.js +0 -55
@@ -14,23 +14,33 @@
14
14
  --tree-indent: 12px;
15
15
  --tree-base-indent: 6px;
16
16
 
17
- /* Paper / Ink — warm newsprint paper against near-black ink. The warmer
18
- paper + deeper ink widen the tonal range so the electric lead reads as
19
- printed, not glowing. */
20
- --paper: #F4F1E9;
21
- --paper-2: #EAE6DA;
22
- --paper-3: #DCD7C7;
23
- --ink: #0E0E12;
24
- --ink-2: #1F1F26;
25
- --ink-3: #52525A; /* WCAG AAA on --paper (~7.1:1) */
26
- --ink-3-dark: #464650; /* dark theme bg-3 (tier-3 surface) */
27
- --paper-3-dark: #B4B4BC; /* dark theme fg-3 (tier-3 text) */
28
-
29
- /* Lore palette. --acid is the electric lead — a printed-ink lime that sits
30
- forward of the heritage green; green/purple/mascot demote to print-ink
31
- category roles. */
32
- --acid: #B6FF1B;
33
- --acid-deep: #4E4200; /* AA text tone of the lead on paper (WCAG-verified: #4E7A00 measured 4.21:1 against --accent-tint's own color-mix() output, which derives FROM --acid-deep -- so a small darkening shifts both foreground and background together and converges too slowly; #4E4200 is the minimal shade that actually clears 4.5:1 against its own self-referential tint background) */
17
+ /* Paper / Ink — RESTYLED to webjsx-toolkit's shadcn-neutral grayscale
18
+ palette (2026 restyle, replacing the prior "Acid Editorial" warm-paper/
19
+ electric-lime identity). Values below are HSL-equivalent-in-hex readings
20
+ of webjsx-toolkit's :root tokens (--background 0 0% 100%, --foreground
21
+ 0 0% 10%, --muted 0 0% 95%, --border 0 0% 90%) so every downstream
22
+ color-mix()/oklch() derivation in this file keeps its formula and only
23
+ the ROOT input changes -- see restyle-tokens-webjsx-toolkit-look and
24
+ restyle-contrast-reverification-all-tokens for the swap rationale and
25
+ the re-verification this requires. */
26
+ --paper: #FFFFFF;
27
+ --paper-2: #F2F2F2;
28
+ --paper-3: #E5E5E5;
29
+ --ink: #1A1A1A;
30
+ --ink-2: #333338;
31
+ --ink-3: #525252; /* WCAG-verified 2026 restyle: npm run a11y caught 4.10:1 at #58585F against --paper-3 (#c6c5c5-equivalent surfaces); #525252 clears 4.54:1 there and 7.81:1 against pure paper */
32
+ --ink-3-dark: #4D4D52; /* dark theme bg-3 (tier-3 surface) */
33
+ --paper-3-dark: #9B9B9B; /* dark theme fg-3 (tier-3 text); WCAG-verified: npm run a11y caught 4.41:1 at #999999 against --ink-2 (#333338); #9B9B9B clears 4.52:1 there */
34
+
35
+ /* Lore palette. --acid was the prior electric-lime lead; RESTYLED to a
36
+ neutral near-black accent matching webjsx-toolkit's grayscale --primary
37
+ (0 0% 15%), since the shadcn-neutral look has no saturated lead color at
38
+ all -- primary/accent are both neutral ink tones with hover-state
39
+ opacity, not a distinct hue. green/purple/mascot below stay as the
40
+ category/status palette (webjsx-toolkit has no opinion on multi-hue
41
+ category tagging, so these are kept rather than flattened). */
42
+ --acid: #262626;
43
+ --acid-deep: #171717; /* re-verify AA text tone under restyle-contrast-reverification-all-tokens */
34
44
  --green: #247420;
35
45
  --green-2: #3A9A34;
36
46
  --green-deep: #133F10;
@@ -49,6 +59,14 @@
49
59
  need a tone chosen for ink rather than for the active theme. Same role
50
60
  --paper-3-dark plays for the tier-3 text ramp. */
51
61
  --mascot-on-ink: #FF5C9E;
62
+ /* Same always-dark-surface pattern, for .ds-cli-ok's success/OK text.
63
+ RESTYLED 2026: .ds-cli-ok previously used --acid directly (the bright
64
+ lime), which cleared contrast on --ink by construction; now that --acid
65
+ is a dark neutral, it fails 1.15:1 on the still-always-dark .cli card
66
+ (npm run a11y caught this on the terminal kit). Reuses the dark-theme
67
+ --green retune value (7.48:1 on --ink) rather than inventing a new hue,
68
+ since --green already carries the "success" semantic elsewhere. */
69
+ --success-on-ink: #5CBF52;
52
70
 
53
71
  /* Signals */
54
72
  --sun: #F5C344;
@@ -95,11 +113,16 @@
95
113
  --fg-2: var(--ink-2);
96
114
  --fg-3: var(--ink-3);
97
115
 
98
- /* The electric lead. --accent is the FILL (sits behind ink text); --accent-ink
99
- is the readable TEXT tone for links/eyebrows/accents on paper (the lime
100
- itself is too light for text). --accent-fg is what sits ON an --accent fill. */
116
+ /* --accent is the FILL; --accent-ink is the readable TEXT tone for
117
+ links/eyebrows/accents on paper; --accent-fg is what sits ON an --accent
118
+ fill. RESTYLED: --accent (formerly the bright --acid lime, dark text on
119
+ top) is now a dark neutral (webjsx-toolkit's --primary: 0 0% 15%), so
120
+ --accent-fg flips to a LIGHT tone (webjsx-toolkit's --primary-foreground:
121
+ 0 0% 100%) -- verified via npm run a11y after the initial restyle caught
122
+ this exact dark-on-dark 1.15:1 failure across every kit's .btn-primary/
123
+ .active nav item, both of which read --accent-fg as their text color. */
101
124
  --accent: var(--acid);
102
- --accent-fg: var(--ink);
125
+ --accent-fg: var(--paper);
103
126
  --accent-ink: var(--acid-deep);
104
127
  --accent-bright: var(--acid); /* base value so var(--accent-bright) never falls back empty; ink + [data-accent] retune it */
105
128
  /* Blends --accent-ink (the readable/darker ink variant), not the raw
@@ -240,13 +263,19 @@
240
263
  --rule-strong: color-mix(in oklab, currentColor 28%, transparent);
241
264
 
242
265
  /* Micro rungs below --r-1 — chips, badges, scrollbar thumbs, tick marks
243
- genuinely want a tighter corner than 10px; without these two tokens the
244
- component sheets fell back to raw px literals bypassing the scale. */
266
+ genuinely want a tighter corner than the base radius; without these two
267
+ tokens the component sheets fell back to raw px literals bypassing the
268
+ scale. RESTYLED (webjsx-toolkit look): base --radius is 0.5rem (8px),
269
+ with radius-sm/md/lg at radius-4px/radius-2px/radius (4px/6px/8px) --
270
+ --r-1 below is retuned to that 8px base; --r-2/--r-3 keep proportional
271
+ headroom above it for large-surface corners (cards, dialogs) rather than
272
+ collapsing to a single flat rung, since webjsx-toolkit itself has no
273
+ opinion above its one --radius value. */
245
274
  --r-hair: 2px;
246
275
  --r-0: 4px;
247
- --r-1: 10px;
248
- --r-2: 14px;
249
- --r-3: 22px;
276
+ --r-1: 8px;
277
+ --r-2: 10px;
278
+ --r-3: 14px;
250
279
  --r-pill: 999px;
251
280
 
252
281
  --dur-snap: 80ms;
@@ -255,14 +284,24 @@
255
284
  --dur-reveal: 560ms;
256
285
  --ease: cubic-bezier(0.2, 0, 0, 1);
257
286
  /* Physical tier — a slight overshoot that reads as a printed stamp landing,
258
- used by presses and signature reveals (not by routine UI fades). */
287
+ used by presses and signature reveals (not by routine UI fades). Kept
288
+ available post-restyle since some existing consumers still reference it;
289
+ new work should prefer the webjsx-toolkit-equivalent curves below. */
259
290
  --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
260
291
  --ease-exit: cubic-bezier(0.4, 0, 1, 1);
261
-
262
- /* Print texture the signature surface treatment. --grain is a tiled
263
- fractal-noise data-URI, opt-in via the .ds-grain utility and tuned faint
264
- so type stays crisp. */
265
- --grain-opacity: 0.05;
292
+ /* RESTYLED (webjsx-toolkit look): its three named easing curves, ported
293
+ verbatim from webjsx-toolkit/src/styles.css's @theme inline block. */
294
+ --ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
295
+ --ease-collapse: cubic-bezier(0.2, 0, 0, 1);
296
+ --ease-out-strong: cubic-bezier(0.23, 1, 0.32, 1);
297
+
298
+ /* Print texture — the prior "Acid Editorial" signature surface treatment.
299
+ RESTYLED: opacity zeroed so .ds-grain/.ds-halftone (currently applied by
300
+ no consumer, verified by grep across src/components and ui_kits) render
301
+ inert under the flat-surface webjsx-toolkit look, without deleting the
302
+ machinery in case a future editorial-mode consumer opts back in. --grain
303
+ itself (the data-URI) and --grain-blend are left defined for that reason. */
304
+ --grain-opacity: 0;
266
305
  --grain-blend: multiply;
267
306
  --grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");
268
307
  /* Offset-ink registration — the small print-mark offset used on editorial
@@ -432,12 +471,16 @@ select:focus-visible {
432
471
  --panel-text: var(--fg);
433
472
  --panel-text-2: var(--fg-2);
434
473
  --panel-text-3: var(--fg-3);
435
- --accent: var(--acid);
474
+ /* RESTYLED: webjsx-toolkit's dark --primary is a LIGHT neutral (0 0% 75%)
475
+ with a DARK --primary-foreground (0 0% 10%) -- the inverse of light mode,
476
+ matching shadcn's convention that dark-mode primary buttons read as a
477
+ light chip on the dark page, not a same-dark-as-bg chip. --accent no
478
+ longer aliases --acid here (a literal dark-on-dark 1.15:1 failure caught
479
+ by npm run a11y across every dark-rendered kit). */
480
+ --accent: #BFBFBF;
436
481
  --accent-fg: var(--ink);
437
- --accent-ink: var(--acid); /* on ink, the lime itself reads as bright text */
438
- --accent-bright: var(--acid);
439
- /* Preserves the prior --accent-based blend for dark; the :root light-theme
440
- value above was retuned to blend --accent-ink instead. */
482
+ --accent-ink: var(--paper);
483
+ --accent-bright: #BFBFBF;
441
484
  --accent-tint: color-mix(in oklab, var(--accent) 30%, var(--bg));
442
485
  --danger: oklch(0.68 0.19 25);
443
486
  --flame: #FF5A1F;
@@ -503,10 +546,10 @@ select:focus-visible {
503
546
  --panel-text: var(--fg);
504
547
  --panel-text-2: var(--fg-2);
505
548
  --panel-text-3: var(--fg-3);
506
- --accent: var(--acid);
549
+ --accent: #BFBFBF; /* mirrors [data-theme=ink/dark] retune above */
507
550
  --accent-fg: var(--ink);
508
- --accent-ink: var(--acid);
509
- --accent-bright: var(--acid);
551
+ --accent-ink: var(--paper);
552
+ --accent-bright: #BFBFBF;
510
553
  --accent-tint: color-mix(in oklab, var(--accent) 30%, var(--bg));
511
554
  --danger: oklch(0.68 0.19 25);
512
555
  --flame: #FF5A1F;
@@ -569,6 +612,7 @@ select:focus-visible {
569
612
  --cat-purple-ink: inherit;
570
613
  --cat-mascot-ink: inherit;
571
614
  --mascot-on-ink: inherit;
615
+ --success-on-ink: inherit;
572
616
  --cat-sun: inherit;
573
617
  --cat-flame: inherit;
574
618
  --cat-sky: inherit;
@@ -592,7 +636,7 @@ select:focus-visible {
592
636
  color-scheme: light;
593
637
  --bg: var(--paper); --bg-2: var(--paper-2); --bg-3: var(--paper-3);
594
638
  --fg: var(--ink); --fg-2: var(--ink-2); --fg-3: var(--ink-3);
595
- --accent: var(--acid); --accent-fg: var(--ink); --accent-ink: var(--acid-deep);
639
+ --accent: var(--acid); --accent-fg: var(--paper); --accent-ink: var(--acid-deep);
596
640
  --accent-tint: color-mix(in oklab, var(--accent-ink) 22%, var(--bg));
597
641
  /* A paper island under a dark ancestor must not inherit the dark signal pair. */
598
642
  --flame: #C53E00; --amber: #7C570F; --warn: #C41C0C; --sky: #3A6EFF;
@@ -663,7 +707,7 @@ select:focus-visible {
663
707
  [data-density="comfortable"] { --density: 1; }
664
708
  [data-density="spacious"] { --density: 1.35; }
665
709
 
666
- [data-accent="acid"] { --accent: var(--acid); --accent-bright: var(--acid); --accent-fg: var(--ink); --accent-ink: var(--acid-deep); --panel-accent: var(--acid); }
710
+ [data-accent="acid"] { --accent: var(--acid); --accent-bright: var(--acid); --accent-fg: var(--paper); --accent-ink: var(--acid-deep); --panel-accent: var(--acid); }
667
711
  [data-accent="green"] { --accent: var(--green); --accent-bright: var(--green-2); --accent-fg: var(--paper); --accent-ink: var(--green); --panel-accent: var(--green); }
668
712
  [data-accent="purple"] { --accent: var(--purple); --accent-bright: #C277FF; --accent-fg: var(--paper); --accent-ink: var(--purple-2); --panel-accent: var(--purple); }
669
713
  [data-accent="mascot"] { --accent: var(--mascot); --accent-bright: var(--mascot-2); --accent-fg: var(--ink); --accent-ink: var(--mascot-deep);--panel-accent: var(--mascot); }
@@ -6,7 +6,9 @@
6
6
  <style>body{padding:var(--space-4);background:var(--panel-0);color:var(--panel-text);}</style>
7
7
  <script defer src="./motion-default.js"></script>
8
8
  </head><!-- lint-dead-controls:allow — specimen markup: this page exists to show what the component LOOKS like in isolation, so its anchors have nowhere real to point. Not a navigable surface. -->
9
- <body>
9
+ <body>
10
+ <h1 class="sr-only">Components</h1>
11
+ <main aria-label="Components specimens">
10
12
  <div class="ds-demo-label" style="font-family:var(--ff-mono);text-transform:uppercase;letter-spacing:var(--tr-label);color:var(--fg-3)">247420 / components / buttons</div>
11
13
 
12
14
  <!-- Variants — shared .ds-demo gallery cell (hairline box, flex-wrap, gap). -->
@@ -35,5 +37,6 @@
35
37
  <button class="btn-ghost btn-lg">lg ghost</button>
36
38
  </div>
37
39
 
38
- <div class="ds-demo-desc" style="font-family:var(--ff-mono);margin-top:var(--space-2)">primary · secondary · ghost — size ladder sm/md/lg on the --ctl-* height scale</div>
40
+ <div class="ds-demo-desc" style="font-family:var(--ff-mono);margin-top:var(--space-2)">primary · secondary · ghost — size ladder sm/md/lg on the --ctl-* height scale</div>
41
+ </main>
39
42
  </body></html>
@@ -21,7 +21,9 @@
21
21
  </style><script defer src="./motion-default.js"></script>
22
22
  </head><body>
23
23
  <div class="dateline"><span>247420 · COLORS · CORE</span><span class="spread"></span><span>04 SWATCHES</span></div>
24
- <div class="grid">
24
+
25
+ <h1 class="sr-only">Colors core</h1>
26
+ <main aria-label="Colors core specimens"><div class="grid">
25
27
  <div class="sw" style="background:var(--panel-0);color:var(--panel-text)">
26
28
  <div class="name">paper</div>
27
29
  <div>
@@ -52,4 +54,5 @@
52
54
  </div>
53
55
  </div>
54
56
  <p class="t-meta" style="margin-top:16px">paper = default surface. paper-2 (cream-3) = hover/chip bg with real contrast against paper. ink = warm, not harsh. green = 247420, the primary accent.</p>
57
+ </main>
55
58
  </body></html>
@@ -8,7 +8,9 @@
8
8
  @media (max-width:640px){.preview-grid{grid-template-columns:repeat(2,minmax(0,1fr)) !important;}}</style><script defer src="./motion-default.js"></script>
9
9
  </head><body>
10
10
  <div class="dateline"><span>247420 · COLORS · LORE</span><span class="spread"></span><span>THE ACTUAL PALETTE</span></div>
11
- <div style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin-top:16px" class="preview-grid">
11
+
12
+ <h1 class="sr-only">Colors lore</h1>
13
+ <main aria-label="Colors lore specimens"><div style="display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;margin-top:16px" class="preview-grid">
12
14
  <!-- Fixed tones, not --panel-0: these swatches paint a CONSTANT colour in every
13
15
  theme, so a theme-relative text token flips underneath them. --panel-0 is
14
16
  #0E0E12 in ink, which measured 1.15:1 on --purple. --ink and --paper are
@@ -34,4 +36,5 @@
34
36
  </div>
35
37
  </div>
36
38
  <div class="t-meta" style="margin-top:12px">247420 (green) + 420247 (purple) — the lore pair. mascot pink used randomly/wildly on accent elements.</div>
39
+ </main>
37
40
  </body></html>
@@ -8,7 +8,9 @@
8
8
  @media (max-width:640px){.preview-grid{grid-template-columns:repeat(2,minmax(0,1fr)) !important;}}</style><script defer src="./motion-default.js"></script>
9
9
  </head><body>
10
10
  <div class="dateline"><span>247420 · COLORS · SEMANTIC</span><span class="spread"></span><span>05 TOKENS</span></div>
11
- <div style="display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;margin-top:16px" class="preview-grid">
11
+
12
+ <h1 class="sr-only">Colors semantic</h1>
13
+ <main aria-label="Colors semantic specimens"><div style="display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;margin-top:16px" class="preview-grid">
12
14
  <!-- --on-color (#fff, 4.32:1) AND --ink (#0e0e12, 4.45:1) both fail WCAG AA's
13
15
  4.5:1 against --sky at this font size; only true black clears it -->
14
16
  <div style="background:var(--sky);color:#000;padding:12px;min-height:90px">
@@ -37,4 +39,5 @@
37
39
  <div class="t-micro" style="color:var(--on-color)">--ink-3 · metadata</div>
38
40
  </div>
39
41
  </div>
42
+ </main>
40
43
  </body></html>
@@ -5,7 +5,9 @@
5
5
  <style>body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);}</style><script defer src="./motion-default.js"></script>
6
6
  </head><body>
7
7
  <div class="dateline"><span>247420 · BRAND · DATELINE</span><span class="spread"></span><span>EVERY PAGE</span></div>
8
- <div style="margin-top:18px">
8
+
9
+ <h1 class="sr-only">Dateline</h1>
10
+ <main aria-label="Dateline specimens"><div style="margin-top:18px">
9
11
  <div class="dateline"><span>247420 · AN ENTRYPOINT</span><span>THE WORKS</span><span class="spread"></span><span>APR 20 2026</span></div>
10
12
  </div>
11
13
  <div style="margin-top:24px;background:var(--panel-text);padding:14px 20px">
@@ -17,4 +19,5 @@
17
19
  </div>
18
20
  </div>
19
21
  <div class="t-meta" style="margin-top:16px">the "dateline" — ASCII bar at top of every page. 3 or 4 slots, dotted spreader fills the gap.</div>
22
+ </main>
20
23
  </body></html>
@@ -5,7 +5,9 @@
5
5
  <style>body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);} .row-2{display:grid;grid-template-columns:1fr 1fr;gap:var(--space-3);max-width:880px}</style><script defer src="./motion-default.js"></script>
6
6
  </head><body>
7
7
  <div class="dateline"><span>247420 · FILE-BROWSER · DROPZONE</span><span class="spread"></span><span>TONAL TARGET · NO DASHED BORDERS</span></div>
8
- <div class="row-2" style="margin-top:14px">
8
+
9
+ <h1 class="sr-only">Dropzone</h1>
10
+ <main aria-label="Dropzone specimens"><div class="row-2" style="margin-top:14px">
9
11
  <div>
10
12
  <div class="t-meta" style="margin-bottom:6px">idle</div>
11
13
  <div class="ds-dropzone">
@@ -28,4 +30,5 @@
28
30
  </div>
29
31
  </div>
30
32
  <div class="t-meta" style="margin-top:12px">dropzone is a tonal panel that swaps to <code>--panel-select</code> on dragover. <strong>preventDefault must run on document, not just the zone</strong> or the browser will navigate to the dropped file.</div>
33
+ </main>
31
34
  </body></html>
@@ -5,7 +5,9 @@
5
5
  <style>body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);}</style><script defer src="./motion-default.js"></script>
6
6
  </head><body>
7
7
  <div class="dateline"><span>247420 · FILE-BROWSER · FILE-GRID</span><span class="spread"></span><span>STACK OF ROWS · ZEBRA · NEVER A BORDER</span></div>
8
- <div class="panel" style="margin-top:14px;max-width:680px">
8
+
9
+ <h1 class="sr-only">File grid</h1>
10
+ <main aria-label="File grid specimens"><div class="panel" style="margin-top:14px;max-width:680px">
9
11
  <div class="panel-head"><span>tigers/photos · 06 of 06</span><span style="color:var(--panel-text-3)">06 items</span></div>
10
12
  <div class="ds-file-grid">
11
13
  <div class="ds-file-row row" data-file-type="dir"><span class="ds-file-icon" data-file-type="dir"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 7a2 2 0 0 1 2-2h3l2 2h7a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2z"/></svg></span><span class="title">raw</span><span class="ds-file-meta meta">—</span></div>
@@ -17,4 +19,5 @@
17
19
  </div>
18
20
  </div>
19
21
  <div class="t-meta" style="margin-top:12px">grid = panel + stack of rows. directories sort first. selected row gets the mint <code>.active</code> tone — no underline, no bold.</div>
22
+ </main>
20
23
  </body></html>
@@ -5,7 +5,9 @@
5
5
  <style>body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);}</style><script defer src="./motion-default.js"></script>
6
6
  </head><body>
7
7
  <div class="dateline"><span>247420 · FILE-BROWSER · FILE-ROW</span><span class="spread"></span><span>RAIL · ICON · NAME · META · ACTIONS</span></div>
8
- <div class="ds-file-grid" style="margin-top:14px">
8
+
9
+ <h1 class="sr-only">File row</h1>
10
+ <main aria-label="File row specimens"><div class="ds-file-grid" style="margin-top:14px">
9
11
  <div class="ds-file-row row" data-file-type="dir"><span class="ds-file-icon" data-file-type="dir"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M4 7a2 2 0 0 1 2-2h3l2 2h7a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2z"/></svg></span><span class="title">src</span><span class="ds-file-meta meta">—</span></div>
10
12
  <div class="ds-file-row row" data-file-type="image"><span class="ds-file-icon" data-file-type="image"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="3" width="18" height="18" rx="2"/><circle cx="9" cy="9" r="2"/><path d="m21 15-5-5L5 21"/></svg></span><span class="title">cover.png</span><span class="ds-file-meta meta">180 KB · 2026.04.18</span></div>
11
13
  <div class="ds-file-row row" data-file-type="video"><span class="ds-file-icon" data-file-type="video"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="3" y="5" width="18" height="14" rx="2"/><path d="m10 9 5 3-5 3z"/></svg></span><span class="title">reel.mp4</span><span class="ds-file-meta meta">2.3 MB · 2026.04.17</span></div>
@@ -18,4 +20,5 @@
18
20
  <div class="ds-file-row row" data-file-type="other"><span class="ds-file-icon" data-file-type="other"><svg viewBox="0 0 24 24" width="16" height="16" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><path d="M14 3v5h5"/><path d="M15 3H6a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"/></svg></span><span class="title">.config</span><span class="ds-file-meta meta">220 B</span></div>
19
21
  </div>
20
22
  <div class="t-meta" style="margin-top:12px">a row per file. 4px tonal rail keyed by data-file-type — never hand-applied. icon + name + meta, optional actions on hover.</div>
23
+ </main>
21
24
  </body></html>
@@ -6,7 +6,9 @@
6
6
  </head><body>
7
7
  <div class="dateline"><span>247420 · FILE-BROWSER · TOOLBAR</span><span class="spread"></span><span>BREADCRUMB · ACTIONS · COUNT</span></div>
8
8
 
9
- <div style="margin-top:14px;max-width:880px">
9
+
10
+ <h1 class="sr-only">File toolbar</h1>
11
+ <main aria-label="File toolbar specimens"><div style="margin-top:14px;max-width:880px">
10
12
  <div class="ds-crumb-path" style="margin-bottom:10px">
11
13
  <button class="ds-crumb-seg">root</button>
12
14
  <span class="ds-crumb-sep">›</span>
@@ -38,4 +40,5 @@
38
40
  </div>
39
41
  </div>
40
42
  <div class="t-meta" style="margin-top:12px">toolbar is one row, left-aligned actions and right-aligned count. breadcrumb above. upload progress below — tonal bar, no animation jitter.</div>
43
+ </main>
41
44
  </body></html>
@@ -2,8 +2,13 @@
2
2
  <html lang="en" data-theme="auto" class="ds-247420"><head><meta charset="utf-8">
3
3
  <title>file viewer / 247420 preview</title><link rel="stylesheet" href="../colors_and_type.css">
4
4
  <link rel="stylesheet" href="../app-shell.css">
5
- <style>body{padding:0;background:var(--panel-0);color:var(--panel-text);min-height:100vh;display:flex;align-items:center;justify-content:center}</style>
5
+ <style>body{padding:0;background:var(--panel-0);color:var(--panel-text);min-height:100vh;display:flex;align-items:center;justify-content:center}
6
+ /* The specimen is a full-bleed modal over a backdrop, so the landmark that
7
+ wraps it has to stay a full-size flex item rather than shrink to content. */
8
+ body > main{flex:1;align-self:stretch;min-width:0}</style>
6
9
  </head><body>
10
+ <h1 class="sr-only">File viewer</h1>
11
+ <main aria-label="File viewer specimens">
7
12
  <div class="ds-modal-backdrop" style="position:relative;width:100%;height:100vh">
8
13
  <div class="ds-modal ds-modal-preview">
9
14
  <div class="ds-modal-head ds-preview-head" data-file-type="code">
@@ -29,4 +34,5 @@
29
34
  </div>
30
35
  </div>
31
36
  </div>
37
+ </main>
32
38
  </body></html>
@@ -6,7 +6,9 @@
6
6
  <style>body{padding:0;margin:0;background:var(--panel-0);color:var(--panel-text);}</style>
7
7
  <script defer src="./motion-default.js"></script>
8
8
  </head><!-- lint-dead-controls:allow — specimen markup: this page exists to show what the component LOOKS like in isolation, so its anchors have nowhere real to point. Not a navigable surface. -->
9
- <body>
9
+ <body>
10
+ <h1 class="sr-only">Header</h1>
11
+ <main aria-label="Header specimens">
10
12
  <header class="app-topbar">
11
13
  <span class="brand">247420<span class="slash"> / </span>an entrypoint</span>
12
14
  <nav>
@@ -22,5 +24,6 @@
22
24
  </div>
23
25
  <div style="padding:20px;font-family:var(--ff-mono);font-size:14px;color:var(--panel-text-2)">
24
26
  sticky · 36px · panel-2 background · nav hover uses panel-hover · active uses panel-1
25
- </div>
27
+ </div>
28
+ </main>
26
29
  </body></html>
@@ -4,26 +4,32 @@
4
4
  <link rel="stylesheet" href="../app-shell.css">
5
5
  <style>body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);}
6
6
  .preview-grid > *{min-width:0;overflow:hidden;}
7
- @media (max-width:640px){.preview-grid{grid-template-columns:repeat(4,minmax(0,1fr)) !important;}}</style><script defer src="./motion-default.js"></script>
7
+ @media (max-width:640px){.preview-grid{grid-template-columns:repeat(4,minmax(0,1fr)) !important;}}
8
+ .glyph-grid{margin-top:var(--space-3);display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:var(--space-1);font-family:var(--ff-mono)}
9
+ .glyph-cell{padding:var(--space-2-75);text-align:center}
10
+ .glyph-mark{font-size:var(--fs-h3)}
11
+ .glyph-cell .t-micro{margin-top:var(--space-1)}
12
+ .glyph-note{margin-top:var(--space-2-75)}</style><script defer src="./motion-default.js"></script>
8
13
  </head><body>
14
+ <h1 class="sr-only">Unicode icon set</h1>
9
15
  <div class="dateline"><span>247420 · ICONS · UNICODE</span><span class="spread"></span><span>THE FREE SET</span></div>
10
- <div style="margin-top:14px;display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:2px;font-family:var(--ff-mono)" class="preview-grid">
11
- <div style="padding:12px;text-align:center"><div style="font-size:22px">→</div><div class="t-micro" style="margin-top:4px">LINK</div></div>
12
- <div style="padding:12px;text-align:center"><div style="font-size:22px">↗</div><div class="t-micro" style="margin-top:4px">EXT</div></div>
13
- <div style="padding:12px;text-align:center"><div style="font-size:22px">↳</div><div class="t-micro" style="margin-top:4px">REPLY</div></div>
14
- <div style="padding:12px;text-align:center"><div style="font-size:22px">·</div><div class="t-micro" style="margin-top:4px">SEP</div></div>
15
- <div style="padding:12px;text-align:center"><div style="font-size:22px">※</div><div class="t-micro" style="margin-top:4px">NOTE</div></div>
16
- <div style="padding:12px;text-align:center"><div style="font-size:22px">§</div><div class="t-micro" style="margin-top:4px">SECT</div></div>
17
- <div style="padding:12px;text-align:center"><div style="font-size:22px">¶</div><div class="t-micro" style="margin-top:4px">PARA</div></div>
18
- <div style="padding:12px;text-align:center"><div style="font-size:22px">†</div><div class="t-micro" style="margin-top:4px">FN</div></div>
19
- <div style="padding:12px;text-align:center"><div style="font-size:22px">■</div><div class="t-micro" style="margin-top:4px">STOP</div></div>
20
- <div style="padding:12px;text-align:center"><div style="font-size:22px">●</div><div class="t-micro" style="margin-top:4px">ON</div></div>
21
- <div style="padding:12px;text-align:center"><div style="font-size:22px">○</div><div class="t-micro" style="margin-top:4px">IDLE</div></div>
22
- <div style="padding:12px;text-align:center"><div style="font-size:22px">▲</div><div class="t-micro" style="margin-top:4px">UP</div></div>
23
- <div style="padding:12px;text-align:center"><div style="font-size:22px">//</div><div class="t-micro" style="margin-top:4px">CODE</div></div>
24
- <div style="padding:12px;text-align:center"><div style="font-size:22px">##</div><div class="t-micro" style="margin-top:4px">TAG</div></div>
25
- <div style="padding:12px;text-align:center"><div style="font-size:22px">—</div><div class="t-micro" style="margin-top:4px">DASH</div></div>
26
- <div style="padding:12px;text-align:center"><div style="font-size:22px">…</div><div class="t-micro" style="margin-top:4px">WAIT</div></div>
27
- </div>
28
- <div class="t-meta" style="margin-top:12px">no icon font. no svg slop. unicode does the job. lucide via cdn for anything these can't cover.</div>
16
+ <main class="glyph-grid preview-grid" aria-label="Unicode icon specimens">
17
+ <div class="glyph-cell"><div class="glyph-mark">→</div><div class="t-micro">LINK</div></div>
18
+ <div class="glyph-cell"><div class="glyph-mark">↗</div><div class="t-micro">EXT</div></div>
19
+ <div class="glyph-cell"><div class="glyph-mark">↳</div><div class="t-micro">REPLY</div></div>
20
+ <div class="glyph-cell"><div class="glyph-mark">·</div><div class="t-micro">SEP</div></div>
21
+ <div class="glyph-cell"><div class="glyph-mark">※</div><div class="t-micro">NOTE</div></div>
22
+ <div class="glyph-cell"><div class="glyph-mark">§</div><div class="t-micro">SECT</div></div>
23
+ <div class="glyph-cell"><div class="glyph-mark">¶</div><div class="t-micro">PARA</div></div>
24
+ <div class="glyph-cell"><div class="glyph-mark">†</div><div class="t-micro">FN</div></div>
25
+ <div class="glyph-cell"><div class="glyph-mark">■</div><div class="t-micro">STOP</div></div>
26
+ <div class="glyph-cell"><div class="glyph-mark">●</div><div class="t-micro">ON</div></div>
27
+ <div class="glyph-cell"><div class="glyph-mark">○</div><div class="t-micro">IDLE</div></div>
28
+ <div class="glyph-cell"><div class="glyph-mark">▲</div><div class="t-micro">UP</div></div>
29
+ <div class="glyph-cell"><div class="glyph-mark">//</div><div class="t-micro">CODE</div></div>
30
+ <div class="glyph-cell"><div class="glyph-mark">##</div><div class="t-micro">TAG</div></div>
31
+ <div class="glyph-cell"><div class="glyph-mark">—</div><div class="t-micro">DASH</div></div>
32
+ <div class="glyph-cell"><div class="glyph-mark">…</div><div class="t-micro">WAIT</div></div>
33
+ </main>
34
+ <div class="t-meta glyph-note">no icon font. no svg slop. unicode does the job. lucide via cdn for anything these can't cover.</div>
29
35
  </body></html>
@@ -12,7 +12,9 @@ body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);
12
12
  </style><script defer src="./motion-default.js"></script>
13
13
  </head><body>
14
14
  <div class="dateline"><span>247420 · COMPONENTS · INDEX-ROW</span><span class="spread"></span><span>CORE PRIMITIVE</span></div>
15
- <div class="row-list ir-stack">
15
+
16
+ <h1 class="sr-only">Index row</h1>
17
+ <main aria-label="Index row specimens"><div class="row-list ir-stack">
16
18
  <div class="row">
17
19
  <div class="row-code">001</div>
18
20
  <div class="row-title">gm</div>
@@ -30,4 +32,5 @@ body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);
30
32
  </div>
31
33
  </div>
32
34
  <div class="t-meta ir-note">how we list projects. no dots. no colons. the hairline is the divider.</div>
35
+ </main>
33
36
  </body></html>
@@ -5,7 +5,9 @@
5
5
  <style>body{padding:var(--space-4);background:var(--panel-0);color:var(--panel-text);}</style><script defer src="./motion-default.js"></script>
6
6
  </head><body>
7
7
  <div class="dateline"><span>247420 · COMPONENTS · INPUTS</span><span class="spread"></span><span>HAIRLINE ONLY</span></div>
8
- <div style="margin-top:20px;max-width:480px;display:grid;gap:20px">
8
+
9
+ <h1 class="sr-only">Inputs</h1>
10
+ <main aria-label="Inputs specimens"><div style="margin-top:20px;max-width:480px;display:grid;gap:20px">
9
11
  <div>
10
12
  <div class="t-label">EMAIL</div>
11
13
  <input class="input" placeholder="you@example.tld" value="hi@247420.xyz" />
@@ -20,4 +22,5 @@
20
22
  </div>
21
23
  </div>
22
24
  <div class="t-meta" style="margin-top:18px">no box. no fill. bottom hairline thickens to 2px on focus.</div>
25
+ </main>
23
26
  </body></html>
@@ -39,7 +39,9 @@
39
39
  </style><script defer src="./motion-default.js"></script>
40
40
  </head><body>
41
41
  <div class="dateline"><span>247420 · MANIFESTO · 2018 -> FOREVER</span><span class="spread"></span><span>probably emerging</span></div>
42
- <div class="wrap">
42
+
43
+ <h1 class="sr-only">Manifesto</h1>
44
+ <main aria-label="Manifesto specimens"><div class="wrap">
43
45
  <div class="prin p1">
44
46
  <div class="num">01 //</div>
45
47
  <div class="ttl">code is communication</div>
@@ -66,4 +68,5 @@
66
68
  </div>
67
69
  </div>
68
70
  <p class="t-meta" style="margin-top:16px;font-style:italic">"an entrypoint is just a beginning. what matters is what you build once you're through the door." — b0gie, TechShaman</p>
71
+ </main>
69
72
  </body></html>
@@ -5,7 +5,9 @@
5
5
  <style>body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);}</style><script defer src="./motion-default.js"></script>
6
6
  </head><body>
7
7
  <div class="dateline"><span>247420 · RULES · HAIRLINES</span><span class="spread"></span><span>3 VARIANTS</span></div>
8
- <div style="margin-top:20px">
8
+
9
+ <h1 class="sr-only">Rules</h1>
10
+ <main aria-label="Rules specimens"><div style="margin-top:20px">
9
11
  <div class="t-label">SINGLE (default separator)</div>
10
12
  <hr class="rule" style="margin:6px 0 20px 0">
11
13
  <div class="t-label">DOUBLE (major section break)</div>
@@ -14,4 +16,5 @@
14
16
  <hr class="rule-dotted" style="margin:6px 0 0 0">
15
17
  </div>
16
18
  <p class="t-meta" style="margin-top:18px">no boxes. no cards. structure comes from rules.</p>
19
+ </main>
17
20
  </body></html>
@@ -2,18 +2,23 @@
2
2
  <html lang="en" data-theme="auto" class="ds-247420"><head><meta charset="utf-8">
3
3
  <title>spacing / 247420 preview</title><link rel="stylesheet" href="../colors_and_type.css">
4
4
  <link rel="stylesheet" href="../app-shell.css">
5
- <style>body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);}</style><script defer src="./motion-default.js"></script>
5
+ <style>body{padding:var(--space-3-5);background:var(--panel-0);color:var(--panel-text);}
6
+ .sp-scale{margin-top:var(--space-3);display:grid;gap:var(--space-1)}
7
+ .sp-step{display:flex;align-items:center;gap:var(--space-2-75)}
8
+ .sp-step .t-micro{width:120px;flex:none}
9
+ .sp-bar{height:var(--space-2-75);background:var(--panel-text)}</style><script defer src="./motion-default.js"></script>
6
10
  </head><body>
7
11
  <div class="dateline"><span>247420 · SPACING · 8PT</span><span class="spread"></span><span>9 STEPS</span></div>
8
- <div style="margin-top:14px;display:grid;gap:4px">
9
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-1 · 4</span><div style="height:12px;width:4px;background:var(--panel-text)"></div></div>
10
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-2 · 8</span><div style="height:12px;width:8px;background:var(--panel-text)"></div></div>
11
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-3 · 16</span><div style="height:12px;width:16px;background:var(--panel-text)"></div></div>
12
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-4 · 24</span><div style="height:12px;width:24px;background:var(--panel-text)"></div></div>
13
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-5 · 32</span><div style="height:12px;width:32px;background:var(--panel-text)"></div></div>
14
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-6 · 48</span><div style="height:12px;width:48px;background:var(--panel-text)"></div></div>
15
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-7 · 64</span><div style="height:12px;width:64px;background:var(--panel-text)"></div></div>
16
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-8 · 96</span><div style="height:12px;width:96px;background:var(--panel-text)"></div></div>
17
- <div style="display:flex;align-items:center;gap:12px"><span class="t-micro" style="width:120px">SPACE-9 · 128</span><div style="height:12px;width:128px;background:var(--panel-text)"></div></div>
18
- </div>
12
+ <h1 class="sr-only">Spacing scale</h1>
13
+ <main class="sp-scale" aria-label="Spacing scale specimens">
14
+ <div class="sp-step"><span class="t-micro">SPACE-1 · 4</span><div class="sp-bar" style="width:var(--space-1)"></div></div>
15
+ <div class="sp-step"><span class="t-micro">SPACE-2 · 8</span><div class="sp-bar" style="width:var(--space-2)"></div></div>
16
+ <div class="sp-step"><span class="t-micro">SPACE-3 · 16</span><div class="sp-bar" style="width:var(--space-3)"></div></div>
17
+ <div class="sp-step"><span class="t-micro">SPACE-4 · 24</span><div class="sp-bar" style="width:var(--space-4)"></div></div>
18
+ <div class="sp-step"><span class="t-micro">SPACE-5 · 32</span><div class="sp-bar" style="width:var(--space-5)"></div></div>
19
+ <div class="sp-step"><span class="t-micro">SPACE-6 · 48</span><div class="sp-bar" style="width:var(--space-6)"></div></div>
20
+ <div class="sp-step"><span class="t-micro">SPACE-7 · 64</span><div class="sp-bar" style="width:var(--space-7)"></div></div>
21
+ <div class="sp-step"><span class="t-micro">SPACE-8 · 96</span><div class="sp-bar" style="width:var(--space-8)"></div></div>
22
+ <div class="sp-step"><span class="t-micro">SPACE-9 · 128</span><div class="sp-bar" style="width:var(--space-9)"></div></div>
23
+ </main>
19
24
  </body></html>