ui-style-kit-css 2.3.0 → 2.4.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 (122) hide show
  1. package/CHANGELOG.md +57 -2
  2. package/CONTRIBUTING.md +8 -1
  3. package/README.md +102 -44
  4. package/STYLE-MAP.md +14 -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 +47898 -15121
  26. package/dist/ui-style-kit.min.css +2 -2
  27. package/dist/ui-style-kit.visual.css +47771 -15122
  28. package/dist/ui-style-kit.visual.min.css +2 -2
  29. package/dist/ui-style-kit.with-bridge.css +47932 -15145
  30. package/dist/ui-style-kit.with-bridge.min.css +2 -2
  31. package/dist/visual/art-deco.css +3247 -295
  32. package/dist/visual/bauhaus.css +2 -4692
  33. package/dist/visual/bento.css +2 -4708
  34. package/dist/visual/brutalism.css +1229 -231
  35. package/dist/visual/clay.css +2 -4786
  36. package/dist/visual/cyberpunk.css +2663 -282
  37. package/dist/visual/data-terminal.css +2064 -276
  38. package/dist/visual/editorial-luxe.css +2315 -259
  39. package/dist/visual/industrial-utility.css +3142 -270
  40. package/dist/visual/maximalist.css +2185 -454
  41. package/dist/visual/minimal-saas.css +1503 -398
  42. package/dist/visual/neo-noir.css +2 -4787
  43. package/dist/visual/neumorphism.css +1690 -402
  44. package/dist/visual/organic-modern.css +2 -4764
  45. package/dist/visual/paper-editorial.css +2977 -292
  46. package/dist/visual/retro-glass.css +2625 -299
  47. package/dist/visual/retrofuturism.css +1885 -397
  48. package/dist/visual/tactile.css +2716 -498
  49. package/dist/visual/technical-blueprint.css +2599 -267
  50. package/dist/visual/y2k.css +1906 -309
  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/COLOR-THEMES.md +63 -0
  56. package/docs/DEMO-SHOWCASE.md +65 -0
  57. package/docs/ECOSYSTEM.md +4 -4
  58. package/docs/EDITORIAL-LUX.md +75 -0
  59. package/docs/INDUSTRIAL-UTILITY.md +131 -0
  60. package/docs/NATIVE-ELEMENTS.md +23 -17
  61. package/docs/NEO-NOIR.md +94 -0
  62. package/docs/ORGANIC-MODERN.md +91 -0
  63. package/docs/PAPER-EDITORIAL.md +63 -0
  64. package/docs/PUBLISHING.md +31 -10
  65. package/docs/RELEASE-2.4.0.md +88 -0
  66. package/docs/RELEASE-2.4.1.md +35 -0
  67. package/docs/RETRO-GLASS.md +105 -0
  68. package/docs/STYLE-GUIDE.md +41 -26
  69. package/docs/TACTILE.md +38 -0
  70. package/docs/TECHNICAL-BLUEPRINT.md +60 -0
  71. package/docs/TOKENS.md +80 -3
  72. package/docs/superpowers/plans/2026-09-04-library-wide-theme-fallback-and-fidelity.md +331 -0
  73. package/docs/superpowers/specs/2026-09-04-library-wide-theme-fallback-and-fidelity-design.md +113 -0
  74. package/manifest.json +624 -28
  75. package/package.json +20 -11
  76. package/styles/art-deco.css +1402 -17
  77. package/styles/assets/bauhaus-barlow-OFL.txt +93 -0
  78. package/styles/assets/bauhaus-barlow-semibold.ttf +0 -0
  79. package/styles/assets/bauhaus-barlow.ttf +0 -0
  80. package/styles/assets/bauhaus-condensed-OFL.txt +93 -0
  81. package/styles/assets/bauhaus-condensed-bold.ttf +0 -0
  82. package/styles/assets/bauhaus-condensed-extrabold.ttf +0 -0
  83. package/styles/assets/bento-manrope-OFL.txt +93 -0
  84. package/styles/assets/bento-manrope.ttf +0 -0
  85. package/styles/assets/clay-grain.png +0 -0
  86. package/styles/assets/clay-rounded-OFL.txt +93 -0
  87. package/styles/assets/clay-rounded.ttf +0 -0
  88. package/styles/assets/neo-noir-corner-dark.png +0 -0
  89. package/styles/assets/neo-noir-corner-light.png +0 -0
  90. package/styles/assets/neo-noir-texture-dark.png +0 -0
  91. package/styles/assets/neo-noir-texture-light.png +0 -0
  92. package/styles/assets/organic-display-OFL.txt +93 -0
  93. package/styles/assets/organic-display.ttf +0 -0
  94. package/styles/assets/organic-icons-LICENSE.txt +21 -0
  95. package/styles/assets/organic-sans-OFL.txt +93 -0
  96. package/styles/assets/organic-sans.ttf +0 -0
  97. package/styles/bauhaus.css +881 -110
  98. package/styles/bento.css +1182 -113
  99. package/styles/brutalism.css +266 -15
  100. package/styles/clay.css +1307 -72
  101. package/styles/compat-layout.css +1 -2
  102. package/styles/components.css +107 -36
  103. package/styles/content-overflow.css +11 -5
  104. package/styles/cyberpunk.css +1856 -51
  105. package/styles/data-terminal.css +1122 -18
  106. package/styles/editorial-luxe.css +581 -17
  107. package/styles/industrial-utility.css +1775 -16
  108. package/styles/interactive-surface-bridge.css +30 -20
  109. package/styles/interactive-surface-theme.css +21 -11
  110. package/styles/maximalist.css +1215 -133
  111. package/styles/minimal-saas.css +465 -93
  112. package/styles/native-elements.css +347 -171
  113. package/styles/neo-noir.css +661 -19
  114. package/styles/neumorphism.css +1021 -149
  115. package/styles/organic-modern.css +693 -23
  116. package/styles/paper-editorial.css +1053 -17
  117. package/styles/retro-glass.css +639 -50
  118. package/styles/retrofuturism.css +948 -60
  119. package/styles/tactile.css +1813 -111
  120. package/styles/technical-blueprint.css +673 -22
  121. package/styles/theme-colors.css +412 -2
  122. package/styles/y2k.css +954 -46
