ui-style-kit-css 2.2.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 (122) hide show
  1. package/CHANGELOG.md +77 -1
  2. package/CONTRIBUTING.md +8 -1
  3. package/README.md +171 -53
  4. package/STYLE-MAP.md +28 -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 +55604 -6525
  26. package/dist/ui-style-kit.min.css +2 -2
  27. package/dist/ui-style-kit.visual.css +55443 -6942
  28. package/dist/ui-style-kit.visual.min.css +2 -2
  29. package/dist/ui-style-kit.with-bridge.css +55646 -6551
  30. package/dist/ui-style-kit.with-bridge.min.css +2 -2
  31. package/dist/visual/art-deco.css +7318 -0
  32. package/dist/visual/bauhaus.css +2 -2961
  33. package/dist/visual/bento.css +2 -2980
  34. package/dist/visual/brutalism.css +2679 -352
  35. package/dist/visual/clay.css +5 -0
  36. package/dist/visual/cyberpunk.css +4482 -781
  37. package/dist/visual/data-terminal.css +6182 -0
  38. package/dist/visual/editorial-luxe.css +6450 -0
  39. package/dist/visual/industrial-utility.css +7259 -0
  40. package/dist/visual/maximalist.css +4080 -1025
  41. package/dist/visual/minimal-saas.css +3305 -888
  42. package/dist/visual/neo-noir.css +5 -0
  43. package/dist/visual/neumorphism.css +3582 -975
  44. package/dist/visual/organic-modern.css +5 -0
  45. package/dist/visual/paper-editorial.css +7074 -0
  46. package/dist/visual/retro-glass.css +4426 -760
  47. package/dist/visual/retrofuturism.css +3676 -875
  48. package/dist/visual/tactile.css +4568 -1036
  49. package/dist/visual/technical-blueprint.css +6713 -0
  50. package/dist/visual/y2k.css +3672 -753
  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 +9 -5
  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 +36 -11
  64. package/docs/RELEASE-2.4.0.md +88 -0
  65. package/docs/RETRO-GLASS.md +105 -0
  66. package/docs/STYLE-GUIDE.md +68 -13
  67. package/docs/TACTILE.md +38 -0
  68. package/docs/TECHNICAL-BLUEPRINT.md +60 -0
  69. package/docs/TOKENS.md +90 -4
  70. package/docs/superpowers/plans/2026-08-29-preset-identity-system-refinement.md +649 -0
  71. package/docs/superpowers/plans/2026-09-04-library-wide-theme-fallback-and-fidelity.md +331 -0
  72. package/docs/superpowers/specs/2026-08-29-preset-identity-system-refinement-design.md +212 -0
  73. package/docs/superpowers/specs/2026-09-04-library-wide-theme-fallback-and-fidelity-design.md +113 -0
  74. package/manifest.json +769 -20
  75. package/package.json +79 -14
  76. package/styles/art-deco.css +2068 -0
  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 +1092 -87
  98. package/styles/bento.css +1413 -86
  99. package/styles/brutalism.css +493 -10
  100. package/styles/clay.css +1927 -0
  101. package/styles/compat-layout.css +1 -2
  102. package/styles/components.css +698 -33
  103. package/styles/content-overflow.css +434 -9
  104. package/styles/cyberpunk.css +2082 -46
  105. package/styles/data-terminal.css +1795 -0
  106. package/styles/editorial-luxe.css +1251 -0
  107. package/styles/industrial-utility.css +2449 -0
  108. package/styles/interactive-surface-bridge.css +40 -24
  109. package/styles/interactive-surface-theme.css +31 -13
  110. package/styles/maximalist.css +1410 -94
  111. package/styles/minimal-saas.css +675 -73
  112. package/styles/native-elements.css +396 -168
  113. package/styles/neo-noir.css +1332 -0
  114. package/styles/neumorphism.css +1155 -52
  115. package/styles/organic-modern.css +1353 -0
  116. package/styles/paper-editorial.css +1724 -0
  117. package/styles/retro-glass.css +870 -42
  118. package/styles/retrofuturism.css +1173 -55
  119. package/styles/tactile.css +2018 -84
  120. package/styles/technical-blueprint.css +1337 -0
  121. package/styles/theme-colors.css +796 -5
  122. package/styles/y2k.css +1182 -40
