ui-style-kit-css 2.3.0 → 2.4.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 (120) hide show
  1. package/CHANGELOG.md +40 -2
  2. package/CONTRIBUTING.md +8 -1
  3. package/README.md +91 -42
  4. package/STYLE-MAP.md +9 -5
  5. package/dist/assets/bauhaus-barlow-OFL.txt +93 -0
  6. package/dist/assets/bauhaus-barlow-semibold.ttf +0 -0
  7. package/dist/assets/bauhaus-barlow.ttf +0 -0
  8. package/dist/assets/bauhaus-condensed-OFL.txt +93 -0
  9. package/dist/assets/bauhaus-condensed-bold.ttf +0 -0
  10. package/dist/assets/bauhaus-condensed-extrabold.ttf +0 -0
  11. package/dist/assets/bento-manrope-OFL.txt +93 -0
  12. package/dist/assets/bento-manrope.ttf +0 -0
  13. package/dist/assets/clay-grain.png +0 -0
  14. package/dist/assets/clay-rounded-OFL.txt +93 -0
  15. package/dist/assets/clay-rounded.ttf +0 -0
  16. package/dist/assets/neo-noir-corner-dark.png +0 -0
  17. package/dist/assets/neo-noir-corner-light.png +0 -0
  18. package/dist/assets/neo-noir-texture-dark.png +0 -0
  19. package/dist/assets/neo-noir-texture-light.png +0 -0
  20. package/dist/assets/organic-display-OFL.txt +93 -0
  21. package/dist/assets/organic-display.ttf +0 -0
  22. package/dist/assets/organic-icons-LICENSE.txt +21 -0
  23. package/dist/assets/organic-sans-OFL.txt +93 -0
  24. package/dist/assets/organic-sans.ttf +0 -0
  25. package/dist/ui-style-kit.css +47483 -15117
  26. package/dist/ui-style-kit.min.css +2 -2
  27. package/dist/ui-style-kit.visual.css +47344 -15106
  28. package/dist/ui-style-kit.visual.min.css +2 -2
  29. package/dist/ui-style-kit.with-bridge.css +47510 -15134
  30. package/dist/ui-style-kit.with-bridge.min.css +2 -2
  31. package/dist/visual/art-deco.css +2821 -279
  32. package/dist/visual/bauhaus.css +2 -4692
  33. package/dist/visual/bento.css +2 -4708
  34. package/dist/visual/brutalism.css +812 -224
  35. package/dist/visual/clay.css +2 -4786
  36. package/dist/visual/cyberpunk.css +2238 -267
  37. package/dist/visual/data-terminal.css +1671 -293
  38. package/dist/visual/editorial-luxe.css +1889 -243
  39. package/dist/visual/industrial-utility.css +2717 -255
  40. package/dist/visual/maximalist.css +1768 -447
  41. package/dist/visual/minimal-saas.css +1076 -382
  42. package/dist/visual/neo-noir.css +2 -4787
  43. package/dist/visual/neumorphism.css +1266 -388
  44. package/dist/visual/organic-modern.css +2 -4764
  45. package/dist/visual/paper-editorial.css +2551 -276
  46. package/dist/visual/retro-glass.css +2235 -319
  47. package/dist/visual/retrofuturism.css +1460 -382
  48. package/dist/visual/tactile.css +2251 -443
  49. package/dist/visual/technical-blueprint.css +2207 -285
  50. package/dist/visual/y2k.css +1481 -294
  51. package/docs/ART-DECO.md +80 -0
  52. package/docs/BAUHAUS.md +152 -0
  53. package/docs/BENTO.md +121 -0
  54. package/docs/CLAY.md +127 -0
  55. package/docs/DEMO-SHOWCASE.md +65 -0
  56. package/docs/ECOSYSTEM.md +4 -4
  57. package/docs/EDITORIAL-LUX.md +75 -0
  58. package/docs/INDUSTRIAL-UTILITY.md +131 -0
  59. package/docs/NATIVE-ELEMENTS.md +23 -17
  60. package/docs/NEO-NOIR.md +94 -0
  61. package/docs/ORGANIC-MODERN.md +91 -0
  62. package/docs/PAPER-EDITORIAL.md +63 -0
  63. package/docs/PUBLISHING.md +31 -10
  64. package/docs/RELEASE-2.4.0.md +88 -0
  65. package/docs/RETRO-GLASS.md +105 -0
  66. package/docs/STYLE-GUIDE.md +40 -25
  67. package/docs/TACTILE.md +38 -0
  68. package/docs/TECHNICAL-BLUEPRINT.md +60 -0
  69. package/docs/TOKENS.md +80 -3
  70. package/docs/superpowers/plans/2026-09-04-library-wide-theme-fallback-and-fidelity.md +331 -0
  71. package/docs/superpowers/specs/2026-09-04-library-wide-theme-fallback-and-fidelity-design.md +113 -0
  72. package/manifest.json +618 -27
  73. package/package.json +18 -10
  74. package/styles/art-deco.css +1397 -12
  75. package/styles/assets/bauhaus-barlow-OFL.txt +93 -0
  76. package/styles/assets/bauhaus-barlow-semibold.ttf +0 -0
  77. package/styles/assets/bauhaus-barlow.ttf +0 -0
  78. package/styles/assets/bauhaus-condensed-OFL.txt +93 -0
  79. package/styles/assets/bauhaus-condensed-bold.ttf +0 -0
  80. package/styles/assets/bauhaus-condensed-extrabold.ttf +0 -0
  81. package/styles/assets/bento-manrope-OFL.txt +93 -0
  82. package/styles/assets/bento-manrope.ttf +0 -0
  83. package/styles/assets/clay-grain.png +0 -0
  84. package/styles/assets/clay-rounded-OFL.txt +93 -0
  85. package/styles/assets/clay-rounded.ttf +0 -0
  86. package/styles/assets/neo-noir-corner-dark.png +0 -0
  87. package/styles/assets/neo-noir-corner-light.png +0 -0
  88. package/styles/assets/neo-noir-texture-dark.png +0 -0
  89. package/styles/assets/neo-noir-texture-light.png +0 -0
  90. package/styles/assets/organic-display-OFL.txt +93 -0
  91. package/styles/assets/organic-display.ttf +0 -0
  92. package/styles/assets/organic-icons-LICENSE.txt +21 -0
  93. package/styles/assets/organic-sans-OFL.txt +93 -0
  94. package/styles/assets/organic-sans.ttf +0 -0
  95. package/styles/bauhaus.css +878 -107
  96. package/styles/bento.css +1176 -108
  97. package/styles/brutalism.css +262 -11
  98. package/styles/clay.css +1303 -68
  99. package/styles/compat-layout.css +1 -2
  100. package/styles/components.css +105 -34
  101. package/styles/content-overflow.css +11 -5
  102. package/styles/cyberpunk.css +1852 -47
  103. package/styles/data-terminal.css +1116 -12
  104. package/styles/editorial-luxe.css +576 -12
  105. package/styles/industrial-utility.css +1771 -12
  106. package/styles/interactive-surface-bridge.css +30 -20
  107. package/styles/interactive-surface-theme.css +21 -11
  108. package/styles/maximalist.css +1214 -132
  109. package/styles/minimal-saas.css +459 -88
  110. package/styles/native-elements.css +347 -171
  111. package/styles/neo-noir.css +656 -14
  112. package/styles/neumorphism.css +1018 -146
  113. package/styles/organic-modern.css +688 -18
  114. package/styles/paper-editorial.css +1048 -12
  115. package/styles/retro-glass.css +635 -46
  116. package/styles/retrofuturism.css +944 -56
  117. package/styles/tactile.css +1810 -108
  118. package/styles/technical-blueprint.css +668 -17
  119. package/styles/theme-colors.css +2 -2
  120. package/styles/y2k.css +950 -42
@@ -23,11 +23,11 @@
23
23
  --saas-font-heading: var(--saas-font-display);
24
24
  --saas-font-control: var(--saas-font-display);
25
25
  --saas-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
26
- --saas-radius-xs: .25rem;
27
- --saas-radius-sm: .5rem;
28
- --saas-radius-md: 0.75rem;
29
- --saas-radius-lg: 1.125rem;
30
- --saas-radius-xl: calc(1.125rem + .5rem);
26
+ --saas-radius-xs: .1875rem;
27
+ --saas-radius-sm: .25rem;
28
+ --saas-radius-md: .375rem;
29
+ --saas-radius-lg: .5rem;
30
+ --saas-radius-xl: .75rem;
31
31
  --saas-radius-pill: 999px;
32
32
  --saas-space-1: .25rem;
33
33
  --saas-space-2: .5rem;
@@ -42,33 +42,105 @@
42
42
 