@@ -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(--usk-primary-ink, 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(--usk-primary-ink, 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(--usk-primary-ink, 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(--usk-primary-ink, 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,21 @@
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); }
354
- .saas-alert-title { margin: 0; font-weight: 900; }
355
- .saas-alert-body { margin: 0; color: var(--saas-text-muted); line-height: 1.55; }
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); }
523
+ /** Keeps classed alert copy readable above the native paragraph color layer. */
524
+ .saas-alert-title { margin: 0; color: var(--saas-text); font-weight: 900; }
525
+ .saas-alert-body { margin: 0; color: var(--saas-text); line-height: 1.55; }
356
526
 
357
527
  .saas-table-wrap { overflow: auto; }
358
528
  .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); }
529
+ .saas-table th, .saas-table td { padding: .68rem .75rem; text-align: left; border-bottom: 1px solid var(--saas-border); }
530
+ .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
531
  .saas-table td { color: var(--saas-text-muted); }
362
532
  .saas-table tr:hover td { background: rgb(var(--saas-primary-rgb) / .045); }
363
533
 
@@ -365,7 +535,7 @@
365
535
  Utilities
366
536
  ========================================================= */
367
537
 
368
- .saas-text-primary { color: var(--saas-primary); } .saas-text-secondary { color: var(--saas-secondary); } .saas-text-accent { color: var(--saas-accent); } .saas-text-success { color: var(--saas-success); } .saas-text-warning { color: var(--saas-warning); } .saas-text-danger { color: var(--saas-danger); }
538
+ .saas-text-primary { color: var(--usk-primary-ink, var(--saas-primary)); } .saas-text-secondary { color: var(--saas-secondary); } .saas-text-accent { color: var(--usk-accent-ink, var(--saas-accent)); } .saas-text-success { color: var(--saas-success); } .saas-text-warning { color: var(--saas-warning); } .saas-text-danger { color: var(--saas-danger); }
369
539
  .saas-bg-primary { background: var(--saas-primary); color: var(--saas-on-primary); } .saas-bg-secondary { background: var(--saas-secondary); color: var(--saas-on-secondary); }