@@ -1,6 +1,6 @@
1
1
  /* =========================================================
2
2
  UI Style Kit CSS — Minimal SaaS Theme System
3
- Includes 10 color schemes, light/dark/contrast modes,
3
+ Includes 20 color schemes, light/dark/contrast modes,
4
4
  component classes, native element coverage, and CSS-only
5
5
  accessibility presentation helpers.
6
6
 
@@ -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));
@@ -131,10 +282,11 @@
131
282
  --saas-fg: var(--saas-text);
132
283
  --saas-surface-fg: var(--saas-text);
133
284
  --saas-muted: var(--saas-text-muted);
134
- --saas-border: rgb(var(--saas-border-rgb) / var(--saas-border-alpha));
285
+ --saas-border: rgb(var(--saas-border-rgb) / max(var(--saas-border-alpha), var(--usk-border-min-alpha)));
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,15 +304,22 @@
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
 
319
+ @supports (color: color-mix(in srgb, black, white)) {
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)); }
321
+ }
322
+
164
323
 
165
324
 
166
325
 
@@ -197,7 +356,7 @@
197
356
 
198
357
  [data-ui="minimal-saas"] {
199
358
  min-height: 100vh;
200
- 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);
201
360
  color: var(--saas-text);
202
361
  font-family: var(--saas-font-body);
203
362
  line-height: 1.5;
@@ -210,7 +369,7 @@
210
369
  [data-ui="minimal-saas"] *::before,
211
370
  [data-ui="minimal-saas"] *::after { box-sizing: border-box; }
212
371
 
213
- [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); }
214
373
 
215
374
  .saas-page { min-height: 100vh; padding: clamp(1rem, 4vw, 3rem); }
216
375
  .saas-container { width: min(100% - 2rem, 1200px); margin-inline: auto; }
@@ -225,10 +384,10 @@
225
384
  ========================================================= */
226
385
 
227
386
  .saas-title, .saas-heading, .saas-kicker, .saas-button, .saas-badge, .saas-nav-link { font-family: var(--saas-font-heading); }
228
- .saas-title { margin: 0; color: var(--saas-text); font-size: clamp(2rem, 5vw, 3.7rem); line-height: 1.02; letter-spacing: -0.045em; }
229
- .saas-heading { margin: 0; color: var(--saas-text); font-size: clamp(1.2rem, 2.5vw, 2rem); line-height: 1.15; letter-spacing: -0.03em; }
230
- .saas-kicker { margin: 0; color: var(--saas-primary); font-size: .82rem; font-weight: 850; letter-spacing: .12em; text-transform: uppercase; }
231
- .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; }
232
391
  .saas-text-muted { color: var(--saas-text-muted); }
233
392
  .saas-divider { width: 100%; height: 1px; border: 0; background: var(--saas-border); }
234
393
 
@@ -238,19 +397,19 @@
238
397
 
239
398
  .saas-surface, .saas-card, .saas-panel, .saas-toolbar, .saas-table-wrap {
240
399
  position: relative;
241
- background: linear-gradient(180deg, rgb(255 255 255 / .05), rgb(255 255 255 / 0)), var(--saas-surface);
400
+ background: var(--saas-card-bg);
242
401
  color: var(--saas-text);
243
402
  border: 1px solid var(--saas-border);
244
403
  border-radius: var(--saas-radius-lg);
245
- box-shadow: 0 10px 30px rgb(15 23 42 / var(--saas-shadow-alpha));
404
+ box-shadow: var(--saas-shadow-md);
246
405
  transition: transform var(--saas-transition-base), box-shadow var(--saas-transition-base), border-color var(--saas-transition-base), background var(--saas-transition-base);
247
406
  }
248
- .saas-card, .saas-panel { padding: var(--saas-space-6); }
407
+ .saas-card, .saas-panel { padding: var(--saas-space-5); }
249
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); }
250
- .saas-surface-sm { border-radius: var(--saas-radius-md); box-shadow: 0 6px 18px rgb(0 0 0 / calc(var(--saas-shadow-alpha) * .72)); }
251
- .saas-surface-lg { border-radius: var(--saas-radius-xl); box-shadow: 0 22px 60px rgb(0 0 0 / calc(var(--saas-shadow-alpha) + .08)); }
252
- .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); }
253
- .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); }
254
413
 
