@fractaldesign/fractalstyler 0.0.0-stage → 0.9.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 (46) hide show
  1. package/LICENSE +19 -0
  2. package/README.md +123 -2
  3. package/cli/main.mjs +141 -0
  4. package/cli/scaffold.mjs +406 -0
  5. package/data/recipes.json +61 -0
  6. package/dist/asset.d.ts +3 -0
  7. package/dist/css/fractalstyler.css +2453 -0
  8. package/dist/css/fractalstyler.min.css +2 -0
  9. package/dist/index.d.ts +6 -0
  10. package/dist/index.js +6 -0
  11. package/dist/styles/_00_config.sass +29 -0
  12. package/dist/styles/_00_fonts.sass +58 -0
  13. package/dist/styles/_00_tokens.sass +211 -0
  14. package/dist/styles/_01_base.sass +58 -0
  15. package/dist/styles/_02_dimensions.sass +70 -0
  16. package/dist/styles/_03_typography.sass +170 -0
  17. package/dist/styles/_04_containers.sass +173 -0
  18. package/dist/styles/_05_layouts.sass +104 -0
  19. package/dist/styles/_06_shells.sass +135 -0
  20. package/dist/styles/_07_interactions.sass +212 -0
  21. package/dist/styles/_08_visuals.sass +136 -0
  22. package/dist/styles/_09_own.sass +174 -0
  23. package/dist/styles/colorpacks.sass +119 -0
  24. package/dist/styles/index.sass +14 -0
  25. package/dist/styles/themeplates.sass +159 -0
  26. package/docs/REGISTRY.api.md +477 -0
  27. package/docs/REGISTRY.md +14 -0
  28. package/docs/references/configurations-api.md +220 -0
  29. package/docs/references/configurations.md +258 -0
  30. package/lint/browser.mjs +79 -0
  31. package/lint/cli.mjs +212 -0
  32. package/lint/lib/agent-reporter.mjs +51 -0
  33. package/lint/lib/fuzzy.mjs +45 -0
  34. package/lint/lib/registry.mjs +107 -0
  35. package/lint/lib/sass-linter.mjs +71 -0
  36. package/lint/lib/svelte-linter.mjs +116 -0
  37. package/lint/lib/token-linter.mjs +97 -0
  38. package/package.json +112 -5
  39. package/registry.json +3999 -0
  40. package/scripts/class-vocab.js +197 -0
  41. package/scripts/update-registry.js +934 -0
  42. package/skills/fractal-styler/references/fractals.md +630 -0
  43. package/skills/fractal-styler/references/tokens.md +226 -0
  44. package/skills/fractalstyler/SKILL.md +59 -0
  45. package/skills/fractalstyler/references/fractals.md +630 -0
  46. package/skills/fractalstyler/references/tokens.md +226 -0
