@teseor/css 1.16.0 → 2.0.1

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 (79) hide show
  1. package/dist/compiled.css +1 -1
  2. package/dist/index.css +145 -145
  3. package/package.json +1 -1
  4. package/src/base/docs.html +1 -1
  5. package/src/base/root.scss +1 -1
  6. package/src/base/typography/typography.scss +6 -6
  7. package/src/components/actions/button/api.json +1 -1
  8. package/src/components/actions/button/index.scss +1 -1
  9. package/src/components/content/divider/index.scss +2 -2
  10. package/src/components/data-display/avatar/index.scss +1 -1
  11. package/src/components/data-display/badge/api.json +1 -1
  12. package/src/components/data-display/badge/index.scss +1 -1
  13. package/src/components/data-display/data-list/index.scss +1 -1
  14. package/src/components/data-display/stat/api.json +3 -3
  15. package/src/components/data-display/stat/index.scss +5 -5
  16. package/src/components/data-display/table/index.scss +1 -1
  17. package/src/components/data-display/tag/index.scss +1 -1
  18. package/src/components/disclosure/accordion/index.scss +1 -1
  19. package/src/components/disclosure/disclosure/index.scss +2 -2
  20. package/src/components/feedback/alert/index.scss +1 -1
  21. package/src/components/feedback/progress/index.scss +1 -1
  22. package/src/components/feedback/skeleton/index.scss +1 -1
  23. package/src/components/feedback/toast/index.scss +2 -2
  24. package/src/components/forms/checkbox-group/api.json +1 -1
  25. package/src/components/forms/checkbox-group/index.scss +2 -2
  26. package/src/components/forms/fieldset/api.json +1 -1
  27. package/src/components/forms/fieldset/index.scss +2 -2
  28. package/src/components/forms/form-error/index.scss +1 -1
  29. package/src/components/forms/form-helper/index.scss +1 -1
  30. package/src/components/forms/label/index.scss +3 -3
  31. package/src/components/forms/radio-group/api.json +1 -1
  32. package/src/components/forms/radio-group/index.scss +2 -2
  33. package/src/components/forms/slider/index.scss +2 -2
  34. package/src/components/forms/toggle/index.scss +1 -1
  35. package/src/components/navigation/dropdown-menu/api.json +1 -1
  36. package/src/components/navigation/dropdown-menu/index.scss +1 -1
  37. package/src/components/navigation/menu/index.scss +2 -2
  38. package/src/components/navigation/nav/api.json +1 -1
  39. package/src/components/navigation/nav/index.scss +1 -1
  40. package/src/components/navigation/tabs/index.scss +1 -1
  41. package/src/components/overlays/dialog/index.scss +1 -1
  42. package/src/components/overlays/drawer/index.scss +2 -2
  43. package/src/components/overlays/modal/api.json +1 -1
  44. package/src/components/overlays/modal/index.scss +1 -1
  45. package/src/components/overlays/overlay/api.json +1 -1
  46. package/src/components/overlays/overlay/index.scss +1 -1
  47. package/src/components/overlays/popover/api.json +1 -1
  48. package/src/components/overlays/popover/index.scss +3 -3
  49. package/src/components/overlays/tooltip/api.json +1 -1
  50. package/src/components/overlays/tooltip/index.scss +1 -1
  51. package/src/components/typography/blockquote/api.json +1 -1
  52. package/src/components/typography/blockquote/index.scss +2 -2
  53. package/src/components/typography/code/index.scss +1 -1
  54. package/src/components/typography/code-block/api.json +1 -1
  55. package/src/components/typography/code-block/index.scss +1 -1
  56. package/src/components/typography/heading/api.json +9 -9
  57. package/src/components/typography/heading/index.scss +9 -9
  58. package/src/components/typography/list/api.json +1 -1
  59. package/src/components/typography/list/index.scss +2 -2
  60. package/src/config/guides/accessibility.docs.html +1 -1
  61. package/src/config/guides/theming.docs.html +43 -10
  62. package/src/config/guides/token-architecture.docs.html +87 -0
  63. package/src/config/tokens/_variables.scss +30 -30
  64. package/src/config/tokens/docs.html +10 -10
  65. package/src/config/tokens/typography.scss +47 -47
  66. package/src/config/tokens/zindex.scss +10 -10
  67. package/src/debug/index.scss +3 -3
  68. package/src/layout/footer/api.json +1 -1
  69. package/src/layout/footer/index.scss +1 -1
  70. package/src/layout/nav-rail/api.json +1 -1
  71. package/src/layout/nav-rail/index.scss +1 -1
  72. package/src/layout/page-header/index.scss +1 -1
  73. package/src/layout/sidebar/index.scss +1 -1
  74. package/src/layout/sidebar-nav/api.json +2 -2
  75. package/src/layout/sidebar-nav/index.scss +4 -4
  76. package/src/layout/topbar/api.json +1 -1
  77. package/src/layout/topbar/index.scss +1 -1
  78. package/src/utilities/scroll-animation/index.scss +1 -1
  79. package/src/utilities/text/text.scss +15 -15
