css-is-awesome 1.4.0 → 1.5.0

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 (53) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +5 -3
  4. package/css-is-awesome.instructions.md +9 -4
  5. package/package.json +1 -1
  6. package/public/theme.css +210 -0
  7. package/public/themes/boilerplate/theme.css +10 -0
  8. package/public/themes/cupertino/theme.css +10 -0
  9. package/public/themes/cupertino-dark/theme.css +10 -0
  10. package/public/themes/cupertino-light/theme.css +10 -0
  11. package/public/themes/glass/theme.css +10 -0
  12. package/public/themes/glass-dark/theme.css +10 -0
  13. package/public/themes/glass-light/theme.css +10 -0
  14. package/public/themes/graphite/theme.css +10 -0
  15. package/public/themes/graphite-dark/theme.css +10 -0
  16. package/public/themes/graphite-light/theme.css +10 -0
  17. package/public/themes/press/theme.css +10 -0
  18. package/public/themes/press-dark/theme.css +10 -0
  19. package/public/themes/press-light/theme.css +10 -0
  20. package/public/themes/prism/theme.css +10 -0
  21. package/public/themes/prism-dark/theme.css +10 -0
  22. package/public/themes/prism-light/theme.css +10 -0
  23. package/public/themes/sketchbook/theme.css +10 -0
  24. package/public/themes/sketchbook-dark/theme.css +10 -0
  25. package/public/themes/terminal/theme.css +10 -0
  26. package/public/themes/terminal-dark/theme.css +10 -0
  27. package/public/themes/terminal-light/theme.css +10 -0
  28. package/scss/components/_navigation.scss +83 -0
  29. package/scss/recipes/bottom-nav.md +184 -0
  30. package/scss/recipes/combobox.md +9 -0
  31. package/scss/recipes/dialog.md +21 -0
  32. package/scss/recipes/mobile-nav.md +3 -0
  33. package/scss/themes/boilerplate.scss +11 -0
  34. package/scss/themes/cupertino-dark.scss +11 -0
  35. package/scss/themes/cupertino-light.scss +11 -0
  36. package/scss/themes/cupertino.scss +11 -0
  37. package/scss/themes/glass-dark.scss +11 -0
  38. package/scss/themes/glass-light.scss +11 -0
  39. package/scss/themes/glass.scss +11 -0
  40. package/scss/themes/graphite-dark.scss +11 -0
  41. package/scss/themes/graphite-light.scss +11 -0
  42. package/scss/themes/graphite.scss +11 -0
  43. package/scss/themes/press-dark.scss +11 -0
  44. package/scss/themes/press-light.scss +11 -0
  45. package/scss/themes/press.scss +11 -0
  46. package/scss/themes/prism-dark.scss +11 -0
  47. package/scss/themes/prism-light.scss +11 -0
  48. package/scss/themes/prism.scss +11 -0
  49. package/scss/themes/sketchbook-dark.scss +11 -0
  50. package/scss/themes/sketchbook.scss +11 -0
  51. package/scss/themes/terminal-dark.scss +11 -0
  52. package/scss/themes/terminal-light.scss +11 -0
  53. package/scss/themes/terminal.scss +11 -0
package/AGENTS.md CHANGED
@@ -25,7 +25,7 @@ When asked to add a UI element, follow this order:
25
25
  3. **Never invent `cia-*` class names.** That prefix is library-owned. Consumer code uses its own naming.
26
26
  4. **All values come from tokens.** Never hardcode `#3A5FCD`, `1rem`, `8px`. Use `cia.color(primary)`, `cia.space(4)`, `cia.radius(md)`.
27
27
  5. **No BEM.** No `__element` / `--modifier` chains. `cia-` is a single-class namespace prefix, not BEM.
28
- 6. **No JavaScript.** Cia ships zero JS in the npm package. The 6 interactive components (accordion, modal, tooltip, dropdown, tabs, copy-button) use native HTML primitives — `<details name>`, `<dialog>`, `[popover]`, radio + `:has()`. **This rule binds cia, not you.** If you're *consuming* cia (building an app/component library on top of it), write JavaScript/framework components freely — React, SVG charts, interactivity, all of it — and use cia purely for styling (mixins + tokens). Compose the mixins to build any visual you want; you are not limited to cia's pre-made component mixins.
28
+ 6. **No JavaScript.** Cia ships zero JS in the npm package. The 6 interactive components (accordion, modal, tooltip, dropdown, tabs, copy-button) use native HTML primitives — `<details name>`, `<dialog>`, `[popover]`, radio + `:has()`. Mobile navigation follows the same doctrine: the `hamburger` / `drawer` / `sheet` / `dock` mixin family rides `[popover]` + CSS Grid — see the `mobile-nav` recipe (hamburger + drawer) and the `bottom-nav` recipe (dock + sheets). **This rule binds cia, not you.** If you're *consuming* cia (building an app/component library on top of it), write JavaScript/framework components freely — React, SVG charts, interactivity, all of it — and use cia purely for styling (mixins + tokens). Compose the mixins to build any visual you want; you are not limited to cia's pre-made component mixins.
29
29
  7. **Pages stack by named grid areas — the layout mixins own the shell.** Every page's structure is declared once as `grid-template-areas` (`"navbar" "hero" … "footer"`), and each section claims its slot with `grid-area`. Never hand-write that: use `cia.page-layout(default | sidebar-left | sidebar-right | holy-grail)` for a full viewport shell (100dvh, sticky footer, auto mobile collapse), `cia.layout((sidebar content toc), $tracks: …)` for custom rows of regions, and `cia.page-header` / `cia.page-main` / `cia.page-footer` / `cia.area(name)` for the children. Named areas are the single source of truth for stacking — mobile is just a different `grid-template-areas`, not a pile of margin overrides. Baseline since 2020.