255
414
  /* =========================================================
256
415
  Buttons
@@ -258,26 +417,26 @@
258
417
 
259
418
  .saas-button, .saas-icon-button {
260
419
  appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: var(--saas-space-2);
261
- min-height: 2.75rem; padding: .75rem 1.1rem; background: var(--saas-surface); color: var(--saas-text);
262
- 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));
263
- 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;
264
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);
265
424
  }
266
- .saas-button:hover, .saas-icon-button:hover { transform: translateY(-1px); border-color: var(--saas-primary); }
267
- .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); }
268
- .saas-button-primary { background: var(--saas-primary); color: var(--saas-on-primary); border-color: var(--saas-primary); }
269
- .saas-button-primary:hover { background: var(--saas-primary-hover); border-color: var(--saas-primary-hover); }
270
- .saas-button-secondary { background: var(--saas-secondary); color: var(--saas-on-secondary); border-color: var(--saas-secondary); }
271
- .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); }
272
431
  .saas-button-danger { background: var(--saas-danger); color: var(--saas-on-danger); border-color: var(--saas-danger); }
273
- .saas-button-ghost { background: transparent; color: var(--saas-text); box-shadow: none; }
274
- .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); }
275
434
  .saas-button:disabled, .saas-icon-button:disabled, .saas-disabled { opacity: .55; cursor: not-allowed; transform: none; }
276
435
 
277
436
  /* Theme-responsive component defaults */
278
437
  .saas-card, .saas-panel { background: var(--saas-card-bg); }
279
438
  .saas-toolbar, .saas-table-wrap { background: var(--saas-control-bg); }
280
- .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); }
281
440
  .saas-button, .saas-icon-button, .saas-badge, .saas-nav-link { font-family: var(--saas-font-control); }
282
441
 
283
442
 
@@ -286,51 +445,65 @@
286
445
  ========================================================= */
287
446
 
288
447
  .saas-field { display: flex; flex-direction: column; gap: var(--saas-space-2); }
289
- .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; }
290
449
  .saas-input, .saas-textarea, .saas-select {
291
- 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);
292
451
  border: 1px solid var(--saas-border); border-radius: var(--saas-radius-md); font: inherit; outline: none;
293
452
  transition: background var(--saas-transition-fast), border-color var(--saas-transition-fast), box-shadow var(--saas-transition-fast);
294
453
  }
295
- .saas-textarea { min-height: 8rem; resize: vertical; }
454
+ .saas-textarea { min-height: 7rem; resize: vertical; }
296
455
  .saas-input::placeholder, .saas-textarea::placeholder { color: var(--saas-text-muted); opacity: .82; }
297
- .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); }
298
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
+ }
299
464
  .saas-help-text { color: var(--saas-text-muted); font-size: .875rem; line-height: 1.45; }
300
465
 
301
466
  /* Checkbox / Radio */
302
467
  .saas-check, .saas-radio { display: inline-flex; align-items: center; gap: var(--saas-space-2); color: var(--saas-text); cursor: pointer; }
303
468
  .saas-check input, .saas-radio input { position: absolute; opacity: 0; pointer-events: none; }
304
- .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); }
305
470
  .saas-check-control { border-radius: var(--saas-radius-xs); }
306
471
  .saas-radio-control { border-radius: 50%; }
307
- .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); }
308
- .saas-check input:checked + .saas-check-control::after { content: "✓"; color: var(--saas-on-primary); font-size: .9rem; font-weight: 900; }
309
- .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%; }
310
475
 
311
476
  /* Switch */
312
477
  .saas-switch { display: inline-flex; align-items: center; gap: var(--saas-space-3); color: var(--saas-text); cursor: pointer; }
313
478
  .saas-switch input { position: absolute; opacity: 0; pointer-events: none; }
314
- .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); }
315
- .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); }
316
481
  .saas-switch input:checked + .saas-switch-track { background: var(--saas-primary); border-color: var(--saas-primary); }
317
- .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
+ }
318
491
 
319
492
  /* =========================================================
320
493
  Badges / Nav / Progress / Alerts / Tables
321
494
  ========================================================= */
322
495
 
323
- .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; }
324
497
  .saas-badge-primary { background: var(--saas-primary); color: var(--saas-on-primary); border-color: var(--saas-primary); }