43
43
  [data-ui="minimal-saas"][data-mode="light"] {
44
44
  color-scheme: light;
45
+ --saas-fallback-bg-rgb: 248 249 252;
46
+ --saas-fallback-surface-rgb: 255 255 255;
47
+ --saas-fallback-surface-strong-rgb: 255 255 255;
48
+ --saas-fallback-surface-soft-rgb: 243 245 250;
49
+ --saas-fallback-text-rgb: 19 26 53;
50
+ --saas-fallback-text-muted-rgb: 97 105 131;
51
+ --saas-fallback-border-rgb: 220 225 236;
52
+ --saas-fallback-primary-rgb: 85 78 232;
53
+ --saas-fallback-primary-hover-rgb: 103 88 244;
54
+ --saas-fallback-primary-text-rgb: 255 255 255;
55
+ --saas-fallback-secondary-rgb: 49 110 219;
56
+ --saas-fallback-secondary-hover-rgb: 43 95 190;
57
+ --saas-fallback-secondary-text-rgb: 255 255 255;
58
+ --saas-fallback-accent-rgb: 103 88 244;
59
+ --saas-fallback-accent-text-rgb: 255 255 255;
60
+ --saas-fallback-success-rgb: 36 155 112;
61
+ --saas-fallback-success-text-rgb: 19 26 53;
62
+ --saas-fallback-warning-rgb: 215 146 31;
63
+ --saas-fallback-warning-text-rgb: 19 26 53;
64
+ --saas-fallback-danger-rgb: 214 30 70;
65
+ --saas-fallback-danger-text-rgb: 255 255 255;
66
+ --saas-fallback-link-rgb: 85 78 232;
67
+ --saas-fallback-focus-rgb: 85 78 232;
45
68
  --saas-panel-alpha: .98;
46
- --saas-panel-soft-alpha: .78;
47
- --saas-border-alpha: .58;
48
- --saas-shadow-alpha: .12;
49
- --saas-focus-alpha: .34;
69
+ --saas-panel-soft-alpha: .74;
70
+ --saas-border-alpha: .44;
71
+ --saas-shadow-alpha: .08;
72
+ --saas-focus-alpha: .3;
73
+ --saas-reference-shadow: 0 .5rem 1.5rem rgb(40 47 83 / .045);
50
74
  }
51
75
 
52
76
  [data-ui="minimal-saas"][data-mode="dark"] {
53
77
  color-scheme: dark;
78
+ --saas-fallback-bg-rgb: 7 17 31;
79
+ --saas-fallback-surface-rgb: 13 25 42;
80
+ --saas-fallback-surface-strong-rgb: 27 36 80;
81
+ --saas-fallback-surface-soft-rgb: 17 31 51;
82
+ --saas-fallback-text-rgb: 241 243 251;
83
+ --saas-fallback-text-muted-rgb: 180 187 205;
84
+ --saas-fallback-border-rgb: 43 58 80;
85
+ --saas-fallback-primary-rgb: 112 104 255;
86
+ --saas-fallback-primary-hover-rgb: 135 128 255;
87
+ --saas-fallback-primary-text-rgb: 7 17 31;
88
+ --saas-fallback-secondary-rgb: 85 145 255;
89
+ --saas-fallback-secondary-hover-rgb: 112 166 255;
90
+ --saas-fallback-secondary-text-rgb: 7 17 31;
91
+ --saas-fallback-accent-rgb: 87 73 239;
92
+ --saas-fallback-accent-text-rgb: 255 255 255;
93
+ --saas-fallback-success-rgb: 67 190 139;
94
+ --saas-fallback-success-text-rgb: 7 17 31;
95
+ --saas-fallback-warning-rgb: 239 173 49;
96
+ --saas-fallback-warning-text-rgb: 7 17 31;
97
+ --saas-fallback-danger-rgb: 255 61 104;
98
+ --saas-fallback-danger-text-rgb: 7 17 31;
99
+ --saas-fallback-link-rgb: 135 128 255;
100
+ --saas-fallback-focus-rgb: 112 104 255;
54
101
  --saas-panel-alpha: .92;
55
102
  --saas-panel-soft-alpha: .64;
56
103
  --saas-border-alpha: .52;
57
104
  --saas-shadow-alpha: .34;
58
105
  --saas-focus-alpha: .42;
106
+ --saas-reference-shadow: 0 .75rem 2.125rem rgb(0 0 0 / .16);
59
107
  }
60
108
 
61
109
  [data-ui="minimal-saas"][data-mode="contrast"] {
62
110
  color-scheme: dark;
111
+ --saas-fallback-bg-rgb: 0 0 0;
112
+ --saas-fallback-surface-rgb: 3 8 22;
113
+ --saas-fallback-surface-strong-rgb: 8 18 42;
114
+ --saas-fallback-surface-soft-rgb: 0 0 0;
115
+ --saas-fallback-text-rgb: 255 255 255;
116
+ --saas-fallback-text-muted-rgb: 238 244 255;
117
+ --saas-fallback-border-rgb: 255 255 255;
118
+ --saas-fallback-primary-rgb: 111 140 255;
119
+ --saas-fallback-primary-hover-rgb: 255 255 255;
120
+ --saas-fallback-primary-text-rgb: 0 0 0;
121
+ --saas-fallback-secondary-rgb: 0 217 255;
122
+ --saas-fallback-secondary-hover-rgb: 255 255 255;
123
+ --saas-fallback-secondary-text-rgb: 0 0 0;
124
+ --saas-fallback-accent-rgb: 184 196 255;
125
+ --saas-fallback-accent-text-rgb: 0 0 0;
126
+ --saas-fallback-success-rgb: 0 255 144;
127
+ --saas-fallback-success-text-rgb: 0 0 0;
128
+ --saas-fallback-warning-rgb: 255 225 0;
129
+ --saas-fallback-warning-text-rgb: 0 0 0;
130
+ --saas-fallback-danger-rgb: 255 63 95;
131
+ --saas-fallback-danger-text-rgb: 0 0 0;
132
+ --saas-fallback-link-rgb: 159 178 255;
133
+ --saas-fallback-focus-rgb: 255 255 255;
63
134
  --saas-panel-alpha: 1;
64
135
  --saas-panel-soft-alpha: .92;
65
136
  --saas-border-alpha: 1;
66
137
  --saas-shadow-alpha: .5;
67
138
  --saas-focus-alpha: .72;
139
+ --saas-reference-shadow: none;
68
140
  }
69
141
 