30
30
  8. **Style semantic state off ARIA, not a parallel `data-*`.** When a state has an ARIA source of truth, hook your styles to *that* attribute: `[aria-selected="true"]`, `[aria-expanded="true"]`, `[aria-invalid="true"]`, `:disabled, [aria-disabled="true"]`, `[aria-pressed="true"]`, `[aria-checked="true"]`, `[aria-current]`, `[role="tab"]`. Then the state can't be styled without setting the ARIA a screen reader needs — **accessible-by-construction**, one source of truth for looks + a11y. Reserve `data-*` for **cosmetic-only** variants (`data-size`, `data-variant`, `data-color`) that carry no ARIA meaning. cia's own components already do this where native HTML doesn't cover it (`[aria-current="page"]`, `[aria-selected="true"]`, `[role="option"]`).
31
31
 
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ # [1.5.0](https://github.com/Jerry2d3d/css-is-awesome/compare/v1.4.0...v1.5.0) (2026-09-04)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **themes:** spacing aliases in all 24 themes; picker highlight contained ([6d02e9f](https://github.com/Jerry2d3d/css-is-awesome/commit/6d02e9f8d9176ebc1401639e22b23706a3d652fa))
7
+
8
+
9
+ ### Features
10
+
11
+ * **mobile:** the mobile toolkit - dock + sheet mixins, bottom-nav recipe, /docs/mobile ([a983bee](https://github.com/Jerry2d3d/css-is-awesome/commit/a983bee5b9e2b16e38b2fb26e316e7811359245f)), closes [#6](https://github.com/Jerry2d3d/css-is-awesome/issues/6)
12
+
1
13
  # [1.4.0](https://github.com/Jerry2d3d/css-is-awesome/compare/v1.3.1...v1.4.0) (2026-09-04)
2
14
 
3
15
 
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  **Docs:** [jerry2d3d.github.io/css-is-awesome](https://jerry2d3d.github.io/css-is-awesome/) · **Install:** `npm install css-is-awesome`
10
10
 
11
- > **Shipped in 1.0.0:** a **recipes book** for building any component in any framework using cia mixins — `dialog`, `combobox` and `print-to-pdf` today, with `datepicker`, `data-table` and `command-palette` queued. AI agents read recipes via MCP and generate components in your stack; humans read them at [`/docs/recipes`](https://jerry2d3d.github.io/css-is-awesome/docs/recipes/).
11
+ > **Shipped in 1.0.0:** a **recipes book** for building any component in any framework using cia mixins — five recipes today (`dialog`, `combobox`, `print-to-pdf`, `mobile-nav`, `bottom-nav`), with `datepicker`, `data-table` and `command-palette` queued. AI agents read recipes via MCP and generate components in your stack; humans read them at [`/docs/recipes`](https://jerry2d3d.github.io/css-is-awesome/docs/recipes/).
12
12
 
13
13
  ## For AI agents — start here
14
14
 
@@ -59,7 +59,7 @@ npm install -D sass
59
59
  <link rel="stylesheet" href="/cia/themes/boilerplate/theme.css">
60
60
  ```
61
61
 
62
- Author your own class names; the mixin handles the styling. Mixins for buttons, forms, layout, typography, color, motion, plus the six zero-JS components: `accordion`, `modal`, `tooltip`, `dropdown`, `tabs`, `copy-button` — plus print-to-PDF via a pure-CSS `@media print` layer. Full reference at [`/docs/mixins`](https://jerry2d3d.github.io/css-is-awesome/docs/mixins/).
62
+ Author your own class names; the mixin handles the styling. Mixins for buttons, forms, layout, typography, color, motion, plus the six zero-JS components: `accordion`, `modal`, `tooltip`, `dropdown`, `tabs`, `copy-button` — plus the mobile navigation family (`hamburger`, `drawer`, `sheet`, `dock`) and print-to-PDF via a pure-CSS `@media print` layer. Full reference at [`/docs/mixins`](https://jerry2d3d.github.io/css-is-awesome/docs/mixins/).
63
63
 
64
64
  **Two imports, two jobs.** Emit the tokens once from your root/global stylesheet (`@use 'css-is-awesome';` or `<link>` a theme file), then import the **zero-emit authoring barrel** in each component stylesheet:
65
65
 
@@ -202,7 +202,9 @@ Missing font files don't error, so a silent tofu box is the failure mode. If you
202
202
 
203
203
  cia ships **no component library** — deliberately. Interactive patterns arrive as *recipes*: portable markdown files at [`scss/recipes/`](./scss/recipes/) that give you the correct HTML, the `cia.X` mixin calls to style it, and an a11y checklist graded against WCAG 2.2 AA. Copy the pattern into your own framework; you own the component, cia owns the styling and the accessibility homework.
204
204
 
205
- **Shipped:** `dialog`, `combobox`, `print-to-pdf`. Queued next: `datepicker`, `data-table`, `command-palette`.
205
+ **Shipped:** `dialog`, `combobox`, `print-to-pdf`, `mobile-nav`, `bottom-nav`. Queued next: `datepicker`, `data-table`, `command-palette`.
206
+
207
+ **Mobile navigation is system API, not an exercise for the reader.** Four mixins — `cia.hamburger`, `cia.drawer`, `cia.sheet`, `cia.dock` — cover both phone layouts: the **flex layout** (one fluid nav/main/footer shell that reshapes with the screen, hamburger opening a slide-in drawer — recipe [`mobile-nav`](./scss/recipes/mobile-nav.md)) and the **app layout** (a fixed bottom dock whose slots open slide-up sheets — recipe [`bottom-nav`](./scss/recipes/bottom-nav.md)). Zero JavaScript: everything rides CSS Grid and the native Popover API — the browser owns open state, `aria-expanded`, Esc and light dismiss. The docs site dogfoods the app layout on phones.
206
208
 
207
209
  Humans read them at [`/docs/recipes`](https://jerry2d3d.github.io/css-is-awesome/docs/recipes/); AI agents pull them over MCP with `list_recipes` / `get_recipe`.
208
210
 
@@ -467,8 +467,8 @@ Components call `cia.space(4)` → `var(--space-4)`. The t-shirt names previousl
467
467
  ## Recipes — build a component without a component library
468
468
 
469
469
  cia ships **no component library on purpose**. When you need an interactive
470
- pattern (dialog, combobox, print-to-PDF), read the matching *recipe* instead of
471
- inventing markup or reaching for a dependency.
470
+ pattern (dialog, combobox, print-to-PDF, mobile navigation), read the matching
471
+ *recipe* instead of inventing markup or reaching for a dependency.
472
472
 
473
473
  A recipe is a markdown file at `scss/recipes/<name>.md` carrying:
474
474
 
@@ -477,8 +477,13 @@ A recipe is a markdown file at `scss/recipes/<name>.md` carrying:
477
477
  - an a11y checklist graded against WCAG 2.2 AA
478
478
  - framework-neutral notes so it ports to React / Vue / Svelte / vanilla
479
479
 
480
- **Shipped today:** `dialog`, `combobox`, `print-to-pdf`. Queued next:
481
- `datepicker`, `data-table`, `command-palette`.
480
+ **Shipped today:** `dialog`, `combobox`, `print-to-pdf`, `mobile-nav`,
481
+ `bottom-nav`. Queued next: `datepicker`, `data-table`, `command-palette`.
482
+
483
+ The two mobile recipes ride the `hamburger` / `drawer` / `sheet` / `dock`
484
+ mixin family — zero JS on the native Popover API. `mobile-nav` is the flex
485
+ layout (fluid shell + hamburger drawer); `bottom-nav` is the app layout
486
+ (bottom dock + slide-up sheets).
482
487
 
483
488
  How to reach them:
484
489
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "css-is-awesome",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "A token-driven SCSS design system with light/dark theming, semantic color tokens, and a 800+ LOC mixin API.",
5
5
  "homepage": "https://github.com/Jerry2d3d/css-is-awesome#readme",
6
6
  "bugs": {
package/public/theme.css CHANGED
@@ -163,6 +163,16 @@
163
163
  --space-7: 3rem; /* major gap */
164
164
  --space-8: 4rem; /* page section */
165
165
  --space-9: 6rem; /* hero rhythm */
166
+ /* T-shirt aliases - var() references into this theme's numbered scale,
167
+ so re-tuning a numbered step re-tunes its alias automatically. */
168
+ --space-xs: var(--space-1);
169
+ --space-sm: var(--space-2);
170
+ --space-md: var(--space-4);
171
+ --space-lg: var(--space-5);
172
+ --space-xl: var(--space-6);
173
+ --space-2xl: var(--space-7);
174
+ --space-3xl: var(--space-8);
175
+ --space-4xl: var(--space-9);
166
176
  --radius-sm: var(--r-sm);
167
177
  --radius-md: var(--r-md);
168
178
  --radius-lg: var(--r-lg);
@@ -659,6 +669,16 @@
659
669
  --space-7: 3rem; /* major gap */
660
670
  --space-8: 4rem; /* page section */
661
671
  --space-9: 6rem; /* hero rhythm */
672
+ /* T-shirt aliases - var() references into this theme's numbered scale,
673
+ so re-tuning a numbered step re-tunes its alias automatically. */
674
+ --space-xs: var(--space-1);
675
+ --space-sm: var(--space-2);
676
+ --space-md: var(--space-4);
677
+ --space-lg: var(--space-5);
678
+ --space-xl: var(--space-6);
679
+ --space-2xl: var(--space-7);
680
+ --space-3xl: var(--space-8);
681
+ --space-4xl: var(--space-9);
662
682
  --radius-sm: var(--r-sm);
663
683
  --radius-md: var(--r-md);
664
684
  --radius-lg: var(--r-lg);
@@ -834,6 +854,16 @@
834
854
  --space-7: 3rem; /* major gap */
835
855
  --space-8: 4rem; /* page section */
836
856
  --space-9: 6rem; /* hero rhythm */
857
+ /* T-shirt aliases - var() references into this theme's numbered scale,
858
+ so re-tuning a numbered step re-tunes its alias automatically. */
859
+ --space-xs: var(--space-1);
860
+ --space-sm: var(--space-2);
861
+ --space-md: var(--space-4);
862
+ --space-lg: var(--space-5);
863
+ --space-xl: var(--space-6);
864
+ --space-2xl: var(--space-7);
865
+ --space-3xl: var(--space-8);
866
+ --space-4xl: var(--space-9);
837
867
  /* Radius alias */
838
868
  --radius-sm: var(--r-sm);
839
869
  --radius-md: var(--r-md);
@@ -1021,6 +1051,16 @@
1021
1051
  --space-7: 3rem; /* major gap */
1022
1052
  --space-8: 4rem; /* page section */
1023
1053
  --space-9: 6rem; /* hero rhythm */
1054
+ /* T-shirt aliases - var() references into this theme's numbered scale,
1055
+ so re-tuning a numbered step re-tunes its alias automatically. */
1056
+ --space-xs: var(--space-1);
1057
+ --space-sm: var(--space-2);
1058
+ --space-md: var(--space-4);
1059
+ --space-lg: var(--space-5);
1060
+ --space-xl: var(--space-6);
1061
+ --space-2xl: var(--space-7);
1062
+ --space-3xl: var(--space-8);
1063
+ --space-4xl: var(--space-9);
1024
1064
  /* Radius alias — mirrors --r-* with standard names so
1025
1065
  `m.radius(size)` in the library finds --radius-<size>. */
1026
1066
  --radius-sm: var(--r-sm);
@@ -1211,6 +1251,16 @@
1211
1251
  --space-7: 3rem; /* major gap */
1212
1252
  --space-8: 4rem; /* page section */
1213
1253
  --space-9: 6rem; /* hero rhythm */
1254
+ /* T-shirt aliases - var() references into this theme's numbered scale,
1255
+ so re-tuning a numbered step re-tunes its alias automatically. */
1256
+ --space-xs: var(--space-1);
1257
+ --space-sm: var(--space-2);
1258
+ --space-md: var(--space-4);
1259
+ --space-lg: var(--space-5);
1260
+ --space-xl: var(--space-6);
1261
+ --space-2xl: var(--space-7);
1262
+ --space-3xl: var(--space-8);
1263
+ --space-4xl: var(--space-9);
1214
1264
  --radius-sm: var(--r-sm);
1215
1265
  --radius-md: var(--r-md);
1216
1266
  --radius-lg: var(--r-lg);
@@ -1388,6 +1438,16 @@
1388
1438
  --space-7: 3rem; /* major gap */
1389
1439
  --space-8: 4rem; /* page section */
1390
1440
  --space-9: 6rem; /* hero rhythm */
1441
+ /* T-shirt aliases - var() references into this theme's numbered scale,
1442
+ so re-tuning a numbered step re-tunes its alias automatically. */
1443
+ --space-xs: var(--space-1);
1444
+ --space-sm: var(--space-2);
1445
+ --space-md: var(--space-4);
1446
+ --space-lg: var(--space-5);
1447
+ --space-xl: var(--space-6);
1448
+ --space-2xl: var(--space-7);
1449
+ --space-3xl: var(--space-8);
1450
+ --space-4xl: var(--space-9);
1391
1451
  /* Radius alias */
1392
1452
  --radius-sm: var(--r-sm);
1393
1453
  --radius-md: var(--r-md);
@@ -1578,6 +1638,16 @@
1578
1638
  --space-7: 3rem; /* major gap */
1579
1639
  --space-8: 4rem; /* page section */
1580
1640
  --space-9: 6rem; /* hero rhythm */
1641
+ /* T-shirt aliases - var() references into this theme's numbered scale,
1642
+ so re-tuning a numbered step re-tunes its alias automatically. */
1643
+ --space-xs: var(--space-1);
1644
+ --space-sm: var(--space-2);
1645
+ --space-md: var(--space-4);
1646
+ --space-lg: var(--space-5);
1647
+ --space-xl: var(--space-6);
1648
+ --space-2xl: var(--space-7);
1649
+ --space-3xl: var(--space-8);
1650
+ --space-4xl: var(--space-9);
1581
1651
  /* Radius alias — mirrors --r-* with standard names so
1582
1652
  `m.radius(size)` in the library finds --radius-<size>. */
1583
1653
  --radius-sm: var(--r-sm);
@@ -1735,6 +1805,16 @@
1735
1805
  --space-7: 3rem; /* major gap */
1736
1806
  --space-8: 4rem; /* page section */
1737
1807
  --space-9: 6rem; /* hero rhythm */
1808
+ /* T-shirt aliases - var() references into this theme's numbered scale,
1809
+ so re-tuning a numbered step re-tunes its alias automatically. */
1810
+ --space-xs: var(--space-1);
1811
+ --space-sm: var(--space-2);
1812
+ --space-md: var(--space-4);
1813
+ --space-lg: var(--space-5);
1814
+ --space-xl: var(--space-6);
1815
+ --space-2xl: var(--space-7);
1816
+ --space-3xl: var(--space-8);
1817
+ --space-4xl: var(--space-9);
1738
1818
  --radius-sm: var(--r-sm);
1739
1819
  --radius-md: var(--r-md);
1740
1820
  --radius-lg: var(--r-lg);
@@ -1912,6 +1992,16 @@
1912
1992
  --space-7: 3rem; /* major gap */
1913
1993
  --space-8: 4rem; /* page section */
1914
1994
  --space-9: 6rem; /* hero rhythm */
1995
+ /* T-shirt aliases - var() references into this theme's numbered scale,
1996
+ so re-tuning a numbered step re-tunes its alias automatically. */
1997
+ --space-xs: var(--space-1);
1998
+ --space-sm: var(--space-2);
1999
+ --space-md: var(--space-4);
2000
+ --space-lg: var(--space-5);
2001
+ --space-xl: var(--space-6);
2002
+ --space-2xl: var(--space-7);
2003
+ --space-3xl: var(--space-8);
2004
+ --space-4xl: var(--space-9);
1915
2005
  /* Radius alias — mirrors --r-* with standard names so
1916
2006
  `m.radius(size)` in the library finds --radius-<size>. */
1917
2007
  --radius-sm: var(--r-sm);
@@ -2084,6 +2174,16 @@
2084
2174
  --space-7: 3rem; /* major gap */
2085
2175
  --space-8: 4rem; /* page section */
2086
2176
  --space-9: 6rem; /* hero rhythm */
2177
+ /* T-shirt aliases - var() references into this theme's numbered scale,
2178
+ so re-tuning a numbered step re-tunes its alias automatically. */
2179
+ --space-xs: var(--space-1);
2180
+ --space-sm: var(--space-2);
2181
+ --space-md: var(--space-4);
2182
+ --space-lg: var(--space-5);
2183
+ --space-xl: var(--space-6);
2184
+ --space-2xl: var(--space-7);
2185
+ --space-3xl: var(--space-8);
2186
+ --space-4xl: var(--space-9);
2087
2187
  /* Radius alias */
2088
2188
  --radius-sm: var(--r-sm);
2089
2189
  --radius-md: var(--r-md);
@@ -2265,6 +2365,16 @@
2265
2365
  --space-7: 3rem; /* major gap */
2266
2366
  --space-8: 4rem; /* page section */
2267
2367
  --space-9: 6rem; /* hero rhythm */
2368
+ /* T-shirt aliases - var() references into this theme's numbered scale,
2369
+ so re-tuning a numbered step re-tunes its alias automatically. */
2370
+ --space-xs: var(--space-1);
2371
+ --space-sm: var(--space-2);
2372
+ --space-md: var(--space-4);
2373
+ --space-lg: var(--space-5);
2374
+ --space-xl: var(--space-6);
2375
+ --space-2xl: var(--space-7);
2376
+ --space-3xl: var(--space-8);
2377
+ --space-4xl: var(--space-9);
2268
2378
  --radius-sm: var(--r-sm);
2269
2379
  --radius-md: var(--r-md);
2270
2380
  --radius-lg: var(--r-lg);
@@ -2442,6 +2552,16 @@
2442
2552
  --space-7: 3rem; /* major gap */
2443
2553
  --space-8: 4rem; /* page section */
2444
2554
  --space-9: 6rem; /* hero rhythm */
2555
+ /* T-shirt aliases - var() references into this theme's numbered scale,
2556
+ so re-tuning a numbered step re-tunes its alias automatically. */
2557
+ --space-xs: var(--space-1);
2558
+ --space-sm: var(--space-2);
2559
+ --space-md: var(--space-4);
2560
+ --space-lg: var(--space-5);
2561
+ --space-xl: var(--space-6);
2562
+ --space-2xl: var(--space-7);
2563
+ --space-3xl: var(--space-8);
2564
+ --space-4xl: var(--space-9);
2445
2565
  /* Radius alias — Press is editorial, xl stays tight (6px) */
2446
2566
  --radius-sm: var(--r-sm);
2447
2567
  --radius-md: var(--r-md);
@@ -2633,6 +2753,16 @@
2633
2753
  --space-7: 3rem; /* major gap */
2634
2754
  --space-8: 4rem; /* page section */
2635
2755
  --space-9: 6rem; /* hero rhythm */
2756
+ /* T-shirt aliases - var() references into this theme's numbered scale,
2757
+ so re-tuning a numbered step re-tunes its alias automatically. */
2758
+ --space-xs: var(--space-1);
2759
+ --space-sm: var(--space-2);
2760
+ --space-md: var(--space-4);
2761
+ --space-lg: var(--space-5);
2762
+ --space-xl: var(--space-6);
2763
+ --space-2xl: var(--space-7);
2764
+ --space-3xl: var(--space-8);
2765
+ --space-4xl: var(--space-9);
2636
2766
  /* Radius alias — mirrors --r-* with standard names so
2637
2767
  `m.radius(size)` in the library finds --radius-<size>.
2638
2768
  Press is editorial and angular: xl stays tight (4px). */
@@ -2803,6 +2933,16 @@
2803
2933
  --space-7: 3rem; /* major gap */
2804
2934
  --space-8: 4rem; /* page section */
2805
2935
  --space-9: 6rem; /* hero rhythm */
2936
+ /* T-shirt aliases - var() references into this theme's numbered scale,
2937
+ so re-tuning a numbered step re-tunes its alias automatically. */
2938
+ --space-xs: var(--space-1);
2939
+ --space-sm: var(--space-2);
2940
+ --space-md: var(--space-4);
2941
+ --space-lg: var(--space-5);
2942
+ --space-xl: var(--space-6);
2943
+ --space-2xl: var(--space-7);
2944
+ --space-3xl: var(--space-8);
2945
+ --space-4xl: var(--space-9);
2806
2946
  --radius-sm: var(--r-sm);
2807
2947
  --radius-md: var(--r-md);
2808
2948
  --radius-lg: var(--r-lg);
@@ -2972,6 +3112,16 @@
2972
3112
  --space-7: 3rem; /* major gap */
2973
3113
  --space-8: 4rem; /* page section */
2974
3114
  --space-9: 6rem; /* hero rhythm */
3115
+ /* T-shirt aliases - var() references into this theme's numbered scale,
3116
+ so re-tuning a numbered step re-tunes its alias automatically. */
3117
+ --space-xs: var(--space-1);
3118
+ --space-sm: var(--space-2);
3119
+ --space-md: var(--space-4);
3120
+ --space-lg: var(--space-5);
3121
+ --space-xl: var(--space-6);
3122
+ --space-2xl: var(--space-7);
3123
+ --space-3xl: var(--space-8);
3124
+ --space-4xl: var(--space-9);
2975
3125
  /* Radius alias */
2976
3126
  --radius-sm: var(--r-sm);
2977
3127
  --radius-md: var(--r-md);
@@ -3144,6 +3294,16 @@
3144
3294
  --space-7: 3rem; /* major gap */
3145
3295
  --space-8: 4rem; /* page section */
3146
3296
  --space-9: 6rem; /* hero rhythm */
3297
+ /* T-shirt aliases - var() references into this theme's numbered scale,
3298
+ so re-tuning a numbered step re-tunes its alias automatically. */
3299
+ --space-xs: var(--space-1);
3300
+ --space-sm: var(--space-2);
3301
+ --space-md: var(--space-4);
3302
+ --space-lg: var(--space-5);
3303
+ --space-xl: var(--space-6);
3304
+ --space-2xl: var(--space-7);
3305
+ --space-3xl: var(--space-8);
3306
+ --space-4xl: var(--space-9);
3147
3307
  /* Radius alias */
3148
3308
  --radius-sm: var(--r-sm);
3149
3309
  --radius-md: var(--r-md);
@@ -3304,6 +3464,16 @@
3304
3464
  --space-7: 3rem; /* major gap */
3305
3465
  --space-8: 4rem; /* page section */
3306
3466
  --space-9: 6rem; /* hero rhythm */
3467
+ /* T-shirt aliases - var() references into this theme's numbered scale,
3468
+ so re-tuning a numbered step re-tunes its alias automatically. */
3469
+ --space-xs: var(--space-1);
3470
+ --space-sm: var(--space-2);
3471
+ --space-md: var(--space-4);
3472
+ --space-lg: var(--space-5);
3473
+ --space-xl: var(--space-6);
3474
+ --space-2xl: var(--space-7);
3475
+ --space-3xl: var(--space-8);
3476
+ --space-4xl: var(--space-9);
3307
3477
  --radius-sm: var(--r-sm);
3308
3478
  --radius-md: var(--r-md);
3309
3479
  --radius-lg: var(--r-lg);
@@ -3472,6 +3642,16 @@
3472
3642
  --space-7: 3rem; /* major gap */
3473
3643
  --space-8: 4rem; /* page section */
3474
3644
  --space-9: 6rem; /* hero rhythm */
3645
+ /* T-shirt aliases - var() references into this theme's numbered scale,
3646
+ so re-tuning a numbered step re-tunes its alias automatically. */
3647
+ --space-xs: var(--space-1);
3648
+ --space-sm: var(--space-2);
3649
+ --space-md: var(--space-4);
3650
+ --space-lg: var(--space-5);
3651
+ --space-xl: var(--space-6);
3652
+ --space-2xl: var(--space-7);
3653
+ --space-3xl: var(--space-8);
3654
+ --space-4xl: var(--space-9);
3475
3655
  /* Radius alias */
3476
3656
  --radius-sm: var(--r-sm);
3477
3657
  --radius-md: var(--r-md);
@@ -3813,6 +3993,16 @@
3813
3993
  --space-7: 3rem; /* major gap */
3814
3994
  --space-8: 4rem; /* page section */
3815
3995
  --space-9: 6rem; /* hero rhythm */
3996
+ /* T-shirt aliases - var() references into this theme's numbered scale,
3997
+ so re-tuning a numbered step re-tunes its alias automatically. */
3998
+ --space-xs: var(--space-1);
3999
+ --space-sm: var(--space-2);
4000
+ --space-md: var(--space-4);
4001
+ --space-lg: var(--space-5);
4002
+ --space-xl: var(--space-6);
4003
+ --space-2xl: var(--space-7);
4004
+ --space-3xl: var(--space-8);
4005
+ --space-4xl: var(--space-9);
3816
4006
  --radius-sm: 0;
3817
4007
  --radius-md: 0;
3818
4008
  --radius-lg: 0;
@@ -3996,6 +4186,16 @@
3996
4186
  --space-7: 3rem; /* major gap */
3997
4187
  --space-8: 4rem; /* page section */
3998
4188
  --space-9: 6rem; /* hero rhythm */
4189
+ /* T-shirt aliases - var() references into this theme's numbered scale,
4190
+ so re-tuning a numbered step re-tunes its alias automatically. */
4191
+ --space-xs: var(--space-1);
4192
+ --space-sm: var(--space-2);
4193
+ --space-md: var(--space-4);
4194
+ --space-lg: var(--space-5);
4195
+ --space-xl: var(--space-6);
4196
+ --space-2xl: var(--space-7);
4197
+ --space-3xl: var(--space-8);
4198
+ --space-4xl: var(--space-9);
3999
4199
  /* Radius alias — CRT has hard pixel corners, so every slot is 0 */
4000
4200
  --radius-sm: 0;
4001
4201
  --radius-md: 0;
@@ -4161,6 +4361,16 @@
4161
4361
  --space-7: 3rem; /* major gap */
4162
4362
  --space-8: 4rem; /* page section */
4163
4363
  --space-9: 6rem; /* hero rhythm */
4364
+ /* T-shirt aliases - var() references into this theme's numbered scale,
4365
+ so re-tuning a numbered step re-tunes its alias automatically. */
4366
+ --space-xs: var(--space-1);
4367
+ --space-sm: var(--space-2);
4368
+ --space-md: var(--space-4);
4369
+ --space-lg: var(--space-5);
4370
+ --space-xl: var(--space-6);
4371
+ --space-2xl: var(--space-7);
4372
+ --space-3xl: var(--space-8);
4373
+ --space-4xl: var(--space-9);
4164
4374
  --radius-sm: 0;
4165
4375
  --radius-md: 0;
4166
4376
  --radius-lg: 0;
@@ -136,6 +136,16 @@
136
136
  --space-7: 3rem; /* major gap */
137
137
  --space-8: 4rem; /* page section */
138
138
  --space-9: 6rem; /* hero rhythm */
139
+ /* T-shirt aliases - var() references into this theme's numbered scale,
140
+ so re-tuning a numbered step re-tunes its alias automatically. */
141
+ --space-xs: var(--space-1);
142
+ --space-sm: var(--space-2);
143
+ --space-md: var(--space-4);
144
+ --space-lg: var(--space-5);
145
+ --space-xl: var(--space-6);
146
+ --space-2xl: var(--space-7);
147
+ --space-3xl: var(--space-8);
148
+ --space-4xl: var(--space-9);
139
149
  --radius-sm: var(--r-sm);
140
150
  --radius-md: var(--r-md);
141
151
  --radius-lg: var(--r-lg);
@@ -140,6 +140,16 @@
140
140
  --space-7: 3rem; /* major gap */
141
141
  --space-8: 4rem; /* page section */
142
142
  --space-9: 6rem; /* hero rhythm */
143
+ /* T-shirt aliases - var() references into this theme's numbered scale,
144
+ so re-tuning a numbered step re-tunes its alias automatically. */
145
+ --space-xs: var(--space-1);
146
+ --space-sm: var(--space-2);
147
+ --space-md: var(--space-4);
148
+ --space-lg: var(--space-5);
149
+ --space-xl: var(--space-6);
150
+ --space-2xl: var(--space-7);
151
+ --space-3xl: var(--space-8);
152
+ --space-4xl: var(--space-9);
143
153
  --radius-sm: var(--r-sm);
144
154
  --radius-md: var(--r-md);
145
155
  --radius-lg: var(--r-lg);
@@ -170,6 +170,16 @@
170
170
  --space-7: 3rem; /* major gap */
171
171
  --space-8: 4rem; /* page section */
172
172
  --space-9: 6rem; /* hero rhythm */
173
+ /* T-shirt aliases - var() references into this theme's numbered scale,
174
+ so re-tuning a numbered step re-tunes its alias automatically. */
175
+ --space-xs: var(--space-1);
176
+ --space-sm: var(--space-2);
177
+ --space-md: var(--space-4);
178
+ --space-lg: var(--space-5);
179
+ --space-xl: var(--space-6);
180
+ --space-2xl: var(--space-7);
181
+ --space-3xl: var(--space-8);
182
+ --space-4xl: var(--space-9);
173
183
  /* Radius alias */
174
184
  --radius-sm: var(--r-sm);
175
185
  --radius-md: var(--r-md);
@@ -188,6 +188,16 @@
188
188
  --space-7: 3rem; /* major gap */
189
189
  --space-8: 4rem; /* page section */
190
190
  --space-9: 6rem; /* hero rhythm */
191
+ /* T-shirt aliases - var() references into this theme's numbered scale,
192
+ so re-tuning a numbered step re-tunes its alias automatically. */
193
+ --space-xs: var(--space-1);
194
+ --space-sm: var(--space-2);
195
+ --space-md: var(--space-4);
196
+ --space-lg: var(--space-5);
197
+ --space-xl: var(--space-6);
198
+ --space-2xl: var(--space-7);
199
+ --space-3xl: var(--space-8);
200
+ --space-4xl: var(--space-9);
191
201
  /* Radius alias — mirrors --r-* with standard names so
192
202
  `m.radius(size)` in the library finds --radius-<size>. */
193
203
  --radius-sm: var(--r-sm);
@@ -172,6 +172,16 @@
172
172
  --space-7: 3rem; /* major gap */
173
173
  --space-8: 4rem; /* page section */
174
174
  --space-9: 6rem; /* hero rhythm */
175
+ /* T-shirt aliases - var() references into this theme's numbered scale,
176
+ so re-tuning a numbered step re-tunes its alias automatically. */
177
+ --space-xs: var(--space-1);
178
+ --space-sm: var(--space-2);
179
+ --space-md: var(--space-4);
180
+ --space-lg: var(--space-5);
181
+ --space-xl: var(--space-6);
182
+ --space-2xl: var(--space-7);
183
+ --space-3xl: var(--space-8);
184
+ --space-4xl: var(--space-9);
175
185
  --radius-sm: var(--r-sm);
176
186
  --radius-md: var(--r-md);
177
187
  --radius-lg: var(--r-lg);
@@ -180,6 +180,16 @@
180
180
  --space-7: 3rem; /* major gap */
181
181
  --space-8: 4rem; /* page section */
182
182
  --space-9: 6rem; /* hero rhythm */
183
+ /* T-shirt aliases - var() references into this theme's numbered scale,
184
+ so re-tuning a numbered step re-tunes its alias automatically. */
185
+ --space-xs: var(--space-1);
186
+ --space-sm: var(--space-2);
187
+ --space-md: var(--space-4);
188
+ --space-lg: var(--space-5);
189
+ --space-xl: var(--space-6);
190
+ --space-2xl: var(--space-7);
191
+ --space-3xl: var(--space-8);
192
+ --space-4xl: var(--space-9);
183
193
  /* Radius alias */
184
194
  --radius-sm: var(--r-sm);
185
195
  --radius-md: var(--r-md);
@@ -207,6 +207,16 @@
207
207
  --space-7: 3rem; /* major gap */
208
208
  --space-8: 4rem; /* page section */
209
209
  --space-9: 6rem; /* hero rhythm */
210
+ /* T-shirt aliases - var() references into this theme's numbered scale,
211
+ so re-tuning a numbered step re-tunes its alias automatically. */
212
+ --space-xs: var(--space-1);
213
+ --space-sm: var(--space-2);
214
+ --space-md: var(--space-4);
215
+ --space-lg: var(--space-5);
216
+ --space-xl: var(--space-6);
217
+ --space-2xl: var(--space-7);
218
+ --space-3xl: var(--space-8);
219
+ --space-4xl: var(--space-9);
210
220
  /* Radius alias — mirrors --r-* with standard names so
211
221
  `m.radius(size)` in the library finds --radius-<size>. */
212
222
  --radius-sm: var(--r-sm);
@@ -137,6 +137,16 @@
137
137
  --space-7: 3rem; /* major gap */
138
138
  --space-8: 4rem; /* page section */
139
139
  --space-9: 6rem; /* hero rhythm */
140
+ /* T-shirt aliases - var() references into this theme's numbered scale,
141
+ so re-tuning a numbered step re-tunes its alias automatically. */
142
+ --space-xs: var(--space-1);
143
+ --space-sm: var(--space-2);
144
+ --space-md: var(--space-4);
145
+ --space-lg: var(--space-5);
146
+ --space-xl: var(--space-6);
147
+ --space-2xl: var(--space-7);
148
+ --space-3xl: var(--space-8);
149
+ --space-4xl: var(--space-9);
140
150
  --radius-sm: var(--r-sm);
141
151
  --radius-md: var(--r-md);
142
152
  --radius-lg: var(--r-lg);
@@ -201,6 +201,16 @@
201
201
  --space-7: 3rem; /* major gap */
202
202
  --space-8: 4rem; /* page section */
203
203
  --space-9: 6rem; /* hero rhythm */
204
+ /* T-shirt aliases - var() references into this theme's numbered scale,
205
+ so re-tuning a numbered step re-tunes its alias automatically. */
206
+ --space-xs: var(--space-1);
207
+ --space-sm: var(--space-2);
208
+ --space-md: var(--space-4);
209
+ --space-lg: var(--space-5);
210
+ --space-xl: var(--space-6);
211
+ --space-2xl: var(--space-7);
212
+ --space-3xl: var(--space-8);
213
+ --space-4xl: var(--space-9);
204
214
  /* Radius alias — mirrors --r-* with standard names so
205
215
  `m.radius(size)` in the library finds --radius-<size>. */
206
216
  --radius-sm: var(--r-sm);
@@ -170,6 +170,16 @@
170
170
  --space-7: 3rem; /* major gap */
171
171
  --space-8: 4rem; /* page section */
172
172
  --space-9: 6rem; /* hero rhythm */
173
+ /* T-shirt aliases - var() references into this theme's numbered scale,
174
+ so re-tuning a numbered step re-tunes its alias automatically. */
175
+ --space-xs: var(--space-1);
176
+ --space-sm: var(--space-2);
177
+ --space-md: var(--space-4);
178
+ --space-lg: var(--space-5);
179
+ --space-xl: var(--space-6);
180
+ --space-2xl: var(--space-7);
181
+ --space-3xl: var(--space-8);
182
+ --space-4xl: var(--space-9);
173
183
  /* Radius alias */
174
184
  --radius-sm: var(--r-sm);
175
185
  --radius-md: var(--r-md);
@@ -162,6 +162,16 @@
162
162
  --space-7: 3rem; /* major gap */
163
163
  --space-8: 4rem; /* page section */
164
164
  --space-9: 6rem; /* hero rhythm */
165
+ /* T-shirt aliases - var() references into this theme's numbered scale,
166
+ so re-tuning a numbered step re-tunes its alias automatically. */
167
+ --space-xs: var(--space-1);
168
+ --space-sm: var(--space-2);
169
+ --space-md: var(--space-4);
170
+ --space-lg: var(--space-5);
171
+ --space-xl: var(--space-6);
172
+ --space-2xl: var(--space-7);
173
+ --space-3xl: var(--space-8);
174
+ --space-4xl: var(--space-9);
165
175
  --radius-sm: var(--r-sm);
166
176
  --radius-md: var(--r-md);
167
177
  --radius-lg: var(--r-lg);
@@ -169,6 +169,16 @@
169
169
  --space-7: 3rem; /* major gap */
170
170
  --space-8: 4rem; /* page section */
171
171
  --space-9: 6rem; /* hero rhythm */
172
+ /* T-shirt aliases - var() references into this theme's numbered scale,
173
+ so re-tuning a numbered step re-tunes its alias automatically. */
174
+ --space-xs: var(--space-1);
175
+ --space-sm: var(--space-2);
176
+ --space-md: var(--space-4);
177
+ --space-lg: var(--space-5);
178
+ --space-xl: var(--space-6);
179
+ --space-2xl: var(--space-7);
180
+ --space-3xl: var(--space-8);
181
+ --space-4xl: var(--space-9);
172
182
  /* Radius alias — Press is editorial, xl stays tight (6px) */
173
183
  --radius-sm: var(--r-sm);
174
184
  --radius-md: var(--r-md);