zeus-css 1.0.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 (105) hide show
  1. package/README.md +81 -0
  2. package/bin/init.js +89 -0
  3. package/dist/zeus.css +8456 -0
  4. package/dist/zeus.min.css +1 -0
  5. package/package.json +44 -0
  6. package/scss/.stylelintrc.json +41 -0
  7. package/scss/API.md +168 -0
  8. package/scss/CHANGELOG.md +281 -0
  9. package/scss/LICENSE +21 -0
  10. package/scss/README.md +160 -0
  11. package/scss/cheatsheet.md +249 -0
  12. package/scss/dist/zeus.css +8465 -0
  13. package/scss/dist/zeus.css.map +1 -0
  14. package/scss/dist/zeus.min.css +1 -0
  15. package/scss/dist/zeus.min.css.map +1 -0
  16. package/scss/foundation/core/_api.scss +10 -0
  17. package/scss/foundation/core/_design.scss +33 -0
  18. package/scss/foundation/core/_engine.scss +18 -0
  19. package/scss/foundation/core/buttons/variants.scss +72 -0
  20. package/scss/foundation/core/design/_design-system.scss +41 -0
  21. package/scss/foundation/core/design/_validate.scss +114 -0
  22. package/scss/foundation/core/design/borders/border-line.scss +29 -0
  23. package/scss/foundation/core/design/borders/border-radius.scss +31 -0
  24. package/scss/foundation/core/design/buttons/sizes.scss +32 -0
  25. package/scss/foundation/core/design/colors/_color-derivation.scss +80 -0
  26. package/scss/foundation/core/design/colors/base-colors.scss +31 -0
  27. package/scss/foundation/core/design/colors/semantic-colors.scss +130 -0
  28. package/scss/foundation/core/design/core/basic.scss +40 -0
  29. package/scss/foundation/core/design/dimensions/sizes.scss +29 -0
  30. package/scss/foundation/core/design/dimensions/spaces.scss +42 -0
  31. package/scss/foundation/core/design/effects/_z-index.scss +30 -0
  32. package/scss/foundation/core/design/effects/shadows.scss +65 -0
  33. package/scss/foundation/core/design/layout/grid.scss +86 -0
  34. package/scss/foundation/core/design/typography/typography.scss +435 -0
  35. package/scss/foundation/core/engine/_fluid-core.scss +54 -0
  36. package/scss/foundation/core/engine/animations.scss +91 -0
  37. package/scss/foundation/core/engine/buttons.scss +226 -0
  38. package/scss/foundation/core/engine/color-api.scss +37 -0
  39. package/scss/foundation/core/engine/helpers.scss +39 -0
  40. package/scss/foundation/core/engine/layout.scss +156 -0
  41. package/scss/foundation/core/engine/responsive.scss +67 -0
  42. package/scss/foundation/core/engine/shadows.scss +186 -0
  43. package/scss/foundation/core/engine/shortcuts.scss +30 -0
  44. package/scss/foundation/core/engine/sizing.scss +49 -0
  45. package/scss/foundation/core/engine/theme-builder.scss +83 -0
  46. package/scss/foundation/core/engine/typographics.scss +44 -0
  47. package/scss/foundation/core/engine/typography-calc.scss +71 -0
  48. package/scss/foundation/foundation.scss +29 -0
  49. package/scss/foundation/views/_render.scss +13 -0
  50. package/scss/foundation/views/components/_alert.scss +103 -0
  51. package/scss/foundation/views/components/_avatar.scss +84 -0
  52. package/scss/foundation/views/components/_badge.scss +100 -0
  53. package/scss/foundation/views/components/_breadcrumb.scss +70 -0
  54. package/scss/foundation/views/components/_card.scss +117 -0
  55. package/scss/foundation/views/components/_dropdown.scss +123 -0
  56. package/scss/foundation/views/components/_form.scss +209 -0
  57. package/scss/foundation/views/components/_index.scss +20 -0
  58. package/scss/foundation/views/components/_modal.scss +138 -0
  59. package/scss/foundation/views/components/_pagination.scss +82 -0
  60. package/scss/foundation/views/components/_skeleton.scss +69 -0
  61. package/scss/foundation/views/components/_table.scss +94 -0
  62. package/scss/foundation/views/components/_tabs.scss +96 -0
  63. package/scss/foundation/views/components/_toast.scss +139 -0
  64. package/scss/foundation/views/components/_tooltip.scss +100 -0
  65. package/scss/foundation/views/patterns/_hero.scss +121 -0
  66. package/scss/foundation/views/patterns/_index.scss +8 -0
  67. package/scss/foundation/views/patterns/_sidebar-layout.scss +83 -0
  68. package/scss/foundation/views/render/_layer-order.scss +11 -0
  69. package/scss/foundation/views/render/classes/_animations.scss +233 -0
  70. package/scss/foundation/views/render/classes/_aspect-ratio.scss +17 -0
  71. package/scss/foundation/views/render/classes/_borders.scss +31 -0
  72. package/scss/foundation/views/render/classes/_buttons.scss +40 -0
  73. package/scss/foundation/views/render/classes/_colors.scss +83 -0
  74. package/scss/foundation/views/render/classes/_compounds.scss +103 -0
  75. package/scss/foundation/views/render/classes/_containers.scss +20 -0
  76. package/scss/foundation/views/render/classes/_misc-utils.scss +51 -0
  77. package/scss/foundation/views/render/classes/_position.scss +56 -0
  78. package/scss/foundation/views/render/classes/_sections.scss +30 -0
  79. package/scss/foundation/views/render/classes/_shadows.scss +198 -0
  80. package/scss/foundation/views/render/classes/_sizes.scss +39 -0
  81. package/scss/foundation/views/render/classes/_sizing-utils.scss +53 -0
  82. package/scss/foundation/views/render/classes/_spacing.scss +91 -0
  83. package/scss/foundation/views/render/classes/_state-variants.scss +47 -0
  84. package/scss/foundation/views/render/classes/_typography.scss +32 -0
  85. package/scss/foundation/views/render/classes/_utilities.scss +103 -0
  86. package/scss/foundation/views/render/classes/_z-index.scss +22 -0
  87. package/scss/foundation/views/render/classes/flexbox.scss +56 -0
  88. package/scss/foundation/views/render/classes/grid.scss +195 -0
  89. package/scss/foundation/views/render/classes.scss +116 -0
  90. package/scss/foundation/views/render/html-body.scss +54 -0
  91. package/scss/foundation/views/render/property-registration.scss +77 -0
  92. package/scss/foundation/views/render/reset.scss +147 -0
  93. package/scss/foundation/views/render/root-generator.scss +166 -0
  94. package/scss/foundation/views/render/root.scss +19 -0
  95. package/scss/foundation/views/render/typography.scss +129 -0
  96. package/scss/llms.txt +247 -0
  97. package/scss/package.json +89 -0
  98. package/scss/scripts/gen-cheatsheet.mjs +178 -0
  99. package/scss/scripts/gen-tokens.mjs +91 -0
  100. package/scss/scripts/test-compile.mjs +474 -0
  101. package/scss/zeus.config.scss +99 -0
  102. package/scss/zeus.customize.scss +246 -0
  103. package/scss/zeus.scss +17 -0
  104. package/scss/zeus.token.sets.example.scss +176 -0
  105. package/scss/zeus.tokens.json +687 -0