142
+ /** Preserves direct aliases for static extraction when a scheme is selected. */
70
143
  [data-ui="minimal-saas"][data-theme][data-mode] {
71
- /* Shared scheme aliases preserve the existing prefixed token API. */
72
144
  --saas-bg-rgb: var(--usk-bg-rgb);
73
145
  --saas-surface-rgb: var(--usk-surface-rgb);
74
146
  --saas-surface-strong-rgb: var(--usk-surface-strong-rgb);
@@ -83,15 +155,43 @@
83
155
  --saas-secondary-hover-rgb: var(--usk-secondary-hover-rgb);
84
156
  --saas-secondary-text-rgb: var(--usk-secondary-text-rgb);
85
157
  --saas-accent-rgb: var(--usk-accent-rgb);
86
- --saas-success-rgb: var(--usk-success-rgb);
87
- --saas-warning-rgb: var(--usk-warning-rgb);
88
- --saas-danger-rgb: var(--usk-danger-rgb);
89
- --saas-link-rgb: var(--usk-link-rgb);
90
158
  --saas-accent-text-rgb: var(--usk-accent-text-rgb);
159
+ --saas-success-rgb: var(--usk-success-rgb);
91
160
  --saas-success-text-rgb: var(--usk-success-text-rgb);
161
+ --saas-warning-rgb: var(--usk-warning-rgb);
92
162
  --saas-warning-text-rgb: var(--usk-warning-text-rgb);
163
+ --saas-danger-rgb: var(--usk-danger-rgb);
93
164
  --saas-danger-text-rgb: var(--usk-danger-text-rgb);
165
+ --saas-link-rgb: var(--usk-link-rgb);
94
166
  --saas-focus-rgb: var(--usk-focus-rgb);
167
+ }
168
+
169
+ [data-ui="minimal-saas"][data-mode] {
170
+ --usk-native-bg: var(--saas-bg);
171
+ /* Explicit schemes win; reference colors are used only when no scheme exists. */
172
+ --saas-bg-rgb: var(--usk-bg-rgb, var(--saas-fallback-bg-rgb));
173
+ --saas-surface-rgb: var(--usk-surface-rgb, var(--saas-fallback-surface-rgb));
174
+ --saas-surface-strong-rgb: var(--usk-surface-strong-rgb, var(--saas-fallback-surface-strong-rgb));
175
+ --saas-surface-soft-rgb: var(--usk-surface-soft-rgb, var(--saas-fallback-surface-soft-rgb));
176
+ --saas-text-rgb: var(--usk-text-rgb, var(--saas-fallback-text-rgb));
177
+ --saas-text-muted-rgb: var(--usk-text-muted-rgb, var(--saas-fallback-text-muted-rgb));
178
+ --saas-border-rgb: var(--usk-border-rgb, var(--saas-fallback-border-rgb));
179
+ --saas-primary-rgb: var(--usk-primary-rgb, var(--saas-fallback-primary-rgb));
180
+ --saas-primary-hover-rgb: var(--usk-primary-hover-rgb, var(--saas-fallback-primary-hover-rgb));
181
+ --saas-primary-text-rgb: var(--usk-primary-text-rgb, var(--saas-fallback-primary-text-rgb));
182
+ --saas-secondary-rgb: var(--usk-secondary-rgb, var(--saas-fallback-secondary-rgb));
183
+ --saas-secondary-hover-rgb: var(--usk-secondary-hover-rgb, var(--saas-fallback-secondary-hover-rgb));
184
+ --saas-secondary-text-rgb: var(--usk-secondary-text-rgb, var(--saas-fallback-secondary-text-rgb));
185
+ --saas-accent-rgb: var(--usk-accent-rgb, var(--saas-fallback-accent-rgb));
186
+ --saas-accent-text-rgb: var(--usk-accent-text-rgb, var(--saas-fallback-accent-text-rgb));
187
+ --saas-success-rgb: var(--usk-success-rgb, var(--saas-fallback-success-rgb));
188
+ --saas-success-text-rgb: var(--usk-success-text-rgb, var(--saas-fallback-success-text-rgb));
189
+ --saas-warning-rgb: var(--usk-warning-rgb, var(--saas-fallback-warning-rgb));
190
+ --saas-warning-text-rgb: var(--usk-warning-text-rgb, var(--saas-fallback-warning-text-rgb));
191
+ --saas-danger-rgb: var(--usk-danger-rgb, var(--saas-fallback-danger-rgb));
192
+ --saas-danger-text-rgb: var(--usk-danger-text-rgb, var(--saas-fallback-danger-text-rgb));
193
+ --saas-link-rgb: var(--usk-link-rgb, var(--saas-fallback-link-rgb));
194
+ --saas-focus-rgb: var(--usk-focus-rgb, var(--saas-fallback-focus-rgb));
95
195
  /* Native fallback selectors inherit visual identity through shared tokens. */
96
196
  --usk-native-surface: var(--saas-surface);
97
197
  --usk-native-surface-strong: var(--saas-surface-strong);
@@ -121,7 +221,58 @@
121
221
  --usk-native-focus-ring: var(--saas-focus-ring, 0 0 0 3px rgb(var(--saas-focus-rgb) / .28));
122
222
  --usk-native-border-width: 1px;
123
223
  --usk-native-field-gap: .5rem;
124
- --usk-native-panel-padding: var(--saas-space-5);
224
+ --usk-native-panel-padding: var(--saas-space-4);
225
+ --usk-native-control-min-block-size: 2.375rem;
226
+ --usk-native-control-padding-block: .5rem;
227
+ --usk-native-control-padding-inline: .75rem;
228
+ --usk-native-subcontrol-padding-block: .38rem;
229
+ --usk-native-subcontrol-padding-inline: .6rem;
230
+ --usk-native-choice-size: 1rem;
231
+ --usk-native-choice-background: var(--saas-control-bg);
232
+ --usk-native-choice-border: 1px solid var(--saas-border);
233
+ --usk-native-checkbox-radius: .25rem;
234
+ --usk-native-radio-radius: 50%;
235
+ --usk-native-choice-shadow: none;
236
+ --usk-native-choice-checked-background: var(--saas-primary);
237
+ --usk-native-choice-mark-color: var(--saas-on-primary);
238
+ --usk-native-select-indicator-image: linear-gradient(27deg, transparent 50%, var(--saas-primary) 50%), linear-gradient(153deg, var(--saas-primary) 50%, transparent 50%);
239
+ --usk-native-select-indicator-size: 0.34rem 0.34rem, 0.34rem 0.34rem;
240
+ --usk-native-select-indicator-position: calc(100% - 1rem) 50%, calc(100% - 0.72rem) 50%;
241
+ --usk-native-select-padding-inline-end: 2.25rem;
242
+ --usk-native-range-track-size: .32rem;
243
+ --usk-native-range-track-background: var(--saas-surface-soft);
244
+ --usk-native-range-track-border: 0 solid transparent;
245
+ --usk-native-range-track-radius: 999px;
246
+ --usk-native-range-track-shadow: none;
247
+ --usk-native-range-progress-background: var(--saas-primary);
248
+ --usk-native-range-thumb-size: .95rem;
249
+ --usk-native-range-thumb-background: var(--saas-primary);
250
+ --usk-native-range-thumb-border: 2px solid var(--saas-surface-strong);
251
+ --usk-native-range-thumb-radius: 50%;
252
+ --usk-native-range-thumb-shadow: 0 .2rem .5rem rgb(var(--saas-text-rgb) / .12);
253
+ --usk-native-progress-size: .35rem;
254
+ --usk-native-progress-track-background: var(--saas-surface-soft);
255
+ --usk-native-progress-track-border: 0 solid transparent;
256
+ --usk-native-progress-track-radius: 999px;
257
+ --usk-native-progress-track-shadow: none;
258
+ --usk-native-progress-value-background: var(--saas-primary);
259
+ --usk-native-progress-value-radius: inherit;
260
+ --usk-native-progress-value-shadow: none;
261
+ --usk-native-meter-optimum-background: var(--saas-success);
262
+ --usk-native-meter-suboptimum-background: var(--saas-warning);
263
+ --usk-native-meter-critical-background: var(--saas-danger);
264
+ --usk-native-file-button-background: var(--saas-primary);
265
+ --usk-native-file-button-border: 1px solid var(--saas-border);
266
+ --usk-native-file-button-radius: .2rem;
267
+ --usk-native-file-button-shadow: none;
268
+ --usk-native-color-swatch-border: 1px solid var(--saas-border);
269
+ --usk-native-color-swatch-radius: .2rem;
270
+ --usk-native-indicator-opacity: 0.72;
271
+ --usk-native-indicator-filter: none;
272
+ --usk-native-scrollbar-size: .65rem;
273
+ --usk-native-scrollbar-track: var(--saas-surface-soft);
274
+ --usk-native-scrollbar-thumb: var(--saas-primary);
275
+ --usk-native-scrollbar-radius: 2px;
125
276
  --saas-bg: rgb(var(--saas-bg-rgb));
126
277
  --saas-surface: rgb(var(--saas-surface-rgb) / var(--saas-panel-alpha));
127
278
  --saas-surface-strong: rgb(var(--saas-surface-strong-rgb) / var(--saas-panel-alpha));
@@ -135,6 +286,7 @@
135
286
  --saas-control-fg: var(--saas-text);
136
287
  --saas-primary: rgb(var(--saas-primary-rgb));
137
288
  --saas-primary-hover: rgb(var(--saas-primary-hover-rgb));
289
+ --saas-brand-2: rgb(var(--saas-primary-hover-rgb));
138
290
  --saas-primary-text: rgb(var(--saas-primary-text-rgb));
139
291
  --saas-secondary: rgb(var(--saas-secondary-rgb));
140
292
  --saas-secondary-hover: rgb(var(--saas-secondary-hover-rgb));
@@ -152,17 +304,20 @@
152
304
  --saas-link: rgb(var(--saas-link-rgb));
153
305
  --saas-focus: rgb(var(--saas-focus-rgb));
154
306
  --saas-focus-ring: 0 0 0 3px rgb(var(--saas-focus-rgb) / var(--saas-focus-alpha));
307
+ --saas-shadow-sm: 0 1px 2px rgb(var(--saas-text-rgb) / calc(var(--saas-shadow-alpha) * .65));
308
+ --saas-shadow-md: var(--saas-reference-shadow);
155
309
  --saas-theme-bg-size: auto;
156
- --saas-theme-bg: radial-gradient(circle at 0% 0%, rgb(var(--saas-primary-rgb) / .16), transparent 32rem), radial-gradient(circle at 100% 0%, rgb(var(--saas-accent-rgb) / .12), transparent 30rem), radial-gradient(circle at 50% 100%, rgb(var(--saas-secondary-rgb) / .10), transparent 34rem), var(--saas-bg);
157
- --saas-card-bg: linear-gradient(135deg, rgb(var(--saas-primary-rgb) / .10), rgb(var(--saas-accent-rgb) / .055) 42%, rgb(var(--saas-surface-strong-rgb) / var(--saas-panel-alpha)) 100%), var(--saas-surface);
158
- --saas-control-bg: linear-gradient(180deg, rgb(var(--saas-surface-strong-rgb) / var(--saas-panel-alpha)), rgb(var(--saas-surface-soft-rgb) / var(--saas-panel-soft-alpha)));
310
+ --saas-theme-bg: var(--saas-bg);
311
+ --saas-card-bg: var(--saas-surface);
312
+ --saas-control-bg: var(--saas-surface);
313
+ --saas-hover-bg: rgb(var(--saas-surface-strong-rgb) / var(--saas-panel-alpha));
159
314
  --saas-spinner-track: rgb(var(--saas-border-rgb) / max(.28, calc(var(--saas-border-alpha) * .7)));
160
315
  --saas-spinner-stroke: var(--saas-primary);
161
316
  --saas-spinner-accent: var(--saas-accent);
162
317
  }