370
540
  .saas-border { border: 1px solid var(--saas-border); } .saas-rounded { border-radius: var(--saas-radius-md); } .saas-rounded-lg { border-radius: var(--saas-radius-lg); } .saas-rounded-xl { border-radius: var(--saas-radius-xl); } .saas-pill { border-radius: var(--saas-radius-pill); }
371
541
  .saas-sr-only, .saas-visually-hidden { position: absolute !important; width: 1px !important; height: 1px !important; padding: 0 !important; margin: -1px !important; overflow: hidden !important; clip: rect(0, 0, 0, 0) !important; white-space: nowrap !important; border: 0 !important; }
@@ -473,7 +643,7 @@
473
643
  .saas-button.saas-button-outline-heavy,
474
644
  .saas-button-outline-heavy {
475
645
  background: transparent;
476
- color: var(--saas-primary);
646
+ color: var(--usk-primary-ink, var(--saas-primary));
477
647
  border-style: solid;
478
648
  border-width: 2px;
479
649
  border-color: var(--saas-primary);
@@ -509,7 +679,6 @@
509
679
  .saas-feature-strip {
510
680
  display: grid;
511
681
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
512
- overflow: hidden;
513
682
  background: var(--saas-card-bg);
514
683
  color: var(--saas-text);
515
684
  border: 1px solid var(--saas-border);
@@ -544,7 +713,7 @@
544
713
 
545
714
  .saas-eyebrow {
546
715
  margin: 0;
547
- color: var(--saas-primary);
716
+ color: var(--usk-primary-ink, var(--saas-primary));
548
717
  font-family: var(--saas-font-heading);
549
718
  font-size: .76rem;
550
719
  font-weight: 900;
@@ -589,42 +758,60 @@
589
758
  .saas-feature-item:last-child { border-block-end: 0; }
590
759
  }
591
760
 
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)); }
761
+ .saas-card-service, .saas-card-feature, .saas-feature-strip, .saas-callout-bar { box-shadow: var(--saas-shadow-md); }
762
+ .saas-card-accent-edge { border-inline-start-width: .16rem; }
763
+ .saas-icon-medallion {
764
+ background: var(--saas-surface-soft);
765
+ color: var(--usk-primary-ink, var(--saas-primary));
766
+ border: 1px solid var(--saas-border);
767
+ border-radius: var(--saas-radius-lg);
768
+ box-shadow: var(--saas-shadow-sm);
769
+ }
595
770
 
596
771
  /* Filled and framed actions share one precise fold without becoming the same control. */
597
772
  .saas-button.saas-button-cut, .saas-button-cut {
773
+ min-height: 2.75rem;
598
774
  min-inline-size: 6rem;
599
775
  max-inline-size: 100%;
600
776
  justify-self: start;
601
777
  justify-content: center;
602
- clip-path: polygon(0 0, calc(100% - .55rem) 0, 100% .55rem, 100% 100%, 0 100%);
778
+ clip-path: polygon(0 0, calc(100% - .25rem) 0, 100% .25rem, 100% 100%, 0 100%);
603
779
  }
604
780
  .saas-button.saas-button-outline-heavy, .saas-button-outline-heavy {
605
781
  border-width: 1px;
606
782
  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);
783
+ clip-path: polygon(0 0, calc(100% - .2rem) 0, 100% .2rem, 100% 100%, 0 100%);
784
+ box-shadow: var(--saas-shadow-sm);
609
785
  }
610
786
 
611
- /* Marketing and native surfaces repeat the fold through a precise leading rule. */
787
+ /* Marketing and native surfaces stay aligned with the calm, rule-driven product material. */
612
788
  .saas-card-service, .saas-media-scrim, .saas-feature-strip, .saas-callout-bar, .saas-metric {
613
789
  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);