325
- .saas-badge-secondary { background: var(--saas-secondary); color: var(--saas-on-secondary); border-color: var(--saas-secondary); }
326
- .saas-badge-success { background: var(--saas-success); color: var(--saas-on-success); border-color: var(--saas-success); }
327
- .saas-badge-warning { background: var(--saas-warning); color: var(--saas-on-warning); border-color: var(--saas-warning); }
328
- .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); }
329
502
 
330
- .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)); }
331
- .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); }
332
505
  .saas-nav-link:hover { color: var(--saas-text); background: var(--saas-surface-soft); }
333
- .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); }
334
507
 
335
508
  /* Tooltips use compact contrast surfaces that stay readable across theme modes. */
336
509
  .saas-tooltip, [data-ui="minimal-saas"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) {
@@ -340,20 +513,20 @@
340
513
  }
341
514
  .saas-tooltip-arrow { inline-size: .55rem; block-size: .55rem; flex: 0 0 auto; background: currentColor; border-radius: .12rem; opacity: .9; transform: rotate(45deg); }
342
515
 
343
- .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); }
344
- .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; }
345
518
 
346
- .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)); }
347
- .saas-alert-success { border-left-color: var(--saas-success); }
348
- .saas-alert-warning { border-left-color: var(--saas-warning); }
349
- .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); }
350
523
  .saas-alert-title { margin: 0; font-weight: 900; }
351
524
  .saas-alert-body { margin: 0; color: var(--saas-text-muted); line-height: 1.55; }
352
525
 
353
526
  .saas-table-wrap { overflow: auto; }
354
527
  .saas-table { width: 100%; border-collapse: collapse; }
355
- .saas-table th, .saas-table td { padding: .95rem 1rem; text-align: left; border-bottom: 1px solid var(--saas-border); }
356
- .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); }
357
530
  .saas-table td { color: var(--saas-text-muted); }
358
531
  .saas-table tr:hover td { background: rgb(var(--saas-primary-rgb) / .045); }
359
532
 
@@ -401,6 +574,250 @@
401
574
  @keyframes saas-spin { to { transform: rotate(360deg); } }
402
575
 
403
576
 