163
318
 
164
319
  @supports (color: color-mix(in srgb, black, white)) {
165
- [data-ui="minimal-saas"][data-theme][data-mode] { --saas-border: color-mix(in srgb, rgb(var(--saas-border-rgb) / max(var(--saas-border-alpha), var(--usk-border-min-alpha))), var(--saas-text) var(--usk-border-text-mix)); }
320
+ [data-ui="minimal-saas"][data-mode] { --saas-border: color-mix(in srgb, rgb(var(--saas-border-rgb) / max(var(--saas-border-alpha), var(--usk-border-min-alpha))), var(--saas-text) var(--usk-border-text-mix)); }
166
321
  }
167
322
 
168
323
 
@@ -201,7 +356,7 @@
201
356
 
202
357
  [data-ui="minimal-saas"] {
203
358
  min-height: 100vh;
204
- background: linear-gradient(180deg, rgb(var(--saas-primary-rgb) / .04), transparent 22rem), var(--saas-bg);
359
+ background: linear-gradient(180deg, rgb(var(--saas-primary-rgb) / .03), transparent 18rem), var(--saas-bg);
205
360
  color: var(--saas-text);
206
361
  font-family: var(--saas-font-body);
207
362
  line-height: 1.5;
@@ -214,7 +369,7 @@
214
369
  [data-ui="minimal-saas"] *::before,
215
370
  [data-ui="minimal-saas"] *::after { box-sizing: border-box; }
216
371
 
217
- [data-ui="minimal-saas"][data-theme][data-mode] { background: var(--saas-theme-bg); background-size: var(--saas-theme-bg-size); }
372
+ [data-ui="minimal-saas"][data-mode] { background: var(--saas-theme-bg); background-size: var(--saas-theme-bg-size); }
218
373
 
219
374
  .saas-page { min-height: 100vh; padding: clamp(1rem, 4vw, 3rem); }
220
375
  .saas-container { width: min(100% - 2rem, 1200px); margin-inline: auto; }
@@ -229,10 +384,10 @@
229
384
  ========================================================= */
230
385
 
231
386
  .saas-title, .saas-heading, .saas-kicker, .saas-button, .saas-badge, .saas-nav-link { font-family: var(--saas-font-heading); }
232
- .saas-title { margin: 0; color: var(--saas-text); font-size: clamp(2rem, 5vw, 3.7rem); line-height: 1.02; letter-spacing: -0.045em; }
233
- .saas-heading { margin: 0; color: var(--saas-text); font-size: clamp(1.2rem, 2.5vw, 2rem); line-height: 1.15; letter-spacing: -0.03em; }
234
- .saas-kicker { margin: 0; color: var(--saas-primary); font-size: .82rem; font-weight: 850; letter-spacing: .12em; text-transform: uppercase; }
235
- .saas-subtitle, .saas-copy { margin: 0; color: var(--saas-text-muted); line-height: 1.65; }
387
+ .saas-title { margin: 0; color: var(--saas-text); font-size: 1.5rem; font-weight: 700; line-height: 1.05; letter-spacing: -.02em; }
388
+ .saas-heading { margin: 0; color: var(--saas-text); font-size: 1rem; font-weight: 700; line-height: 1.2; letter-spacing: 0; }
389
+ .saas-kicker { margin: 0; color: var(--saas-primary); font-size: .78rem; font-weight: 750; letter-spacing: .1em; text-transform: uppercase; }
390
+ .saas-subtitle, .saas-copy { margin: 0; color: var(--saas-text-muted); line-height: 1.55; }
236
391
  .saas-text-muted { color: var(--saas-text-muted); }
237
392
  .saas-divider { width: 100%; height: 1px; border: 0; background: var(--saas-border); }
238
393
 
@@ -242,19 +397,19 @@
242
397
 
243
398
  .saas-surface, .saas-card, .saas-panel, .saas-toolbar, .saas-table-wrap {
244
399
  position: relative;
245
- background: linear-gradient(180deg, rgb(255 255 255 / .05), rgb(255 255 255 / 0)), var(--saas-surface);
400
+ background: var(--saas-card-bg);
246
401
  color: var(--saas-text);
247
402
  border: 1px solid var(--saas-border);
248
403
  border-radius: var(--saas-radius-lg);
249
- box-shadow: 0 10px 30px rgb(15 23 42 / var(--saas-shadow-alpha));
404
+ box-shadow: var(--saas-shadow-md);
250
405
  transition: transform var(--saas-transition-base), box-shadow var(--saas-transition-base), border-color var(--saas-transition-base), background var(--saas-transition-base);
251
406
  }
252
- .saas-card, .saas-panel { padding: var(--saas-space-6); }
407
+ .saas-card, .saas-panel { padding: var(--saas-space-5); }
253
408
  .saas-toolbar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--saas-space-4); padding: var(--saas-space-4); }
254
- .saas-surface-sm { border-radius: var(--saas-radius-md); box-shadow: 0 6px 18px rgb(0 0 0 / calc(var(--saas-shadow-alpha) * .72)); }
255
- .saas-surface-lg { border-radius: var(--saas-radius-xl); box-shadow: 0 22px 60px rgb(0 0 0 / calc(var(--saas-shadow-alpha) + .08)); }
256
- .saas-well, .saas-inset { background: var(--saas-surface-soft); color: var(--saas-text); border: 1px solid rgb(var(--saas-border-rgb) / calc(var(--saas-border-alpha) * .7)); border-radius: var(--saas-radius-md); padding: var(--saas-space-5); box-shadow: inset 0 1px 3px rgb(0 0 0 / .08); }
257
- .saas-hover-lift:hover { transform: translateY(-2px); box-shadow: 0 22px 60px rgb(0 0 0 / calc(var(--saas-shadow-alpha) + .12)); }
409
+ .saas-surface-sm { border-radius: var(--saas-radius-md); box-shadow: var(--saas-shadow-sm); }
410
+ .saas-surface-lg { border-radius: var(--saas-radius-lg); box-shadow: var(--saas-shadow-md); }
411
+ .saas-well, .saas-inset { background: var(--saas-surface-soft); color: var(--saas-text); border: 1px solid var(--saas-border); border-radius: var(--saas-radius-md); padding: var(--saas-space-4); box-shadow: none; }
412
+ .saas-hover-lift:hover { transform: none; border-color: rgb(var(--saas-primary-rgb) / .42); box-shadow: var(--saas-shadow-md); }
258
413
 