@@ -0,0 +1,42 @@
1
+ // ╔══════════════════════════════════════════════════════════════╗
2
+ // ║ ⚡ Zeus CSS — Spaces ║
3
+ // ║ ║
4
+ // ║ Design tokens and configuration for spaces. ║
5
+ // ╚══════════════════════════════════════════════════════════════╝
6
+
7
+ @use "sass:map";
8
+ @use "../../../../zeus.config" as config;
9
+ @use "../_validate" as validate;
10
+
11
+ // ╔══════════════════════════════════════════════════════════╗
12
+ // ║ 📐 SPACING TOKENS — Edit values here
13
+ // ║
14
+ // ║ Format: "name": (floor: N, ceil: N)
15
+ // ║ • min = mobile size (px, unitless number)
16
+ // ║ • max = desktop size (px, unitless number)
17
+ // ║ • Always fluid — clamp() by default
18
+ // ║
19
+ // ║ Output CSS variable: --space-{name}
20
+ // ╚══════════════════════════════════════════════════════════╝
21
+
22
+ // ── Defaults ─────────────────────────────────────────────────
23
+ $_space-defaults: (
24
+ "0": (floor: 0, ceil: 0),
25
+ "4xs": (floor: 1, ceil: 2),
26
+ "3xs": (floor: 2, ceil: 4),
27
+ "2xs": (floor: 4, ceil: 6),
28
+ "xs": (floor: 6, ceil: 8),
29
+ "sm": (floor: 8, ceil: 12),
30
+ "md": (floor: 12, ceil: 16),
31
+ "lg": (floor: 16, ceil: 24),
32
+ "xl": (floor: 24, ceil: 32),
33
+ "2xl": (floor: 32, ceil: 48),
34
+ "3xl": (floor: 48, ceil: 64),
35
+ "4xl": (floor: 64, ceil: 96),
36
+ );
37
+
38
+ // ── Developer can set $space BEFORE @use to override specific keys ──
39
+ $space: map.deep-merge($_space-defaults, config.$zeus-space);
40
+ @include validate.validate-all-responsive("space", $space);
41
+
42
+ // spaces can be used in padding, margin, gap, etc. throughout the design system.
@@ -0,0 +1,30 @@
1
+ // ╔══════════════════════════════════════════════════════════════╗
2
+ // ║ ⚡ Zeus CSS — Z-Index ║
3
+ // ║ ║
4
+ // ║ Design tokens and configuration for the stacking scale. ║
5
+ // ╚══════════════════════════════════════════════════════════════╝
6
+
7
+ @use "sass:map";
8
+ @use "../../../../zeus.config" as config;
9
+
10
+ // ╔══════════════════════════════════════════════════════════╗
11
+ // ║ 🧱 Z-INDEX SCALE ║
12
+ // ║ ║
13
+ // ║ Format: "name": N (unitless integer) ║
14
+ // ║ Output CSS variable: --z-{name} ║
15
+ // ╚══════════════════════════════════════════════════════════╝
16
+
17
+ // ── Defaults ─────────────────────────────────────────────────
18
+ $_z-index-defaults: (
19
+ "base": 0,
20
+ "dropdown": 100,
21
+ "sticky": 200,
22
+ "overlay": 900,
23
+ "modal-backdrop": 999,
24
+ "modal": 1000,
25
+ "toast": 1100,
26
+ "tooltip": 1200,
27
+ );
28
+
29
+ // ── Developer Override ──
30
+ $z-index: map.merge($_z-index-defaults, config.$zeus-z-index);
@@ -0,0 +1,65 @@
1
+ // ╔══════════════════════════════════════════════════════════════╗
2
+ // ║ ⚡ Zeus CSS — Shadows ║
3
+ // ║ ║
4
+ // ║ Design tokens and configuration for shadows. ║
5
+ // ╚══════════════════════════════════════════════════════════════╝
6
+
7
+ @use "sass:map";
8
+ @use "../../../../zeus.config" as config;
9
+
10
+ // ╔══════════════════════════════════════════════════════════╗
11
+ // ║ ☁️ SHADOW TOKENS
12
+ // ║
13
+ // ║ Format: "name": shadow-value
14
+ // ║ Output CSS variable: --shadow-{name}
15
+ // ╚══════════════════════════════════════════════════════════╝
16
+
17
+ // ── Defaults ─────────────────────────────────────────────────
18
+ $_shadows-defaults: (
19
+ "none": none,
20
+
21
+ // Elevation
22
+ "xs": (0px 1px 2px 0px rgb(132 132 132 / 43%)),
23
+ "sm": (0px 1px 3px 0px rgb(132 132 132 / 43%), 0px 1px 2px -1px rgb(132 132 132 / 43%)),
24
+ "md": (0px 4px 6px -1px rgb(132 132 132 / 43%), 0px 2px 4px -2px rgb(132 132 132 / 43%)),
25
+ "lg": (0px 10px 15px -3px rgb(132 132 132 / 43%), 0px 4px 6px -4px rgb(132 132 132 / 43%)),
26
+ "xl": (0px 20px 25px -5px rgb(132 132 132 / 43%), 0px 8px 10px -6px rgb(132 132 132 / 43%)),
27
+ "2xl": (0px 25px 50px -12px rgba(0, 0, 0, 0.25)),
28
+
29
+ // Semantic (Glows for colored elements) — derived from the brand's own
30
+ // CSS custom properties at runtime, via OKLCH relative-color syntax, so
31
+ // changing $zeus-colors also re-colors these shadows automatically
32
+ // instead of leaving them locked to a hardcoded blue/purple.
33
+ "primary": (0px 4px 12px 0px oklch(from var(--color-primary) l c h / 0.3)),
34
+ "secondary": (0px 4px 12px 0px oklch(from var(--color-secondary) l c h / 0.3)),
35
+ "success": (0px 4px 12px 0px rgba(34, 197, 94, 0.3)),
36
+ "warning": (0px 4px 12px 0px rgba(251, 146, 60, 0.3)),
37
+ "danger": (0px 4px 12px 0px rgba(239, 68, 68, 0.3)),
38
+ "info": (0px 4px 12px 0px rgba(14, 165, 233, 0.3)),
39
+
40
+ // Inner
41
+ "inner": (inset 0px 2px 4px 0px rgba(0, 0, 0, 0.06)),
42
+ "inner-lg": (inset 0px 4px 8px 0px rgb(132 132 132 / 43%)),
43
+
44
+ // Special effects — same brand-derivation rationale as above
45
+ "glow": (0px 0px 20px 0px oklch(from var(--color-primary) l c h / 0.5)),
46
+ "glow-lg": (0px 0px 40px 0px oklch(from var(--color-primary) l c h / 0.6)),
47
+ "outline": (0px 0px 0px 3px oklch(from var(--color-primary) l c h / 0.5)),
48
+
49
+ // Component specific recommendations
50
+ "card": (0px 2px 8px 0px rgba(0,0,0,0.08), 0px 1px 2px 0px rgba(0,0,0,0.06)),
51
+ "card-hover": (0px 8px 24px 0px rgba(0,0,0,0.12), 0px 2px 6px 0px rgba(0,0,0,0.08)),
52
+ "dropdown": (0px 10px 40px 0px rgba(0,0,0,0.15), 0px 2px 8px 0px rgb(132 132 132 / 43%)),
53
+ "modal": (0px 20px 60px 0px rgba(0,0,0,0.3), 0px 4px 16px 0px rgba(0,0,0,0.2)),
54
+ );
55
+
56
+ // ── Developer Override ──
57
+ $shadows: map.merge($_shadows-defaults, config.$zeus-shadows);
58
+
59
+ // -----------------------------------------------------------------------------
60
+ // HELPER FUNCTION
61
+ // -----------------------------------------------------------------------------
62
+
63
+ @function shadow($key) {
64
+ @return map.get($shadows, $key);
65
+ }
@@ -0,0 +1,86 @@
1
+ // ╔══════════════════════════════════════════════════════════════╗
2
+ // ║ ⚡ Zeus CSS — Grid ║
3
+ // ║ ║
4
+ // ║ Design tokens and configuration for grid. ║
5
+ // ╚══════════════════════════════════════════════════════════════╝
6
+
7
+ @use "sass:map";
8
+ @use "../../../../zeus.config" as config;
9
+ @use "../_validate" as validate;
10
+
11
+ // ============================================================
12
+ // ZEUS GRID — Layout Tokens
13
+ // ============================================================
14
+
15
+ $outer-max-width: config.$zeus-outer-max-width !default;
16
+
17
+ // ─── Breakpoints ─────────────────────────────────────────────
18
+ $_breakpoints-base-defaults: (
19
+ xs: 0,
20
+ sm: 576px,
21
+ md: 768px,
22
+ ml: 1024px,
23
+ lg: 1280px,
24
+ xl: 1920px,
25
+ xxl: $outer-max-width,
26
+ );
27
+ $_breakpoints-defaults: map.merge($_breakpoints-base-defaults, config.$zeus-breakpoints);
28
+ $_breakpoints-defaults: map.merge(
29
+ $_breakpoints-defaults,
30
+ (
31
+ xxl: map.get(config.$zeus-breakpoints, xxl) or $outer-max-width,
32
+ )
33
+ );
34
+ $breakpoints: () !default;
35
+ $breakpoints: map.merge($_breakpoints-defaults, $breakpoints);
36
+
37
+ // ─── Column gap tokens (fluid: min → max) ────────────────────
38
+ // Format: (floor: N, ceil: N) — unitless px numbers, resolved by useclamp-sizing() at :root
39
+ // Output CSS vars: --col-gap-xs, --col-gap-sm, --col-gap-md, --col-gap-lg, --col-gap-xl, --col-gap-xxl
40
+ $_column-gaps-base-defaults: (
41
+ xs: (
42
+ floor: 12,
43
+ ceil: 16,
44
+ ),
45
+ sm: (
46
+ floor: 16,
47
+ ceil: 20,
48
+ ),
49
+ md: (
50
+ floor: 20,
51
+ ceil: 28,
52
+ ),
53
+ lg: (
54
+ floor: 28,
55
+ ceil: 40,
56
+ ),
57
+ xl: (
58
+ floor: 36,
59
+ ceil: 48,
60
+ ),
61
+ xxl: (
62
+ floor: 40,
63
+ ceil: 64,
64
+ ),
65
+ );
66
+ $_column-gaps-defaults: map.deep-merge($_column-gaps-base-defaults, config.$zeus-column-gaps);
67
+ $column-gaps: () !default;
68
+ $column-gaps: map.deep-merge($_column-gaps-defaults, $column-gaps);
69
+ @include validate.validate-all-responsive("column-gaps", $column-gaps);
70
+
71
+ // ─── Container outer padding — fluid ─────────────────────────
72
+ // Format: (floor: N, ceil: N) — unitless px numbers
73
+ // Output CSS var: --padding-outer
74
+ // floor = mobile minimum, ceil = wide desktop maximum
75
+
76
+ // Based on useclamp-sizing() which defaults to the $container-bounds range
77
+ // (320px–2560px, see core/design/core/basic.scss).
78
+ // floor: 16 -> 16px padding at the 320px container floor (small mobile)
79
+ // ceil: 128 -> 128px padding at the 2560px container ceiling (ultra-wide desktop)
80
+ $_outer-padding-base-defaults: (
81
+ floor: 16,
82
+ ceil: 64,
83
+ );
84
+ $_outer-padding-defaults: map.merge($_outer-padding-base-defaults, config.$zeus-outer-padding);
85
+ $outer-padding: () !default;
86
+ $outer-padding: map.merge($_outer-padding-defaults, $outer-padding);
@@ -0,0 +1,435 @@
1
+ // ╔══════════════════════════════════════════════════════════════╗
2
+ // ║ ⚡ Zeus CSS — Typography ║
3
+ // ║ ║
4
+ // ║ Design tokens and configuration for typography. ║
5
+ // ╚══════════════════════════════════════════════════════════════╝
6
+
7
+ @use "sass:map";
8
+ @use "../../../../zeus.config" as config;
9
+ @use "../_validate" as validate;
10
+
11
+ // ╔══════════════════════════════════════════════════════════╗
12
+ // ║ 🔤 FONT FAMILY — declared once here
13
+ // ║ Inter for all roles · JetBrains Mono for code
14
+ // ╚══════════════════════════════════════════════════════════╝
15
+ $_inter: (
16
+ "Inter",
17
+ -apple-system,
18
+ BlinkMacSystemFont,
19
+ "Segoe UI",
20
+ system-ui,
21
+ sans-serif
22
+ );
23
+ $_mono: (
24
+ "JetBrains Mono",
25
+ "Fira Code",
26
+ "Cascadia Code",
27
+ "Courier New",
28
+ monospace
29
+ );
30
+
31
+ $_font-family-defaults: (
32
+ "primary": $_inter,
33
+ "secondary": $_inter,
34
+ "tertiary": $_inter,
35
+ "code": $_mono,
36
+ );
37
+
38
+ // ── Developer Override ──
39
+ $font-family: map.deep-merge($_font-family-defaults, config.$zeus-font-family);
40
+
41
+ // ╔══════════════════════════════════════════════════════════╗
42
+ // ║ 🔤 TYPOGRAPHY TOKENS — Edit values here
43
+ // ║
44
+ // ║ Each variant has:
45
+ // ║ family = key from $font-family map above
46
+ // ║ size = (floor: N, ceil: N) ← always fluid (clamp)
47
+ // ║ lh = line-height (unitless ratio)
48
+ // ║ ls = letter-spacing (em, 0 = none)
49
+ // ║ weight = font-weight (100-900)
50
+ // ║
51
+ // ║ Output CSS variable: --text-{name}
52
+ // ╚══════════════════════════════════════════════════════════╝
53
+
54
+ // ── Defaults ─────────────────────────────────────────────────
55
+ $_typography-defaults: (
56
+ // ── Display styles ──────────────────────────────────────
57
+ "display-xl": (family: "primary",
58
+ size: (floor: 56,
59
+ ceil: 96,
60
+ ),
61
+ lh: 1.1,
62
+ ls: -0.02,
63
+ weight: 800,
64
+ role: "heading",
65
+ ),
66
+ "display-lg": (family: "primary",
67
+ size: (floor: 48,
68
+ ceil: 80,
69
+ ),
70
+ lh: 1.1,
71
+ ls: -0.02,
72
+ weight: 800,
73
+ role: "heading",
74
+ ),
75
+ "display-md": (family: "primary",
76
+ size: (floor: 40,
77
+ ceil: 64,
78
+ ),
79
+ lh: 1.15,
80
+ ls: -0.01,
81
+ weight: 700,
82
+ role: "heading",
83
+ ),
84
+ // ── Typographic Heading Levels ─────────────────────────
85
+ "h1": (family: "primary",
86
+ size: (floor: 36,
87
+ ceil: 52,
88
+ ),
89
+ lh: 1.2,
90
+ ls: -0.01,
91
+ weight: 700,
92
+ role: "heading",
93
+ ),
94
+ "h1-light": (family: "primary",
95
+ size: (floor: 36,
96
+ ceil: 52,
97
+ ),
98
+ lh: 1.2,
99
+ ls: -0.01,
100
+ weight: 300,
101
+ role: "heading",
102
+ ),
103
+ "h2": (family: "primary",
104
+ size: (floor: 30,
105
+ ceil: 44,
106
+ ),
107
+ lh: 1.2,
108
+ ls: -0.01,
109
+ weight: 600,
110
+ role: "heading",
111
+ ),
112
+ "h2-light": (family: "primary",
113
+ size: (floor: 30,
114
+ ceil: 44,
115
+ ),
116
+ lh: 1.2,
117
+ ls: -0.01,
118
+ weight: 300,
119
+ role: "heading",
120
+ ),
121
+ "h3": (family: "primary",
122
+ size: (floor: 26,
123
+ ceil: 40,
124
+ ),
125
+ lh: 1.25,
126
+ ls: 0,
127
+ weight: 600,
128
+ role: "heading",
129
+ ),
130
+ "h3-light": (family: "primary",
131
+ size: (floor: 26,
132
+ ceil: 40,
133
+ ),
134
+ lh: 1.25,
135
+ ls: 0,
136
+ weight: 300,
137
+ role: "heading",
138
+ ),
139
+ "h4": (family: "primary",
140
+ size: (floor: 24,
141
+ ceil: 32,
142
+ ),
143
+ lh: 1.3,
144
+ ls: 0,
145
+ weight: 600,
146
+ role: "heading",
147
+ ),
148
+ "h4-light": (family: "primary",
149
+ size: (floor: 24,
150
+ ceil: 32,
151
+ ),
152
+ lh: 1.3,
153
+ ls: 0,
154
+ weight: 300,
155
+ role: "heading",
156
+ ),
157
+ "h5": (family: "primary",
158
+ size: (floor: 20,
159
+ ceil: 24,
160
+ ),
161
+ lh: 1.4,
162
+ ls: 0,
163
+ weight: 500,
164
+ role: "heading",
165
+ ),
166
+ "h5-light": (family: "primary",
167
+ size: (floor: 20,
168
+ ceil: 24,
169
+ ),
170
+ lh: 1.4,
171
+ ls: 0,
172
+ weight: 300,
173
+ role: "heading",
174
+ ),
175
+ "h6": (family: "primary",
176
+ size: (floor: 18,
177
+ ceil: 20,
178
+ ),
179
+ lh: 1.4,
180
+ ls: 0,
181
+ weight: 500,
182
+ role: "heading",
183
+ ),
184
+ "h6-light": (family: "primary",
185
+ size: (floor: 18,
186
+ ceil: 20,
187
+ ),
188
+ lh: 1.4,
189
+ ls: 0,
190
+ weight: 300,
191
+ role: "heading",
192
+ ),
193
+ // ── Body text ───────────────────────────────────────────
194
+ "body-xl": (family: "primary",
195
+ size: (floor: 20,
196
+ ceil: 24,
197
+ ),
198
+ lh: 1.6,
199
+ ls: 0,
200
+ weight: 400,
201
+ role: "body",
202
+ ),
203
+ "body-lg": (family: "primary",
204
+ size: (floor: 18,
205
+ ceil: 20,
206
+ ),
207
+ lh: 1.6,
208
+ ls: 0,
209
+ weight: 400,
210
+ role: "body",
211
+ ),
212
+ "body": (family: "primary",
213
+ size: (floor: 16,
214
+ ceil: 18,
215
+ ),
216
+ lh: 1.6,
217
+ ls: 0,
218
+ weight: 400,
219
+ role: "body",
220
+ ),
221
+ "body-md": (family: "primary",
222
+ size: (floor: 16,
223
+ ceil: 18,
224
+ ),
225
+ lh: 1.6,
226
+ ls: 0,
227
+ weight: 400,
228
+ role: "body",
229
+ ),
230
+ "body-bold": (family: "primary",
231
+ size: (floor: 16,
232
+ ceil: 18,
233
+ ),
234
+ lh: 1.6,
235
+ ls: 0,
236
+ weight: 700,
237
+ role: "body",
238
+ ),
239
+ "body-md-bold": (family: "primary",
240
+ size: (floor: 16,
241
+ ceil: 18,
242
+ ),
243
+ lh: 1.6,
244
+ ls: 0,
245
+ weight: 700,
246
+ role: "body",
247
+ ),
248
+ "body-semibold": (family: "primary",
249
+ size: (floor: 16,
250
+ ceil: 18,
251
+ ),
252
+ lh: 1.6,
253
+ ls: 0,
254
+ weight: 600,
255
+ role: "body",
256
+ ),
257
+ "body-md-semibold": (family: "primary",
258
+ size: (floor: 16,
259
+ ceil: 18,
260
+ ),
261
+ lh: 1.6,
262
+ ls: 0,
263
+ weight: 600,
264
+ role: "body",
265
+ ),
266
+ "body-medium": (family: "primary",
267
+ size: (floor: 16,
268
+ ceil: 18,
269
+ ),
270
+ lh: 1.6,
271
+ ls: 0,
272
+ weight: 500,
273
+ role: "body",
274
+ ),
275
+ "body-md-medium": (family: "primary",
276
+ size: (floor: 16,
277
+ ceil: 18,
278
+ ),
279
+ lh: 1.6,
280
+ ls: 0,
281
+ weight: 500,
282
+ role: "body",
283
+ ),
284
+ "body-sm": (family: "primary",
285
+ size: (floor: 14,
286
+ ceil: 16,
287
+ ),
288
+ lh: 1.5,
289
+ ls: 0,
290
+ weight: 400,
291
+ role: "body",
292
+ ),
293
+ "body-sm-bold": (family: "primary",
294
+ size: (floor: 14,
295
+ ceil: 16,
296
+ ),
297
+ lh: 1.5,
298
+ ls: 0,
299
+ weight: 700,
300
+ role: "body",
301
+ ),
302
+ "body-sm-semibold": (family: "primary",
303
+ size: (floor: 14,
304
+ ceil: 16,
305
+ ),
306
+ lh: 1.5,
307
+ ls: 0,
308
+ weight: 600,
309
+ role: "body",
310
+ ),
311
+ "body-xs": (family: "primary",
312
+ size: (floor: 12,
313
+ ceil: 14,
314
+ ),
315
+ lh: 1.5,
316
+ ls: 0,
317
+ weight: 400,
318
+ role: "body",
319
+ ),
320
+ // ── UI text ─────────────────────────────────────────────
321
+ "label": (family: "secondary",
322
+ size: (floor: 12,
323
+ ceil: 14,
324
+ ),
325
+ lh: 1.4,
326
+ ls: 0.01,
327
+ weight: 500,
328
+ role: "ui",
329
+ ),
330
+ "label-bold": (family: "secondary",
331
+ size: (floor: 12,
332
+ ceil: 14,
333
+ ),
334
+ lh: 1.4,
335
+ ls: 0.01,
336
+ weight: 700,
337
+ role: "ui",
338
+ ),
339
+ "caption": (family: "secondary",
340
+ size: (floor: 11,
341
+ ceil: 12,
342
+ ),
343
+ lh: 1.4,
344
+ ls: 0.01,
345
+ weight: 400,
346
+ role: "ui",
347
+ ),
348
+ "caption-bold": (family: "secondary",
349
+ size: (floor: 11,
350
+ ceil: 12,
351
+ ),
352
+ lh: 1.4,
353
+ ls: 0.01,
354
+ weight: 600,
355
+ role: "ui",
356
+ ),
357
+ "overline": (family: "secondary",
358
+ size: (floor: 14,
359
+ ceil: 16,
360
+ ),
361
+ lh: 1.3,
362
+ ls: 0.14,
363
+ weight: 600,
364
+ role: "ui",
365
+ ),
366
+ // ── Interactive ─────────────────────────────────────────
367
+ "link": (family: "tertiary",
368
+ size: (floor: 15,
369
+ ceil: 16,
370
+ ),
371
+ lh: 1.5,
372
+ ls: 0,
373
+ weight: 500,
374
+ role: "interactive",
375
+ ),
376
+ "link-bold": (family: "tertiary",
377
+ size: (floor: 15,
378
+ ceil: 16,
379
+ ),
380
+ lh: 1.5,
381
+ ls: 0,
382
+ weight: 700,
383
+ role: "interactive",
384
+ ),
385
+ "button": (family: "secondary",
386
+ size: (floor: 14,
387
+ ceil: 16,
388
+ ),
389
+ lh: 1.2,
390
+ ls: 0.02,
391
+ weight: 600,
392
+ role: "interactive",
393
+ ),
394
+ "button-lg": (family: "secondary",
395
+ size: (floor: 16,
396
+ ceil: 18,
397
+ ),
398
+ lh: 1.2,
399
+ ls: 0.02,
400
+ weight: 600,
401
+ role: "interactive",
402
+ ),
403
+ "button-sm": (family: "secondary",
404
+ size: (floor: 12,
405
+ ceil: 14,
406
+ ),
407
+ lh: 1.2,
408
+ ls: 0.02,
409
+ weight: 600,
410
+ role: "interactive",
411
+ ),
412
+ // ── Monospaced & Raw Code Blocks ───────────────────────
413
+ "code": (family: "code",
414
+ size: (floor: 14,
415
+ ceil: 16,
416
+ ),
417
+ lh: 1.6,
418
+ ls: 0,
419
+ weight: 400,
420
+ role: "code",
421
+ ),
422
+ "code-sm": (family: "code",
423
+ size: (floor: 12,
424
+ ceil: 14,
425
+ ),
426
+ lh: 1.6,
427
+ ls: 0,
428
+ weight: 400,
429
+ role: "code",
430
+ )
431
+ );
432
+
433
+ // ── Developer Override ──
434
+ $typography: map.deep-merge($_typography-defaults, config.$zeus-typography);
435
+ @include validate.validate-all-typography($typography);