@@ -49,7 +49,7 @@
49
49
  },
50
50
  {
51
51
  "name": "--ui-tooltip-z",
52
- "default": "var(--ui-z-tooltip)",
52
+ "default": "var(--ui-z-index-tooltip)",
53
53
  "description": "Z-index stacking order"
54
54
  },
55
55
  {
@@ -22,7 +22,7 @@
22
22
  // @desc Font size
23
23
  --_font-size: var(--ui-tooltip-font-size, var(--ui-font-size-sm, #{t.$font-size-sm}));
24
24
  // @desc Z-index stacking order
25
- --_z: var(--ui-tooltip-z, var(--ui-z-tooltip, #{t.$z-tooltip}));
25
+ --_z: var(--ui-tooltip-z, var(--ui-z-index-tooltip, #{t.$z-index-tooltip}));
26
26
  // @desc Arrow size
27
27
  --_arrow-size: var(--ui-tooltip-arrow-size, calc(#{t.$unit} / 2));
28
28
  }
@@ -38,7 +38,7 @@
38
38
  },
39
39
  {
40
40
  "name": "--ui-blockquote-line-height",
41
- "default": "var(--ui-leading-lg)",
41
+ "default": "var(--ui-line-height-lg)",
42
42
  "description": "Line height"
43
43
  }
44
44
  ]
@@ -6,7 +6,7 @@
6
6
  .blockquote {
7
7
  --_space-1: var(--ui-space-1, #{t.$space-1});
8
8
  --_font-size-sm: var(--ui-font-size-sm, #{t.$font-size-sm});
9
- --_leading-sm: var(--ui-leading-sm, #{t.$leading-sm});
9
+ --_leading-sm: var(--ui-line-height-sm, #{t.$line-height-sm});
10
10
  --_color-text-muted: var(--ui-color-text-muted, #{t.$color-text-muted});
11
11
  // @desc Border color
12
12
  --_border-color: var(--ui-blockquote-border-color, var(--ui-color-border-strong, #{t.$color-border-strong}));
@@ -19,7 +19,7 @@
19
19
  // @desc Font size
20
20
  --_font-size: var(--ui-blockquote-font-size, var(--ui-font-size-lg, #{t.$font-size-lg}));
21
21
  // @desc Line height
22
- --_line-height: var(--ui-blockquote-line-height, var(--ui-leading-lg, #{t.$leading-lg}));
22
+ --_line-height: var(--ui-blockquote-line-height, var(--ui-line-height-lg, #{t.$line-height-lg}));
23
23
  }
24
24
 
25
25
  // @modifier variant
@@ -8,7 +8,7 @@
8
8
  // Inline code
9
9
  .code {
10
10
  --_font-mono: var(--ui-font-mono, #{t.$font-mono});
11
- --_leading-tight-sm: var(--ui-leading-tight-sm, #{t.$leading-tight-sm});
11
+ --_leading-tight-sm: var(--ui-line-height-tight-sm, #{t.$line-height-tight-sm});
12
12
  --_border-width-sm: var(--ui-border-width-sm, #{t.$border-width-sm});
13
13
  // @desc Font size
14
14
  --_font-size: var(--ui-code-font-size, var(--ui-font-size-sm, #{t.$font-size-sm}));
@@ -48,7 +48,7 @@
48
48
  },
49
49
  {
50
50
  "name": "--ui-code-block-line-height",
51
- "default": "var(--ui-leading-tight-sm)",
51
+ "default": "var(--ui-line-height-tight-sm)",
52
52
  "description": "Line height"
53
53
  },
54
54
  {
@@ -21,7 +21,7 @@
21
21
  // @desc Font size
22
22
  --_font-size: var(--ui-code-block-font-size, var(--ui-font-size-sm, #{t.$font-size-sm}));
23
23
  // @desc Line height
24
- --_line-height: var(--ui-code-block-line-height, var(--ui-leading-tight-sm, #{t.$leading-tight-sm}));
24
+ --_line-height: var(--ui-code-block-line-height, var(--ui-line-height-tight-sm, #{t.$line-height-tight-sm}));
25
25
  // @desc Corner radius
26
26
  --_radius: var(--ui-code-block-radius, var(--ui-radius-md, #{t.$radius-md}));
27
27
  }
@@ -15,12 +15,12 @@
15
15
  },
16
16
  {
17
17
  "name": "--ui-heading-line-height",
18
- "default": "var(--ui-leading-xl)",
18
+ "default": "var(--ui-line-height-xl)",
19
19
  "description": "Line height"
20
20
  },
21
21
  {
22
22
  "name": "--ui-heading-weight",
23
- "default": "var(--ui-weight-bold)",
23
+ "default": "var(--ui-font-weight-bold)",
24
24
  "description": "Weight"
25
25
  },
26
26
  {
@@ -35,7 +35,7 @@
35
35
  },
36
36
  {
37
37
  "name": "--ui-heading-line-height-4xl",
38
- "default": "var(--ui-leading-4xl)",
38
+ "default": "var(--ui-line-height-4xl)",
39
39
  "description": "Line height 4xl"
40
40
  },
41
41
  {
@@ -45,7 +45,7 @@
45
45
  },
46
46
  {
47
47
  "name": "--ui-heading-line-height-3xl",
48
- "default": "var(--ui-leading-3xl)",
48
+ "default": "var(--ui-line-height-3xl)",
49
49
  "description": "Line height 3xl"
50
50
  },
51
51
  {
@@ -55,7 +55,7 @@
55
55
  },
56
56
  {
57
57
  "name": "--ui-heading-line-height-2xl",
58
- "default": "var(--ui-leading-2xl)",
58
+ "default": "var(--ui-line-height-2xl)",
59
59
  "description": "Line height 2xl"
60
60
  },
61
61
  {
@@ -65,7 +65,7 @@
65
65
  },
66
66
  {
67
67
  "name": "--ui-heading-line-height-xl",
68
- "default": "var(--ui-leading-xl)",
68
+ "default": "var(--ui-line-height-xl)",
69
69
  "description": "Line height at extra-large size"
70
70
  },
71
71
  {
@@ -75,7 +75,7 @@
75
75
  },
76
76
  {
77
77
  "name": "--ui-heading-line-height-lg",
78
- "default": "var(--ui-leading-lg)",
78
+ "default": "var(--ui-line-height-lg)",
79
79
  "description": "Line height at large size"
80
80
  },
81
81
  {
@@ -85,7 +85,7 @@
85
85
  },
86
86
  {
87
87
  "name": "--ui-heading-line-height-md",
88
- "default": "var(--ui-leading-tight-md)",
88
+ "default": "var(--ui-line-height-tight-md)",
89
89
  "description": "Line height at medium size"
90
90
  },
91
91
  {
@@ -95,7 +95,7 @@
95
95
  },
96
96
  {
97
97
  "name": "--ui-heading-line-height-sm",
98
- "default": "var(--ui-leading-tight-sm)",
98
+ "default": "var(--ui-line-height-tight-sm)",
99
99
  "description": "Line height at small size"
100
100
  }
101
101
  ]
@@ -8,9 +8,9 @@
8
8
  // @desc Font size
9
9
  --_font-size: var(--ui-heading-font-size, var(--ui-font-size-xl, #{t.$font-size-xl}));
10
10
  // @desc Line height
11
- --_line-height: var(--ui-heading-line-height, var(--ui-leading-xl, #{t.$leading-xl}));
11
+ --_line-height: var(--ui-heading-line-height, var(--ui-line-height-xl, #{t.$line-height-xl}));
12
12
  // @desc Weight
13
- --_weight: var(--ui-heading-weight, var(--ui-weight-bold, #{t.$weight-bold}));
13
+ --_weight: var(--ui-heading-weight, var(--ui-font-weight-bold, #{t.$font-weight-bold}));
14
14
  // @desc Text color
15
15
  --_color: var(--ui-heading-color, var(--ui-color-text, #{t.$color-text}));
16
16
  }
@@ -20,49 +20,49 @@
20
20
  // @desc Font size 4xl
21
21
  --_font-size: var(--ui-heading-font-size-4xl, var(--ui-font-size-4xl, #{t.$font-size-4xl}));
22
22
  // @desc Line height 4xl
23
- --_line-height: var(--ui-heading-line-height-4xl, var(--ui-leading-4xl, #{t.$leading-4xl}));
23
+ --_line-height: var(--ui-heading-line-height-4xl, var(--ui-line-height-4xl, #{t.$line-height-4xl}));
24
24
  }
25
25
 
26
26
  .heading--3xl {
27
27
  // @desc Font size 3xl
28
28
  --_font-size: var(--ui-heading-font-size-3xl, var(--ui-font-size-3xl, #{t.$font-size-3xl}));
29
29
  // @desc Line height 3xl
30
- --_line-height: var(--ui-heading-line-height-3xl, var(--ui-leading-3xl, #{t.$leading-3xl}));
30
+ --_line-height: var(--ui-heading-line-height-3xl, var(--ui-line-height-3xl, #{t.$line-height-3xl}));
31
31
  }
32
32
 
33
33
  .heading--2xl {
34
34
  // @desc Font size 2xl
35
35
  --_font-size: var(--ui-heading-font-size-2xl, var(--ui-font-size-2xl, #{t.$font-size-2xl}));
36
36
  // @desc Line height 2xl
37
- --_line-height: var(--ui-heading-line-height-2xl, var(--ui-leading-2xl, #{t.$leading-2xl}));
37
+ --_line-height: var(--ui-heading-line-height-2xl, var(--ui-line-height-2xl, #{t.$line-height-2xl}));
38
38
  }
39
39
 
40
40
  .heading--xl {
41
41
  // @desc Font size at extra-large size
42
42
  --_font-size: var(--ui-heading-font-size-xl, var(--ui-font-size-xl, #{t.$font-size-xl}));
43
43
  // @desc Line height at extra-large size
44
- --_line-height: var(--ui-heading-line-height-xl, var(--ui-leading-xl, #{t.$leading-xl}));
44
+ --_line-height: var(--ui-heading-line-height-xl, var(--ui-line-height-xl, #{t.$line-height-xl}));
45
45
  }
46
46
 
47
47
  .heading--lg {
48
48
  // @desc Font size at large size
49
49
  --_font-size: var(--ui-heading-font-size-lg, var(--ui-font-size-lg, #{t.$font-size-lg}));
50
50
  // @desc Line height at large size
51
- --_line-height: var(--ui-heading-line-height-lg, var(--ui-leading-lg, #{t.$leading-lg}));
51
+ --_line-height: var(--ui-heading-line-height-lg, var(--ui-line-height-lg, #{t.$line-height-lg}));
52
52
  }
53
53
 
54
54
  .heading--md {
55
55
  // @desc Font size at medium size
56
56
  --_font-size: var(--ui-heading-font-size-md, var(--ui-font-size-md, #{t.$font-size-md}));
57
57
  // @desc Line height at medium size
58
- --_line-height: var(--ui-heading-line-height-md, var(--ui-leading-tight-md, #{t.$leading-tight-md}));
58
+ --_line-height: var(--ui-heading-line-height-md, var(--ui-line-height-tight-md, #{t.$line-height-tight-md}));
59
59
  }
60
60
 
61
61
  .heading--sm {
62
62
  // @desc Font size at small size
63
63
  --_font-size: var(--ui-heading-font-size-sm, var(--ui-font-size-sm, #{t.$font-size-sm}));
64
64
  // @desc Line height at small size
65
- --_line-height: var(--ui-heading-line-height-sm, var(--ui-leading-tight-sm, #{t.$leading-tight-sm}));
65
+ --_line-height: var(--ui-heading-line-height-sm, var(--ui-line-height-tight-sm, #{t.$line-height-tight-sm}));
66
66
  }
67
67
 
68
68
  }
@@ -31,7 +31,7 @@
31
31
  },
32
32
  {
33
33
  "name": "--ui-list-line-height",
34
- "default": "var(--ui-leading-md)",
34
+ "default": "var(--ui-line-height-md)",
35
35
  "description": "Line height"
36
36
  }
37
37
  ]
@@ -7,13 +7,13 @@
7
7
  @layer components.tokens {
8
8
  .list {
9
9
  // @desc Spacing
10
- --_spacing: var(--ui-list-spacing, #{t.$unit});
10
+ --_spacing: var(--ui-list-spacing, var(--ui-unit, #{t.$unit}));
11
11
  // @desc Marker color
12
12
  --_marker-color: var(--ui-list-marker-color, var(--ui-color-text-muted, #{t.$color-text-muted}));
13
13
  // @desc Indent
14
14
  --_indent: var(--ui-list-indent, var(--ui-space-3, #{t.$space-3}));
15
15
  // @desc Line height
16
- --_line-height: var(--ui-list-line-height, var(--ui-leading-md, #{t.$leading-md}));
16
+ --_line-height: var(--ui-list-line-height, var(--ui-line-height-md, #{t.$line-height-md}));
17
17
  }
18
18
 
19
19
  // @modifier spacing
@@ -2,7 +2,7 @@
2
2
  title: Accessibility
3
3
  description: Built-in accessibility features: reduced motion, system theme detection, high contrast, and keyboard focus indicators
4
4
  skipValidation: true
5
- weight: 3
5
+ weight: 4
6
6
  ---
7
7
 
8
8
  <!-- @reduced_motion -->
@@ -28,6 +28,27 @@ weight: 2
28
28
  <button class="ui-button ui-button--danger">{{ t('danger', 'Danger') }}</button>
29
29
  </div>
30
30
 
31
+ <!-- @radius_theming -->
32
+ <!-- Override --ui-radius-base to control all corner radii at once. Set to 0 for sharp corners or increase for a softer look. sm/md/lg derive automatically via calc(). -->
33
+ <div class="demo-theme demo-theme--sharp">
34
+ <button class="ui-button">{{ t('sharp_button', 'Sharp') }}</button>
35
+ <div class="ui-card">
36
+ <p>{{ t('sharp_radius', 'radius-base: 0') }}</p>
37
+ </div>
38
+ </div>
39
+ <div class="demo-theme">
40
+ <button class="ui-button">{{ t('default_button', 'Default') }}</button>
41
+ <div class="ui-card">
42
+ <p>{{ t('default_radius', 'radius-base: 0.5rem') }}</p>
43
+ </div>
44
+ </div>
45
+ <div class="demo-theme demo-theme--round">
46
+ <button class="ui-button">{{ t('round_button', 'Round') }}</button>
47
+ <div class="ui-card">
48
+ <p>{{ t('round_radius', 'radius-base: 1rem') }}</p>
49
+ </div>
50
+ </div>
51
+
31
52
  <!-- @dark_mode -->
32
53
  <!-- Dark mode uses the CSS light-dark() function. Tokens resolve automatically based on color-scheme. Override with data-theme attribute. -->
33
54
  <div class="demo-theme">
@@ -46,8 +67,29 @@ weight: 2
46
67
  </div>
47
68
  </div>
48
69
 
70
+ <!-- @full_theme_examples -->
71
+ <!-- Complete theme customization using just 2-3 root tokens. -->
72
+ <div class="demo-theme demo-theme--corporate">
73
+ <button class="ui-button">{{ t('action', 'Action') }}</button>
74
+ <div class="ui-card">
75
+ <p>{{ t('corporate_theme', 'Corporate: teal, sharp corners, system font') }}</p>
76
+ </div>
77
+ </div>
78
+ <div class="demo-theme demo-theme--playful">
79
+ <button class="ui-button">{{ t('action', 'Action') }}</button>
80
+ <div class="ui-card">
81
+ <p>{{ t('playful_theme', 'Playful: orange, round corners') }}</p>
82
+ </div>
83
+ </div>
84
+ <div class="demo-theme demo-theme--minimal">
85
+ <button class="ui-button">{{ t('action', 'Action') }}</button>
86
+ <div class="ui-card">
87
+ <p>{{ t('minimal_theme', 'Minimal: neutral palette, no radius') }}</p>
88
+ </div>
89
+ </div>
90
+
49
91
  <!-- @component_overrides -->
50
- <!-- Override specific component tokens -->
92
+ <!-- Override specific component tokens for fine-grained control. -->
51
93
  <div class="demo-theme demo-buttons">
52
94
  <button class="ui-button ui-button--sm">{{ t('small', 'Small') }}</button>
53
95
  <button class="ui-button">{{ t('default', 'Default') }}</button>
@@ -58,12 +100,3 @@ weight: 2
58
100
  <p>{{ t('card_with_custom_padding', 'Card with custom padding') }}</p>
59
101
  </div>
60
102
  </div>
61
-
62
- <!-- @full_theme_example -->
63
- <!-- Complete theme customization -->
64
- <div class="demo-theme demo-theme--corporate">
65
- <button class="ui-button">{{ t('action', 'Action') }}</button>
66
- <div class="ui-card">
67
- <p>{{ t('corporate_theme_with_teal_accent_and_sharp_corners', 'Corporate theme with teal accent and sharp corners') }}</p>
68
- </div>
69
- </div>
@@ -0,0 +1,87 @@
1
+ ---
2
+ title: Token Architecture
3
+ description: Design token taxonomy — tiers, naming dictionary, theme roots, and derivation patterns
4
+ skipValidation: true
5
+ weight: 3
6
+ ---
7
+
8
+ <!-- @token_tiers -->
9
+ <!-- Tokens are organized into four tiers. Theme roots feed primitives, primitives feed semantic tokens, and semantic tokens feed component tokens. -->
10
+ <pre>
11
+ {{ t('tier_diagram',
12
+ 'Theme Roots Primitives Semantic Component
13
+ --ui-color-primary --ui-color-* --ui-color-text --ui-button-bg
14
+ --ui-unit --ui-space-* --ui-color-bg --ui-input-height
15
+ --ui-radius-base --ui-row-* --ui-color-border --ui-card-radius
16
+ --ui-font-sans --ui-font-size-* --ui-opacity-* --ui-alert-bg
17
+ --ui-radius-* --ui-overlay-*') }}
18
+ </pre>
19
+
20
+ <!-- @naming_dictionary -->
21
+ <!-- Every --ui-* token must use a prefix from this dictionary. The lint enforces it. -->
22
+ <table class="ui-table">
23
+ <thead>
24
+ <tr>
25
+ <th>{{ t('col_prefix', 'Prefix') }}</th>
26
+ <th>{{ t('col_scales', 'Scales') }}</th>
27
+ <th>{{ t('col_example', 'Example') }}</th>
28
+ </tr>
29
+ </thead>
30
+ <tbody>
31
+ <tr><td>unit</td><td>{{ t('singleton', 'singleton') }}</td><td>--ui-unit</td></tr>
32
+ <tr><td>row</td><td>1–6</td><td>--ui-row-2</td></tr>
33
+ <tr><td>space</td><td>px, quarter, half, 0–8</td><td>--ui-space-2</td></tr>
34
+ <tr><td>color</td><td>{{ t('open_ended', 'open-ended') }}</td><td>--ui-color-primary</td></tr>
35
+ <tr><td>font</td><td>sans, mono</td><td>--ui-font-sans</td></tr>
36
+ <tr><td>font-size</td><td>xs–4xl</td><td>--ui-font-size-lg</td></tr>
37
+ <tr><td>font-weight</td><td>normal, medium, semibold, bold</td><td>--ui-font-weight-bold</td></tr>
38
+ <tr><td>line-height</td><td>{{ t('open_ended', 'open-ended') }}</td><td>--ui-line-height-md</td></tr>
39
+ <tr><td>letter-spacing</td><td>display, body, caps</td><td>--ui-letter-spacing-caps</td></tr>
40
+ <tr><td>radius</td><td>base, sm, md, lg, full</td><td>--ui-radius-md</td></tr>
41
+ <tr><td>border-width</td><td>sm, md, lg</td><td>--ui-border-width-sm</td></tr>
42
+ <tr><td>shadow</td><td>sm, md, lg</td><td>--ui-shadow-lg</td></tr>
43
+ <tr><td>z-index</td><td>base–debug (10 levels)</td><td>--ui-z-index-modal</td></tr>
44
+ <tr><td>duration</td><td>instant–slower</td><td>--ui-duration-fast</td></tr>
45
+ <tr><td>ease</td><td>default, in, out, in-out</td><td>--ui-ease-out</td></tr>
46
+ <tr><td>opacity</td><td>disabled, loading</td><td>--ui-opacity-disabled</td></tr>
47
+ <tr><td>overlay</td><td>bg, bg-light, bg-blur, bg-subtle</td><td>--ui-overlay-bg</td></tr>
48
+ <tr><td>heading</td><td>{{ t('open_ended', 'open-ended') }}</td><td>--ui-heading-1-size</td></tr>
49
+ <tr><td>body / body-sm</td><td>{{ t('open_ended', 'open-ended') }}</td><td>--ui-body-weight</td></tr>
50
+ <tr><td>caption / lead / eyebrow</td><td>{{ t('open_ended', 'open-ended') }}</td><td>--ui-caption-size</td></tr>
51
+ <tr><td>input</td><td>{{ t('open_ended', 'open-ended') }}</td><td>--ui-input-height</td></tr>
52
+ </tbody>
53
+ </table>
54
+
55
+ <!-- @theme_root_tokens -->
56
+ <!-- Theme roots are the small set of tokens you override to create a brand theme. Everything else derives from them. -->
57
+ <pre>
58
+ {{ t('theme_roots_code',
59
+ ':root {
60
+ --ui-color-primary: oklch(0.6 0.2 260); /* brand hue */
61
+ --ui-color-neutral: oklch(0.5 0.01 260); /* neutral tint */
62
+ --ui-unit: 8px; /* grid base */
63
+ --ui-radius-base: 0.5rem; /* corner radius */
64
+ --ui-font-sans: system-ui, sans-serif; /* body typeface */
65
+ --ui-font-mono: monospace; /* code typeface */
66
+ }') }}
67
+ </pre>
68
+
69
+ <!-- @derivation -->
70
+ <!-- Tokens use color-mix() and calc() to derive values from roots. Change one root and dozens of tokens update automatically. -->
71
+ <pre>
72
+ {{ t('derivation_code',
73
+ '/* color-mix(): shade derivation from --ui-color-primary */
74
+ --ui-color-primary-light: color-mix(in oklch, var(--ui-color-primary), white 40%);
75
+ --ui-color-primary-dark: color-mix(in oklch, var(--ui-color-primary), black 30%);
76
+ --ui-color-primary-subtle: color-mix(in oklch, var(--ui-color-primary), transparent 85%);
77
+
78
+ /* calc(): radius derivation from --ui-radius-base */
79
+ --ui-radius-sm: calc(var(--ui-radius-base) * 0.5);
80
+ --ui-radius-md: var(--ui-radius-base);
81
+ --ui-radius-lg: calc(var(--ui-radius-base) * 1.5);
82
+ --ui-radius-full: 9999px;
83
+
84
+ /* calc(): spacing from --ui-unit */
85
+ --ui-space-1: var(--ui-unit); /* 8px */
86
+ --ui-space-2: calc(var(--ui-unit) * 2); /* 16px */') }}
87
+ </pre>
@@ -112,32 +112,32 @@ $font-size-3xl: 2rem; // 32px
112
112
  $font-size-4xl: 2.5rem; // 40px
113
113
 
114
114
  // Tight line heights (compact UI elements)
115
- $leading-tight-xs: $row;
116
- $leading-tight-sm: $row;
117
- $leading-tight-md: $unit * 3;
118
- $leading-tight-lg: $unit * 3;
115
+ $line-height-tight-xs: $row;
116
+ $line-height-tight-sm: $row;
117
+ $line-height-tight-md: $unit * 3;
118
+ $line-height-tight-lg: $unit * 3;
119
119
 
120
120
  // Normal line heights (body text)
121
- $leading-xs: $row;
122
- $leading-sm: $unit * 3;
123
- $leading-md: $unit * 3;
124
- $leading-lg: $row-2;
125
- $leading-xl: $row-2;
126
- $leading-2xl: $row-2;
127
- $leading-3xl: $unit * 5;
128
- $leading-4xl: $unit * 6;
121
+ $line-height-xs: $row;
122
+ $line-height-sm: $unit * 3;
123
+ $line-height-md: $unit * 3;
124
+ $line-height-lg: $row-2;
125
+ $line-height-xl: $row-2;
126
+ $line-height-2xl: $row-2;
127
+ $line-height-3xl: $unit * 5;
128
+ $line-height-4xl: $unit * 6;
129
129
 
130
130
  // Font weights
131
- $weight-normal: 400;
132
- $weight-medium: 500;
133
- $weight-semibold: 600;
134
- $weight-bold: 700;
131
+ $font-weight-normal: 400;
132
+ $font-weight-medium: 500;
133
+ $font-weight-semibold: 600;
134
+ $font-weight-bold: 700;
135
135
 
136
136
  // Letter spacing
137
- $tracking-display: -0.02em;
138
- $tracking-body: 0;
139
- $tracking-wide: 0.05em;
140
- $tracking-caps: 0.08em;
137
+ $letter-spacing-display: -0.02em;
138
+ $letter-spacing-body: 0;
139
+ $letter-spacing-wide: 0.05em;
140
+ $letter-spacing-caps: 0.08em;
141
141
 
142
142
  // Relative font sizes (for sub-elements sized relative to parent)
143
143
  $font-size-relative-xs: 0.6em;
@@ -170,16 +170,16 @@ $shadow-lg: 0 10px 15px hsl(220 10% 20% / 0.15);
170
170
  // ==========================================================================
171
171
  // 8. Z-index scale
172
172
  // ==========================================================================
173
- $z-base: 0;
174
- $z-sticky: 100;
175
- $z-dropdown: 200;
176
- $z-overlay: 300;
177
- $z-modal: 400;
178
- $z-popover: 500;
179
- $z-tooltip: 600;
180
- $z-toast: 700;
181
- $z-drawer: 800;
182
- $z-debug: 9999;
173
+ $z-index-base: 0;
174
+ $z-index-sticky: 100;
175
+ $z-index-dropdown: 200;
176
+ $z-index-overlay: 300;
177
+ $z-index-modal: 400;
178
+ $z-index-popover: 500;
179
+ $z-index-tooltip: 600;
180
+ $z-index-toast: 700;
181
+ $z-index-drawer: 800;
182
+ $z-index-debug: 9999;
183
183
 
184
184
  // ==========================================================================
185
185
  // 9. Motion
@@ -73,16 +73,16 @@ skipValidation: true
73
73
  <!-- @z_index -->
74
74
  <!-- Layering scale with gaps to allow insertion without renumbering. -->
75
75
  :root {
76
- --ui-z-base: 0;
77
- --ui-z-sticky: 100;
78
- --ui-z-dropdown: 200;
79
- --ui-z-overlay: 300;
80
- --ui-z-modal: 400;
81
- --ui-z-popover: 500;
82
- --ui-z-tooltip: 600;
83
- --ui-z-toast: 700;
84
- --ui-z-drawer: 800;
85
- --ui-z-debug: 9999;
76
+ --ui-z-index-base: 0;
77
+ --ui-z-index-sticky: 100;
78
+ --ui-z-index-dropdown: 200;
79
+ --ui-z-index-overlay: 300;
80
+ --ui-z-index-modal: 400;
81
+ --ui-z-index-popover: 500;
82
+ --ui-z-index-tooltip: 600;
83
+ --ui-z-index-toast: 700;
84
+ --ui-z-index-drawer: 800;
85
+ --ui-z-index-debug: 9999;
86
86
  }
87
87
 
88
88
  <!-- @semantic_colors -->