259
414
  /* =========================================================
260
415
  Buttons
@@ -262,26 +417,26 @@
262
417
 
263
418
  .saas-button, .saas-icon-button {
264
419
  appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: var(--saas-space-2);
265
- min-height: 2.75rem; padding: .75rem 1.1rem; background: var(--saas-surface); color: var(--saas-text);
266
- border: 1px solid var(--saas-border); border-radius: var(--saas-radius-md); box-shadow: 0 6px 18px rgb(0 0 0 / var(--saas-shadow-alpha));
267
- font: inherit; font-weight: 800; line-height: 1; text-decoration: none; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none;
420
+ min-height: 2.125rem; padding: .45rem .75rem; background: var(--saas-control-bg); color: var(--saas-text);
421
+ border: 1px solid var(--saas-border); border-radius: var(--saas-radius-md); box-shadow: var(--saas-shadow-sm);
422
+ font: inherit; font-weight: 700; line-height: 1; text-decoration: none; cursor: pointer; -webkit-user-select: none; -moz-user-select: none; user-select: none;
268
423
  transition: color var(--saas-transition-fast), background var(--saas-transition-fast), border-color var(--saas-transition-fast), box-shadow var(--saas-transition-fast), transform var(--saas-transition-fast);
269
424
  }
270
- .saas-button:hover, .saas-icon-button:hover { transform: translateY(-1px); border-color: var(--saas-primary); }
271
- .saas-button:active, .saas-icon-button:active, .saas-button[aria-pressed="true"], .saas-icon-button[aria-pressed="true"], .saas-button.is-active, .saas-icon-button.is-active { transform: translateY(1px); box-shadow: inset 0 3px 10px rgb(0 0 0 / .18); }
272
- .saas-button-primary { background: var(--saas-primary); color: var(--saas-on-primary); border-color: var(--saas-primary); }
273
- .saas-button-primary:hover { background: var(--saas-primary-hover); border-color: var(--saas-primary-hover); }
274
- .saas-button-secondary { background: var(--saas-secondary); color: var(--saas-on-secondary); border-color: var(--saas-secondary); }
275
- .saas-button-secondary:hover { background: var(--saas-secondary-hover); border-color: var(--saas-secondary-hover); }
425
+ .saas-button:hover, .saas-icon-button:hover { transform: none; border-color: rgb(var(--saas-primary-rgb) / .48); background: var(--saas-surface-soft); }
426
+ .saas-button:active, .saas-icon-button:active, .saas-button[aria-pressed="true"], .saas-icon-button[aria-pressed="true"], .saas-button.is-active, .saas-icon-button.is-active { transform: translateY(1px); box-shadow: inset 0 1px 2px rgb(var(--saas-text-rgb) / .12); }
427
+ .saas-button-primary { background: linear-gradient(135deg, var(--saas-primary), var(--saas-brand-2)); color: var(--saas-on-primary); border-color: var(--saas-primary); }
428
+ .saas-button-primary:hover { background: linear-gradient(135deg, var(--saas-brand-2), var(--saas-primary)); border-color: var(--saas-primary-hover); }
429
+ .saas-button-secondary { background: rgb(var(--saas-surface-strong-rgb) / var(--saas-panel-alpha)); color: var(--saas-primary); border-color: rgb(var(--saas-primary-rgb) / .32); box-shadow: none; }
430
+ .saas-button-secondary:hover { background: rgb(var(--saas-primary-rgb) / .06); border-color: rgb(var(--saas-primary-rgb) / .52); }
276
431
  .saas-button-danger { background: var(--saas-danger); color: var(--saas-on-danger); border-color: var(--saas-danger); }
277
- .saas-button-ghost { background: transparent; color: var(--saas-text); box-shadow: none; }
278
- .saas-icon-button { width: 2.75rem; padding: 0; border-radius: var(--saas-radius-pill); }
432
+ .saas-button-ghost { background: transparent; color: var(--saas-primary); border-color: transparent; box-shadow: none; }
433
+ .saas-icon-button { width: 2.375rem; padding: 0; border-radius: var(--saas-radius-md); }
279
434
  .saas-button:disabled, .saas-icon-button:disabled, .saas-disabled { opacity: .55; cursor: not-allowed; transform: none; }
280
435
 
281
436
  /* Theme-responsive component defaults */
282
437
  .saas-card, .saas-panel { background: var(--saas-card-bg); }
283
438
  .saas-toolbar, .saas-table-wrap { background: var(--saas-control-bg); }
284
- .saas-button:not(.saas-button-primary):not(.saas-button-secondary):not(.saas-button-danger):not(.saas-button-ghost), .saas-icon-button { background: var(--saas-control-bg); }
439
+ .saas-button:not(.saas-button-primary):not(.saas-button-secondary):not(.saas-button-danger):not(.saas-button-warning):not(.saas-button-ghost), .saas-icon-button { background: var(--saas-control-bg); }
285
440
  .saas-button, .saas-icon-button, .saas-badge, .saas-nav-link { font-family: var(--saas-font-control); }
286
441
 
287
442
 
@@ -290,51 +445,65 @@
290
445
  ========================================================= */
291
446
 
292
447
  .saas-field { display: flex; flex-direction: column; gap: var(--saas-space-2); }
293
- .saas-label { color: var(--saas-text); font-size: .925rem; font-weight: 800; }
448
+ .saas-label { color: var(--saas-text); font-size: .875rem; font-weight: 700; }
294
449
  .saas-input, .saas-textarea, .saas-select {
295
- width: 100%; min-height: 2.875rem; padding: .75rem 1rem; background: var(--saas-surface-soft); color: var(--saas-text);
450
+ width: 100%; min-height: 2rem; padding: .38rem .65rem; background: var(--saas-control-bg); color: var(--saas-text);
296
451
  border: 1px solid var(--saas-border); border-radius: var(--saas-radius-md); font: inherit; outline: none;
297
452
  transition: background var(--saas-transition-fast), border-color var(--saas-transition-fast), box-shadow var(--saas-transition-fast);
298
453
  }
299
- .saas-textarea { min-height: 8rem; resize: vertical; }
454
+ .saas-textarea { min-height: 7rem; resize: vertical; }
300
455
  .saas-input::placeholder, .saas-textarea::placeholder { color: var(--saas-text-muted); opacity: .82; }
301
- .saas-input:hover, .saas-textarea:hover, .saas-select:hover { border-color: rgb(var(--saas-primary-rgb) / .58); }
456
+ .saas-input:hover, .saas-textarea:hover, .saas-select:hover { border-color: rgb(var(--saas-primary-rgb) / .42); }
302
457
  .saas-input:focus, .saas-textarea:focus, .saas-select:focus { border-color: var(--saas-focus); box-shadow: var(--saas-focus-ring); }
458
+
459
+ /** Keeps keyboard focus visibly distinct without changing pointer-focus paint. */
460
+ [data-ui="minimal-saas"][data-mode] :where(a[href], button, input, select, textarea, summary, [tabindex]:not([tabindex="-1"])):focus-visible {
461
+ outline: 2px solid var(--saas-focus);
462
+ outline-offset: 2px;
463
+ }
303
464
  .saas-help-text { color: var(--saas-text-muted); font-size: .875rem; line-height: 1.45; }
304
465
 
305
466
  /* Checkbox / Radio */
306
467
  .saas-check, .saas-radio { display: inline-flex; align-items: center; gap: var(--saas-space-2); color: var(--saas-text); cursor: pointer; }
307
468
  .saas-check input, .saas-radio input { position: absolute; opacity: 0; pointer-events: none; }
308
- .saas-check-control, .saas-radio-control { display: inline-grid; place-items: center; width: 1.35rem; height: 1.35rem; background: var(--saas-surface-soft); border: 1px solid var(--saas-border); transition: background var(--saas-transition-fast), box-shadow var(--saas-transition-fast); }
469
+ .saas-check-control, .saas-radio-control { display: inline-grid; place-items: center; width: 1rem; height: 1rem; background: var(--saas-control-bg); border: 1px solid var(--saas-border); transition: background var(--saas-transition-fast), border-color var(--saas-transition-fast), box-shadow var(--saas-transition-fast); }
309
470
  .saas-check-control { border-radius: var(--saas-radius-xs); }
310
471
  .saas-radio-control { border-radius: 50%; }
311
- .saas-check input:checked + .saas-check-control, .saas-radio input:checked + .saas-radio-control { background: var(--saas-primary); border-color: var(--saas-primary); box-shadow: var(--saas-focus-ring); }
312
- .saas-check input:checked + .saas-check-control::after { content: "✓"; color: var(--saas-on-primary); font-size: .9rem; font-weight: 900; }
313
- .saas-radio input:checked + .saas-radio-control::after { content: ""; width: .55rem; height: .55rem; background: var(--saas-on-primary); border-radius: 50%; }
472
+ .saas-check input:checked + .saas-check-control, .saas-radio input:checked + .saas-radio-control { background: var(--saas-primary); border-color: var(--saas-primary); box-shadow: 0 0 0 .16rem rgb(var(--saas-primary-rgb) / .18); }
473
+ .saas-check input:checked + .saas-check-control::after { content: "✓"; color: var(--saas-on-primary); font-size: .78rem; font-weight: 900; line-height: 1; }
474
+ .saas-radio input:checked + .saas-radio-control::after { content: ""; width: .48rem; height: .48rem; background: var(--saas-on-primary); border-radius: 50%; }
314
475
 
315
476
  /* Switch */
316
477
  .saas-switch { display: inline-flex; align-items: center; gap: var(--saas-space-3); color: var(--saas-text); cursor: pointer; }
317
478
  .saas-switch input { position: absolute; opacity: 0; pointer-events: none; }