577
+
578
+ /* =========================================================
579
+ Marketing / Commercial Component Modifiers
580
+ Reusable visual patterns derived from service-oriented brand systems.
581
+ ========================================================= */
582
+
583
+ .saas-card-media {
584
+ display: block;
585
+ inline-size: 100%;
586
+ aspect-ratio: 16 / 9;
587
+ object-fit: cover;
588
+ border: 1px solid rgb(var(--saas-border-rgb) / .72);
589
+ border-radius: var(--saas-radius-lg);
590
+ }
591
+
592
+ .saas-card-service {
593
+ position: relative;
594
+ display: grid;
595
+ gap: var(--saas-space-3);
596
+ align-content: start;
597
+ text-align: center;
598
+ overflow: visible;
599
+ }
600
+ .saas-card-service > .saas-icon-medallion {
601
+ justify-self: center;
602
+ margin-block-start: -2.15rem;
603
+ position: relative;
604
+ z-index: 2;
605
+ }
606
+ .saas-card-service > .saas-card-media + .saas-icon-medallion { margin-block-start: -2.15rem; }
607
+
608
+ .saas-card-feature {
609
+ display: grid;
610
+ grid-template-columns: auto minmax(0, 1fr);
611
+ gap: var(--saas-space-4);
612
+ align-items: start;
613
+ }
614
+
615
+ .saas-card-accent-edge {
616
+ border-inline-start: .35rem solid var(--saas-primary);
617
+ }
618
+
619
+ .saas-icon-medallion {
620
+ display: inline-grid;
621
+ place-items: center;
622
+ inline-size: 3.75rem;
623
+ block-size: 3.75rem;
624
+ flex: 0 0 auto;
625
+ padding: .7rem;
626
+ background: var(--saas-primary);
627
+ color: var(--saas-on-primary);
628
+ border: 2px solid rgb(var(--saas-border-rgb) / .82);
629
+ border-radius: 50%;
630
+ line-height: 1;
631
+ }
632
+ .saas-icon-medallion > :where(svg, img) { inline-size: 100%; block-size: 100%; object-fit: contain; }
633
+
634
+ .saas-button.saas-button-cut,
635
+ .saas-button-cut {
636
+ border-radius: 0;
637
+ clip-path: polygon(.6rem 0, 100% 0, 100% calc(100% - .6rem), calc(100% - .6rem) 100%, 0 100%, 0 .6rem);
638
+ }
639
+ .saas-button.saas-button-cut:focus-visible,
640
+ .saas-button-cut:focus-visible { outline-offset: -3px; }
641
+
642
+ .saas-button.saas-button-outline-heavy,
643
+ .saas-button-outline-heavy {
644
+ background: transparent;
645
+ color: var(--saas-primary);
646
+ border-style: solid;
647
+ border-width: 2px;
648
+ border-color: var(--saas-primary);
649
+ box-shadow: none;
650
+ }
651
+ .saas-button.saas-button-outline-heavy:hover,
652
+ .saas-button-outline-heavy:hover {
653
+ background: var(--saas-primary);
654
+ color: var(--saas-on-primary);
655
+ border-color: var(--saas-primary-hover);
656
+ }
657
+
658
+ .saas-badge-seal {
659
+ display: inline-grid;
660
+ place-items: center;
661
+ align-content: center;
662
+ inline-size: 5rem;
663
+ min-inline-size: 5rem;
664
+ aspect-ratio: 1;
665
+ padding: .65rem;
666
+ background: var(--saas-surface-strong);
667
+ color: var(--saas-text);
668
+ border: 2px solid var(--saas-primary);
669
+ border-radius: 50%;
670
+ text-align: center;
671
+ font-family: var(--saas-font-heading);
672
+ font-size: .72rem;
673
+ font-weight: 900;
674
+ line-height: 1.05;
675
+ letter-spacing: .04em;
676
+ }
677
+
678
+ .saas-feature-strip {
679
+ display: grid;
680
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
681
+ background: var(--saas-card-bg);
682
+ color: var(--saas-text);
683
+ border: 1px solid var(--saas-border);
684
+ border-radius: var(--saas-radius-lg);
685
+ }
686
+
687
+ .saas-feature-item {
688
+ display: grid;
689
+ grid-template-columns: auto minmax(0, 1fr);
690
+ align-items: center;
691
+ gap: var(--saas-space-3);
692
+ min-inline-size: 0;
693
+ padding: var(--saas-space-4);
694
+ border-inline-end: 1px solid rgb(var(--saas-border-rgb) / .62);
695
+ }
696
+ .saas-feature-item:last-child { border-inline-end: 0; }
697
+ .saas-feature-item > :where(p, small) { margin: 0; color: var(--saas-text-muted); }
698
+
699
+ .saas-callout-bar {
700
+ display: grid;
701
+ grid-template-columns: auto minmax(0, 1fr) auto;
702
+ align-items: center;
703
+ gap: var(--saas-space-4);
704
+ padding: var(--saas-space-4) var(--saas-space-5);
705
+ background: var(--saas-card-bg);
706
+ color: var(--saas-text);
707
+ border: 1px solid var(--saas-border);
708
+ border-radius: var(--saas-radius-lg);
709
+ }
710
+ .saas-callout-bar > :where(p, div) { min-inline-size: 0; }
711
+ .saas-callout-bar > :where(.saas-button, a, button):last-child { justify-self: end; }
712
+
713
+ .saas-eyebrow {
714
+ margin: 0;
715
+ color: var(--saas-primary);
716
+ font-family: var(--saas-font-heading);
717
+ font-size: .76rem;
718
+ font-weight: 900;
719
+ line-height: 1.2;
720
+ letter-spacing: .14em;
721
+ text-transform: uppercase;
722
+ }
723
+
724
+ .saas-media-scrim {
725
+ position: relative;
726
+ overflow: hidden;
727
+ isolation: isolate;
728
+ min-block-size: 12rem;
729
+ background: var(--saas-surface-soft);
730
+ border: 1px solid var(--saas-border);
731
+ border-radius: var(--saas-radius-lg);
732
+ }
733
+ .saas-media-scrim > :where(img, picture, video) {
734
+ display: block;
735
+ inline-size: 100%;
736
+ block-size: 100%;
737
+ min-block-size: inherit;
738
+ object-fit: cover;
739
+ }
740
+ .saas-media-scrim > :where(figcaption, [data-media-caption]) {
741
+ position: absolute;
742
+ z-index: 1;
743
+ inset-inline: 0;
744
+ inset-block-end: 0;
745
+ padding: clamp(1rem, 4vw, 2rem);
746
+ color: #fff;
747
+ background: linear-gradient(to top, rgb(0 0 0 / .9), rgb(0 0 0 / .58) 56%, transparent);
748
+ }
749
+ .saas-media-scrim > :where(figcaption, [data-media-caption]) * {
750
+ color: inherit;
751
+ }
752
+
753
+ @media (max-width: 42rem) {
754
+ .saas-callout-bar { grid-template-columns: 1fr; align-items: start; }
755
+ .saas-callout-bar > :where(.saas-button, a, button):last-child { justify-self: stretch; }
756
+ .saas-feature-item { border-inline-end: 0; border-block-end: 1px solid rgb(var(--saas-border-rgb) / .62); }
757
+ .saas-feature-item:last-child { border-block-end: 0; }
758
+ }
759
+
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
+ }
769
+
770
+ /* Filled and framed actions share one precise fold without becoming the same control. */
771
+ .saas-button.saas-button-cut, .saas-button-cut {
772
+ min-height: 2.75rem;
773
+ min-inline-size: 6rem;
774
+ max-inline-size: 100%;
775
+ justify-self: start;
776
+ justify-content: center;
777
+ clip-path: polygon(0 0, calc(100% - .25rem) 0, 100% .25rem, 100% 100%, 0 100%);
778
+ }
779
+ .saas-button.saas-button-outline-heavy, .saas-button-outline-heavy {
780
+ border-width: 1px;
781
+ border-radius: 0;
782
+ clip-path: polygon(0 0, calc(100% - .2rem) 0, 100% .2rem, 100% 100%, 0 100%);
783
+ box-shadow: var(--saas-shadow-sm);
784
+ }
785
+
786
+ /* Marketing and native surfaces stay aligned with the calm, rule-driven product material. */
787
+ .saas-card-service, .saas-media-scrim, .saas-feature-strip, .saas-callout-bar, .saas-metric {
788
+ border: 1px solid var(--saas-border);
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;
796
+ }
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);
805
+ border-radius: var(--saas-radius-md);
806
+ box-shadow: var(--saas-shadow-sm);
807
+ font-family: var(--saas-font-control);
808
+ font-weight: 700;
809
+ }
810
+ [data-ui="minimal-saas"][data-mode] :where(dialog) {
811
+ border: 1px solid var(--saas-border);
812
+ border-radius: var(--saas-radius-lg);
813
+ box-shadow: 0 .75rem 2rem rgb(var(--saas-text-rgb) / .14);
814
+ }
815
+
816
+ /* Busy indicators retain the restrained circular progress language of Minimal SaaS. */
817
+ .saas-button[aria-busy="true"]::after, .saas-icon-button[aria-busy="true"]::after, [data-ui="minimal-saas"] :where(button[aria-busy="true"], input[type="button"][aria-busy="true"], input[type="submit"][aria-busy="true"], input[type="reset"][aria-busy="true"])::after {
818
+ border: .14em solid rgb(var(--saas-primary-text-rgb) / .38); border-block-start-color: currentColor; border-radius: 50%; background: transparent; box-shadow: none; clip-path: circle(50%); animation: saas-spin .7s linear infinite;
819
+ }
820
+
404
821
  @media (prefers-reduced-motion: reduce) {
405
822
  [data-ui="minimal-saas"] *, [data-ui="minimal-saas"] *::before, [data-ui="minimal-saas"] *::after { scroll-behavior: auto !important; transition-duration: 1ms !important; animation-duration: 1ms !important; animation-iteration-count: 1 !important; }
406
823
  }
@@ -408,7 +825,7 @@
408
825
  [data-ui="minimal-saas"] { --saas-border-alpha: 1; --saas-focus-alpha: .75; }
409
826
  }
410
827
  @media (forced-colors: active) {
411
- [data-ui="minimal-saas"] * { forced-color-adjust: auto; }
828
+ @supports (forced-color-adjust: auto) { [data-ui="minimal-saas"] * { forced-color-adjust: auto; } }
412
829
  [data-ui="minimal-saas"] :where(:focus-visible) { outline: 3px solid CanvasText; }
413
830
  }
414
831
  @media print {
@@ -417,3 +834,188 @@
417
834
  [data-ui="minimal-saas"] a { color: #000 !important; text-decoration: underline; }
418
835
  }
419
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
+ }