790
+ box-shadow: var(--saas-shadow-md);
617
791
  }
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);
792
+ [data-ui="minimal-saas"][data-mode] :where(fieldset, article, aside) {
793
+ background: var(--saas-surface);
794
+ border: 1px solid var(--saas-border);
795
+ border-radius: var(--saas-radius-lg);
796
+ box-shadow: none;
797
+ }
798
+ [data-ui="minimal-saas"][data-mode] :where(legend) { font-weight: 750; }
799
+ [data-ui="minimal-saas"][data-mode] :where(label) { font-weight: 700; }
800
+ [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])) {
801
+ min-block-size: var(--usk-native-control-min-block-size);
802
+ padding: .5rem .78rem;
803
+ background: var(--saas-control-bg);
804
+ color: var(--saas-text);
805
+ border: 1px solid var(--saas-border);
620
806
  border-radius: var(--saas-radius-md);
621
- box-shadow: 0 .25rem .6rem rgb(var(--saas-text-rgb) / .1);
807
+ box-shadow: var(--saas-shadow-sm);
808
+ font-family: var(--saas-font-control);
809
+ font-weight: 700;
622
810
  }
623
- [data-ui="minimal-saas"][data-theme][data-mode] :where(dialog) {
811
+ [data-ui="minimal-saas"][data-mode] :where(dialog) {
624
812
  border: 1px solid var(--saas-border);
625
- border-inline-start-width: .22rem;
626
813
  border-radius: var(--saas-radius-lg);
627
- box-shadow: 0 1rem 2.2rem rgb(var(--saas-text-rgb) / .18);
814
+ box-shadow: 0 .75rem 2rem rgb(var(--saas-text-rgb) / .14);
628
815
  }
629
816
 
630
817
  /* Busy indicators retain the restrained circular progress language of Minimal SaaS. */
@@ -648,3 +835,188 @@
648
835
  [data-ui="minimal-saas"] a { color: #000 !important; text-decoration: underline; }
649
836
  }
650
837
  }