318
- .saas-switch-track { position: relative; width: 3.5rem; height: 1.9rem; background: var(--saas-surface-soft); border: 1px solid var(--saas-border); border-radius: var(--saas-radius-pill); transition: background var(--saas-transition-fast), box-shadow var(--saas-transition-fast); }
319
- .saas-switch-thumb { position: absolute; top: .22rem; left: .22rem; width: 1.34rem; height: 1.34rem; background: var(--saas-surface-strong); border: 1px solid var(--saas-border); border-radius: 50%; box-shadow: 0 4px 12px rgb(0 0 0 / var(--saas-shadow-alpha)); transition: left var(--saas-transition-fast), background var(--saas-transition-fast); }
479
+ .saas-switch-track { position: relative; width: 2.6rem; height: 1.3rem; background: var(--saas-surface-soft); border: 1px solid var(--saas-border); border-radius: var(--saas-radius-pill); transition: background var(--saas-transition-fast), box-shadow var(--saas-transition-fast); }
480
+ .saas-switch-thumb { position: absolute; top: .14rem; left: .14rem; width: .9rem; height: .9rem; background: var(--saas-surface-strong); border: 1px solid var(--saas-border); border-radius: 50%; box-shadow: 0 1px 2px rgb(var(--saas-text-rgb) / .12); transition: left var(--saas-transition-fast), background var(--saas-transition-fast); }
320
481
  .saas-switch input:checked + .saas-switch-track { background: var(--saas-primary); border-color: var(--saas-primary); }
321
- .saas-switch input:checked + .saas-switch-track .saas-switch-thumb { left: calc(100% - 1.34rem - .22rem); background: var(--saas-on-primary); }
482
+ .saas-switch input:checked + .saas-switch-track .saas-switch-thumb { left: calc(100% - .9rem - .14rem); background: var(--saas-on-primary); }
483
+
484
+ /** Mirrors hidden native-input focus on each visible custom control surface. */
485
+ .saas-check input:focus-visible + .saas-check-control,
486
+ .saas-radio input:focus-visible + .saas-radio-control,
487
+ .saas-switch input:focus-visible + .saas-switch-track {
488
+ outline: 2px solid var(--saas-focus);
489
+ outline-offset: 2px;
490
+ }
322
491
 
323
492
  /* =========================================================
324
493
  Badges / Nav / Progress / Alerts / Tables
325
494
  ========================================================= */
326
495
 
327
- .saas-badge { display: inline-flex; align-items: center; gap: var(--saas-space-1); min-height: 1.75rem; padding: .35rem .7rem; background: var(--saas-surface-soft); color: var(--saas-text); border: 1px solid var(--saas-border); border-radius: var(--saas-radius-pill); font-size: .8125rem; font-weight: 850; line-height: 1; }
496
+ .saas-badge { display: inline-flex; align-items: center; gap: var(--saas-space-1); min-height: 1.4rem; padding: .25rem .5rem; background: var(--saas-surface-soft); color: var(--saas-text); border: 1px solid transparent; border-radius: var(--saas-radius-sm); font-size: .75rem; font-weight: 700; line-height: 1; }
328
497
  .saas-badge-primary { background: var(--saas-primary); color: var(--saas-on-primary); border-color: var(--saas-primary); }
329
- .saas-badge-secondary { background: var(--saas-secondary); color: var(--saas-on-secondary); border-color: var(--saas-secondary); }
330
- .saas-badge-success { background: var(--saas-success); color: var(--saas-on-success); border-color: var(--saas-success); }
331
- .saas-badge-warning { background: var(--saas-warning); color: var(--saas-on-warning); border-color: var(--saas-warning); }
332
- .saas-badge-danger { background: var(--saas-danger); color: var(--saas-on-danger); border-color: var(--saas-danger); }
498
+ .saas-badge-secondary { background: rgb(var(--saas-primary-rgb) / .1); color: var(--saas-primary); border-color: transparent; }
499
+ .saas-badge-success { background: rgb(var(--saas-success-rgb) / .14); color: var(--saas-text); border-color: rgb(var(--saas-success-rgb) / .38); }
500
+ .saas-badge-warning { background: rgb(var(--saas-warning-rgb) / .14); color: var(--saas-text); border-color: rgb(var(--saas-warning-rgb) / .38); }
501
+ .saas-badge-danger { background: rgb(var(--saas-danger-rgb) / .14); color: var(--saas-text); border-color: rgb(var(--saas-danger-rgb) / .38); }
333
502
 
334
- .saas-nav { display: flex; flex-wrap: wrap; align-items: center; gap: var(--saas-space-2); padding: var(--saas-space-2); background: var(--saas-surface); border: 1px solid var(--saas-border); border-radius: var(--saas-radius-xl); box-shadow: 0 10px 30px rgb(0 0 0 / var(--saas-shadow-alpha)); }
335
- .saas-nav-link { display: inline-flex; align-items: center; justify-content: center; min-height: 2.5rem; padding: .65rem 1rem; color: var(--saas-text-muted); border-radius: var(--saas-radius-pill); text-decoration: none; font-weight: 850; transition: color var(--saas-transition-fast), background var(--saas-transition-fast), box-shadow var(--saas-transition-fast); }
503
+ .saas-nav { display: flex; flex-wrap: wrap; align-items: center; gap: var(--saas-space-1); padding: 0; background: transparent; border: 0; border-bottom: 1px solid var(--saas-border); border-radius: 0; box-shadow: none; }
504
+ .saas-nav-link { display: inline-flex; align-items: center; justify-content: center; min-height: 2.125rem; padding: .4rem .7rem; color: var(--saas-text-muted); border-radius: var(--saas-radius-md); text-decoration: none; font-weight: 700; transition: color var(--saas-transition-fast), background var(--saas-transition-fast), box-shadow var(--saas-transition-fast); }
336
505
  .saas-nav-link:hover { color: var(--saas-text); background: var(--saas-surface-soft); }
337
- .saas-nav-link[aria-current="page"], .saas-nav-link.is-active { color: var(--saas-on-primary); background: var(--saas-primary); }
506
+ .saas-nav-link[aria-current="page"], .saas-nav-link.is-active { color: var(--saas-text); background: transparent; box-shadow: inset 0 -2px 0 var(--saas-primary); }
338
507
 
339
508
  /* Tooltips use compact contrast surfaces that stay readable across theme modes. */
340
509
  .saas-tooltip, [data-ui="minimal-saas"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) {
@@ -344,20 +513,20 @@
344
513
  }
345
514
  .saas-tooltip-arrow { inline-size: .55rem; block-size: .55rem; flex: 0 0 auto; background: currentColor; border-radius: .12rem; opacity: .9; transform: rotate(45deg); }
346
515
 
347
- .saas-progress { width: 100%; height: .9rem; overflow: hidden; background: var(--saas-surface-soft); border: 1px solid var(--saas-border); border-radius: var(--saas-radius-pill); }
348
- .saas-progress-bar { height: 100%; width: var(--saas-progress-value, 50%); background: linear-gradient(90deg, var(--saas-primary), var(--saas-accent)); border-radius: inherit; }
516
+ .saas-progress { width: 100%; height: .3rem; overflow: hidden; background: var(--saas-surface-soft); border: 0 solid transparent; border-radius: var(--saas-radius-pill); }
517
+ .saas-progress-bar { height: 100%; width: var(--saas-progress-value, 50%); background: var(--saas-primary); border-radius: inherit; }
349
518
 
350
- .saas-alert { display: grid; gap: var(--saas-space-2); padding: var(--saas-space-4); background: var(--saas-surface); color: var(--saas-text); border: 1px solid var(--saas-border); border-radius: var(--saas-radius-lg); box-shadow: 0 10px 30px rgb(0 0 0 / var(--saas-shadow-alpha)); }
351
- .saas-alert-success { border-left-color: var(--saas-success); }
352
- .saas-alert-warning { border-left-color: var(--saas-warning); }
353
- .saas-alert-danger { border-left-color: var(--saas-danger); }
519
+ .saas-alert { display: grid; gap: var(--saas-space-2); padding: var(--saas-space-3); background: rgb(var(--saas-primary-rgb) / .065); color: var(--saas-text); border: 1px solid rgb(var(--saas-primary-rgb) / .28); border-radius: var(--saas-radius-lg); box-shadow: none; }
520
+ .saas-alert-success { background: rgb(var(--saas-success-rgb) / .12); border-color: rgb(var(--saas-success-rgb) / .58); }
521
+ .saas-alert-warning { background: rgb(var(--saas-warning-rgb) / .12); border-color: rgb(var(--saas-warning-rgb) / .58); }
522
+ .saas-alert-danger { background: rgb(var(--saas-danger-rgb) / .12); border-color: rgb(var(--saas-danger-rgb) / .58); }
354
523
  .saas-alert-title { margin: 0; font-weight: 900; }
355
524
  .saas-alert-body { margin: 0; color: var(--saas-text-muted); line-height: 1.55; }
356
525
 
357
526
  .saas-table-wrap { overflow: auto; }
358
527
  .saas-table { width: 100%; border-collapse: collapse; }