@@ -0,0 +1,477 @@
1
+ # Fractalstyler — Class API & Vocabulary Reference
2
+
3
+ > Comprehensive index of the canonical styling system classes, layers, and intent.
4
+ > Generated from `registry.json` via `scripts/class-vocab.js`.
5
+
6
+ **414** classes indexed across layers.
7
+
8
+ Every entry is a concrete class — the space families are expanded from the
9
+ family maps in `_00_config.sass` across the eight steps `xs sm md bs lg xl 2xl 3xl`.
10
+ There are no wildcard families, no literal ladders and no `-mob`/`-desk` bands.
11
+ Modifiers nest under their base (`.box.xcenter`), children carry their own name
12
+ (`.accordion-content`), and `element[...]` rows are attribute-driven variants.
13
+
14
+ ---
15
+
16
+ ## Layer L0
17
+
18
+ Tokens and Base resets. L0 defines the CSS custom properties for both color modes (via the =light-theme-tokens / =dark-theme-tokens mixins in _00_tokens.sass), the type/space/radius/motion scales, and native element resets. Never hardcode a raw hex or pixel literal that L0 covers.
19
+
20
+ | Class | Property / Expansion | Description |
21
+ |:---|:---|:---|
22
+ | `.bdr` | `border: 1px solid red` | debug class |
23
+ | `.mode-wipe` | `animation: none` | On <html>: disables view-transition animations while a color-mode wipe runs |
24
+
25
+ ## Layer L1
26
+
27
+ Dimensions. Loop-generated space families — .gap/.rgap/.cgap, .pad/.px/.py/.pt/.pr/.pb/.pl, .mar/.mx/.my/.mt/.mr/.mb/.ml — each across the eight steps (xs sm md bs lg xl 2xl 3xl), all token-routed through var(--space-*). Plus the six radius channels, full/zero sizing, control heights, and viewport heights. No literal ladder; no -mob/-desk bands.
28
+
29
+ | Class | Property / Expansion | Description |
30
+ |:---|:---|:---|
31
+ | `.gap-xs` | `gap: var(--space-xs)` | Gap on both axes (flex/grid) at the xs step — rides var(--space-xs) (generated from $gap-families × $steps in _00_config.sass) |
32
+ | `.gap-sm` | `gap: var(--space-sm)` | Gap on both axes (flex/grid) at the sm step — rides var(--space-sm) (generated from $gap-families × $steps in _00_config.sass) |
33
+ | `.gap-md` | `gap: var(--space-md)` | Gap on both axes (flex/grid) at the md step — rides var(--space-md) (generated from $gap-families × $steps in _00_config.sass) |
34
+ | `.gap-bs` | `gap: var(--space-bs)` | Gap on both axes (flex/grid) at the bs step — rides var(--space-bs) (generated from $gap-families × $steps in _00_config.sass) |
35
+ | `.gap-lg` | `gap: var(--space-lg)` | Gap on both axes (flex/grid) at the lg step — rides var(--space-lg) (generated from $gap-families × $steps in _00_config.sass) |
36
+ | `.gap-xl` | `gap: var(--space-xl)` | Gap on both axes (flex/grid) at the xl step — rides var(--space-xl) (generated from $gap-families × $steps in _00_config.sass) |
37
+ | `.gap-2xl` | `gap: var(--space-2xl)` | Gap on both axes (flex/grid) at the 2xl step — rides var(--space-2xl) (generated from $gap-families × $steps in _00_config.sass) |
38
+ | `.gap-3xl` | `gap: var(--space-3xl)` | Gap on both axes (flex/grid) at the 3xl step — rides var(--space-3xl) (generated from $gap-families × $steps in _00_config.sass) |
39
+ | `.rgap-xs` | `row-gap: var(--space-xs)` | Row gap (block axis) at the xs step — rides var(--space-xs) (generated from $gap-families × $steps in _00_config.sass) |
40
+ | `.rgap-sm` | `row-gap: var(--space-sm)` | Row gap (block axis) at the sm step — rides var(--space-sm) (generated from $gap-families × $steps in _00_config.sass) |
41
+ | `.rgap-md` | `row-gap: var(--space-md)` | Row gap (block axis) at the md step — rides var(--space-md) (generated from $gap-families × $steps in _00_config.sass) |
42
+ | `.rgap-bs` | `row-gap: var(--space-bs)` | Row gap (block axis) at the bs step — rides var(--space-bs) (generated from $gap-families × $steps in _00_config.sass) |
43
+ | `.rgap-lg` | `row-gap: var(--space-lg)` | Row gap (block axis) at the lg step — rides var(--space-lg) (generated from $gap-families × $steps in _00_config.sass) |
44
+ | `.rgap-xl` | `row-gap: var(--space-xl)` | Row gap (block axis) at the xl step — rides var(--space-xl) (generated from $gap-families × $steps in _00_config.sass) |
45
+ | `.rgap-2xl` | `row-gap: var(--space-2xl)` | Row gap (block axis) at the 2xl step — rides var(--space-2xl) (generated from $gap-families × $steps in _00_config.sass) |
46
+ | `.rgap-3xl` | `row-gap: var(--space-3xl)` | Row gap (block axis) at the 3xl step — rides var(--space-3xl) (generated from $gap-families × $steps in _00_config.sass) |
47
+ | `.cgap-xs` | `column-gap: var(--space-xs)` | Column gap (inline axis) at the xs step — rides var(--space-xs) (generated from $gap-families × $steps in _00_config.sass) |
48
+ | `.cgap-sm` | `column-gap: var(--space-sm)` | Column gap (inline axis) at the sm step — rides var(--space-sm) (generated from $gap-families × $steps in _00_config.sass) |
49
+ | `.cgap-md` | `column-gap: var(--space-md)` | Column gap (inline axis) at the md step — rides var(--space-md) (generated from $gap-families × $steps in _00_config.sass) |
50
+ | `.cgap-bs` | `column-gap: var(--space-bs)` | Column gap (inline axis) at the bs step — rides var(--space-bs) (generated from $gap-families × $steps in _00_config.sass) |
51
+ | `.cgap-lg` | `column-gap: var(--space-lg)` | Column gap (inline axis) at the lg step — rides var(--space-lg) (generated from $gap-families × $steps in _00_config.sass) |
52
+ | `.cgap-xl` | `column-gap: var(--space-xl)` | Column gap (inline axis) at the xl step — rides var(--space-xl) (generated from $gap-families × $steps in _00_config.sass) |
53
+ | `.cgap-2xl` | `column-gap: var(--space-2xl)` | Column gap (inline axis) at the 2xl step — rides var(--space-2xl) (generated from $gap-families × $steps in _00_config.sass) |
54
+ | `.cgap-3xl` | `column-gap: var(--space-3xl)` | Column gap (inline axis) at the 3xl step — rides var(--space-3xl) (generated from $gap-families × $steps in _00_config.sass) |
55
+ | `.pad-xs` | `padding: var(--space-xs)` | Padding, all four sides at the xs step — rides var(--space-xs) (generated from $pad-families × $steps in _00_config.sass) |
56
+ | `.pad-sm` | `padding: var(--space-sm)` | Padding, all four sides at the sm step — rides var(--space-sm) (generated from $pad-families × $steps in _00_config.sass) |
57
+ | `.pad-md` | `padding: var(--space-md)` | Padding, all four sides at the md step — rides var(--space-md) (generated from $pad-families × $steps in _00_config.sass) |
58
+ | `.pad-bs` | `padding: var(--space-bs)` | Padding, all four sides at the bs step — rides var(--space-bs) (generated from $pad-families × $steps in _00_config.sass) |
59
+ | `.pad-lg` | `padding: var(--space-lg)` | Padding, all four sides at the lg step — rides var(--space-lg) (generated from $pad-families × $steps in _00_config.sass) |
60
+ | `.pad-xl` | `padding: var(--space-xl)` | Padding, all four sides at the xl step — rides var(--space-xl) (generated from $pad-families × $steps in _00_config.sass) |
61
+ | `.pad-2xl` | `padding: var(--space-2xl)` | Padding, all four sides at the 2xl step — rides var(--space-2xl) (generated from $pad-families × $steps in _00_config.sass) |
62
+ | `.pad-3xl` | `padding: var(--space-3xl)` | Padding, all four sides at the 3xl step — rides var(--space-3xl) (generated from $pad-families × $steps in _00_config.sass) |
63
+ | `.px-xs` | `padding-inline: var(--space-xs)` | Inline (horizontal) padding at the xs step — rides var(--space-xs) (generated from $pad-families × $steps in _00_config.sass) |
64
+ | `.px-sm` | `padding-inline: var(--space-sm)` | Inline (horizontal) padding at the sm step — rides var(--space-sm) (generated from $pad-families × $steps in _00_config.sass) |
65
+ | `.px-md` | `padding-inline: var(--space-md)` | Inline (horizontal) padding at the md step — rides var(--space-md) (generated from $pad-families × $steps in _00_config.sass) |
66
+ | `.px-bs` | `padding-inline: var(--space-bs)` | Inline (horizontal) padding at the bs step — rides var(--space-bs) (generated from $pad-families × $steps in _00_config.sass) |
67
+ | `.px-lg` | `padding-inline: var(--space-lg)` | Inline (horizontal) padding at the lg step — rides var(--space-lg) (generated from $pad-families × $steps in _00_config.sass) |
68
+ | `.px-xl` | `padding-inline: var(--space-xl)` | Inline (horizontal) padding at the xl step — rides var(--space-xl) (generated from $pad-families × $steps in _00_config.sass) |
69
+ | `.px-2xl` | `padding-inline: var(--space-2xl)` | Inline (horizontal) padding at the 2xl step — rides var(--space-2xl) (generated from $pad-families × $steps in _00_config.sass) |
70
+ | `.px-3xl` | `padding-inline: var(--space-3xl)` | Inline (horizontal) padding at the 3xl step — rides var(--space-3xl) (generated from $pad-families × $steps in _00_config.sass) |
71
+ | `.py-xs` | `padding-block: var(--space-xs)` | Block (vertical) padding at the xs step — rides var(--space-xs) (generated from $pad-families × $steps in _00_config.sass) |
72
+ | `.py-sm` | `padding-block: var(--space-sm)` | Block (vertical) padding at the sm step — rides var(--space-sm) (generated from $pad-families × $steps in _00_config.sass) |
73
+ | `.py-md` | `padding-block: var(--space-md)` | Block (vertical) padding at the md step — rides var(--space-md) (generated from $pad-families × $steps in _00_config.sass) |
74
+ | `.py-bs` | `padding-block: var(--space-bs)` | Block (vertical) padding at the bs step — rides var(--space-bs) (generated from $pad-families × $steps in _00_config.sass) |
75
+ | `.py-lg` | `padding-block: var(--space-lg)` | Block (vertical) padding at the lg step — rides var(--space-lg) (generated from $pad-families × $steps in _00_config.sass) |
76
+ | `.py-xl` | `padding-block: var(--space-xl)` | Block (vertical) padding at the xl step — rides var(--space-xl) (generated from $pad-families × $steps in _00_config.sass) |
77
+ | `.py-2xl` | `padding-block: var(--space-2xl)` | Block (vertical) padding at the 2xl step — rides var(--space-2xl) (generated from $pad-families × $steps in _00_config.sass) |
78
+ | `.py-3xl` | `padding-block: var(--space-3xl)` | Block (vertical) padding at the 3xl step — rides var(--space-3xl) (generated from $pad-families × $steps in _00_config.sass) |
79
+ | `.pt-xs` | `padding-top: var(--space-xs)` | Top padding at the xs step — rides var(--space-xs) (generated from $pad-families × $steps in _00_config.sass) |
80
+ | `.pt-sm` | `padding-top: var(--space-sm)` | Top padding at the sm step — rides var(--space-sm) (generated from $pad-families × $steps in _00_config.sass) |
81
+ | `.pt-md` | `padding-top: var(--space-md)` | Top padding at the md step — rides var(--space-md) (generated from $pad-families × $steps in _00_config.sass) |
82
+ | `.pt-bs` | `padding-top: var(--space-bs)` | Top padding at the bs step — rides var(--space-bs) (generated from $pad-families × $steps in _00_config.sass) |
83
+ | `.pt-lg` | `padding-top: var(--space-lg)` | Top padding at the lg step — rides var(--space-lg) (generated from $pad-families × $steps in _00_config.sass) |
84
+ | `.pt-xl` | `padding-top: var(--space-xl)` | Top padding at the xl step — rides var(--space-xl) (generated from $pad-families × $steps in _00_config.sass) |
85
+ | `.pt-2xl` | `padding-top: var(--space-2xl)` | Top padding at the 2xl step — rides var(--space-2xl) (generated from $pad-families × $steps in _00_config.sass) |
86
+ | `.pt-3xl` | `padding-top: var(--space-3xl)` | Top padding at the 3xl step — rides var(--space-3xl) (generated from $pad-families × $steps in _00_config.sass) |
87
+ | `.pr-xs` | `padding-right: var(--space-xs)` | Right padding at the xs step — rides var(--space-xs) (generated from $pad-families × $steps in _00_config.sass) |
88
+ | `.pr-sm` | `padding-right: var(--space-sm)` | Right padding at the sm step — rides var(--space-sm) (generated from $pad-families × $steps in _00_config.sass) |
89
+ | `.pr-md` | `padding-right: var(--space-md)` | Right padding at the md step — rides var(--space-md) (generated from $pad-families × $steps in _00_config.sass) |
90
+ | `.pr-bs` | `padding-right: var(--space-bs)` | Right padding at the bs step — rides var(--space-bs) (generated from $pad-families × $steps in _00_config.sass) |
91
+ | `.pr-lg` | `padding-right: var(--space-lg)` | Right padding at the lg step — rides var(--space-lg) (generated from $pad-families × $steps in _00_config.sass) |
92
+ | `.pr-xl` | `padding-right: var(--space-xl)` | Right padding at the xl step — rides var(--space-xl) (generated from $pad-families × $steps in _00_config.sass) |
93
+ | `.pr-2xl` | `padding-right: var(--space-2xl)` | Right padding at the 2xl step — rides var(--space-2xl) (generated from $pad-families × $steps in _00_config.sass) |
94
+ | `.pr-3xl` | `padding-right: var(--space-3xl)` | Right padding at the 3xl step — rides var(--space-3xl) (generated from $pad-families × $steps in _00_config.sass) |
95
+ | `.pb-xs` | `padding-bottom: var(--space-xs)` | Bottom padding at the xs step — rides var(--space-xs) (generated from $pad-families × $steps in _00_config.sass) |
96
+ | `.pb-sm` | `padding-bottom: var(--space-sm)` | Bottom padding at the sm step — rides var(--space-sm) (generated from $pad-families × $steps in _00_config.sass) |
97
+ | `.pb-md` | `padding-bottom: var(--space-md)` | Bottom padding at the md step — rides var(--space-md) (generated from $pad-families × $steps in _00_config.sass) |
98
+ | `.pb-bs` | `padding-bottom: var(--space-bs)` | Bottom padding at the bs step — rides var(--space-bs) (generated from $pad-families × $steps in _00_config.sass) |
99
+ | `.pb-lg` | `padding-bottom: var(--space-lg)` | Bottom padding at the lg step — rides var(--space-lg) (generated from $pad-families × $steps in _00_config.sass) |
100
+ | `.pb-xl` | `padding-bottom: var(--space-xl)` | Bottom padding at the xl step — rides var(--space-xl) (generated from $pad-families × $steps in _00_config.sass) |
101
+ | `.pb-2xl` | `padding-bottom: var(--space-2xl)` | Bottom padding at the 2xl step — rides var(--space-2xl) (generated from $pad-families × $steps in _00_config.sass) |
102
+ | `.pb-3xl` | `padding-bottom: var(--space-3xl)` | Bottom padding at the 3xl step — rides var(--space-3xl) (generated from $pad-families × $steps in _00_config.sass) |
103
+ | `.pl-xs` | `padding-left: var(--space-xs)` | Left padding at the xs step — rides var(--space-xs) (generated from $pad-families × $steps in _00_config.sass) |
104
+ | `.pl-sm` | `padding-left: var(--space-sm)` | Left padding at the sm step — rides var(--space-sm) (generated from $pad-families × $steps in _00_config.sass) |
105
+ | `.pl-md` | `padding-left: var(--space-md)` | Left padding at the md step — rides var(--space-md) (generated from $pad-families × $steps in _00_config.sass) |
106
+ | `.pl-bs` | `padding-left: var(--space-bs)` | Left padding at the bs step — rides var(--space-bs) (generated from $pad-families × $steps in _00_config.sass) |
107
+ | `.pl-lg` | `padding-left: var(--space-lg)` | Left padding at the lg step — rides var(--space-lg) (generated from $pad-families × $steps in _00_config.sass) |
108
+ | `.pl-xl` | `padding-left: var(--space-xl)` | Left padding at the xl step — rides var(--space-xl) (generated from $pad-families × $steps in _00_config.sass) |
109
+ | `.pl-2xl` | `padding-left: var(--space-2xl)` | Left padding at the 2xl step — rides var(--space-2xl) (generated from $pad-families × $steps in _00_config.sass) |
110
+ | `.pl-3xl` | `padding-left: var(--space-3xl)` | Left padding at the 3xl step — rides var(--space-3xl) (generated from $pad-families × $steps in _00_config.sass) |
111
+ | `.mar-xs` | `margin: var(--space-xs)` | Margin, all four sides at the xs step — rides var(--space-xs) (generated from $mar-families × $steps in _00_config.sass) |
112
+ | `.mar-sm` | `margin: var(--space-sm)` | Margin, all four sides at the sm step — rides var(--space-sm) (generated from $mar-families × $steps in _00_config.sass) |
113
+ | `.mar-md` | `margin: var(--space-md)` | Margin, all four sides at the md step — rides var(--space-md) (generated from $mar-families × $steps in _00_config.sass) |
114
+ | `.mar-bs` | `margin: var(--space-bs)` | Margin, all four sides at the bs step — rides var(--space-bs) (generated from $mar-families × $steps in _00_config.sass) |
115
+ | `.mar-lg` | `margin: var(--space-lg)` | Margin, all four sides at the lg step — rides var(--space-lg) (generated from $mar-families × $steps in _00_config.sass) |
116
+ | `.mar-xl` | `margin: var(--space-xl)` | Margin, all four sides at the xl step — rides var(--space-xl) (generated from $mar-families × $steps in _00_config.sass) |
117
+ | `.mar-2xl` | `margin: var(--space-2xl)` | Margin, all four sides at the 2xl step — rides var(--space-2xl) (generated from $mar-families × $steps in _00_config.sass) |
118
+ | `.mar-3xl` | `margin: var(--space-3xl)` | Margin, all four sides at the 3xl step — rides var(--space-3xl) (generated from $mar-families × $steps in _00_config.sass) |
119
+ | `.mx-xs` | `margin-inline: var(--space-xs)` | Inline (horizontal) margin at the xs step — rides var(--space-xs) (generated from $mar-families × $steps in _00_config.sass) |
120
+ | `.mx-sm` | `margin-inline: var(--space-sm)` | Inline (horizontal) margin at the sm step — rides var(--space-sm) (generated from $mar-families × $steps in _00_config.sass) |
121
+ | `.mx-md` | `margin-inline: var(--space-md)` | Inline (horizontal) margin at the md step — rides var(--space-md) (generated from $mar-families × $steps in _00_config.sass) |
122
+ | `.mx-bs` | `margin-inline: var(--space-bs)` | Inline (horizontal) margin at the bs step — rides var(--space-bs) (generated from $mar-families × $steps in _00_config.sass) |
123
+ | `.mx-lg` | `margin-inline: var(--space-lg)` | Inline (horizontal) margin at the lg step — rides var(--space-lg) (generated from $mar-families × $steps in _00_config.sass) |
124
+ | `.mx-xl` | `margin-inline: var(--space-xl)` | Inline (horizontal) margin at the xl step — rides var(--space-xl) (generated from $mar-families × $steps in _00_config.sass) |
125
+ | `.mx-2xl` | `margin-inline: var(--space-2xl)` | Inline (horizontal) margin at the 2xl step — rides var(--space-2xl) (generated from $mar-families × $steps in _00_config.sass) |
126
+ | `.mx-3xl` | `margin-inline: var(--space-3xl)` | Inline (horizontal) margin at the 3xl step — rides var(--space-3xl) (generated from $mar-families × $steps in _00_config.sass) |
127
+ | `.my-xs` | `margin-block: var(--space-xs)` | Block (vertical) margin at the xs step — rides var(--space-xs) (generated from $mar-families × $steps in _00_config.sass) |
128
+ | `.my-sm` | `margin-block: var(--space-sm)` | Block (vertical) margin at the sm step — rides var(--space-sm) (generated from $mar-families × $steps in _00_config.sass) |
129
+ | `.my-md` | `margin-block: var(--space-md)` | Block (vertical) margin at the md step — rides var(--space-md) (generated from $mar-families × $steps in _00_config.sass) |
130
+ | `.my-bs` | `margin-block: var(--space-bs)` | Block (vertical) margin at the bs step — rides var(--space-bs) (generated from $mar-families × $steps in _00_config.sass) |
131
+ | `.my-lg` | `margin-block: var(--space-lg)` | Block (vertical) margin at the lg step — rides var(--space-lg) (generated from $mar-families × $steps in _00_config.sass) |
132
+ | `.my-xl` | `margin-block: var(--space-xl)` | Block (vertical) margin at the xl step — rides var(--space-xl) (generated from $mar-families × $steps in _00_config.sass) |
133
+ | `.my-2xl` | `margin-block: var(--space-2xl)` | Block (vertical) margin at the 2xl step — rides var(--space-2xl) (generated from $mar-families × $steps in _00_config.sass) |
134
+ | `.my-3xl` | `margin-block: var(--space-3xl)` | Block (vertical) margin at the 3xl step — rides var(--space-3xl) (generated from $mar-families × $steps in _00_config.sass) |
135
+ | `.mt-xs` | `margin-top: var(--space-xs)` | Top margin at the xs step — rides var(--space-xs) (generated from $mar-families × $steps in _00_config.sass) |
136
+ | `.mt-sm` | `margin-top: var(--space-sm)` | Top margin at the sm step — rides var(--space-sm) (generated from $mar-families × $steps in _00_config.sass) |
137
+ | `.mt-md` | `margin-top: var(--space-md)` | Top margin at the md step — rides var(--space-md) (generated from $mar-families × $steps in _00_config.sass) |
138
+ | `.mt-bs` | `margin-top: var(--space-bs)` | Top margin at the bs step — rides var(--space-bs) (generated from $mar-families × $steps in _00_config.sass) |
139
+ | `.mt-lg` | `margin-top: var(--space-lg)` | Top margin at the lg step — rides var(--space-lg) (generated from $mar-families × $steps in _00_config.sass) |
140
+ | `.mt-xl` | `margin-top: var(--space-xl)` | Top margin at the xl step — rides var(--space-xl) (generated from $mar-families × $steps in _00_config.sass) |
141
+ | `.mt-2xl` | `margin-top: var(--space-2xl)` | Top margin at the 2xl step — rides var(--space-2xl) (generated from $mar-families × $steps in _00_config.sass) |
142
+ | `.mt-3xl` | `margin-top: var(--space-3xl)` | Top margin at the 3xl step — rides var(--space-3xl) (generated from $mar-families × $steps in _00_config.sass) |
143
+ | `.mr-xs` | `margin-right: var(--space-xs)` | Right margin at the xs step — rides var(--space-xs) (generated from $mar-families × $steps in _00_config.sass) |
144
+ | `.mr-sm` | `margin-right: var(--space-sm)` | Right margin at the sm step — rides var(--space-sm) (generated from $mar-families × $steps in _00_config.sass) |
145
+ | `.mr-md` | `margin-right: var(--space-md)` | Right margin at the md step — rides var(--space-md) (generated from $mar-families × $steps in _00_config.sass) |
146
+ | `.mr-bs` | `margin-right: var(--space-bs)` | Right margin at the bs step — rides var(--space-bs) (generated from $mar-families × $steps in _00_config.sass) |
147
+ | `.mr-lg` | `margin-right: var(--space-lg)` | Right margin at the lg step — rides var(--space-lg) (generated from $mar-families × $steps in _00_config.sass) |
148
+ | `.mr-xl` | `margin-right: var(--space-xl)` | Right margin at the xl step — rides var(--space-xl) (generated from $mar-families × $steps in _00_config.sass) |
149
+ | `.mr-2xl` | `margin-right: var(--space-2xl)` | Right margin at the 2xl step — rides var(--space-2xl) (generated from $mar-families × $steps in _00_config.sass) |
150
+ | `.mr-3xl` | `margin-right: var(--space-3xl)` | Right margin at the 3xl step — rides var(--space-3xl) (generated from $mar-families × $steps in _00_config.sass) |
151
+ | `.mb-xs` | `margin-bottom: var(--space-xs)` | Bottom margin at the xs step — rides var(--space-xs) (generated from $mar-families × $steps in _00_config.sass) |
152
+ | `.mb-sm` | `margin-bottom: var(--space-sm)` | Bottom margin at the sm step — rides var(--space-sm) (generated from $mar-families × $steps in _00_config.sass) |
153
+ | `.mb-md` | `margin-bottom: var(--space-md)` | Bottom margin at the md step — rides var(--space-md) (generated from $mar-families × $steps in _00_config.sass) |
154
+ | `.mb-bs` | `margin-bottom: var(--space-bs)` | Bottom margin at the bs step — rides var(--space-bs) (generated from $mar-families × $steps in _00_config.sass) |
155
+ | `.mb-lg` | `margin-bottom: var(--space-lg)` | Bottom margin at the lg step — rides var(--space-lg) (generated from $mar-families × $steps in _00_config.sass) |
156
+ | `.mb-xl` | `margin-bottom: var(--space-xl)` | Bottom margin at the xl step — rides var(--space-xl) (generated from $mar-families × $steps in _00_config.sass) |
157
+ | `.mb-2xl` | `margin-bottom: var(--space-2xl)` | Bottom margin at the 2xl step — rides var(--space-2xl) (generated from $mar-families × $steps in _00_config.sass) |
158
+ | `.mb-3xl` | `margin-bottom: var(--space-3xl)` | Bottom margin at the 3xl step — rides var(--space-3xl) (generated from $mar-families × $steps in _00_config.sass) |
159
+ | `.ml-xs` | `margin-left: var(--space-xs)` | Left margin at the xs step — rides var(--space-xs) (generated from $mar-families × $steps in _00_config.sass) |
160
+ | `.ml-sm` | `margin-left: var(--space-sm)` | Left margin at the sm step — rides var(--space-sm) (generated from $mar-families × $steps in _00_config.sass) |
161
+ | `.ml-md` | `margin-left: var(--space-md)` | Left margin at the md step — rides var(--space-md) (generated from $mar-families × $steps in _00_config.sass) |
162
+ | `.ml-bs` | `margin-left: var(--space-bs)` | Left margin at the bs step — rides var(--space-bs) (generated from $mar-families × $steps in _00_config.sass) |
163
+ | `.ml-lg` | `margin-left: var(--space-lg)` | Left margin at the lg step — rides var(--space-lg) (generated from $mar-families × $steps in _00_config.sass) |
164
+ | `.ml-xl` | `margin-left: var(--space-xl)` | Left margin at the xl step — rides var(--space-xl) (generated from $mar-families × $steps in _00_config.sass) |
165
+ | `.ml-2xl` | `margin-left: var(--space-2xl)` | Left margin at the 2xl step — rides var(--space-2xl) (generated from $mar-families × $steps in _00_config.sass) |
166
+ | `.ml-3xl` | `margin-left: var(--space-3xl)` | Left margin at the 3xl step — rides var(--space-3xl) (generated from $mar-families × $steps in _00_config.sass) |
167
+ | `.radius-xs` | `border-radius: var(--radius-xs)` | border-radius: var(--radius-xs) |
168
+ | `.radius-sm` | `border-radius: var(--radius-sm)` | border-radius: var(--radius-sm) |
169
+ | `.radius-md` | `border-radius: var(--radius-md)` | border-radius: var(--radius-md) |
170
+ | `.radius-bs` | `border-radius: var(--radius-bs)` | border-radius: var(--radius-bs) |
171
+ | `.radius-lg` | `border-radius: var(--radius-lg)` | border-radius: var(--radius-lg) |
172
+ | `.radius-full` | `border-radius: var(--radius-full)` | border-radius: var(--radius-full) |
173
+ | `.wfull` | `width: 100%` | Full width (100%) |
174
+ | `.hfull` | `height: 100%` | Full height (100%) |
175
+ | `.full` | `width: 100%; height: 100%` | Full width and height (100% both axes) |
176
+ | `.minw0` | `min-width: 0` | Zero min-width — lets a flex child shrink below its content |
177
+ | `.minh0` | `min-height: 0` | Zero min-height — lets a flex child shrink below its content |
178
+ | `.min0` | `min-width: 0; min-height: 0` | Zero min-width and min-height — prevents flex blowouts |
179
+ | `.h-sm` | `height: var(--height-sm)` | Control height step sm (var(--height-sm)) |
180
+ | `.h-md` | `height: var(--height-md)` | Control height step md (var(--height-md)) |
181
+ | `.h-bs` | `height: var(--height-bs)` | Control height step bs (var(--height-bs)) |
182
+ | `.h-lg` | `height: var(--height-lg)` | Control height step lg (var(--height-lg)) |
183
+ | `.hfull-vh` | `min-height: 100vh` | Viewport heights |
184
+ | `.hfull-vh-fitted` | `min-height: var(--fit-height)` | Viewport height fitted between header and footer (var(--fit-height)) |
185
+
186
+ ## Layer L2
187
+
188
+ Containers and alignment universe. .box (flex-col), .row (flex-row), and .grid (css-grid) are the three structural foundations with strict physical axis modifiers (xcenter, ycenter, xbetween, etc.) nested under their base — never standalone. Scroll containers, cards, chips, and form/section wrappers live here too.
189
+
190
+ | Class | Property / Expansion | Description |
191
+ |:---|:---|:---|
192
+ | `.box` | `display: flex; flex-direction: column` | Flex column container — the vertical structural foundation |
193
+ | `.box.xcenter` | `align-items: center; text-align: center` | align-items: center — modifier of .box |
194
+ | `.box.xleft` | `align-items: flex-start; text-align: left` | align-items: flex-start — modifier of .box |
195
+ | `.box.xright` | `align-items: flex-end; text-align: right` | align-items: flex-end — modifier of .box |
196
+ | `.box.ycenter` | `justify-content: center` | justify-content: center — modifier of .box |
197
+ | `.box.ytop` | `justify-content: flex-start` | justify-content: flex-start — modifier of .box |
198
+ | `.box.ybot` | `justify-content: flex-end` | justify-content: flex-end — modifier of .box |
199
+ | `.box.ybetween` | `justify-content: space-between` | justify-content: space-between — modifier of .box |
200
+ | `.box.yevenly` | `justify-content: space-evenly` | justify-content: space-evenly — modifier of .box |
201
+ | `.box.yaround` | `justify-content: space-around` | justify-content: space-around — modifier of .box |
202
+ | `.row` | `display: flex; flex-direction: row` | Flex row container — the horizontal structural foundation |
203
+ | `.row.xleft` | `justify-content: flex-start` | justify-content: flex-start — modifier of .row |
204
+ | `.row.xcenter` | `justify-content: center` | justify-content: center — modifier of .row |
205
+ | `.row.xright` | `justify-content: flex-end` | justify-content: flex-end — modifier of .row |
206
+ | `.row.xbetween` | `justify-content: space-between` | justify-content: space-between — modifier of .row |
207
+ | `.row.xevenly` | `justify-content: space-evenly` | justify-content: space-evenly — modifier of .row |
208
+ | `.row.xaround` | `justify-content: space-around` | justify-content: space-around — modifier of .row |
209
+ | `.row.ycenter` | `align-items: center` | align-items: center — modifier of .row |
210
+ | `.row.ytop` | `align-items: flex-start` | align-items: flex-start — modifier of .row |
211
+ | `.row.ybot` | `align-items: flex-end` | align-items: flex-end — modifier of .row |
212
+ | `.grid` | `display: grid` | CSS grid container (columns composed via .grid-N / alignment below) |
213
+ | `.grid.center` | `place-items: center` | place-items: center — modifier of .grid |
214
+ | `.grid.xcenter` | `justify-items: center; text-align: center` | justify-items: center — modifier of .grid |
215
+ | `.grid.xleft` | `justify-items: start; text-align: left` | justify-items: start — modifier of .grid |
216
+ | `.grid.xright` | `justify-items: end; text-align: right` | justify-items: end — modifier of .grid |
217
+ | `.grid.xstretch` | `justify-items: stretch` | justify-items: stretch — modifier of .grid |
218
+ | `.grid.ycenter` | `align-items: center` | align-items: center — modifier of .grid |
219
+ | `.grid.ytop` | `align-items: start` | align-items: start — modifier of .grid |
220
+ | `.grid.ybot` | `align-items: end` | align-items: end — modifier of .grid |
221
+ | `.grid.ystretch` | `align-items: stretch` | align-items: stretch — modifier of .grid |
222
+ | `.grid.xbetween` | `justify-content: space-between` | justify-content: space-between — modifier of .grid |
223
+ | `.grid.xevenly` | `justify-content: space-evenly` | justify-content: space-evenly — modifier of .grid |
224
+ | `.grid.xaround` | `justify-content: space-around` | justify-content: space-around — modifier of .grid |
225
+ | `.grid.ybetween` | `align-content: space-between` | align-content: space-between — modifier of .grid |
226
+ | `.grid.yevenly` | `align-content: space-evenly` | align-content: space-evenly — modifier of .grid |
227
+ | `.grid.yaround` | `align-content: space-around` | align-content: space-around — modifier of .grid |
228
+ | `.wrap` | `flex-wrap: wrap` | Allow flex wrapping |
229
+ | `.grow` | `flex: 1 1 0%` | Flex grow — take remaining space (flex: 1 1 0%) |
230
+ | `.shrink-0` | `flex-shrink: 0` | Never shrink below content size |
231
+ | `.relative` | `position: relative` | position: relative (anchor for absolute children) |
232
+ | `.absolute` | `position: absolute` | position: absolute |
233
+ | `.fixed` | `position: fixed` | position: fixed |
234
+ | `.sticky` | `position: sticky` | position: sticky |
235
+ | `.scroll-y` | `overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain` | Vertical scroll inside a bounded height; needs an .h-* or a constraining flex parent |
236
+ | `.scroll-x` | `overflow-x: auto; overflow-y: hidden; overscroll-behavior: contain` | Horizontal scroll inside a bounded width; .reel adds snap points |
237
+ | `.card` | `padding: var(--space-bs); border: 1px solid var(--border); background: var(--bg-panel)` | Panel card: padded, bordered, panel background; arrow svg and footer behaviors included |
238
+ | `.arrow` | `color: var(--theme-color); transition: transform var(--speed1) var(--transout1)` | color: var(--theme-color) — child of .card |
239
+ | `.card[data-shape="modern"]` | `border-radius: var(--radius-sm)` | border-radius: var(--radius-sm) — attribute variant of .card |
240
+ | `.chip` | `font-size: var(--text-xs); font-weight: 500; letter-spacing: 0.01rem; …` | Small inline label — tag/badge duty (xs type, md radius) |
241
+ | `.prose-section` | `display: flex; flex-direction: column; gap: var(--space-lg)` | Vertical prose section (flex column, lg gap) |
242
+ | `.nav-section` | `display: flex; flex-direction: column; gap: var(--space-xs)` | Vertical nav section (flex column, xs gap) |
243
+ | `.page-header` | `display: flex; flex-direction: column; padding-bottom: var(--space-2xl); …` | Page header block (flex column, sm gap, 2xl bottom pad) |
244
+ | `.inputs-wrapper` | `display: flex; gap: var(--space-xs)` | Form field group (flex row, xs gap; labels at sm muted) |
245
+ | `.checkbox-wrapper` | `display: flex; align-items: center; gap: var(--space-xs)` | Checkbox row (flex, centered, xs gap; span at sm weight 500) |
246
+
247
+ ## Layer L3
248
+
249
+ Layouts and responsive grids. .grid-1/.grid-2/.grid-3/.grid-4/.grid-6 with divisor stepping (3→1, 4→2→1, 6→3→2→1), .cspan-* column spans, .card-grid (auto-fit), .prose (reading measure), .frame-* aspect-ratio boxes (from $frame-ratios), and .reel (scroll-snap rail).
250
+
251
+ | Class | Property / Expansion | Description |
252
+ |:---|:---|:---|
253
+ | `.frame-16-9` | `aspect-ratio: 16 / 9; overflow: hidden` | Aspect-ratio media frame (16/9) — img/video/iframe/svg fill and cover (generated from $frame-ratios in _00_config.sass) |
254
+ | `.frame-9-16` | `aspect-ratio: 9 / 16; overflow: hidden` | Aspect-ratio media frame (9/16) — img/video/iframe/svg fill and cover (generated from $frame-ratios in _00_config.sass) |
255
+ | `.frame-4-3` | `aspect-ratio: 4 / 3; overflow: hidden` | Aspect-ratio media frame (4/3) — img/video/iframe/svg fill and cover (generated from $frame-ratios in _00_config.sass) |
256
+ | `.frame-3-4` | `aspect-ratio: 3 / 4; overflow: hidden` | Aspect-ratio media frame (3/4) — img/video/iframe/svg fill and cover (generated from $frame-ratios in _00_config.sass) |
257
+ | `.frame-3-2` | `aspect-ratio: 3 / 2; overflow: hidden` | Aspect-ratio media frame (3/2) — img/video/iframe/svg fill and cover (generated from $frame-ratios in _00_config.sass) |
258
+ | `.frame-2-3` | `aspect-ratio: 2 / 3; overflow: hidden` | Aspect-ratio media frame (2/3) — img/video/iframe/svg fill and cover (generated from $frame-ratios in _00_config.sass) |
259
+ | `.frame-1-1` | `aspect-ratio: 1 / 1; overflow: hidden` | Aspect-ratio media frame (1/1) — img/video/iframe/svg fill and cover (generated from $frame-ratios in _00_config.sass) |
260
+ | `.grid-1` | `display: grid; grid-template-columns: repeat(1, minmax(0, 1fr))` | Gridding golden rules: exactly 3 items → 3→1, never 2+1; count 4 or a |
261
+ | `.grid-2` | `display: grid; grid-template-columns: repeat(1, minmax(0, 1fr)) · @min-width:1025px: grid-template-columns: repeat(2, minmax(0, 1fr))` | Responsive 2-column grid: 1 → 2 columns at 1025px |
262
+ | `.grid-3` | `display: grid; grid-template-columns: repeat(1, minmax(0, 1fr)) · @min-width:1025px: grid-template-columns: repeat(3, minmax(0, 1fr))` | Responsive 3-column grid: 1 → 3 columns at 1025px (3→1 golden rule) |
263
+ | `.grid-4` | `display: grid; grid-template-columns: repeat(1, minmax(0, 1fr)) · @min-width:1025px: grid-template-columns: repeat(2, minmax(0, 1fr)) · @min-width:1281px: grid-templ…` | Responsive 4-column grid: 1 → 2 → 4 columns (never 3+1) |
264
+ | `.grid-6` | `display: grid; grid-template-columns: repeat(1, minmax(0, 1fr)) · @min-width:1025px: grid-template-columns: repeat(3, minmax(0, 1fr)) · @min-width:1281px: grid-templ…` | Responsive 6-column grid: 1 → 3 → 6 columns (both golden rules hold) |
265
+ | `.cspan-1` | `grid-column: span 1` | Span 1 grid column |
266
+ | `.cspan-2` | `grid-column: span 2` | Span 2 grid columns |
267
+ | `.cspan-3` | `grid-column: span 3` | Span 3 grid columns |
268
+ | `.cspan-4` | `grid-column: span 4` | Span 4 grid columns |
269
+ | `.cspan-5` | `grid-column: span 5` | Span 5 grid columns |
270
+ | `.cspan-6` | `grid-column: span 6` | Span 6 grid columns |
271
+ | `.cspan-7` | `grid-column: span 7` | Span 7 grid columns |
272
+ | `.cspan-8` | `grid-column: span 8` | Span 8 grid columns |
273
+ | `.card-grid` | `display: grid; grid-template-columns: repeat(auto-fit, minmax(min(var(--card-min), 1…` | Auto-fit repeatable cards — column count negotiable, min track from config. |
274
+ | `.prose` | `max-width: var(--prose-clamp); margin-inline: auto; display: flex; …` | Prose — the reading measure (≤ 760px) + typographic rhythm (rhythm authored). |
275
+ | `.reel` | `display: flex; flex-direction: row; overflow-x: auto; …` | Reel — the human-driven scroll-snap rail (filmstrip). Open for carousel duty. |
276
+
277
+ ## Layer L4
278
+
279
+ Shells and canonical application markups. The .app-shell canon: .app-header, .app-main, .main-section, the role-bound rails (.sidebar-left drawer, .sidebar-right TOC), .app-footer, and .content-section with its narrow width modes.
280
+
281
+ | Class | Property / Expansion | Description |
282
+ |:---|:---|:---|
283
+ | `.get` | — | .get rule |
284
+ | `.app-shell` | `display: flex; flex-direction: column; position: relative; …` | Application shell root — flex column, 100vh, hosts header/main/footer and the drawer state |
285
+ | `.app-header` | `display: flex; flex-direction: row; align-items: center; …` | Sticky application header (var(--header-height)) |
286
+ | `.app-header.clamped` | `width: var(--content-clamp); margin-inline: auto` | width: var(--content-clamp) — modifier of .app-header |
287
+ | `.app-main` | `flex: 1 1 0%; min-width: 0; min-height: calc(100dvh - var(--fit-height)); …` | Main region between header and footer — flex row, fitted to 100dvh minus chrome |
288
+ | `.app-main.clamped` | `width: var(--content-clamp); margin-inline: auto` | width: var(--content-clamp) — modifier of .app-main |
289
+ | `.main-section` | `flex: 1 1 0%; min-width: 0` | Primary content column inside .app-main (flex: 1, min-width: 0) |
290
+ | `.sidebar-left` | `display: none; flex-shrink: 0; position: sticky; …` | Left = nav: visible ≥ lg; below, .open on .app-shell resurrects it as an |
291
+ | `.sidebar-right` | `display: none; flex-shrink: 0; position: sticky; …` | Left = nav: visible ≥ lg; below, .open on .app-shell resurrects it as an |
292
+ | `.app-shell.open .sidebar-left` | `display: block; position: fixed; left: 0; …` | display: block — combination rule (app-shellopen sidebar-left) |
293
+ | `.app-footer` | `display: flex; flex-direction: row; align-items: center; …` | Application footer (var(--footer-height)) |
294
+ | `.content-section` | `width: 100%; padding: var(--space-2xl) 0 · @min-width:769px: padding: var(--space-2xl) var(--space-bs) · @min-width:1025px: padding: var(--space-2xl) var(--space-bs)` | Page content block — responsive padding and narrow width modes |
295
+ | `.content-section.null` | `padding: 0 var(--space-bs)` | padding: 0 var(--space-bs) — modifier of .content-section |
296
+ | `.content-section.narrow-half` | `padding: var(--space-2xl) 0; width: 640px; margin-inline: auto` | padding: var(--space-2xl) 0 — modifier of .content-section |
297
+ | `.content-section.narrow-wide` | `padding: var(--space-2xl) 0; width: 720px; margin-inline: auto` | padding: var(--space-2xl) 0 — modifier of .content-section |
298
+ | `.content-section.narrow-full` | `width: 640px; margin-inline: auto` | width: 640px — modifier of .content-section |
299
+
300
+ ## Layer L5
301
+
302
+ Visuals and Interactions. Typography primitives and roles (_03), inputs, selects, links and the button quartet with its data-variant/data-shape/data-size axes (_07), surface fills, ink, the partition-law border set, elevation shadows, and responsive visibility (_08).
303
+
304
+ | Class | Property / Expansion | Description |
305
+ |:---|:---|:---|
306
+ | `.text-xs` | `font-size: var(--text-xs)` | primitives - they are simply class versions of the text tokens defined in tokens file |
307
+ | `.text-sm` | `font-size: var(--text-sm)` | font-size: var(--text-sm) |
308
+ | `.text-md` | `font-size: var(--text-md)` | font-size: var(--text-md) |
309
+ | `.text-bs` | `font-size: var(--text-bs)` | font-size: var(--text-bs) |
310
+ | `.text-lg` | `font-size: var(--text-lg)` | font-size: var(--text-lg) |
311
+ | `.text-xl` | `font-size: var(--text-xl)` | font-size: var(--text-xl) |
312
+ | `.text-2xl` | `font-size: var(--text-2xl)` | font-size: var(--text-2xl) |
313
+ | `.text-3xl` | `font-size: var(--text-3xl)` | font-size: var(--text-3xl) |
314
+ | `.text-4xl` | `font-size: var(--text-4xl)` | font-size: var(--text-4xl) |
315
+ | `.text-5xl` | `font-size: var(--text-5xl)` | font-size: var(--text-5xl) |
316
+ | `.text-body` | `font-size: var(--text-bs); line-height: 1.5` | semantics - definitions of what text to actually use where |
317
+ | `.text-body-lg` | `font-size: var(--text-lg); line-height: 1.5` | Body copy at large size (line-height 1.5) |
318
+ | `.text-body-sm` | `font-size: var(--text-sm); line-height: 1.5` | Body copy at small size (line-height 1.5) |
319
+ | `.page-title` | `font-size: var(--text-3xl); line-height: 1.1; font-weight: 700; …` | Page title — 3xl, 700, tight tracking |
320
+ | `.page-desc` | `font-size: var(--text-lg); line-height: 1.2` | Page description — lg, airy |
321
+ | `.page-heading-xl` | `font-size: var(--text-xl); line-height: 1.1; font-weight: 600; …` | Page heading, xl rung — 600, tight tracking |
322
+ | `.page-heading-lg` | `font-size: var(--text-lg); line-height: 1.1; font-weight: 600; …` | Page heading, lg rung — 600, tight tracking |
323
+ | `.page-heading-bs` | `font-size: var(--text-bs); line-height: 1.1; font-weight: 600; …` | Page heading, base rung — 600, tight tracking |
324
+ | `.card-title` | `font-size: var(--text-lg); font-weight: 600; line-height: 1.2` | Card title — lg, 600 |
325
+ | `.card-desc` | `font-size: var(--text-md); line-height: 1.2` | Card description — md |
326
+ | `.breadcrumb-link` | `color: var(--text-muted); font-size: var(--text-xs); text-transform: uppercase` | Breadcrumb link — muted, uppercased, theme color on hover |
327
+ | `.breadcrumb-spacer` | `color: var(--text-muted); font-size: var(--text-xs); text-transform: uppercase` | Breadcrumb spacer (non-link segment, same type treatment) |
328
+ | `.breadcrumb` | `display: flex; justify-content: flex-start; margin-left: -0.5rem` | Breadcrumb rail (flex, offset -0.5rem) |
329
+ | `.nav-link` | `font-size: var(--text-md); line-height: 1.2` | navigation text in headers, sidebars, etc. |
330
+ | `.nav-link-sm` | `font-size: var(--text-sm); line-height: 1.2` | Nav link type, small rung |
331
+ | `.nav-header` | `font-size: var(--text-sm); line-height: 1.1; font-weight: 500; …` | Nav group header — sm, 500, padded |
332
+ | `.header-nav` | — | Header nav block — uppercased md links, theme color on hover |
333
+ | `.lh11` | `line-height: 1.1` | line height modifiers |
334
+ | `.lh12` | `line-height: 1.2` | line-height: 1.2 |
335
+ | `.lh13` | `line-height: 1.3` | line-height: 1.3 |
336
+ | `.lh14` | `line-height: 1.4` | line-height: 1.4 |
337
+ | `.lh15` | `line-height: 1.5` | line-height: 1.5 |
338
+ | `.lh16` | `line-height: 1.6` | line-height: 1.6 |
339
+ | `.ls-tight-bs` | `letter-spacing: -0.01rem` | letter-spacing modifiers |
340
+ | `.ls-tight-lg` | `letter-spacing: -0.02rem` | letter-spacing: -0.02rem |
341
+ | `.ls-tight-xl` | `letter-spacing: -0.03rem` | letter-spacing: -0.03rem |
342
+ | `.ls-wide-bs` | `letter-spacing: 0.01rem` | letter-spacing: 0.01rem |
343
+ | `.ls-wide-lg` | `letter-spacing: 0.02rem` | letter-spacing: 0.02rem |
344
+ | `.ls-wide-xl` | `letter-spacing: 0.03rem` | letter-spacing: 0.03rem |
345
+ | `.weight-300` | `font-weight: 300` | font weight modifiers |
346
+ | `.weight-400` | `font-weight: 400` | font-weight: 400 |
347
+ | `.weight-500` | `font-weight: 500` | font-weight: 500 |
348
+ | `.weight-600` | `font-weight: 600` | font-weight: 600 |
349
+ | `.weight-700` | `font-weight: 700` | font-weight: 700 |
350
+ | `.weight-800` | `font-weight: 800` | font-weight: 800 |
351
+ | `.tt-u` | `text-transform: uppercase` | text transformers and aligners |
352
+ | `.tt-c` | `text-transform: capitalize` | text-transform: capitalize |
353
+ | `.ta-c` | `text-align: center` | text-align: center |
354
+ | `.ta-c.mleft` | `@max-width:1024px: text-align: left` | text-align: left — modifier of .ta-c |
355
+ | `.ta-l` | `text-align: left` | text-align: left |
356
+ | `.ta-r` | `text-align: right` | text-align: right |
357
+ | `.ta-r.mleft` | `@max-width:1024px: text-align: left` | text-align: left — modifier of .ta-r |
358
+ | `.mono` | `font-family: var(--font-mono)` | font usage shorthands |
359
+ | `.sans` | `font-family: var(--font-sans)` | Sans font stack (var(--font-sans)) |
360
+ | `.truncate` | `overflow: hidden; white-space: nowrap; text-overflow: ellipsis` | One-line ellipsis truncation |
361
+ | `.input` | `display: block; width: 100%; height: var(--height-lg); …` | Text input — themed field with focus ring |
362
+ | `.input.small` | `height: var(--height-bs); font-size: var(--text-sm)` | height: var(--height-bs) — modifier of .input |
363
+ | `.select` | `display: block; width: 100%; height: var(--height-lg); …` | Select dropdown — themed field with chevron and focus ring |
364
+ | `.select.small` | `height: var(--height-bs); font-size: var(--text-sm)` | height: var(--height-bs) — modifier of .select |
365
+ | `.link` | `color: var(--theme-color); text-decoration: none; transition: color var(--motionin1)` | Themed link — theme color, alt on hover |
366
+ | `.link-plain` | `color: var(--text-primary); text-decoration: none; transition: color var(--motionin1)` | Plain link — inherits ink, theme color on hover |
367
+ | `.link-parent` | `color: var(--text-primary); text-decoration: none` | Link block — hovers color its .link-title child instead of itself |
368
+ | `.link-title` | `transition: color var(--motionin1)` | transition: color var(--motionin1) — child of .link-parent |
369
+ | `a.nav-link` | `padding: var(--space-sm); border-radius: var(--radius-sm)` | Interactive form of .nav-link — padded, curved, hover fill |
370
+ | `button` | `display: flex; align-items: center; justify-content: center; …` | Element base for every button — the quartet root (align, height, focus, disabled states) |
371
+ | `button.icon` | `height: 24px; width: 24px; border: 1px solid transparent; …` | height: 24px — modifier of button |
372
+ | `button.modern` | `border-radius: var(--space-xs)` | border-radius: var(--space-xs) — modifier of button |
373
+ | `button.primary` | `background: var(--theme-color)` | background: var(--theme-color) — modifier of button |
374
+ | `button[data-variant="primary"]` | `background: var(--theme-color); color: var(--white-fixed); border: 1px solid var(--theme-color)` | background: var(--theme-color) — attribute variant of button |
375
+ | `button[data-variant="secondary"]` | `background: var(--state-surface); color: var(--text-primary); border: 1px solid var(--border-strong)` | background: var(--state-surface) — attribute variant of button |
376
+ | `button[data-variant="soft"]` | `background: var(--theme-color-sub); color: var(--white-fixed); border: 1px solid var(--theme-color-sub)` | background: var(--theme-color-sub) — attribute variant of button |
377
+ | `button[data-variant="outline"]` | `background: var(--bg); color: var(--text-primary); border: 1px solid var(--text-primary)` | background: var(--bg) — attribute variant of button |
378
+ | `button[data-variant="ghost"]` | `background: transparent; color: var(--text-primary); border: none` | background: transparent — attribute variant of button |
379
+ | `button[data-variant="link"]` | `background: transparent; color: var(--theme-color); border: none` | background: transparent — attribute variant of button |
380
+ | `button[data-variant="destructive"]` | `background: var(--danger); color: var(--white-fixed); border: 1px solid var(--danger)` | background: var(--danger) — attribute variant of button |
381
+ | `button[data-shape="modern"]` | `border-radius: var(--radius-sm)` | border-radius: var(--radius-sm) — attribute variant of button |
382
+ | `button[data-shape="curved"]` | `border-radius: var(--radius-md)` | border-radius: var(--radius-md) — attribute variant of button |
383
+ | `button[data-shape="round"]` | `border-radius: var(--radius-full)` | border-radius: var(--radius-full) — attribute variant of button |
384
+ | `button[data-size="sm"]` | `height: var(--height-sm); font-size: var(--text-sm)` | height: var(--height-sm) — attribute variant of button |
385
+ | `button[data-size="md"]` | `height: var(--height-md); font-size: var(--text-md)` | height: var(--height-md) — attribute variant of button |
386
+ | `button[data-size="bs"]` | `height: var(--height-bs); font-size: var(--text-bs)` | height: var(--height-bs) — attribute variant of button |
387
+ | `button[data-size="lg"]` | `height: var(--height-lg); font-size: var(--text-bs)` | height: var(--height-lg) — attribute variant of button |
388
+ | `a.primary` | `background: var(--theme-color); font-size: var(--text-lg); color: var(--white-fixed); …` | Primary call-to-action anchor — theme fill, sm elevation, modern corner optional |
389
+ | `a.primary.modern` | `border-radius: var(--space-xs)` | border-radius: var(--space-xs) — modifier of a.primary |
390
+ | `a.outline` | `background: transparent; font-size: var(--text-lg); color: var(--text-primary); …` | Outline call-to-action anchor — transparent fill, ink border, sm elevation |
391
+ | `a.outline.modern` | `border-radius: var(--space-xs)` | border-radius: var(--space-xs) — modifier of a.outline |
392
+ | `.bg` | `background: var(--bg)` | Bare background — page base fill (var(--bg)) |
393
+ | `.surface` | `background: var(--bg-surface)` | Bare background — surface fill (var(--bg-surface)) |
394
+ | `.panel` | `background: var(--bg-panel)` | Bare background — panel fill (var(--bg-panel)) |
395
+ | `.sunken` | `background: var(--bg-sunken)` | Bare background — sunken fill (var(--bg-sunken)) |
396
+ | `.raised` | `background: var(--bg-raised)` | Bare background — raised fill (var(--bg-raised)) |
397
+ | `.extra` | `background: var(--bg-extra)` | Bare background — extra fill (var(--bg-extra)) |
398
+ | `.text-primary` | `color: var(--text-primary)` | color: var(--text-primary) |
399
+ | `.text-secondary` | `color: var(--text-secondary)` | color: var(--text-secondary) |
400
+ | `.text-muted` | `color: var(--text-muted)` | color: var(--text-muted) |
401
+ | `.text-inverse` | `color: var(--text-inverse)` | color: var(--text-inverse) |
402
+ | `.text-white` | `color: var(--white-fixed)` | color: var(--white-fixed) |
403
+ | `.text-black` | `color: var(--black-fixed)` | color: var(--black-fixed) |
404
+ | `.text-theme` | `color: var(--theme-color)` | color: var(--theme-color) |
405
+ | `.text-success` | `color: var(--success)` | color: var(--success) |
406
+ | `.text-warning` | `color: var(--warning)` | color: var(--warning) |
407
+ | `.text-danger` | `color: var(--danger)` | color: var(--danger) |
408
+ | `.text-info` | `color: var(--info)` | color: var(--info) |
409
+ | `.bg-success` | `background: var(--success)` | Status fills, mirroring the status inks above. A dot or chip that carries the |
410
+ | `.bg-warning` | `background: var(--warning)` | background: var(--warning) |
411
+ | `.bg-danger` | `background: var(--danger)` | background: var(--danger) |
412
+ | `.bg-info` | `background: var(--info)` | background: var(--info) |
413
+ | `.border` | `border: 1px solid var(--border)` | Full border, standard weight (var(--border)) |
414
+ | `.border-subtle` | `border: 1px solid var(--border-subtle)` | Full border, subtle weight (var(--border-subtle)) |
415
+ | `.border-strong` | `border: 1px solid var(--border-strong)` | Full border, strong weight (var(--border-strong)) |
416
+ | `.bt` | `border-top: 1px solid var(--border)` | border-top: 1px solid var(--border) |
417
+ | `.br` | `border-right: 1px solid var(--border)` | border-right: 1px solid var(--border) |
418
+ | `.bb` | `border-bottom: 1px solid var(--border)` | border-bottom: 1px solid var(--border) |
419
+ | `.bl` | `border-left: 1px solid var(--border)` | border-left: 1px solid var(--border) |
420
+ | `.bt-str` | `border-top: 1px solid var(--border-strong)` | border-top: 1px solid var(--border-strong) |
421
+ | `.br-str` | `border-right: 1px solid var(--border-strong)` | border-right: 1px solid var(--border-strong) |
422
+ | `.bb-str` | `border-bottom: 1px solid var(--border-strong)` | border-bottom: 1px solid var(--border-strong) |
423
+ | `.bl-str` | `border-left: 1px solid var(--border-strong)` | border-left: 1px solid var(--border-strong) |
424
+ | `.bt-sub` | `border-top: 1px solid var(--border-subtle)` | border-top: 1px solid var(--border-subtle) |
425
+ | `.br-sub` | `border-right: 1px solid var(--border-subtle)` | border-right: 1px solid var(--border-subtle) |
426
+ | `.bb-sub` | `border-bottom: 1px solid var(--border-subtle)` | border-bottom: 1px solid var(--border-subtle) |
427
+ | `.bl-sub` | `border-left: 1px solid var(--border-subtle)` | border-left: 1px solid var(--border-subtle) |
428
+ | `.shadow-xs` | `box-shadow: var(--shadow-xs)` | box-shadow: var(--shadow-xs) |
429
+ | `.shadow-sm` | `box-shadow: var(--shadow-sm)` | box-shadow: var(--shadow-sm) |
430
+ | `.shadow-md` | `box-shadow: var(--shadow-md)` | box-shadow: var(--shadow-md) |
431
+ | `.shadow-bs` | `box-shadow: var(--shadow-bs)` | box-shadow: var(--shadow-bs) |
432
+ | `.shadow-lg` | `box-shadow: var(--shadow-lg)` | box-shadow: var(--shadow-lg) |
433
+ | `.shadow-xl` | `box-shadow: var(--shadow-xl)` | box-shadow: var(--shadow-xl) |
434
+ | `.shadow-2xl` | `box-shadow: var(--shadow-2xl)` | box-shadow: var(--shadow-2xl) |
435
+ | `.shadow-3xl` | `box-shadow: var(--shadow-3xl)` | box-shadow: var(--shadow-3xl) |
436
+ | `.hide-mobile` | `@max-width:1024px: display: none` | Display none at ≤1024px |
437
+ | `.hide-desktop` | `@min-width:1025px: display: none` | Display none at ≥1025px |
438
+ | `.orange1` | `color: var(--orangepop1)` | special color classes |
439
+ | `.orange2` | `color: var(--orangepop2)` | color: var(--orangepop2) |
440
+ | `.orange3` | `color: var(--orangepop3)` | color: var(--orangepop3) |
441
+ | `.orange4` | `color: var(--orangepop4)` | color: var(--orangepop4) |
442
+ | `.orange5` | `color: var(--orangepop5)` | color: var(--orangepop5) |
443
+ | `.orange6` | `color: var(--orangepop6)` | color: var(--orangepop6) |
444
+
445
+ ## Layer Custom
446
+
447
+ Sanctioned extension point (_09_own.sass). Contains project-specific overrides and third-party styling additions that cannot be expressed via canonical layers.
448
+
449
+ | Class | Property / Expansion | Description |
450
+ |:---|:---|:---|
451
+ | `.site-logomotif` | `height: 48px; transform-origin: center center; transition: transform 210ms var(--transin2)` | Site logo motif — 48px, scales 1.2 on hover |
452
+ | `.logotype` | `height: 28px` | Logotype — 28px wordmark |
453
+ | `.project-circle` | `border-radius: 24px; width: 16px; height: 16px` | Project dot — 16px circle |
454
+ | `.mascot` | `display: inline-block; position: relative; flex: none; …` | Mascot (src/lib/comps/Mascot.svelte): CSS-only "3D feel" logo. |
455
+ | `.mascot-bob` | `display: block` | display: block |
456
+ | `.mascot-tilt` | `display: block` | display: block |
457
+ | `.mascot-bobs .mascot-bob` | `animation: mascot-bob 3.6s ease-in-out infinite alternate` | animation: mascot-bob 3.6s ease-in-out infinite alternate — combination rule (mascot-bobs mascot-bob) |
458
+ | `.mascot-base` | `display: block; user-select: none; -webkit-user-drag: none` | display: block |
459
+ | `.mascot-overlay` | `position: absolute; inset: 0; width: 100%; …` | position: absolute |
460
+ | `.mascot-mask` | `mask-type: alpha` | mask-type: alpha |
461
+ | `.mascot-pupil-l` | `transform: translate(calc(var(--mascot-plx, 0) * 1px), calc(var(--mas…` | transform: translate(calc(var(--mascot-plx, 0) * 1px), calc(var(--mas… |
462
+ | `.mascot-pupil-r` | `transform: translate(calc(var(--mascot-prx, 0) * 1px), calc(var(--mas…` | transform: translate(calc(var(--mascot-prx, 0) * 1px), calc(var(--mas… |
463
+ | `.mascot-gloss` | `opacity: 0.42; transform: translate(calc(var(--mascot-gx, 400) * 1px), calc(var(--ma…` | opacity: 0.42 |
464
+ | `.mascot-shade` | `opacity: 0.55; transform: translate(calc((1024 - var(--mascot-gx, 400)) * 1px), calc…` | opacity: 0.55 |
465
+ | `.mascot-blinks .mascot-lid` | `animation: mascot-blink 5.2s ease-in-out infinite` | animation: mascot-blink 5.2s ease-in-out infinite — combination rule (mascot-blinks mascot-lid) |
466
+ | `.mascotgl` | `display: inline-block; position: relative; flex: none; …` | MascotGL (src/lib/comps/MascotGL.svelte): WebGL2 lab version of the mascot. |
467
+ | `.mascotgl-spacer` | `display: block` | display: block |
468
+ | `.mascotgl-canvas` | `position: absolute; left: 50%; top: 50%; …` | position: absolute |
469
+ | `.mascotgl-ready` | `opacity: 1` | opacity: 1 |
470
+ | `.mascotgl-compact .mascotgl-canvas` | `width: 130%; height: 130%` | Header-sized: 15% overhang per side (EXTENT_COMPACT = 0.65), still outside the layout box. |
471
+ | `.hero-name` | `font-weight: 800; font-size: calc(var(--text-5xl) * 2); letter-spacing: -0.2rem` | Hero display name — text-5xl doubled, 800, tight tracking |
472
+ | `.accordion` | `display: flex; flex-direction: column; gap: var(--space-xs)` | Accordion group — vertical stack of .accordion-item |
473
+ | `.accordion-item` | `border: 1px solid var(--border); border-radius: var(--radius-md); background: var(--bg-surface)` | Accordion item — bordered, curved shell hosting trigger and content |
474
+ | `.accordion-content` | `display: grid; grid-template-rows: 0fr; padding: 0; …` | Collapsible region of an .accordion-item — 0fr→1fr grid transition |
475
+ | `.accordion-panel` | `overflow: hidden; min-height: 0` | The panel is what collapses. It needs min-height: 0 so the grid row can |
476
+ | `.accordion-item.open .accordion-content` | `grid-template-rows: 1fr; padding: var(--space-xs)` | grid-template-rows: 1fr — combination rule (accordion-itemopen accordion-content) |
477
+ | `.accordion-trigger` | `display: flex; flex-direction: row; align-items: center; …` | Accordion trigger button — full-width, hover/focus states |
@@ -0,0 +1,14 @@
1
+ ---
2
+ id: registry-master
3
+ title: Master Class & Token Registry
4
+ type: design
5
+ tags: [registry, classes, tokens, grep, reference, complete]
6
+ summary: The complete, grepable master registry of all CSS classes, tokens, modifiers, and canonical markup structures in Fractalstyler2.
7
+ updated: 2026-10-06
8
+ ---
9
+
10
+ # Master Class & Token Registry
11
+
12
+ This document is mirrored from [`REGISTRY.md`](../REGISTRY.md) at the repository root.
13
+
14
+ Please refer to [**`../REGISTRY.md`**](../REGISTRY.md) for the single, definitive, grepable master registry.