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,12 +23,14 @@
23
23
  --neo-font-heading: var(--neo-font-display);
24
24
  --neo-font-control: var(--neo-font-display);
25
25
  --neo-font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;
26
- --neo-radius-xs: .25rem;
27
- --neo-radius-sm: .5rem;
28
- --neo-radius-md: 0.9rem;
29
- --neo-radius-lg: 1.4rem;
30
- --neo-radius-xl: calc(1.4rem + .5rem);
26
+ --neo-radius-xs: .52rem;
27
+ --neo-radius-sm: .82rem;
28
+ --neo-radius-md: 1.15rem;
29
+ --neo-radius-lg: 1.55rem;
30
+ --neo-radius-xl: 2.25rem;
31
31
  --neo-radius-pill: 999px;
32
+ --neo-soft-edge: 1px solid rgb(var(--neo-border-rgb) / .28);
33
+ --neo-sunken-edge: 1px solid rgb(var(--neo-border-rgb) / .18);
32
34
  --neo-space-1: .25rem;
33
35
  --neo-space-2: .5rem;
34
36
  --neo-space-3: .75rem;
@@ -42,6 +44,29 @@
42
44
 
43
45
  [data-ui="neumorphism"][data-mode="light"] {
44
46
  color-scheme: light;
47
+ --neo-fallback-bg-rgb: 241 245 255;
48
+ --neo-fallback-surface-rgb: 255 255 255;
49
+ --neo-fallback-surface-strong-rgb: 248 251 255;
50
+ --neo-fallback-surface-soft-rgb: 223 231 246;
51
+ --neo-fallback-text-rgb: 20 27 46;
52
+ --neo-fallback-text-muted-rgb: 88 100 122;
53
+ --neo-fallback-border-rgb: 190 203 227;
54
+ --neo-fallback-primary-rgb: 64 94 184;
55
+ --neo-fallback-primary-hover-rgb: 49 72 148;
56
+ --neo-fallback-primary-text-rgb: 255 255 255;
57
+ --neo-fallback-secondary-rgb: 46 125 157;
58
+ --neo-fallback-secondary-hover-rgb: 35 97 122;
59
+ --neo-fallback-secondary-text-rgb: 255 255 255;
60
+ --neo-fallback-accent-rgb: 123 147 232;
61
+ --neo-fallback-accent-text-rgb: 0 0 0;
62
+ --neo-fallback-success-rgb: 47 125 84;
63
+ --neo-fallback-success-text-rgb: 255 255 255;
64
+ --neo-fallback-warning-rgb: 166 106 0;
65
+ --neo-fallback-warning-text-rgb: 0 0 0;
66
+ --neo-fallback-danger-rgb: 182 64 82;
67
+ --neo-fallback-danger-text-rgb: 255 255 255;
68
+ --neo-fallback-link-rgb: 49 72 148;
69
+ --neo-fallback-focus-rgb: 123 147 232;
45
70
  --neo-panel-alpha: .98;
46
71
  --neo-panel-soft-alpha: .78;
47
72
  --neo-border-alpha: .58;
@@ -51,6 +76,29 @@
51
76
 
52
77
  [data-ui="neumorphism"][data-mode="dark"] {
53
78
  color-scheme: dark;
79
+ --neo-fallback-bg-rgb: 6 10 22;
80
+ --neo-fallback-surface-rgb: 16 24 43;
81
+ --neo-fallback-surface-strong-rgb: 24 35 66;
82
+ --neo-fallback-surface-soft-rgb: 10 16 32;
83
+ --neo-fallback-text-rgb: 237 243 255;
84
+ --neo-fallback-text-muted-rgb: 178 191 217;
85
+ --neo-fallback-border-rgb: 58 75 120;
86
+ --neo-fallback-primary-rgb: 145 168 255;
87
+ --neo-fallback-primary-hover-rgb: 183 197 255;
88
+ --neo-fallback-primary-text-rgb: 5 8 22;
89
+ --neo-fallback-secondary-rgb: 118 216 243;
90
+ --neo-fallback-secondary-hover-rgb: 165 234 255;
91
+ --neo-fallback-secondary-text-rgb: 4 17 22;
92
+ --neo-fallback-accent-rgb: 194 206 255;
93
+ --neo-fallback-accent-text-rgb: 0 0 0;
94
+ --neo-fallback-success-rgb: 114 219 166;
95
+ --neo-fallback-success-text-rgb: 0 0 0;
96
+ --neo-fallback-warning-rgb: 255 209 102;
97
+ --neo-fallback-warning-text-rgb: 0 0 0;
98
+ --neo-fallback-danger-rgb: 255 125 145;
99
+ --neo-fallback-danger-text-rgb: 0 0 0;
100
+ --neo-fallback-link-rgb: 183 197 255;
101
+ --neo-fallback-focus-rgb: 145 168 255;
54
102
  --neo-panel-alpha: .92;
55
103
  --neo-panel-soft-alpha: .64;
56
104
  --neo-border-alpha: .52;
@@ -60,6 +108,29 @@
60
108
 
61
109
  [data-ui="neumorphism"][data-mode="contrast"] {
62
110
  color-scheme: dark;
111
+ --neo-fallback-bg-rgb: 0 0 0;
112
+ --neo-fallback-surface-rgb: 3 8 22;
113
+ --neo-fallback-surface-strong-rgb: 8 18 42;
114
+ --neo-fallback-surface-soft-rgb: 0 0 0;
115
+ --neo-fallback-text-rgb: 255 255 255;
116
+ --neo-fallback-text-muted-rgb: 238 244 255;
117
+ --neo-fallback-border-rgb: 255 255 255;
118
+ --neo-fallback-primary-rgb: 111 140 255;
119
+ --neo-fallback-primary-hover-rgb: 255 255 255;
120
+ --neo-fallback-primary-text-rgb: 0 0 0;
121
+ --neo-fallback-secondary-rgb: 0 217 255;
122
+ --neo-fallback-secondary-hover-rgb: 255 255 255;
123
+ --neo-fallback-secondary-text-rgb: 0 0 0;
124
+ --neo-fallback-accent-rgb: 184 196 255;
125
+ --neo-fallback-accent-text-rgb: 0 0 0;
126
+ --neo-fallback-success-rgb: 0 255 144;
127
+ --neo-fallback-success-text-rgb: 0 0 0;
128
+ --neo-fallback-warning-rgb: 255 225 0;
129
+ --neo-fallback-warning-text-rgb: 0 0 0;
130
+ --neo-fallback-danger-rgb: 255 63 95;
131
+ --neo-fallback-danger-text-rgb: 0 0 0;
132
+ --neo-fallback-link-rgb: 159 178 255;
133
+ --neo-fallback-focus-rgb: 255 255 255;
63
134
  --neo-panel-alpha: 1;
64
135
  --neo-panel-soft-alpha: .92;
65
136
  --neo-border-alpha: 1;
@@ -67,8 +138,8 @@
67
138
  --neo-focus-alpha: .72;
68
139
  }
69
140
 
141
+ /** Preserves direct aliases for static extraction when a scheme is selected. */
70
142
  [data-ui="neumorphism"][data-theme][data-mode] {
71
- /* Shared scheme aliases preserve the existing prefixed token API. */
72
143
  --neo-bg-rgb: var(--usk-bg-rgb);
73
144
  --neo-surface-rgb: var(--usk-surface-rgb);
74
145
  --neo-surface-strong-rgb: var(--usk-surface-strong-rgb);
@@ -83,15 +154,43 @@
83
154
  --neo-secondary-hover-rgb: var(--usk-secondary-hover-rgb);
84
155
  --neo-secondary-text-rgb: var(--usk-secondary-text-rgb);
85
156
  --neo-accent-rgb: var(--usk-accent-rgb);
86
- --neo-success-rgb: var(--usk-success-rgb);
87
- --neo-warning-rgb: var(--usk-warning-rgb);
88
- --neo-danger-rgb: var(--usk-danger-rgb);
89
- --neo-link-rgb: var(--usk-link-rgb);
90
157
  --neo-accent-text-rgb: var(--usk-accent-text-rgb);
158
+ --neo-success-rgb: var(--usk-success-rgb);
91
159
  --neo-success-text-rgb: var(--usk-success-text-rgb);
160
+ --neo-warning-rgb: var(--usk-warning-rgb);
92
161
  --neo-warning-text-rgb: var(--usk-warning-text-rgb);
162
+ --neo-danger-rgb: var(--usk-danger-rgb);
93
163
  --neo-danger-text-rgb: var(--usk-danger-text-rgb);
164
+ --neo-link-rgb: var(--usk-link-rgb);
94
165
  --neo-focus-rgb: var(--usk-focus-rgb);
166
+ }
167
+
168
+ [data-ui="neumorphism"][data-mode] {
169
+ --usk-native-bg: var(--neo-bg);
170
+ /* Explicit schemes win; reference colors are used only when no scheme exists. */
171
+ --neo-bg-rgb: var(--usk-bg-rgb, var(--neo-fallback-bg-rgb));
172
+ --neo-surface-rgb: var(--usk-surface-rgb, var(--neo-fallback-surface-rgb));
173
+ --neo-surface-strong-rgb: var(--usk-surface-strong-rgb, var(--neo-fallback-surface-strong-rgb));
174
+ --neo-surface-soft-rgb: var(--usk-surface-soft-rgb, var(--neo-fallback-surface-soft-rgb));
175
+ --neo-text-rgb: var(--usk-text-rgb, var(--neo-fallback-text-rgb));
176
+ --neo-text-muted-rgb: var(--usk-text-muted-rgb, var(--neo-fallback-text-muted-rgb));
177
+ --neo-border-rgb: var(--usk-border-rgb, var(--neo-fallback-border-rgb));
178
+ --neo-primary-rgb: var(--usk-primary-rgb, var(--neo-fallback-primary-rgb));
179
+ --neo-primary-hover-rgb: var(--usk-primary-hover-rgb, var(--neo-fallback-primary-hover-rgb));
180
+ --neo-primary-text-rgb: var(--usk-primary-text-rgb, var(--neo-fallback-primary-text-rgb));
181
+ --neo-secondary-rgb: var(--usk-secondary-rgb, var(--neo-fallback-secondary-rgb));
182
+ --neo-secondary-hover-rgb: var(--usk-secondary-hover-rgb, var(--neo-fallback-secondary-hover-rgb));
183
+ --neo-secondary-text-rgb: var(--usk-secondary-text-rgb, var(--neo-fallback-secondary-text-rgb));
184
+ --neo-accent-rgb: var(--usk-accent-rgb, var(--neo-fallback-accent-rgb));
185
+ --neo-accent-text-rgb: var(--usk-accent-text-rgb, var(--neo-fallback-accent-text-rgb));
186
+ --neo-success-rgb: var(--usk-success-rgb, var(--neo-fallback-success-rgb));
187
+ --neo-success-text-rgb: var(--usk-success-text-rgb, var(--neo-fallback-success-text-rgb));
188
+ --neo-warning-rgb: var(--usk-warning-rgb, var(--neo-fallback-warning-rgb));
189
+ --neo-warning-text-rgb: var(--usk-warning-text-rgb, var(--neo-fallback-warning-text-rgb));
190
+ --neo-danger-rgb: var(--usk-danger-rgb, var(--neo-fallback-danger-rgb));
191
+ --neo-danger-text-rgb: var(--usk-danger-text-rgb, var(--neo-fallback-danger-text-rgb));
192
+ --neo-link-rgb: var(--usk-link-rgb, var(--neo-fallback-link-rgb));
193
+ --neo-focus-rgb: var(--usk-focus-rgb, var(--neo-fallback-focus-rgb));
95
194
  /* Native fallback selectors inherit visual identity through shared tokens. */
96
195
  --usk-native-surface: var(--neo-surface);
97
196
  --usk-native-surface-strong: var(--neo-surface-strong);
@@ -122,6 +221,57 @@
122
221
  --usk-native-border-width: 1px;
123
222
  --usk-native-field-gap: .5rem;
124
223
  --usk-native-panel-padding: var(--neo-space-5);
224
+ --usk-native-control-min-block-size: 3rem;
225
+ --usk-native-control-padding-block: .74rem;
226
+ --usk-native-control-padding-inline: 1rem;
227
+ --usk-native-subcontrol-padding-block: .58rem;
228
+ --usk-native-subcontrol-padding-inline: .8rem;
229
+ --usk-native-choice-size: 1.55rem;
230
+ --usk-native-choice-background: var(--neo-control-bg);
231
+ --usk-native-choice-border: 1px solid var(--neo-border);
232
+ --usk-native-checkbox-radius: .45rem;
233
+ --usk-native-radio-radius: 50%;
234
+ --usk-native-choice-shadow: 4px 4px 8px rgb(0 0 0 / .22);
235
+ --usk-native-choice-checked-background: var(--neo-primary);
236
+ --usk-native-choice-mark-color: var(--neo-on-primary);
237
+ --usk-native-select-indicator-image: linear-gradient(42deg, transparent 50%, var(--neo-primary) 50%), linear-gradient(138deg, var(--neo-primary) 50%, transparent 50%);
238
+ --usk-native-select-indicator-size: 0.34rem 0.34rem, 0.34rem 0.34rem;
239
+ --usk-native-select-indicator-position: calc(100% - 1.08rem) 50%, calc(100% - 0.78rem) 50%;
240
+ --usk-native-select-padding-inline-end: 2.4rem;
241
+ --usk-native-range-track-size: .62rem;
242
+ --usk-native-range-track-background: var(--neo-surface-soft);
243
+ --usk-native-range-track-border: 1px solid var(--neo-border);
244
+ --usk-native-range-track-radius: 999px;
245
+ --usk-native-range-track-shadow: 4px 4px 8px rgb(0 0 0 / .22);
246
+ --usk-native-range-progress-background: var(--neo-primary);
247
+ --usk-native-range-thumb-size: 1.45rem;
248
+ --usk-native-range-thumb-background: var(--neo-surface-strong);
249
+ --usk-native-range-thumb-border: 1px solid var(--neo-border);
250
+ --usk-native-range-thumb-radius: 50%;
251
+ --usk-native-range-thumb-shadow: 4px 4px 8px rgb(0 0 0 / .22);
252
+ --usk-native-progress-size: .82rem;
253
+ --usk-native-progress-track-background: var(--neo-surface-soft);
254
+ --usk-native-progress-track-border: 1px solid var(--neo-border);
255
+ --usk-native-progress-track-radius: 999px;
256
+ --usk-native-progress-track-shadow: 4px 4px 8px rgb(0 0 0 / .22);
257
+ --usk-native-progress-value-background: var(--neo-primary);
258
+ --usk-native-progress-value-radius: 999px;
259
+ --usk-native-progress-value-shadow: 4px 4px 8px rgb(0 0 0 / .22);
260
+ --usk-native-meter-optimum-background: var(--neo-success);
261
+ --usk-native-meter-suboptimum-background: var(--neo-warning);
262
+ --usk-native-meter-critical-background: var(--neo-danger);
263
+ --usk-native-file-button-background: var(--neo-primary);
264
+ --usk-native-file-button-border: 1px solid var(--neo-border);
265
+ --usk-native-file-button-radius: .45rem;
266
+ --usk-native-file-button-shadow: 4px 4px 8px rgb(0 0 0 / .22);
267
+ --usk-native-color-swatch-border: 1px solid var(--neo-border);
268
+ --usk-native-color-swatch-radius: .45rem;
269
+ --usk-native-indicator-opacity: 0.72;
270
+ --usk-native-indicator-filter: none;
271
+ --usk-native-scrollbar-size: .8rem;
272
+ --usk-native-scrollbar-track: var(--neo-surface-soft);
273
+ --usk-native-scrollbar-thumb: var(--neo-primary);
274
+ --usk-native-scrollbar-radius: 999px;
125
275
  --usk-native-shadow: var(--neo-shadow-sm);
126
276
  --usk-native-shadow-md: var(--neo-shadow-md);
127
277
  --neo-bg: rgb(var(--neo-bg-rgb));
@@ -164,7 +314,7 @@
164
314
  }
165
315
 
166
316
  @supports (color: color-mix(in srgb, black, white)) {
167
- [data-ui="neumorphism"][data-theme][data-mode] { --neo-border: color-mix(in srgb, rgb(var(--neo-border-rgb) / max(var(--neo-border-alpha), var(--usk-border-min-alpha))), var(--neo-text) var(--usk-border-text-mix)); }
317
+ [data-ui="neumorphism"][data-mode] { --neo-border: color-mix(in srgb, rgb(var(--neo-border-rgb) / max(var(--neo-border-alpha), var(--usk-border-min-alpha))), var(--neo-text) var(--usk-border-text-mix)); }
168
318
  }
169
319
 
170
320
 
@@ -216,7 +366,7 @@
216
366
  [data-ui="neumorphism"] *::before,
217
367
  [data-ui="neumorphism"] *::after { box-sizing: border-box; }
218
368
 
219
- [data-ui="neumorphism"][data-theme][data-mode] { background: var(--neo-theme-bg); background-size: var(--neo-theme-bg-size); }
369
+ [data-ui="neumorphism"][data-mode] { background: var(--neo-theme-bg); background-size: var(--neo-theme-bg-size); }
220
370
 
221
371
  .neo-page { min-height: 100vh; padding: clamp(1rem, 4vw, 3rem); }
222
372
  .neo-container { width: min(100% - 2rem, 1200px); margin-inline: auto; }
@@ -233,7 +383,7 @@
233
383
  .neo-title, .neo-heading, .neo-kicker, .neo-button, .neo-badge, .neo-nav-link { font-family: var(--neo-font-heading); }
234
384
  .neo-title { margin: 0; color: var(--neo-text); font-size: clamp(2rem, 5vw, 3.7rem); line-height: 1.02; letter-spacing: -0.045em; }
235
385
  .neo-heading { margin: 0; color: var(--neo-text); font-size: clamp(1.2rem, 2.5vw, 2rem); line-height: 1.15; letter-spacing: -0.03em; }
236
- .neo-kicker { margin: 0; color: var(--neo-primary); font-size: .82rem; font-weight: 850; letter-spacing: .12em; text-transform: uppercase; }
386
+ .neo-kicker { margin: 0; color: var(--usk-primary-ink, var(--neo-primary)); font-size: .82rem; font-weight: 850; letter-spacing: .12em; text-transform: uppercase; }
237
387
  .neo-subtitle, .neo-copy { margin: 0; color: var(--neo-text-muted); line-height: 1.65; }
238
388
  .neo-text-muted { color: var(--neo-text-muted); }
239
389
  .neo-divider { width: 100%; height: 1px; border: 0; background: var(--neo-border); }
@@ -283,7 +433,7 @@
283
433
  /* Theme-responsive component defaults */
284
434
  .neo-card, .neo-panel { background: var(--neo-card-bg); }
285
435
  .neo-toolbar, .neo-table-wrap { background: var(--neo-control-bg); }
286
- .neo-button:not(.neo-button-primary):not(.neo-button-secondary):not(.neo-button-danger):not(.neo-button-ghost), .neo-icon-button { background: var(--neo-control-bg); }
436
+ .neo-button:not(.neo-button-primary):not(.neo-button-secondary):not(.neo-button-danger):not(.neo-button-warning):not(.neo-button-ghost), .neo-icon-button { background: var(--neo-control-bg); }
287
437
  .neo-button, .neo-icon-button, .neo-badge, .neo-nav-link { font-family: var(--neo-font-control); }
288
438
 
289
439
 
@@ -368,7 +518,7 @@
368
518
  Utilities
369
519
  ========================================================= */
370
520
 
371
- .neo-text-primary { color: var(--neo-primary); } .neo-text-secondary { color: var(--neo-secondary); } .neo-text-accent { color: var(--neo-accent); } .neo-text-success { color: var(--neo-success); } .neo-text-warning { color: var(--neo-warning); } .neo-text-danger { color: var(--neo-danger); }
521
+ .neo-text-primary { color: var(--usk-primary-ink, var(--neo-primary)); } .neo-text-secondary { color: var(--neo-secondary); } .neo-text-accent { color: var(--usk-accent-ink, var(--neo-accent)); } .neo-text-success { color: var(--neo-success); } .neo-text-warning { color: var(--neo-warning); } .neo-text-danger { color: var(--neo-danger); }
372
522
  .neo-bg-primary { background: var(--neo-primary); color: var(--neo-on-primary); } .neo-bg-secondary { background: var(--neo-secondary); color: var(--neo-on-secondary); }
373
523
  .neo-border { border: 1px solid var(--neo-border); } .neo-rounded { border-radius: var(--neo-radius-md); } .neo-rounded-lg { border-radius: var(--neo-radius-lg); } .neo-rounded-xl { border-radius: var(--neo-radius-xl); } .neo-pill { border-radius: var(--neo-radius-pill); }
374
524
  .neo-sr-only, .neo-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; }
@@ -377,72 +527,670 @@
377
527
 
378
528
 
379
529
  /* =========================================================
380
- Neumorphism Depth Overrides
530
+ Reference Material Contract
531
+ Mode material, component recipes, semantic roles, interaction
532
+ states, and accessibility overrides are intentionally ordered.
381
533
  ========================================================= */
534
+
535
+ /**
536
+ * Keeps the public font and radius tokens consumer-overridable while
537
+ * matching the reference's soft, compact geometry by default.
538
+ */
539
+ :root {
540
+ --neo-font-sans: "Trebuchet MS", "Segoe UI", ui-sans-serif, system-ui, sans-serif;
541
+ --neo-font-display: "Trebuchet MS", "Segoe UI", ui-sans-serif, system-ui, sans-serif;
542
+ --neo-radius-xs: .45rem;
543
+ --neo-radius-sm: .65rem;
544
+ --neo-radius-md: .85rem;
545
+ --neo-radius-lg: 1.15rem;
546
+ --neo-radius-xl: 1.45rem;
547
+ }
548
+
382
549
  [data-ui="neumorphism"][data-mode="light"] {
383
- --neo-nm-light: rgb(255 255 255 / .94);
384
- --neo-nm-dark: rgb(148 162 178 / .52);
550
+ --neo-material-canvas: rgb(241 238 236);
551
+ --neo-material-raised: rgb(241 238 236);
552
+ --neo-material-inset: rgb(234 231 229);
553
+ --neo-material-top-light: rgb(255 255 255 / .3);
554
+ --neo-material-hairline: rgb(190 184 181);
555
+ --neo-material-edge: rgb(133 127 124);
556
+ --neo-nm-light: rgb(255 255 255 / .92);
557
+ --neo-nm-dark: rgb(169 161 157 / .4);
558
+ --neo-nm-primary-glow: rgb(var(--neo-primary-rgb) / .26);
385
559
  }
560
+
386
561
  [data-ui="neumorphism"][data-mode="dark"] {
387
- --neo-nm-light: rgb(46 55 70 / .74);
388
- --neo-nm-dark: rgb(0 0 0 / .5);
562
+ --neo-material-canvas: rgb(26 36 52);
563
+ --neo-material-raised: rgb(26 36 52);
564
+ --neo-material-inset: rgb(21 30 44);
565
+ --neo-material-top-light: rgb(255 255 255 / .07);
566
+ --neo-material-hairline: rgb(75 91 113);
567
+ --neo-material-edge: rgb(109 126 149);
568
+ --neo-nm-light: rgb(52 66 87 / .72);
569
+ --neo-nm-dark: rgb(5 9 16 / .78);
570
+ --neo-nm-primary-glow: rgb(var(--neo-primary-rgb) / .34);
389
571
  }
572
+
390
573
  [data-ui="neumorphism"][data-mode="contrast"] {
391
- --neo-nm-light: rgb(64 64 64 / 1);
574
+ --neo-material-canvas: rgb(10 14 22);
575
+ --neo-material-raised: rgb(10 14 22);
576
+ --neo-material-inset: rgb(3 6 11);
577
+ --neo-material-top-light: rgb(255 255 255 / .12);
578
+ --neo-material-hairline: rgb(255 255 255);
579
+ --neo-material-edge: rgb(255 255 255);
580
+ --neo-nm-light: rgb(255 255 255 / .34);
392
581
  --neo-nm-dark: rgb(0 0 0 / 1);
582
+ --neo-nm-primary-glow: rgb(var(--neo-primary-rgb) / .5);
393
583
  }
394
- [data-ui="neumorphism"] { background: var(--neo-bg); }
395
- .neo-surface, .neo-card, .neo-panel, .neo-toolbar, .neo-table-wrap {
396
- border-color: rgb(var(--neo-border-rgb) / .14);
397
- box-shadow: 10px 10px 22px var(--neo-nm-dark), -10px -10px 22px var(--neo-nm-light);
584
+
585
+ /**
586
+ * Maps stable reference material to the existing theme-aware semantic contract.
587
+ * Themes continue to own action and status paint; modes own depth and lighting.
588
+ */
589
+ [data-ui="neumorphism"][data-mode] {
590
+ --neo-bg: var(--neo-material-canvas);
591
+ --neo-surface: var(--neo-material-raised);
592
+ --neo-surface-strong: var(--neo-material-raised);
593
+ --neo-surface-soft: var(--neo-material-inset);
594
+ --neo-theme-bg: var(--neo-material-canvas);
595
+ --neo-theme-bg-size: auto;
596
+ --neo-card-bg: var(--neo-material-raised);
597
+ --neo-control-bg: var(--neo-material-inset);
598
+ --neo-muted-divider: var(--neo-material-hairline);
599
+ --neo-raised-shadow: -.72rem -.72rem 1.45rem var(--neo-nm-light), .76rem .76rem 1.5rem var(--neo-nm-dark);
600
+ --neo-raised-shadow-sm: -.3rem -.3rem .68rem var(--neo-nm-light), .34rem .34rem .72rem var(--neo-nm-dark);
601
+ --neo-raised-shadow-lg: -.92rem -.92rem 1.8rem var(--neo-nm-light), 1rem 1rem 1.95rem var(--neo-nm-dark);
602
+ --neo-inset-shadow: inset .42rem .42rem .82rem var(--neo-nm-dark), inset -.42rem -.42rem .82rem var(--neo-nm-light);
603
+ --neo-inset-shadow-sm: inset .22rem .22rem .46rem var(--neo-nm-dark), inset -.22rem -.22rem .46rem var(--neo-nm-light);
604
+ --neo-button-shadow: -.28rem -.28rem .62rem var(--neo-nm-light), .32rem .32rem .68rem var(--neo-nm-dark);
605
+ --neo-button-primary-shadow: -.24rem -.24rem .56rem var(--neo-nm-light), .34rem .34rem .72rem var(--neo-nm-primary-glow);
606
+ --neo-control-shadow: var(--neo-inset-shadow-sm);
607
+ --neo-focus-ring: 0 0 0 .2rem rgb(var(--neo-focus-rgb) / var(--neo-focus-alpha)), var(--neo-inset-shadow-sm);
608
+ --usk-native-surface: var(--neo-material-raised);
609
+ --usk-native-surface-strong: var(--neo-material-raised);
610
+ --usk-native-surface-soft: var(--neo-material-inset);
611
+ --usk-native-card-bg: var(--neo-material-raised);
612
+ --usk-native-control-bg: var(--neo-material-inset);
613
+ --usk-native-border: var(--neo-material-edge);
614
+ --usk-native-radius-sm: var(--neo-radius-sm);
615
+ --usk-native-radius: var(--neo-radius-md);
616
+ --usk-native-radius-lg: var(--neo-radius-lg);
617
+ --usk-native-border-width: 1px;
618
+ --usk-native-panel-padding: 1.5rem;
619
+ --usk-native-control-min-block-size: 3rem;
620
+ --usk-native-control-padding-block: .8rem;
621
+ --usk-native-control-padding-inline: 1rem;
622
+ --usk-native-subcontrol-padding-block: .62rem;
623
+ --usk-native-subcontrol-padding-inline: .85rem;
624
+ --usk-native-choice-size: 1.5rem;
625
+ --usk-native-choice-background: var(--neo-material-inset);
626
+ --usk-native-choice-border: 1px solid var(--neo-material-edge);
627
+ --usk-native-choice-shadow: var(--neo-inset-shadow-sm);
628
+ --usk-native-checkbox-radius: var(--neo-radius-xs);
629
+ --usk-native-range-track-size: .65rem;
630
+ --usk-native-range-track-background: var(--neo-material-inset);
631
+ --usk-native-range-track-border: 1px solid var(--neo-material-edge);
632
+ --usk-native-range-track-radius: var(--neo-radius-pill);
633
+ --usk-native-range-track-shadow: var(--neo-inset-shadow-sm);
634
+ --usk-native-range-thumb-size: 1.65rem;
635
+ --usk-native-range-thumb-background: var(--neo-material-raised);
636
+ --usk-native-range-thumb-border: 1px solid var(--neo-material-edge);
637
+ --usk-native-range-thumb-radius: 50%;
638
+ --usk-native-range-thumb-shadow: var(--neo-button-shadow);
639
+ --usk-native-progress-size: .95rem;
640
+ --usk-native-progress-track-background: var(--neo-material-inset);
641
+ --usk-native-progress-track-border: 1px solid var(--neo-material-edge);
642
+ --usk-native-progress-track-radius: var(--neo-radius-pill);
643
+ --usk-native-progress-track-shadow: var(--neo-inset-shadow-sm);
644
+ --usk-native-progress-value-background: linear-gradient(90deg, var(--neo-primary), var(--neo-primary-hover));
645
+ --usk-native-progress-value-radius: var(--neo-radius-pill);
646
+ --usk-native-progress-value-shadow: inset 0 1px 0 rgb(255 255 255 / .42), 0 .12rem .38rem rgb(var(--neo-primary-rgb) / .3);
647
+ --usk-native-file-button-background: var(--neo-material-raised);
648
+ --usk-native-file-button-border: 1px solid var(--neo-material-edge);
649
+ --usk-native-file-button-radius: var(--neo-radius-md);
650
+ --usk-native-file-button-shadow: var(--neo-button-shadow);
651
+ --usk-native-color-swatch-border: 1px solid var(--neo-material-edge);
652
+ --usk-native-color-swatch-radius: var(--neo-radius-md);
653
+ --usk-native-scrollbar-size: .85rem;
654
+ --usk-native-scrollbar-track: var(--neo-material-inset);
655
+ --usk-native-scrollbar-thumb: var(--neo-primary);
656
+ --usk-native-scrollbar-radius: var(--neo-radius-pill);
657
+ --usk-native-shadow: var(--neo-raised-shadow-sm);
658
+ --usk-native-shadow-md: var(--neo-raised-shadow);
659
+ }
660
+
661
+ /* =========================================================
662
+ Typography and Surfaces
663
+ ========================================================= */
664
+
665
+ [data-ui="neumorphism"] {
666
+ background: var(--neo-material-canvas);
398
667
  }
399
- .neo-surface-lg, .neo-hover-lift:hover {
400
- box-shadow: 16px 16px 32px var(--neo-nm-dark), -16px -16px 32px var(--neo-nm-light);
668
+
669
+ .neo-title { margin-block: .75rem;
670
+ font-weight: 680;
671
+ letter-spacing: max(.016em, .5px);
672
+ }
673
+
674
+ .neo-heading {
675
+ font-weight: 680;
676
+ letter-spacing: -.028em;
677
+ }
678
+
679
+ .neo-label {
680
+ font-size: .86rem;
681
+ font-weight: 680;
682
+ letter-spacing: 0;
401
683
  }
402
- .neo-well, .neo-inset, .neo-input, .neo-textarea, .neo-select, .neo-progress {
403
- box-shadow: inset 5px 5px 11px var(--neo-nm-dark), inset -5px -5px 11px var(--neo-nm-light);
684
+
685
+ .neo-subtitle,
686
+ .neo-copy,
687
+ .neo-help-text {
688
+ color: var(--neo-text-muted);
404
689
  }
405
- .neo-button, .neo-icon-button, .neo-badge, .neo-nav {
406
- box-shadow: 5px 5px 11px var(--neo-nm-dark), -5px -5px 11px var(--neo-nm-light);
690
+
691
+ .neo-divider {
692
+ background: var(--neo-muted-divider);
407
693
  }
408
- .neo-button:active, .neo-icon-button:active, .neo-button.is-active, .neo-icon-button.is-active, .neo-nav-link.is-active {
409
- box-shadow: inset 4px 4px 9px var(--neo-nm-dark), inset -4px -4px 9px var(--neo-nm-light);
694
+
695
+ .neo-surface,
696
+ .neo-card,
697
+ .neo-panel,
698
+ .neo-toolbar,
699
+ .neo-table-wrap {
700
+ background-color: var(--neo-material-raised);
701
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 44%);
702
+ color: var(--neo-text);
703
+ border: 1px solid var(--neo-material-hairline);
704
+ border-radius: var(--neo-radius-xl);
705
+ box-shadow: var(--neo-raised-shadow);
410
706
  }
411
707
 
412
- /* Spinner geometry follows the neumorphism preset's soft extruded surfaces. */
413
- .neo-spinner, .neo-loading-spinner, [data-ui="neumorphism"] :where(.ui-spinner, .loading-spinner, [data-loading-spinner]) {
708
+ .neo-card,
709
+ .neo-panel {
710
+ padding: clamp(1.25rem, 3vw, 2rem);
711
+ }
712
+
713
+ .neo-toolbar {
714
+ padding: 1rem 1.25rem;
715
+ }
716
+
717
+ .neo-surface-sm {
718
+ border-radius: var(--neo-radius-lg);
719
+ box-shadow: var(--neo-raised-shadow-sm);
720
+ }
721
+
722
+ .neo-surface-lg,
723
+ .neo-hover-lift:hover {
724
+ box-shadow: var(--neo-raised-shadow-lg);
725
+ }
726
+
727
+ .neo-well,
728
+ .neo-inset {
729
+ background: var(--neo-material-inset);
730
+ color: var(--neo-text);
731
+ border: 1px solid var(--neo-material-edge);
732
+ border-radius: var(--neo-radius-lg);
733
+ box-shadow: var(--neo-inset-shadow);
734
+ }
735
+
736
+ /**
737
+ * Composes the small-surface utility as a tighter, shallower inset treatment.
738
+ */
739
+ :where(.neo-well, .neo-inset).neo-surface-sm {
740
+ padding: var(--neo-space-3);
741
+ border-radius: var(--neo-radius-md);
742
+ box-shadow: var(--neo-inset-shadow-sm);
743
+ }
744
+
745
+ /* =========================================================
746
+ Controls and Interaction States
747
+ ========================================================= */
748
+
749
+ .neo-button,
750
+ .neo-icon-button {
751
+ min-height: 3rem;
752
+ padding: .8rem 1.2rem;
753
+ background-color: var(--neo-material-raised);
754
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
755
+ color: var(--neo-text);
756
+ border: 1px solid var(--neo-material-edge);
757
+ border-radius: var(--neo-radius-md);
758
+ box-shadow: var(--neo-button-shadow);
759
+ font-weight: 680;
760
+ }
761
+
762
+ .neo-icon-button {
763
+ inline-size: 3rem;
764
+ padding: 0;
765
+ border-radius: 50%;
766
+ }
767
+
768
+ .neo-button:not(:disabled):hover,
769
+ .neo-icon-button:not(:disabled):hover {
770
+ transform: translateY(-1px);
771
+ box-shadow: var(--neo-raised-shadow-sm);
772
+ }
773
+
774
+ .neo-button:focus-visible,
775
+ .neo-icon-button:focus-visible,
776
+ .neo-nav-link:focus-visible {
777
+ outline: 2px solid var(--neo-focus);
778
+ outline-offset: 3px;
779
+ }
780
+
781
+ .neo-button:active,
782
+ .neo-icon-button:active,
783
+ .neo-button[aria-pressed="true"],
784
+ .neo-icon-button[aria-pressed="true"],
785
+ .neo-button.is-active,
786
+ .neo-icon-button.is-active {
787
+ transform: translateY(1px);
788
+ background-image: none;
789
+ box-shadow: var(--neo-inset-shadow-sm);
790
+ }
791
+
792
+ .neo-button-primary,
793
+ .neo-button-secondary,
794
+ .neo-button-danger {
795
+ background-image: linear-gradient(155deg, rgb(255 255 255 / .28), transparent 52%, rgb(0 0 0 / .08));
796
+ }
797
+
798
+ .neo-button-primary {
799
+ background-color: var(--neo-primary);
800
+ color: var(--neo-on-primary);
801
+ border-color: var(--neo-primary);
802
+ box-shadow: var(--neo-button-primary-shadow);
803
+ }
804
+
805
+ .neo-button-primary:hover {
806
+ background-color: var(--neo-primary-hover);
807
+ }
808
+
809
+ .neo-button-secondary {
810
+ background-color: var(--neo-secondary);
811
+ color: var(--neo-on-secondary);
812
+ border-color: var(--neo-secondary);
813
+ }
814
+
815
+ .neo-button-secondary:hover {
816
+ background-color: var(--neo-secondary-hover);
817
+ }
818
+
819
+ .neo-button-danger {
820
+ background-color: var(--neo-danger);
821
+ color: var(--neo-on-danger);
822
+ border-color: var(--neo-danger);
823
+ box-shadow: var(--neo-button-primary-shadow);
824
+ }
825
+
826
+ .neo-button-primary:active,
827
+ .neo-button-secondary:active,
828
+ .neo-button-danger:active,
829
+ .neo-button-primary[aria-pressed="true"],
830
+ .neo-button-secondary[aria-pressed="true"],
831
+ .neo-button-danger[aria-pressed="true"] {
832
+ background-image: none;
833
+ box-shadow: inset .28rem .28rem .58rem rgb(0 0 0 / .34), inset -.22rem -.22rem .5rem rgb(255 255 255 / .22);
834
+ }
835
+
836
+ .neo-button-ghost,
837
+ .neo-button:not(.neo-button-primary):not(.neo-button-secondary):not(.neo-button-danger):not(.neo-button-warning):not(.neo-button-ghost),
838
+ .neo-icon-button {
839
+ background-color: var(--neo-material-raised);
840
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
841
+ color: var(--neo-text);
842
+ }
843
+
844
+ .neo-button.neo-button-cut,
845
+ .neo-button-cut {
846
+ min-inline-size: 6rem;
847
+ max-inline-size: 100%;
848
+ justify-self: center;
849
+ justify-content: center;
850
+ border-radius: var(--neo-radius-md);
851
+ }
852
+
853
+ .neo-button.neo-button-outline-heavy,
854
+ .neo-button-outline-heavy {
855
+ background-color: var(--neo-material-raised);
856
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
857
+ color: var(--usk-primary-ink, var(--neo-primary));
858
+ border: 1px solid var(--neo-material-edge);
859
+ border-radius: var(--neo-radius-md);
860
+ box-shadow: var(--neo-button-shadow);
861
+ }
862
+
863
+ .neo-button.neo-button-outline-heavy:hover,
864
+ .neo-button-outline-heavy:hover {
865
+ color: var(--usk-primary-ink, var(--neo-primary-hover));
866
+ border-color: var(--neo-primary);
867
+ }
868
+
869
+ .neo-button:disabled,
870
+ .neo-icon-button:disabled,
871
+ .neo-disabled {
872
+ opacity: .5;
873
+ cursor: not-allowed;
874
+ transform: none;
875
+ box-shadow: -.14rem -.14rem .3rem var(--neo-nm-light), .16rem .16rem .34rem var(--neo-nm-dark);
876
+ }
877
+
878
+ /* =========================================================
879
+ Forms and Choices
880
+ ========================================================= */
881
+
882
+ .neo-input,
883
+ .neo-textarea,
884
+ .neo-select {
885
+ min-height: 3rem;
886
+ padding: .8rem 1rem;
887
+ background: var(--neo-material-inset);
888
+ color: var(--neo-text);
889
+ border: 1px solid var(--neo-material-edge);
890
+ border-radius: var(--neo-radius-md);
891
+ box-shadow: var(--neo-control-shadow);
892
+ }
893
+
894
+ .neo-input:hover,
895
+ .neo-textarea:hover,
896
+ .neo-select:hover {
897
+ border-color: var(--neo-primary);
898
+ }
899
+
900
+ .neo-input:focus,
901
+ .neo-textarea:focus,
902
+ .neo-select:focus {
903
+ background: var(--neo-material-inset);
904
+ border-color: var(--neo-focus);
905
+ box-shadow: var(--neo-focus-ring);
906
+ }
907
+
908
+ .neo-input[aria-invalid="true"],
909
+ .neo-textarea[aria-invalid="true"],
910
+ .neo-select[aria-invalid="true"] {
911
+ border-color: var(--neo-danger);
912
+ box-shadow: 0 0 0 2px rgb(var(--neo-danger-rgb) / .2), var(--neo-inset-shadow-sm);
913
+ }
914
+
915
+ .neo-input[readonly],
916
+ .neo-textarea[readonly] {
917
+ filter: saturate(.72);
918
+ opacity: .78;
919
+ }
920
+
921
+ .neo-check-control,
922
+ .neo-radio-control,
923
+ .neo-switch-track {
924
+ background: var(--neo-material-inset);
925
+ border: 1px solid var(--neo-material-edge);
926
+ box-shadow: var(--neo-control-shadow);
927
+ }
928
+
929
+ .neo-check-control {
930
+ border-radius: var(--neo-radius-xs);
931
+ }
932
+
933
+ .neo-check input:checked + .neo-check-control,
934
+ .neo-radio input:checked + .neo-radio-control {
935
+ background: var(--neo-primary);
936
+ border-color: var(--neo-primary);
937
+ box-shadow: var(--neo-button-primary-shadow);
938
+ }
939
+
940
+ .neo-check input:checked + .neo-check-control::after {
941
+ content: "";
942
+ inline-size: .42rem;
943
+ block-size: .72rem;
944
+ border: solid var(--neo-on-primary);
945
+ border-width: 0 .14rem .14rem 0;
946
+ transform: rotate(45deg) translateY(-.04rem);
947
+ }
948
+
949
+ .neo-switch-track {
950
+ inline-size: 3.6rem;
951
+ block-size: 1.9rem;
952
+ }
953
+
954
+ .neo-switch-thumb {
955
+ inset-block-start: .23rem;
956
+ inset-inline-start: .23rem;
957
+ background: var(--neo-material-raised);
958
+ border: 1px solid var(--neo-material-edge);
959
+ box-shadow: var(--neo-button-shadow);
960
+ }
961
+
962
+ .neo-switch input:checked + .neo-switch-track {
963
+ background: var(--neo-primary);
964
+ border-color: var(--neo-primary);
965
+ box-shadow: inset .2rem .2rem .45rem rgb(var(--neo-primary-hover-rgb) / .72), inset -.2rem -.2rem .45rem rgb(255 255 255 / .26);
966
+ }
967
+
968
+ .neo-switch input:checked + .neo-switch-track .neo-switch-thumb {
969
+ background: var(--neo-on-primary);
970
+ }
971
+
972
+ /* =========================================================
973
+ Badges, Navigation, Feedback, and Data
974
+ ========================================================= */
975
+
976
+ .neo-badge {
977
+ min-height: 1.8rem;
978
+ padding: .38rem .78rem;
979
+ background-color: var(--neo-material-raised);
980
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
981
+ color: var(--neo-text);
982
+ border: 1px solid var(--neo-material-edge);
983
+ border-radius: var(--neo-radius-pill);
984
+ box-shadow: var(--neo-raised-shadow-sm);
985
+ font-size: .76rem;
986
+ font-weight: 680;
987
+ }
988
+
989
+ .neo-badge-primary,
990
+ .neo-badge-secondary,
991
+ .neo-badge-success,
992
+ .neo-badge-warning,
993
+ .neo-badge-danger {
994
+ background-image: linear-gradient(145deg, rgb(255 255 255 / .24), transparent 52%, rgb(0 0 0 / .06));
995
+ }
996
+
997
+ .neo-badge-primary {
998
+ background-color: var(--neo-primary);
999
+ color: var(--neo-on-primary);
1000
+ border-color: var(--neo-primary);
1001
+ }
1002
+
1003
+ .neo-badge-secondary {
1004
+ background-color: var(--neo-secondary);
1005
+ color: var(--neo-on-secondary);
1006
+ border-color: var(--neo-secondary);
1007
+ }
1008
+
1009
+ .neo-badge-success {
1010
+ background-color: var(--neo-success);
1011
+ color: var(--neo-on-success);
1012
+ border-color: var(--neo-success);
1013
+ }
1014
+
1015
+ .neo-badge-warning {
1016
+ background-color: var(--neo-warning);
1017
+ color: var(--neo-on-warning);
1018
+ border-color: var(--neo-warning);
1019
+ }
1020
+
1021
+ .neo-badge-danger {
1022
+ background-color: var(--neo-danger);
1023
+ color: var(--neo-on-danger);
1024
+ border-color: var(--neo-danger);
1025
+ }
1026
+
1027
+ .neo-nav {
1028
+ gap: .35rem;
1029
+ padding: .55rem;
1030
+ background: var(--neo-material-raised);
1031
+ border: 1px solid var(--neo-material-hairline);
1032
+ border-radius: var(--neo-radius-xl);
1033
+ box-shadow: var(--neo-raised-shadow-sm);
1034
+ }
1035
+
1036
+ .neo-nav-link {
1037
+ min-height: 2.7rem;
1038
+ padding: .68rem 1rem;
1039
+ color: var(--neo-text-muted);
1040
+ border: 1px solid transparent;
1041
+ border-radius: var(--neo-radius-md);
1042
+ font-weight: 680;
1043
+ }
1044
+
1045
+ .neo-nav-link:hover {
1046
+ color: var(--neo-text);
1047
+ background: var(--neo-material-inset);
1048
+ border-color: var(--neo-material-edge);
1049
+ box-shadow: var(--neo-inset-shadow-sm);
1050
+ }
1051
+
1052
+ .neo-nav-link[aria-current="page"],
1053
+ .neo-nav-link.is-active {
1054
+ color: var(--neo-on-primary);
1055
+ background: var(--neo-primary);
1056
+ border-color: var(--neo-primary);
1057
+ box-shadow: inset .2rem .2rem .42rem rgb(var(--neo-primary-hover-rgb) / .62), inset -.16rem -.16rem .35rem rgb(255 255 255 / .2);
1058
+ }
1059
+
1060
+ .neo-tooltip,
1061
+ [data-ui="neumorphism"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) {
1062
+ background: var(--neo-material-raised);
1063
+ color: var(--neo-text);
1064
+ border: 1px solid var(--neo-material-edge);
1065
+ border-radius: var(--neo-radius-md);
1066
+ box-shadow: var(--neo-raised-shadow-sm);
1067
+ }
1068
+
1069
+ .neo-tooltip-arrow {
1070
+ background: var(--neo-material-raised);
1071
+ border: 1px solid var(--neo-material-edge);
1072
+ box-shadow: var(--neo-inset-shadow-sm);
1073
+ }
1074
+
1075
+ .neo-progress {
1076
+ height: 1rem;
1077
+ padding: .14rem;
1078
+ background: var(--neo-material-inset);
1079
+ border: 1px solid var(--neo-material-edge);
1080
+ border-radius: var(--neo-radius-pill);
1081
+ box-shadow: var(--neo-inset-shadow);
1082
+ }
1083
+
1084
+ .neo-progress-bar {
1085
+ background: linear-gradient(90deg, var(--neo-primary), var(--neo-primary-hover));
1086
+ border-radius: inherit;
1087
+ box-shadow: inset 0 1px 0 rgb(255 255 255 / .38), 0 .12rem .38rem rgb(var(--neo-primary-rgb) / .3);
1088
+ }
1089
+
1090
+ .neo-alert {
1091
+ padding: 1.35rem 1.5rem;
1092
+ background: var(--neo-material-raised);
1093
+ border: 1px solid var(--neo-material-hairline);
1094
+ border-radius: var(--neo-radius-xl);
1095
+ box-shadow: var(--neo-raised-shadow);
1096
+ }
1097
+
1098
+ .neo-alert-success {
1099
+ box-shadow: var(--neo-raised-shadow), inset .3rem 0 0 var(--neo-success);
1100
+ }
1101
+
1102
+ .neo-alert-warning {
1103
+ box-shadow: var(--neo-raised-shadow), inset .3rem 0 0 var(--neo-warning);
1104
+ }
1105
+
1106
+ .neo-alert-danger {
1107
+ box-shadow: var(--neo-raised-shadow), inset .3rem 0 0 var(--neo-danger);
1108
+ }
1109
+
1110
+ .neo-table {
1111
+ border-collapse: separate;
1112
+ border-spacing: 0 .42rem;
1113
+ }
1114
+
1115
+ .neo-table th,
1116
+ .neo-table td {
1117
+ padding: .9rem 1rem;
1118
+ background: var(--neo-material-inset);
1119
+ border-block-end: 0;
1120
+ box-shadow: var(--neo-inset-shadow-sm);
1121
+ }
1122
+
1123
+ .neo-table th:first-child,
1124
+ .neo-table td:first-child {
1125
+ border-radius: var(--neo-radius-md) 0 0 var(--neo-radius-md);
1126
+ }
1127
+
1128
+ .neo-table th:last-child,
1129
+ .neo-table td:last-child {
1130
+ border-radius: 0 var(--neo-radius-md) var(--neo-radius-md) 0;
1131
+ }
1132
+
1133
+ /* =========================================================
1134
+ Loading Indicators
1135
+ ========================================================= */
1136
+
1137
+ .neo-spinner,
1138
+ .neo-loading-spinner,
1139
+ [data-ui="neumorphism"] :where(.ui-spinner, .loading-spinner, [data-loading-spinner]) {
414
1140
  display: inline-block;
415
1141
  inline-size: 2rem;
416
1142
  block-size: 2rem;
417
- border: .2rem solid transparent;
1143
+ border: .18rem solid var(--neo-material-edge);
418
1144
  border-block-start-color: var(--neo-spinner-stroke);
419
1145
  border-inline-end-color: var(--neo-spinner-accent);
420
1146
  border-radius: 50%;
421
- background: conic-gradient(from 45deg, var(--neo-spinner-stroke), transparent 34%, var(--neo-spinner-accent), var(--neo-spinner-track));
422
- box-shadow: -.35rem -.35rem .8rem rgb(255 255 255 / .32), .35rem .35rem .8rem rgb(0 0 0 / .18), inset 0 0 0 .38rem var(--neo-surface);
1147
+ background: var(--neo-material-raised);
1148
+ box-shadow: var(--neo-button-shadow), inset 0 0 0 .28rem var(--neo-material-inset);
423
1149
  vertical-align: -.2em;
424
1150
  animation: neo-spin 1s linear infinite;
425
1151
  }
426
- .neo-spinner-sm { inline-size: 1rem; block-size: 1rem; border-width: .12rem; }
427
- .neo-spinner-lg { inline-size: 3rem; block-size: 3rem; border-width: .28rem; }
428
- .neo-button[aria-busy="true"], .neo-icon-button[aria-busy="true"], [data-ui="neumorphism"] :where(button[aria-busy="true"], input[type="button"][aria-busy="true"], input[type="submit"][aria-busy="true"], input[type="reset"][aria-busy="true"]) { gap: .55rem; cursor: progress; }
429
- .neo-button[aria-busy="true"]::after, .neo-icon-button[aria-busy="true"]::after, [data-ui="neumorphism"] :where(button[aria-busy="true"], input[type="button"][aria-busy="true"], input[type="submit"][aria-busy="true"], input[type="reset"][aria-busy="true"])::after {
1152
+
1153
+ .neo-spinner-sm {
1154
+ inline-size: 1rem;
1155
+ block-size: 1rem;
1156
+ border-width: .12rem;
1157
+ }
1158
+
1159
+ .neo-spinner-lg {
1160
+ inline-size: 3rem;
1161
+ block-size: 3rem;
1162
+ border-width: .26rem;
1163
+ }
1164
+
1165
+ .neo-button[aria-busy="true"],
1166
+ .neo-icon-button[aria-busy="true"],
1167
+ [data-ui="neumorphism"] :where(button[aria-busy="true"], input[type="button"][aria-busy="true"], input[type="submit"][aria-busy="true"], input[type="reset"][aria-busy="true"]) {
1168
+ gap: .55rem;
1169
+ cursor: progress;
1170
+ }
1171
+
1172
+ .neo-button[aria-busy="true"]::after,
1173
+ .neo-icon-button[aria-busy="true"]::after,
1174
+ [data-ui="neumorphism"] :where(button[aria-busy="true"], input[type="button"][aria-busy="true"], input[type="submit"][aria-busy="true"], input[type="reset"][aria-busy="true"])::after {
430
1175
  content: "";
431
1176
  display: inline-block;
432
1177
  inline-size: 1em;
433
1178
  block-size: 1em;
434
- border: .16em solid rgb(var(--neo-primary-text-rgb) / .42);
435
- border-block-start-color: currentColor;
1179
+ border: .12em solid currentColor;
1180
+ border-block-start-color: transparent;
436
1181
  border-radius: 50%;
437
- animation: neo-spin .75s linear infinite;
1182
+ box-shadow: inset 0 0 0 .1em rgb(255 255 255 / .16);
1183
+ animation: neo-spin .78s linear infinite;
438
1184
  }
439
- @keyframes neo-spin { to { transform: rotate(360deg); } }
440
-
441
1185
 
1186
+ @keyframes neo-spin {
1187
+ to {
1188
+ transform: rotate(360deg);
1189
+ }
1190
+ }
442
1191
 
443
1192
  /* =========================================================
444
- Marketing / Commercial Component Modifiers
445
- Reusable visual patterns derived from service-oriented brand systems.
1193
+ Marketing and Commercial Modifiers
446
1194
  ========================================================= */
447
1195
 
448
1196
  .neo-card-media {
@@ -450,8 +1198,9 @@
450
1198
  inline-size: 100%;
451
1199
  aspect-ratio: 16 / 9;
452
1200
  object-fit: cover;
453
- border: 1px solid rgb(var(--neo-border-rgb) / .72);
1201
+ border: 1px solid var(--neo-material-edge);
454
1202
  border-radius: var(--neo-radius-lg);
1203
+ box-shadow: var(--neo-inset-shadow-sm);
455
1204
  }
456
1205
 
457
1206
  .neo-card-service {
@@ -459,16 +1208,16 @@
459
1208
  display: grid;
460
1209
  gap: var(--neo-space-3);
461
1210
  align-content: start;
462
- text-align: center;
463
1211
  overflow: visible;
464
1212
  }
465
- .neo-card-service > .neo-icon-medallion {
1213
+
1214
+ .neo-card-service > .neo-icon-medallion,
1215
+ .neo-card-service > .neo-card-media + .neo-icon-medallion {
466
1216
  justify-self: center;
467
- margin-block-start: -2.15rem;
468
1217
  position: relative;
469
1218
  z-index: 2;
1219
+ margin-block-start: -2.1rem;
470
1220
  }
471
- .neo-card-service > .neo-card-media + .neo-icon-medallion { margin-block-start: -2.15rem; }
472
1221
 
473
1222
  .neo-card-feature {
474
1223
  display: grid;
@@ -478,7 +1227,20 @@
478
1227
  }
479
1228
 
480
1229
  .neo-card-accent-edge {
481
- border-inline-start: .35rem solid var(--neo-primary);
1230
+ border-inline-start: .3rem solid var(--neo-primary);
1231
+ }
1232
+
1233
+ .neo-card-service,
1234
+ .neo-card-feature,
1235
+ .neo-feature-strip,
1236
+ .neo-callout-bar {
1237
+ padding: 1.4rem;
1238
+ background-color: var(--neo-material-raised);
1239
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 44%);
1240
+ color: var(--neo-text);
1241
+ border: 1px solid var(--neo-material-hairline);
1242
+ border-radius: var(--neo-radius-xl);
1243
+ box-shadow: var(--neo-raised-shadow);
482
1244
  }
483
1245
 
484
1246
  .neo-icon-medallion {
@@ -488,36 +1250,19 @@
488
1250
  block-size: 3.75rem;
489
1251
  flex: 0 0 auto;
490
1252
  padding: .7rem;
491
- background: var(--neo-primary);
492
- color: var(--neo-on-primary);
493
- border: 2px solid rgb(var(--neo-border-rgb) / .82);
494
- border-radius: 50%;
1253
+ background-color: var(--neo-material-raised);
1254
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
1255
+ color: var(--usk-primary-ink, var(--neo-primary));
1256
+ border: 1px solid var(--neo-material-edge);
1257
+ border-radius: var(--neo-radius-lg);
1258
+ box-shadow: var(--neo-button-shadow);
495
1259
  line-height: 1;
496
1260
  }
497
- .neo-icon-medallion > :where(svg, img) { inline-size: 100%; block-size: 100%; object-fit: contain; }
498
1261
 
499
- .neo-button.neo-button-cut,
500
- .neo-button-cut {
501
- border-radius: 0;
502
- clip-path: polygon(.6rem 0, 100% 0, 100% calc(100% - .6rem), calc(100% - .6rem) 100%, 0 100%, 0 .6rem);
503
- }
504
- .neo-button.neo-button-cut:focus-visible,
505
- .neo-button-cut:focus-visible { outline-offset: -3px; }
506
-
507
- .neo-button.neo-button-outline-heavy,
508
- .neo-button-outline-heavy {
509
- background: transparent;
510
- color: var(--neo-primary);
511
- border-style: solid;
512
- border-width: 2px;
513
- border-color: var(--neo-primary);
514
- box-shadow: none;
515
- }
516
- .neo-button.neo-button-outline-heavy:hover,
517
- .neo-button-outline-heavy:hover {
518
- background: var(--neo-primary);
519
- color: var(--neo-on-primary);
520
- border-color: var(--neo-primary-hover);
1262
+ .neo-icon-medallion > :where(svg, img) {
1263
+ inline-size: 100%;
1264
+ block-size: 100%;
1265
+ object-fit: contain;
521
1266
  }
522
1267
 
523
1268
  .neo-badge-seal {
@@ -528,10 +1273,12 @@
528
1273
  min-inline-size: 5rem;
529
1274
  aspect-ratio: 1;
530
1275
  padding: .65rem;
531
- background: var(--neo-surface-strong);
1276
+ background-color: var(--neo-material-raised);
1277
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
532
1278
  color: var(--neo-text);
533
- border: 2px solid var(--neo-primary);
1279
+ border: 1px solid var(--neo-material-edge);
534
1280
  border-radius: 50%;
1281
+ box-shadow: var(--neo-button-shadow);
535
1282
  text-align: center;
536
1283
  font-family: var(--neo-font-heading);
537
1284
  font-size: .72rem;
@@ -540,14 +1287,13 @@
540
1287
  letter-spacing: .04em;
541
1288
  }
542
1289
 
1290
+ .neo-badge-seal :where(strong, small, span) {
1291
+ color: inherit;
1292
+ }
1293
+
543
1294
  .neo-feature-strip {
544
1295
  display: grid;
545
1296
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
546
- overflow: hidden;
547
- background: var(--neo-card-bg);
548
- color: var(--neo-text);
549
- border: 1px solid var(--neo-border);
550
- border-radius: var(--neo-radius-lg);
551
1297
  }
552
1298
 
553
1299
  .neo-feature-item {
@@ -556,29 +1302,49 @@
556
1302
  align-items: center;
557
1303
  gap: var(--neo-space-3);
558
1304
  min-inline-size: 0;
559
- padding: var(--neo-space-4);
560
- border-inline-end: 1px solid rgb(var(--neo-border-rgb) / .62);
1305
+ padding: 1rem;
1306
+ background: var(--neo-material-inset);
1307
+ border: 1px solid var(--neo-material-edge);
1308
+ border-radius: var(--neo-radius-lg);
1309
+ box-shadow: var(--neo-inset-shadow-sm);
1310
+ }
1311
+
1312
+ .neo-feature-item > :where(p, small) {
1313
+ margin: 0;
1314
+ color: var(--neo-text-muted);
561
1315
  }
562
- .neo-feature-item:last-child { border-inline-end: 0; }
563
- .neo-feature-item > :where(p, small) { margin: 0; color: var(--neo-text-muted); }
564
1316
 
565
1317
  .neo-callout-bar {
566
1318
  display: grid;
567
1319
  grid-template-columns: auto minmax(0, 1fr) auto;
568
1320
  align-items: center;
569
1321
  gap: var(--neo-space-4);
570
- padding: var(--neo-space-4) var(--neo-space-5);
571
- background: var(--neo-card-bg);
572
- color: var(--neo-text);
573
- border: 1px solid var(--neo-border);
574
- border-radius: var(--neo-radius-lg);
575
1322
  }
576
- .neo-callout-bar > :where(p, div) { min-inline-size: 0; }
577
- .neo-callout-bar > :where(.neo-button, a, button):last-child { justify-self: end; }
1323
+
1324
+ /**
1325
+ * Gives callout lead artwork enough scale and relief to anchor a primary CTA lane.
1326
+ */
1327
+ .neo-callout-bar > .neo-icon-medallion {
1328
+ inline-size: clamp(4.75rem, 8vw, 6rem);
1329
+ block-size: clamp(4.75rem, 8vw, 6rem);
1330
+ justify-self: start;
1331
+ padding: 1rem;
1332
+ font-size: clamp(2rem, 3.2vw, 2.75rem);
1333
+ font-weight: 800;
1334
+ text-shadow: 0 1px 0 var(--neo-material-highlight), 0 -1px 1px var(--neo-shadow-dark);
1335
+ }
1336
+
1337
+ .neo-callout-bar > :where(p, div) {
1338
+ min-inline-size: 0;
1339
+ }
1340
+
1341
+ .neo-callout-bar > :where(.neo-button, a, button):last-child {
1342
+ justify-self: end;
1343
+ }
578
1344
 
579
1345
  .neo-eyebrow {
580
1346
  margin: 0;
581
- color: var(--neo-primary);
1347
+ color: var(--usk-primary-ink, var(--neo-primary));
582
1348
  font-family: var(--neo-font-heading);
583
1349
  font-size: .76rem;
584
1350
  font-weight: 900;
@@ -592,10 +1358,12 @@
592
1358
  overflow: hidden;
593
1359
  isolation: isolate;
594
1360
  min-block-size: 12rem;
595
- background: var(--neo-surface-soft);
596
- border: 1px solid var(--neo-border);
597
- border-radius: var(--neo-radius-lg);
1361
+ background: var(--neo-material-inset);
1362
+ border: 1px solid var(--neo-material-edge);
1363
+ border-radius: var(--neo-radius-xl);
1364
+ box-shadow: var(--neo-inset-shadow);
598
1365
  }
1366
+
599
1367
  .neo-media-scrim > :where(img, picture, video) {
600
1368
  display: block;
601
1369
  inline-size: 100%;
@@ -603,6 +1371,7 @@
603
1371
  min-block-size: inherit;
604
1372
  object-fit: cover;
605
1373
  }
1374
+
606
1375
  .neo-media-scrim > :where(figcaption, [data-media-caption]) {
607
1376
  position: absolute;
608
1377
  z-index: 1;
@@ -612,73 +1381,176 @@
612
1381
  color: #fff;
613
1382
  background: linear-gradient(to top, rgb(0 0 0 / .9), rgb(0 0 0 / .58) 56%, transparent);
614
1383
  }
1384
+
615
1385
  .neo-media-scrim > :where(figcaption, [data-media-caption]) * {
616
1386
  color: inherit;
617
1387
  }
618
1388
 
619
- @media (max-width: 42rem) {
620
- .neo-callout-bar { grid-template-columns: 1fr; align-items: start; }
621
- .neo-callout-bar > :where(.neo-button, a, button):last-child { justify-self: stretch; }
622
- .neo-feature-item { border-inline-end: 0; border-block-end: 1px solid rgb(var(--neo-border-rgb) / .62); }
623
- .neo-feature-item:last-child { border-block-end: 0; }
1389
+ /* =========================================================
1390
+ Native Element Coverage
1391
+ ========================================================= */
1392
+
1393
+ [data-ui="neumorphism"][data-mode] :where(fieldset, article, aside, details, dialog) {
1394
+ background-color: var(--neo-material-raised);
1395
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 44%);
1396
+ color: var(--neo-text);
1397
+ border: 1px solid var(--neo-material-hairline);
1398
+ border-radius: var(--neo-radius-xl);
1399
+ box-shadow: var(--neo-raised-shadow);
624
1400
  }
625
1401
 
626
- .neo-card-service, .neo-card-feature, .neo-feature-strip, .neo-callout-bar { border-color: transparent; box-shadow: .65rem .65rem 1.35rem rgb(0 0 0 / .16), -.55rem -.55rem 1.25rem rgb(255 255 255 / .08); }
627
- .neo-icon-medallion, .neo-badge-seal { border-color: transparent; box-shadow: .38rem .38rem .8rem rgb(0 0 0 / .18), -.3rem -.3rem .7rem rgb(255 255 255 / .1); }
628
- .neo-button-outline-heavy { border-color: var(--neo-primary); box-shadow: inset .18rem .18rem .45rem rgb(0 0 0 / .12); }
1402
+ [data-ui="neumorphism"][data-mode] :where(legend) {
1403
+ padding: .4rem .75rem;
1404
+ background: var(--neo-material-raised);
1405
+ border: 1px solid var(--neo-material-edge);
1406
+ border-radius: var(--neo-radius-md);
1407
+ box-shadow: var(--neo-raised-shadow-sm);
1408
+ }
629
1409
 
630
- /* Filled and framed actions remain softly clipped while changing elevation state. */
631
- .neo-button.neo-button-cut, .neo-button-cut {
632
- min-inline-size: 6rem;
633
- max-inline-size: 100%;
634
- justify-self: center;
635
- justify-content: center;
636
- border-radius: var(--neo-radius-pill);
637
- clip-path: inset(0 round var(--neo-radius-pill));
1410
+ [data-ui="neumorphism"][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])) {
1411
+ background-color: var(--neo-material-raised);
1412
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
1413
+ color: var(--neo-text);
1414
+ border: 1px solid var(--neo-material-edge);
1415
+ border-radius: var(--neo-radius-md);
1416
+ box-shadow: var(--neo-button-shadow);
638
1417
  }
639
- .neo-button.neo-button-outline-heavy, .neo-button-outline-heavy {
640
- border-width: 1px;
641
- border-radius: var(--neo-radius-pill);
642
- clip-path: inset(.08rem round var(--neo-radius-pill));
643
- box-shadow: -.28rem -.28rem .65rem rgb(var(--neo-surface-strong-rgb) / .72), .32rem .32rem .72rem rgb(var(--neo-text-rgb) / .16);
1418
+
1419
+ [data-ui="neumorphism"][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])):active {
1420
+ transform: translateY(1px);
1421
+ background-image: none;
1422
+ box-shadow: var(--neo-inset-shadow-sm);
644
1423
  }
645
1424
 
646
- /* Marketing and native surfaces pair raised shells with inset metric depth. */
647
- .neo-card-service, .neo-media-scrim, .neo-feature-strip, .neo-callout-bar, .neo-well {
648
- border: 1px solid rgb(var(--neo-border-rgb) / .36);
649
- border-radius: var(--neo-radius-xl);
650
- box-shadow: -.55rem -.55rem 1.15rem rgb(var(--neo-surface-strong-rgb) / .74), .58rem .58rem 1.2rem rgb(var(--neo-text-rgb) / .14);
1425
+ [data-ui="neumorphism"][data-mode] :where(input:not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]):not([type="button"]):not([type="submit"]):not([type="reset"]), textarea, select) {
1426
+ background-color: var(--neo-material-inset);
1427
+ color: var(--neo-text);
1428
+ border: 1px solid var(--neo-material-edge);
1429
+ border-radius: var(--neo-radius-md);
1430
+ box-shadow: var(--neo-control-shadow);
651
1431
  }
652
- .neo-well { box-shadow: inset .3rem .3rem .7rem rgb(var(--neo-text-rgb) / .12), inset -.3rem -.3rem .7rem rgb(var(--neo-surface-strong-rgb) / .68); }
653
- [data-ui="neumorphism"][data-theme][data-mode] :where(button:not([class]), input[type="button"]:not([class]), input[type="submit"]:not([class]), input[type="reset"]:not([class])) {
654
- border: 1px solid rgb(var(--neo-border-rgb) / .42);
655
- border-radius: var(--neo-radius-pill);
656
- box-shadow: -.28rem -.28rem .65rem rgb(var(--neo-surface-strong-rgb) / .72), .32rem .32rem .72rem rgb(var(--neo-text-rgb) / .16);
1432
+
1433
+ /**
1434
+ * Restores the focused inset-and-ring state after the higher-specificity native field recipe.
1435
+ */
1436
+ [data-ui="neumorphism"][data-mode] :where(.neo-input, .neo-textarea, .neo-select):focus {
1437
+ border-color: var(--neo-focus);
1438
+ box-shadow: var(--neo-focus-ring);
657
1439
  }
658
- [data-ui="neumorphism"][data-theme][data-mode] :where(dialog) {
659
- border: 1px solid rgb(var(--neo-border-rgb) / .38);
660
- border-radius: var(--neo-radius-xl);
661
- box-shadow: -.65rem -.65rem 1.3rem rgb(var(--neo-surface-strong-rgb) / .72), .72rem .72rem 1.45rem rgb(var(--neo-text-rgb) / .2);
1440
+
1441
+ /**
1442
+ * Keeps authored invalid fields distinct after the shared native field paint is applied.
1443
+ */
1444
+ [data-ui="neumorphism"][data-mode] :where(.neo-input, .neo-textarea, .neo-select)[aria-invalid="true"],
1445
+ [data-ui="neumorphism"][data-mode] :where(input[aria-invalid="true"], textarea[aria-invalid="true"], select[aria-invalid="true"]) {
1446
+ border-color: var(--neo-danger);
1447
+ box-shadow: 0 0 0 2px rgb(var(--neo-danger-rgb) / .2), var(--neo-inset-shadow-sm);
662
1448
  }
663
1449
 
664
- /* Busy indicators read as a softly raised and inset Neumorphic dial. */
665
- .neo-button[aria-busy="true"]::after, .neo-icon-button[aria-busy="true"]::after, [data-ui="neumorphism"] :where(button[aria-busy="true"], input[type="button"][aria-busy="true"], input[type="submit"][aria-busy="true"], input[type="reset"][aria-busy="true"])::after {
666
- border: .12em solid transparent; border-block-start-color: currentColor; border-radius: 50%; background: conic-gradient(currentColor, transparent 42%, currentColor); box-shadow: -.09em -.09em .18em rgb(255 255 255 / .38), .09em .09em .2em rgb(0 0 0 / .22), inset 0 0 0 .18em rgb(var(--neo-surface-rgb) / .6); clip-path: circle(50%); animation: neo-spin 1.04s linear infinite;
1450
+ [data-ui="neumorphism"][data-mode] :where(input[readonly]:not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="checkbox"]):not([type="radio"]):not([type="range"]):not([type="color"]), textarea[readonly]) {
1451
+ filter: saturate(.72);
1452
+ opacity: .78;
1453
+ }
1454
+
1455
+ [data-ui="neumorphism"][data-mode] :where(input[type="file"])::file-selector-button,
1456
+ [data-ui="neumorphism"][data-mode] :where(input[type="file"])::-webkit-file-upload-button {
1457
+ color: var(--neo-text);
1458
+ background: var(--neo-material-raised);
1459
+ border: 1px solid var(--neo-material-edge);
1460
+ border-radius: var(--neo-radius-md);
1461
+ box-shadow: var(--neo-button-shadow);
1462
+ }
1463
+
1464
+ [data-ui="neumorphism"][data-mode] :where(dialog) {
1465
+ background-color: var(--neo-material-raised);
1466
+ color: var(--neo-text);
1467
+ border: 1px solid var(--neo-material-hairline);
1468
+ box-shadow: var(--neo-raised-shadow-lg);
1469
+ }
1470
+
1471
+ /** Keeps pill controls distinct from circular busy and icon indicators in the public identity contract. */
1472
+ .neo-button {
1473
+ border-radius: var(--neo-radius-md);
1474
+ }
1475
+
1476
+ /* =========================================================
1477
+ Responsive and Accessibility Overrides
1478
+ ========================================================= */
1479
+
1480
+ @media (max-width: 42rem) {
1481
+ .neo-callout-bar {
1482
+ grid-template-columns: 1fr;
1483
+ align-items: start;
1484
+ }
1485
+
1486
+ .neo-callout-bar > :where(.neo-button, a, button):last-child {
1487
+ justify-self: stretch;
1488
+ }
1489
+
1490
+ .neo-feature-strip {
1491
+ grid-template-columns: 1fr;
1492
+ }
667
1493
  }
668
1494
 
669
1495
  @media (prefers-reduced-motion: reduce) {
670
- [data-ui="neumorphism"] *, [data-ui="neumorphism"] *::before, [data-ui="neumorphism"] *::after { scroll-behavior: auto !important; transition-duration: 1ms !important; animation-duration: 1ms !important; animation-iteration-count: 1 !important; }
1496
+ [data-ui="neumorphism"] *,
1497
+ [data-ui="neumorphism"] *::before,
1498
+ [data-ui="neumorphism"] *::after {
1499
+ scroll-behavior: auto !important;
1500
+ transition-duration: 1ms !important;
1501
+ animation-duration: 1ms !important;
1502
+ animation-iteration-count: 1 !important;
1503
+ }
671
1504
  }
1505
+
672
1506
  @media (prefers-contrast: more) {
673
- [data-ui="neumorphism"] { --neo-border-alpha: 1; --neo-focus-alpha: .75; }
1507
+ [data-ui="neumorphism"] {
1508
+ --neo-border-alpha: 1;
1509
+ --neo-focus-alpha: .75;
1510
+ --neo-material-edge: currentColor;
1511
+ }
674
1512
  }
1513
+
675
1514
  @media (forced-colors: active) {
676
- @supports (forced-color-adjust: auto) { [data-ui="neumorphism"] * { forced-color-adjust: auto; } }
677
- [data-ui="neumorphism"] :where(:focus-visible) { outline: 3px solid CanvasText; }
1515
+ @supports (forced-color-adjust: auto) {
1516
+ [data-ui="neumorphism"] * {
1517
+ forced-color-adjust: auto;
1518
+ }
1519
+ }
1520
+
1521
+ [data-ui="neumorphism"] :where(:focus-visible) {
1522
+ outline: 3px solid CanvasText;
1523
+ }
678
1524
  }
1525
+
679
1526
  @media print {
680
- [data-ui="neumorphism"] { background: #fff !important; color: #000 !important; }
681
- [data-ui="neumorphism"] * { box-shadow: none !important; text-shadow: none !important; }
682
- [data-ui="neumorphism"] a { color: #000 !important; text-decoration: underline; }
1527
+ [data-ui="neumorphism"] {
1528
+ background: #fff !important;
1529
+ color: #000 !important;
1530
+ }
1531
+
1532
+ [data-ui="neumorphism"] * {
1533
+ box-shadow: none !important;
1534
+ text-shadow: none !important;
1535
+ }
1536
+
1537
+ [data-ui="neumorphism"] a {
1538
+ color: #000 !important;
1539
+ text-decoration: underline;
1540
+ }
1541
+ }
683
1542
  }
1543
+
1544
+ @layer ui-style-kit.neumorphism {
1545
+ /* Shared annotation fidelity: readable display rhythm and appropriately scaled text icons. */
1546
+ .neo-feature-item > .neo-icon-medallion { font-size: 1.5rem; line-height: 1; }
1547
+ .neo-callout-bar > .neo-icon-medallion { min-inline-size: 4.5rem; min-block-size: 4.5rem; font-size: 2rem; font-weight: 800; line-height: 1; }
1548
+ /** Warning actions inherit preset geometry and use the paired semantic warning colors. */
1549
+ [data-ui="neumorphism"][data-mode] .neo-button.neo-button-warning {
1550
+ background: var(--neo-warning);
1551
+ color: var(--neo-on-warning);
1552
+ border-color: var(--neo-warning);
1553
+ text-shadow: none;
1554
+ }
1555
+
684
1556
  }