359
- .saas-table th, .saas-table td { padding: .95rem 1rem; text-align: left; border-bottom: 1px solid var(--saas-border); }
360
- .saas-table th { color: var(--saas-text); font-size: .82rem; font-weight: 900; text-transform: uppercase; letter-spacing: .08em; background: rgb(var(--saas-primary-rgb) / .08); }
528
+ .saas-table th, .saas-table td { padding: .68rem .75rem; text-align: left; border-bottom: 1px solid var(--saas-border); }
529
+ .saas-table th { color: var(--saas-text); font-size: .78rem; font-weight: 700; text-transform: none; letter-spacing: 0; background: rgb(var(--saas-surface-soft-rgb) / .52); }
361
530
  .saas-table td { color: var(--saas-text-muted); }
362
531
  .saas-table tr:hover td { background: rgb(var(--saas-primary-rgb) / .045); }
363
532
 
@@ -509,7 +678,6 @@
509
678
  .saas-feature-strip {
510
679
  display: grid;
511
680
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
512
- overflow: hidden;
513
681
  background: var(--saas-card-bg);
514
682
  color: var(--saas-text);
515
683
  border: 1px solid var(--saas-border);
@@ -589,42 +757,60 @@
589
757
  .saas-feature-item:last-child { border-block-end: 0; }
590
758
  }
591
759
 
592
- .saas-card-service, .saas-card-feature, .saas-feature-strip, .saas-callout-bar { box-shadow: 0 .9rem 2rem rgb(15 23 42 / calc(var(--saas-shadow-alpha) + .03)); }
593
- .saas-card-accent-edge { border-inline-start-width: .3rem; }
594
- .saas-icon-medallion { box-shadow: 0 .55rem 1.2rem rgb(15 23 42 / calc(var(--saas-shadow-alpha) + .05)); }
760
+ .saas-card-service, .saas-card-feature, .saas-feature-strip, .saas-callout-bar { box-shadow: var(--saas-shadow-md); }
761
+ .saas-card-accent-edge { border-inline-start-width: .16rem; }
762
+ .saas-icon-medallion {
763
+ background: var(--saas-surface-soft);
764
+ color: var(--saas-primary);
765
+ border: 1px solid var(--saas-border);
766
+ border-radius: var(--saas-radius-lg);
767
+ box-shadow: var(--saas-shadow-sm);
768
+ }
595
769
 
596
770
  /* Filled and framed actions share one precise fold without becoming the same control. */
597
771
  .saas-button.saas-button-cut, .saas-button-cut {
772
+ min-height: 2.75rem;
598
773
  min-inline-size: 6rem;
599
774
  max-inline-size: 100%;
600
775
  justify-self: start;
601
776
  justify-content: center;
602
- clip-path: polygon(0 0, calc(100% - .55rem) 0, 100% .55rem, 100% 100%, 0 100%);
777
+ clip-path: polygon(0 0, calc(100% - .25rem) 0, 100% .25rem, 100% 100%, 0 100%);
603
778
  }
604
779
  .saas-button.saas-button-outline-heavy, .saas-button-outline-heavy {
605
780
  border-width: 1px;
606
781
  border-radius: 0;
607
- clip-path: polygon(0 0, calc(100% - .42rem) 0, 100% .42rem, 100% 100%, 0 100%);
608
- box-shadow: 0 .25rem .6rem rgb(var(--saas-text-rgb) / .08);
782
+ clip-path: polygon(0 0, calc(100% - .2rem) 0, 100% .2rem, 100% 100%, 0 100%);
783
+ box-shadow: var(--saas-shadow-sm);
609
784
  }
610
785
 
611
- /* Marketing and native surfaces repeat the fold through a precise leading rule. */
786
+ /* Marketing and native surfaces stay aligned with the calm, rule-driven product material. */
612
787
  .saas-card-service, .saas-media-scrim, .saas-feature-strip, .saas-callout-bar, .saas-metric {
613
788
  border: 1px solid var(--saas-border);
614
- border-inline-start-width: .22rem;
615
- border-inline-start-color: var(--saas-primary);
616
- box-shadow: 0 .6rem 1.4rem rgb(var(--saas-text-rgb) / .1);
789
+ box-shadow: var(--saas-shadow-md);
790
+ }
791
+ [data-ui="minimal-saas"][data-mode] :where(fieldset, article, aside) {
792
+ background: var(--saas-surface);
793
+ border: 1px solid var(--saas-border);
794
+ border-radius: var(--saas-radius-lg);
795
+ box-shadow: none;
617
796
  }
618
- [data-ui="minimal-saas"][data-theme][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])) {
619
- border: 1px solid var(--saas-primary);
797
+ [data-ui="minimal-saas"][data-mode] :where(legend) { font-weight: 750; }
798
+ [data-ui="minimal-saas"][data-mode] :where(label) { font-weight: 700; }
799
+ [data-ui="minimal-saas"][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])) {
800
+ min-block-size: var(--usk-native-control-min-block-size);
801
+ padding: .5rem .78rem;
802
+ background: var(--saas-control-bg);
803
+ color: var(--saas-text);
804
+ border: 1px solid var(--saas-border);
620
805
  border-radius: var(--saas-radius-md);
621
- box-shadow: 0 .25rem .6rem rgb(var(--saas-text-rgb) / .1);
806
+ box-shadow: var(--saas-shadow-sm);
807
+ font-family: var(--saas-font-control);
808
+ font-weight: 700;
622
809
  }
623
- [data-ui="minimal-saas"][data-theme][data-mode] :where(dialog) {
810
+ [data-ui="minimal-saas"][data-mode] :where(dialog) {
624
811
  border: 1px solid var(--saas-border);
625
- border-inline-start-width: .22rem;
626
812
  border-radius: var(--saas-radius-lg);
627
- box-shadow: 0 1rem 2.2rem rgb(var(--saas-text-rgb) / .18);
813
+ box-shadow: 0 .75rem 2rem rgb(var(--saas-text-rgb) / .14);
628
814
  }
629
815
 
630
816
  /* Busy indicators retain the restrained circular progress language of Minimal SaaS. */
@@ -648,3 +834,188 @@
648
834
  [data-ui="minimal-saas"] a { color: #000 !important; text-decoration: underline; }
649
835
  }
650
836
  }