838
+
839
+ @layer ui-style-kit.minimal_saas {
840
+ /* Keeps semantic field states above preset-specific material paint. */
841
+ .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); }
842
+ .saas-input[readonly], .saas-textarea[readonly] { border-style: dashed; filter: saturate(.72); opacity: .78; }
843
+ }
844
+
845
+ @layer ui-style-kit.minimal_saas {
846
+ /**
847
+ * Locks the compact, flat Minimal SaaS identity to native controls.
848
+ * Fine rules, tight geometry, and negligible lift separate it from soft UI presets.
849
+ */
850
+ [data-ui="minimal-saas"][data-mode] {
851
+ --usk-native-control-min-block-size: 2rem;
852
+ --usk-native-control-padding-block: .38rem;
853
+ --usk-native-control-padding-inline: .65rem;
854
+ --usk-native-radius-sm: .1875rem;
855
+ --usk-native-radius: .375rem;
856
+ --usk-native-radius-lg: .5rem;
857
+ --usk-native-shadow: 0 1px 2px rgb(var(--saas-text-rgb) / .06);
858
+ --usk-native-shadow-md: 0 2px 6px rgb(var(--saas-text-rgb) / .08);
859
+ --usk-native-focus-ring: 0 0 0 2px rgb(var(--saas-focus-rgb) / .3);
860
+ --usk-native-subcontrol-padding-block: .32rem;
861
+ --usk-native-subcontrol-padding-inline: .52rem;
862
+ --usk-native-choice-size: .95rem;
863
+ --usk-native-choice-background: rgb(var(--saas-surface-strong-rgb) / var(--saas-panel-alpha));
864
+ --usk-native-choice-border: 1px solid rgb(var(--saas-border-rgb) / .9);
865
+ --usk-native-checkbox-radius: .1875rem;
866
+ --usk-native-choice-shadow: none;
867
+ --usk-native-select-indicator-size: .31rem .31rem, .31rem .31rem;
868
+ --usk-native-select-indicator-position: calc(100% - .92rem) 50%, calc(100% - .68rem) 50%;
869
+ --usk-native-select-padding-inline-end: 2.1rem;
870
+ --usk-native-range-track-size: .28rem;
871
+ --usk-native-range-track-background: rgb(var(--saas-surface-soft-rgb) / .82);
872
+ --usk-native-range-track-border: 1px solid rgb(var(--saas-border-rgb) / .55);
873
+ --usk-native-range-track-shadow: none;
874
+ --usk-native-range-thumb-size: .9rem;
875
+ --usk-native-range-thumb-border: 2px solid var(--saas-surface-strong);
876
+ --usk-native-range-thumb-shadow: 0 1px 3px rgb(var(--saas-text-rgb) / .14);
877
+ --usk-native-progress-size: .28rem;
878
+ --usk-native-progress-track-background: rgb(var(--saas-surface-soft-rgb) / .82);
879
+ --usk-native-progress-track-border: 1px solid rgb(var(--saas-border-rgb) / .5);
880
+ --usk-native-progress-track-shadow: none;
881
+ --usk-native-progress-value-shadow: none;
882
+ --usk-native-scrollbar-size: .55rem;
883
+ --usk-native-scrollbar-track: rgb(var(--saas-surface-soft-rgb) / .72);
884
+ --usk-native-scrollbar-thumb: rgb(var(--saas-primary-rgb) / .72);
885
+ --usk-native-scrollbar-radius: .125rem;
886
+ }
887
+
888
+ /**
889
+ * Gives the retained custom chevron exclusive ownership of single-select chrome.
890
+ * Suppressing both legacy appearance and the customizable picker icon prevents
891
+ * browsers from painting a second platform indicator beside it.
892
+ */
893
+ [data-ui="minimal-saas"][data-mode] :where(select:not([multiple])) {
894
+ -webkit-appearance: none;
895
+ appearance: none;
896
+ }
897
+ [data-ui="minimal-saas"][data-mode] :where(select:not([multiple]))::picker-icon { display: none; }
898
+
899
+ /** Carries the compact product grammar through every authored component role. */
900
+ .saas-title { margin: 0; font-size: 1.5rem; font-weight: 700; line-height: 1.05; letter-spacing: -.02em; }
901
+ .saas-label { font-size: .8125rem; font-weight: 650; }
902
+ .saas-button, .saas-icon-button {
903
+ min-height: 2.125rem;
904
+ padding: .45rem .75rem;
905
+ background: var(--saas-control-bg);
906
+ border-radius: .375rem;
907
+ box-shadow: none;
908
+ font-weight: 650;
909
+ }
910
+ .saas-icon-button { padding: 0; }
911
+ .saas-input, .saas-textarea, .saas-select {
912
+ min-height: 2rem;
913
+ padding: .38rem .65rem;
914
+ border-radius: .375rem;
915
+ box-shadow: none;
916
+ }
917
+ .saas-surface, .saas-card, .saas-panel, .saas-toolbar, .saas-table-wrap {
918
+ background: var(--saas-surface);
919
+ border: 1px solid var(--saas-border);
920
+ border-radius: .5rem;
921
+ box-shadow: var(--saas-shadow-md);
922
+ }
923
+ .saas-card, .saas-panel { padding: 1rem; }
924
+ .saas-well, .saas-inset {
925
+ padding: .75rem;
926
+ background: rgb(var(--saas-surface-soft-rgb) / .72);
927
+ border: 1px solid var(--saas-border);
928
+ border-radius: .375rem;
929
+ box-shadow: none;
930
+ }
931
+ .saas-badge { min-height: 1.35rem; padding: .18rem .45rem; border-radius: .25rem; }
932
+ .saas-alert {
933
+ background: var(--saas-surface);
934
+ border: 1px solid var(--saas-border);
935
+ border-inline-start: 1px solid var(--saas-primary);
936
+ border-radius: .375rem;
937
+ box-shadow: none;
938
+ }
939
+ .saas-progress { height: .3rem; background: rgb(var(--saas-surface-soft-rgb) / .82); }
940
+ .saas-progress-bar { background: var(--saas-primary); box-shadow: none; }
941
+ .saas-table-wrap { background: var(--saas-surface); border-radius: .5rem; box-shadow: none; }
942
+ .saas-table th { padding: .6rem .7rem; background: rgb(var(--saas-surface-soft-rgb) / .58); font-weight: 650; }
943
+ .saas-table td { padding: .6rem .7rem; }
944
+ .saas-nav { padding: 0; background: transparent; border: 0; border-bottom: 1px solid var(--saas-border); border-radius: 0; box-shadow: none; }
945
+ .saas-nav-link { min-height: 2.125rem; padding: .4rem .62rem; border-radius: .25rem; }
946
+ .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); }
947
+ .saas-card-service, .saas-card-feature, .saas-feature-strip, .saas-callout-bar {
948
+ padding: 1rem;
949
+ background: var(--saas-surface);
950
+ border-radius: .5rem;
951
+ box-shadow: none;
952
+ }
953
+ .saas-feature-item { padding: .75rem; }
954
+ [data-ui="minimal-saas"][data-mode] :where(dialog) {
955
+ background: var(--saas-surface);
956
+ border-radius: .5rem;
957
+ box-shadow: 0 .5rem 1.25rem rgb(var(--saas-text-rgb) / .12);
958
+ }
959
+
960
+ /** Keeps semantic alerts fully outlined after the shared surface reset. */
961
+ .saas-alert-success { background: rgb(var(--saas-success-rgb) / .12); border-color: rgb(var(--saas-success-rgb) / .58); }
962
+ .saas-alert-warning { background: rgb(var(--saas-warning-rgb) / .12); border-color: rgb(var(--saas-warning-rgb) / .58); }
963
+ .saas-alert-danger { background: rgb(var(--saas-danger-rgb) / .12); border-color: rgb(var(--saas-danger-rgb) / .58); }
964
+ }
965
+
966
+ @layer ui-style-kit.minimal_saas {
967
+ /** Restores source-faithful action hierarchy after identity geometry. */
968
+ .saas-button-primary { background: linear-gradient(135deg, var(--saas-primary), var(--saas-brand-2)); color: var(--saas-on-primary); border-color: var(--saas-primary); }
969
+ .saas-button-secondary { background: var(--saas-surface); color: var(--usk-primary-ink, var(--saas-primary)); border-color: var(--saas-primary); }
970
+ .saas-button-danger { background: var(--saas-danger); color: var(--saas-on-danger); border-color: var(--saas-danger); }
971
+ .saas-button-ghost { background: transparent; color: var(--usk-primary-ink, var(--saas-primary)); border-color: transparent; }
972
+ }
973
+
974
+ @layer ui-style-kit.minimal_saas {
975
+ /** Preserves compact desktop density while meeting coarse-pointer target guidance. */
976
+ @media (pointer: coarse) {
977
+ [data-ui="minimal-saas"] :where(.saas-button, .saas-icon-button, .saas-input, .saas-select, .saas-nav-link) {
978
+ min-block-size: 2.75rem;
979
+ }
980
+ }
981
+ }
982
+
983
+ @layer ui-style-kit.minimal_saas {
984
+ /** Keeps annotated text icons readable without changing their component frames. */
985
+ .saas-card-service > .saas-icon-medallion { font-size: 1.5rem; line-height: 1; }
986
+ .saas-feature-item > .saas-icon-medallion { font-size: 1.5rem; line-height: 1; }
987
+ .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; }
988
+
989
+ /** Strengthens the trust-seal hierarchy while preserving its fixed circle. */
990
+ .saas-badge-seal > strong { font-size: 1.125rem; line-height: .9; }
991
+ .saas-badge-seal > small { font-size: .78rem; line-height: 1; }
992
+ /** Warning actions inherit preset geometry and use the paired semantic warning colors. */
993
+ [data-ui="minimal-saas"][data-mode] .saas-button.saas-button-warning {
994
+ background: var(--saas-warning);
995
+ color: var(--saas-on-warning);
996
+ border-color: var(--saas-warning);
997
+ text-shadow: none;
998
+ }
999
+
1000
+ }
1001
+
1002
+ /**
1003
+ * Preserves shared annotation fixture spacing and icon weight after reference
1004
+ * overrides append their compact source rules.
1005
+ */
1006
+ [data-ui="minimal-saas"][data-mode] .saas-title {
1007
+ margin-block: max(.75rem, 12px);
1008
+ letter-spacing: max(.03em, .5px);
1009
+ }
1010
+
1011
+ [data-ui="minimal-saas"][data-mode] .saas-feature-item > .saas-icon-medallion {
1012
+ font-size: 1.5rem;
1013
+ line-height: 1;
1014
+ }
1015
+
1016
+ [data-ui="minimal-saas"][data-mode] .saas-callout-bar > .saas-icon-medallion {
1017
+ min-inline-size: 4.5rem;
1018
+ min-block-size: 4.5rem;
1019
+ font-size: 2rem;
1020
+ font-weight: 800;
1021
+ line-height: 1;
1022
+ }