837
+
838
+ @layer ui-style-kit.minimal_saas {
839
+ /* Keeps semantic field states above preset-specific material paint. */
840
+ .saas-input[aria-invalid="true"], .saas-textarea[aria-invalid="true"], .saas-select[aria-invalid="true"] { border-color: var(--saas-danger); box-shadow: 0 0 0 2px rgb(var(--saas-danger-rgb) / .18); }
841
+ .saas-input[readonly], .saas-textarea[readonly] { border-style: dashed; filter: saturate(.72); opacity: .78; }
842
+ }
843
+
844
+ @layer ui-style-kit.minimal_saas {
845
+ /**
846
+ * Locks the compact, flat Minimal SaaS identity to native controls.
847
+ * Fine rules, tight geometry, and negligible lift separate it from soft UI presets.
848
+ */
849
+ [data-ui="minimal-saas"][data-mode] {
850
+ --usk-native-control-min-block-size: 2rem;
851
+ --usk-native-control-padding-block: .38rem;
852
+ --usk-native-control-padding-inline: .65rem;
853
+ --usk-native-radius-sm: .1875rem;
854
+ --usk-native-radius: .375rem;
855
+ --usk-native-radius-lg: .5rem;
856
+ --usk-native-shadow: 0 1px 2px rgb(var(--saas-text-rgb) / .06);
857
+ --usk-native-shadow-md: 0 2px 6px rgb(var(--saas-text-rgb) / .08);
858
+ --usk-native-focus-ring: 0 0 0 2px rgb(var(--saas-focus-rgb) / .3);
859
+ --usk-native-subcontrol-padding-block: .32rem;
860
+ --usk-native-subcontrol-padding-inline: .52rem;
861
+ --usk-native-choice-size: .95rem;
862
+ --usk-native-choice-background: rgb(var(--saas-surface-strong-rgb) / var(--saas-panel-alpha));
863
+ --usk-native-choice-border: 1px solid rgb(var(--saas-border-rgb) / .9);
864
+ --usk-native-checkbox-radius: .1875rem;
865
+ --usk-native-choice-shadow: none;
866
+ --usk-native-select-indicator-size: .31rem .31rem, .31rem .31rem;
867
+ --usk-native-select-indicator-position: calc(100% - .92rem) 50%, calc(100% - .68rem) 50%;
868
+ --usk-native-select-padding-inline-end: 2.1rem;
869
+ --usk-native-range-track-size: .28rem;
870
+ --usk-native-range-track-background: rgb(var(--saas-surface-soft-rgb) / .82);
871
+ --usk-native-range-track-border: 1px solid rgb(var(--saas-border-rgb) / .55);
872
+ --usk-native-range-track-shadow: none;
873
+ --usk-native-range-thumb-size: .9rem;
874
+ --usk-native-range-thumb-border: 2px solid var(--saas-surface-strong);
875
+ --usk-native-range-thumb-shadow: 0 1px 3px rgb(var(--saas-text-rgb) / .14);
876
+ --usk-native-progress-size: .28rem;
877
+ --usk-native-progress-track-background: rgb(var(--saas-surface-soft-rgb) / .82);
878
+ --usk-native-progress-track-border: 1px solid rgb(var(--saas-border-rgb) / .5);
879
+ --usk-native-progress-track-shadow: none;
880
+ --usk-native-progress-value-shadow: none;
881
+ --usk-native-scrollbar-size: .55rem;
882
+ --usk-native-scrollbar-track: rgb(var(--saas-surface-soft-rgb) / .72);
883
+ --usk-native-scrollbar-thumb: rgb(var(--saas-primary-rgb) / .72);
884
+ --usk-native-scrollbar-radius: .125rem;
885
+ }
886
+
887
+ /**
888
+ * Gives the retained custom chevron exclusive ownership of single-select chrome.
889
+ * Suppressing both legacy appearance and the customizable picker icon prevents
890
+ * browsers from painting a second platform indicator beside it.
891
+ */
892
+ [data-ui="minimal-saas"][data-mode] :where(select:not([multiple])) {
893
+ -webkit-appearance: none;
894
+ appearance: none;
895
+ }
896
+ [data-ui="minimal-saas"][data-mode] :where(select:not([multiple]))::picker-icon { display: none; }
897
+
898
+ /** Carries the compact product grammar through every authored component role. */
899
+ .saas-title { margin: 0; font-size: 1.5rem; font-weight: 700; line-height: 1.05; letter-spacing: -.02em; }
900
+ .saas-label { font-size: .8125rem; font-weight: 650; }
901
+ .saas-button, .saas-icon-button {
902
+ min-height: 2.125rem;
903
+ padding: .45rem .75rem;
904
+ background: var(--saas-control-bg);
905
+ border-radius: .375rem;
906
+ box-shadow: none;
907
+ font-weight: 650;
908
+ }
909
+ .saas-icon-button { padding: 0; }
910
+ .saas-input, .saas-textarea, .saas-select {
911
+ min-height: 2rem;
912
+ padding: .38rem .65rem;
913
+ border-radius: .375rem;
914
+ box-shadow: none;
915
+ }
916
+ .saas-surface, .saas-card, .saas-panel, .saas-toolbar, .saas-table-wrap {
917
+ background: var(--saas-surface);
918
+ border: 1px solid var(--saas-border);
919
+ border-radius: .5rem;
920
+ box-shadow: var(--saas-shadow-md);
921
+ }
922
+ .saas-card, .saas-panel { padding: 1rem; }
923
+ .saas-well, .saas-inset {
924
+ padding: .75rem;
925
+ background: rgb(var(--saas-surface-soft-rgb) / .72);
926
+ border: 1px solid var(--saas-border);
927
+ border-radius: .375rem;
928
+ box-shadow: none;
929
+ }
930
+ .saas-badge { min-height: 1.35rem; padding: .18rem .45rem; border-radius: .25rem; }
931
+ .saas-alert {
932
+ background: var(--saas-surface);
933
+ border: 1px solid var(--saas-border);
934
+ border-inline-start: 1px solid var(--saas-primary);
935
+ border-radius: .375rem;
936
+ box-shadow: none;
937
+ }
938
+ .saas-progress { height: .3rem; background: rgb(var(--saas-surface-soft-rgb) / .82); }
939
+ .saas-progress-bar { background: var(--saas-primary); box-shadow: none; }
940
+ .saas-table-wrap { background: var(--saas-surface); border-radius: .5rem; box-shadow: none; }
941
+ .saas-table th { padding: .6rem .7rem; background: rgb(var(--saas-surface-soft-rgb) / .58); font-weight: 650; }
942
+ .saas-table td { padding: .6rem .7rem; }
943
+ .saas-nav { padding: 0; background: transparent; border: 0; border-bottom: 1px solid var(--saas-border); border-radius: 0; box-shadow: none; }
944
+ .saas-nav-link { min-height: 2.125rem; padding: .4rem .62rem; border-radius: .25rem; }
945
+ .saas-tooltip, [data-ui="minimal-saas"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) { border-radius: .25rem; box-shadow: 0 2px 6px rgb(var(--saas-text-rgb) / .12); }
946
+ .saas-card-service, .saas-card-feature, .saas-feature-strip, .saas-callout-bar {
947
+ padding: 1rem;
948
+ background: var(--saas-surface);
949
+ border-radius: .5rem;
950
+ box-shadow: none;
951
+ }
952
+ .saas-feature-item { padding: .75rem; }
953
+ [data-ui="minimal-saas"][data-mode] :where(dialog) {
954
+ background: var(--saas-surface);
955
+ border-radius: .5rem;
956
+ box-shadow: 0 .5rem 1.25rem rgb(var(--saas-text-rgb) / .12);
957
+ }
958
+
959
+ /** Keeps semantic alerts fully outlined after the shared surface reset. */
960
+ .saas-alert-success { background: rgb(var(--saas-success-rgb) / .12); border-color: rgb(var(--saas-success-rgb) / .58); }
961
+ .saas-alert-warning { background: rgb(var(--saas-warning-rgb) / .12); border-color: rgb(var(--saas-warning-rgb) / .58); }
962
+ .saas-alert-danger { background: rgb(var(--saas-danger-rgb) / .12); border-color: rgb(var(--saas-danger-rgb) / .58); }
963
+ }
964
+
965
+ @layer ui-style-kit.minimal_saas {
966
+ /** Restores source-faithful action hierarchy after identity geometry. */
967
+ .saas-button-primary { background: linear-gradient(135deg, var(--saas-primary), var(--saas-brand-2)); color: var(--saas-on-primary); border-color: var(--saas-primary); }
968
+ .saas-button-secondary { background: var(--saas-surface); color: var(--saas-primary); border-color: var(--saas-primary); }
969
+ .saas-button-danger { background: var(--saas-danger); color: var(--saas-on-danger); border-color: var(--saas-danger); }
970
+ .saas-button-ghost { background: transparent; color: var(--saas-primary); border-color: transparent; }
971
+ }
972
+
973
+ @layer ui-style-kit.minimal_saas {
974
+ /** Preserves compact desktop density while meeting coarse-pointer target guidance. */
975
+ @media (pointer: coarse) {
976
+ [data-ui="minimal-saas"] :where(.saas-button, .saas-icon-button, .saas-input, .saas-select, .saas-nav-link) {
977
+ min-block-size: 2.75rem;
978
+ }
979
+ }
980
+ }
981
+
982
+ @layer ui-style-kit.minimal_saas {
983
+ /** Keeps annotated text icons readable without changing their component frames. */
984
+ .saas-card-service > .saas-icon-medallion { font-size: 1.5rem; line-height: 1; }
985
+ .saas-feature-item > .saas-icon-medallion { font-size: 1.5rem; line-height: 1; }
986
+ .saas-callout-bar > .saas-icon-medallion { min-inline-size: 4.5rem; min-block-size: 4.5rem; padding-block: .55rem .85rem; font-size: 2rem; font-weight: 800; line-height: 1; }
987
+
988
+ /** Strengthens the trust-seal hierarchy while preserving its fixed circle. */
989
+ .saas-badge-seal > strong { font-size: 1.125rem; line-height: .9; }
990
+ .saas-badge-seal > small { font-size: .78rem; line-height: 1; }
991
+ /** Warning actions inherit preset geometry and use the paired semantic warning colors. */
992
+ [data-ui="minimal-saas"][data-mode] .saas-button.saas-button-warning {
993
+ background: var(--saas-warning);
994
+ color: var(--saas-on-warning);
995
+ border-color: var(--saas-warning);
996
+ text-shadow: none;
997
+ }
998
+
999
+ }
1000
+
1001
+ /**
1002
+ * Preserves shared annotation fixture spacing and icon weight after reference
1003
+ * overrides append their compact source rules.
1004
+ */
1005
+ [data-ui="minimal-saas"][data-mode] .saas-title {
1006
+ margin-block: max(.75rem, 12px);
1007
+ letter-spacing: max(.03em, .5px);
1008
+ }
1009
+
1010
+ [data-ui="minimal-saas"][data-mode] .saas-feature-item > .saas-icon-medallion {
1011
+ font-size: 1.5rem;
1012
+ line-height: 1;
1013
+ }
1014
+
1015
+ [data-ui="minimal-saas"][data-mode] .saas-callout-bar > .saas-icon-medallion {
1016
+ min-inline-size: 4.5rem;
1017
+ min-block-size: 4.5rem;
1018
+ font-size: 2rem;
1019
+ font-weight: 800;
1020
+ line-height: 1;
1021
+ }