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 — Neumorphism 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,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));
@@ -133,7 +283,7 @@
133
283
  --neo-fg: var(--neo-text);
134
284
  --neo-surface-fg: var(--neo-text);
135
285
  --neo-muted: var(--neo-text-muted);
136
- --neo-border: rgb(var(--neo-border-rgb) / var(--neo-border-alpha));
286
+ --neo-border: rgb(var(--neo-border-rgb) / max(var(--neo-border-alpha), var(--usk-border-min-alpha)));
137
287
  --neo-control-fg: var(--neo-text);
138
288
  --neo-primary: rgb(var(--neo-primary-rgb));
139
289
  --neo-primary-hover: rgb(var(--neo-primary-hover-rgb));
@@ -163,6 +313,10 @@
163
313
  --neo-spinner-accent: var(--neo-accent);
164
314
  }
165
315
 
316
+ @supports (color: color-mix(in srgb, black, white)) {
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)); }
318
+ }
319
+
166
320
 
167
321
 
168
322
 
@@ -212,7 +366,7 @@
212
366
  [data-ui="neumorphism"] *::before,
213
367
  [data-ui="neumorphism"] *::after { box-sizing: border-box; }
214
368
 
215
- [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); }
216
370
 
217
371
  .neo-page { min-height: 100vh; padding: clamp(1rem, 4vw, 3rem); }
218
372
  .neo-container { width: min(100% - 2rem, 1200px); margin-inline: auto; }
@@ -279,7 +433,7 @@
279
433
  /* Theme-responsive component defaults */
280
434
  .neo-card, .neo-panel { background: var(--neo-card-bg); }
281
435
  .neo-toolbar, .neo-table-wrap { background: var(--neo-control-bg); }
282
- .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); }
283
437
  .neo-button, .neo-icon-button, .neo-badge, .neo-nav-link { font-family: var(--neo-font-control); }
284
438
 
285
439
 
@@ -373,81 +527,1030 @@
373
527
 
374
528
 
375
529
  /* =========================================================
376
- Neumorphism Depth Overrides
530
+ Reference Material Contract
531
+ Mode material, component recipes, semantic roles, interaction
532
+ states, and accessibility overrides are intentionally ordered.
377
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
+
378
549
  [data-ui="neumorphism"][data-mode="light"] {
379
- --neo-nm-light: rgb(255 255 255 / .94);
380
- --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);
381
559
  }
560
+
382
561
  [data-ui="neumorphism"][data-mode="dark"] {
383
- --neo-nm-light: rgb(46 55 70 / .74);
384
- --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);
385
571
  }
572
+
386
573
  [data-ui="neumorphism"][data-mode="contrast"] {
387
- --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);
388
581
  --neo-nm-dark: rgb(0 0 0 / 1);
582
+ --neo-nm-primary-glow: rgb(var(--neo-primary-rgb) / .5);
389
583
  }
390
- [data-ui="neumorphism"] { background: var(--neo-bg); }
391
- .neo-surface, .neo-card, .neo-panel, .neo-toolbar, .neo-table-wrap {
392
- border-color: rgb(var(--neo-border-rgb) / .14);
393
- 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);
667
+ }
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;
683
+ }
684
+
685
+ .neo-subtitle,
686
+ .neo-copy,
687
+ .neo-help-text {
688
+ color: var(--neo-text-muted);
689
+ }
690
+
691
+ .neo-divider {
692
+ background: var(--neo-muted-divider);
693
+ }
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);
706
+ }
707
+
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;
394
779
  }
395
- .neo-surface-lg, .neo-hover-lift:hover {
396
- box-shadow: 16px 16px 32px var(--neo-nm-dark), -16px -16px 32px var(--neo-nm-light);
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);
397
803
  }
398
- .neo-well, .neo-inset, .neo-input, .neo-textarea, .neo-select, .neo-progress {
399
- box-shadow: inset 5px 5px 11px var(--neo-nm-dark), inset -5px -5px 11px var(--neo-nm-light);
804
+
805
+ .neo-button-primary:hover {
806
+ background-color: var(--neo-primary-hover);
400
807
  }
401
- .neo-button, .neo-icon-button, .neo-badge, .neo-nav {
402
- box-shadow: 5px 5px 11px var(--neo-nm-dark), -5px -5px 11px var(--neo-nm-light);
808
+
809
+ .neo-button-secondary {
810
+ background-color: var(--neo-secondary);
811
+ color: var(--neo-on-secondary);
812
+ border-color: var(--neo-secondary);
403
813
  }
404
- .neo-button:active, .neo-icon-button:active, .neo-button.is-active, .neo-icon-button.is-active, .neo-nav-link.is-active {
405
- box-shadow: inset 4px 4px 9px var(--neo-nm-dark), inset -4px -4px 9px var(--neo-nm-light);
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(--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(--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;
406
919
  }
407
920
 
408
- /* Spinner geometry follows the neumorphism preset's soft extruded surfaces. */
409
- .neo-spinner, .neo-loading-spinner, [data-ui="neumorphism"] :where(.ui-spinner, .loading-spinner, [data-loading-spinner]) {
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]) {
410
1140
  display: inline-block;
411
1141
  inline-size: 2rem;
412
1142
  block-size: 2rem;
413
- border: .2rem solid transparent;
1143
+ border: .18rem solid var(--neo-material-edge);
414
1144
  border-block-start-color: var(--neo-spinner-stroke);
415
1145
  border-inline-end-color: var(--neo-spinner-accent);
416
1146
  border-radius: 50%;
417
- background: conic-gradient(from 45deg, var(--neo-spinner-stroke), transparent 34%, var(--neo-spinner-accent), var(--neo-spinner-track));
418
- 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);
419
1149
  vertical-align: -.2em;
420
1150
  animation: neo-spin 1s linear infinite;
421
1151
  }
422
- .neo-spinner-sm { inline-size: 1rem; block-size: 1rem; border-width: .12rem; }
423
- .neo-spinner-lg { inline-size: 3rem; block-size: 3rem; border-width: .28rem; }
424
- .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; }
425
- .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 {
426
1175
  content: "";
427
1176
  display: inline-block;
428
1177
  inline-size: 1em;
429
1178
  block-size: 1em;
430
- border: .16em solid rgb(var(--neo-primary-text-rgb) / .42);
431
- border-block-start-color: currentColor;
1179
+ border: .12em solid currentColor;
1180
+ border-block-start-color: transparent;
432
1181
  border-radius: 50%;
433
- 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;
1184
+ }
1185
+
1186
+ @keyframes neo-spin {
1187
+ to {
1188
+ transform: rotate(360deg);
1189
+ }
1190
+ }
1191
+
1192
+ /* =========================================================
1193
+ Marketing and Commercial Modifiers
1194
+ ========================================================= */
1195
+
1196
+ .neo-card-media {
1197
+ display: block;
1198
+ inline-size: 100%;
1199
+ aspect-ratio: 16 / 9;
1200
+ object-fit: cover;
1201
+ border: 1px solid var(--neo-material-edge);
1202
+ border-radius: var(--neo-radius-lg);
1203
+ box-shadow: var(--neo-inset-shadow-sm);
1204
+ }
1205
+
1206
+ .neo-card-service {
1207
+ position: relative;
1208
+ display: grid;
1209
+ gap: var(--neo-space-3);
1210
+ align-content: start;
1211
+ overflow: visible;
1212
+ }
1213
+
1214
+ .neo-card-service > .neo-icon-medallion,
1215
+ .neo-card-service > .neo-card-media + .neo-icon-medallion {
1216
+ justify-self: center;
1217
+ position: relative;
1218
+ z-index: 2;
1219
+ margin-block-start: -2.1rem;
1220
+ }
1221
+
1222
+ .neo-card-feature {
1223
+ display: grid;
1224
+ grid-template-columns: auto minmax(0, 1fr);
1225
+ gap: var(--neo-space-4);
1226
+ align-items: start;
1227
+ }
1228
+
1229
+ .neo-card-accent-edge {
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);
434
1244
  }
435
- @keyframes neo-spin { to { transform: rotate(360deg); } }
436
1245
 
1246
+ .neo-icon-medallion {
1247
+ display: inline-grid;
1248
+ place-items: center;
1249
+ inline-size: 3.75rem;
1250
+ block-size: 3.75rem;
1251
+ flex: 0 0 auto;
1252
+ padding: .7rem;
1253
+ background-color: var(--neo-material-raised);
1254
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
1255
+ color: 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);
1259
+ line-height: 1;
1260
+ }
1261
+
1262
+ .neo-icon-medallion > :where(svg, img) {
1263
+ inline-size: 100%;
1264
+ block-size: 100%;
1265
+ object-fit: contain;
1266
+ }
1267
+
1268
+ .neo-badge-seal {
1269
+ display: inline-grid;
1270
+ place-items: center;
1271
+ align-content: center;
1272
+ inline-size: 5rem;
1273
+ min-inline-size: 5rem;
1274
+ aspect-ratio: 1;
1275
+ padding: .65rem;
1276
+ background-color: var(--neo-material-raised);
1277
+ background-image: linear-gradient(145deg, var(--neo-material-top-light), transparent 52%);
1278
+ color: var(--neo-text);
1279
+ border: 1px solid var(--neo-material-edge);
1280
+ border-radius: 50%;
1281
+ box-shadow: var(--neo-button-shadow);
1282
+ text-align: center;
1283
+ font-family: var(--neo-font-heading);
1284
+ font-size: .72rem;
1285
+ font-weight: 900;
1286
+ line-height: 1.05;
1287
+ letter-spacing: .04em;
1288
+ }
1289
+
1290
+ .neo-badge-seal :where(strong, small, span) {
1291
+ color: inherit;
1292
+ }
1293
+
1294
+ .neo-feature-strip {
1295
+ display: grid;
1296
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr));
1297
+ }
1298
+
1299
+ .neo-feature-item {
1300
+ display: grid;
1301
+ grid-template-columns: auto minmax(0, 1fr);
1302
+ align-items: center;
1303
+ gap: var(--neo-space-3);
1304
+ min-inline-size: 0;
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);
1315
+ }
1316
+
1317
+ .neo-callout-bar {
1318
+ display: grid;
1319
+ grid-template-columns: auto minmax(0, 1fr) auto;
1320
+ align-items: center;
1321
+ gap: var(--neo-space-4);
1322
+ }
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
+ }
1344
+
1345
+ .neo-eyebrow {
1346
+ margin: 0;
1347
+ color: var(--neo-primary);
1348
+ font-family: var(--neo-font-heading);
1349
+ font-size: .76rem;
1350
+ font-weight: 900;
1351
+ line-height: 1.2;
1352
+ letter-spacing: .14em;
1353
+ text-transform: uppercase;
1354
+ }
1355
+
1356
+ .neo-media-scrim {
1357
+ position: relative;
1358
+ overflow: hidden;
1359
+ isolation: isolate;
1360
+ min-block-size: 12rem;
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);
1365
+ }
1366
+
1367
+ .neo-media-scrim > :where(img, picture, video) {
1368
+ display: block;
1369
+ inline-size: 100%;
1370
+ block-size: 100%;
1371
+ min-block-size: inherit;
1372
+ object-fit: cover;
1373
+ }
1374
+
1375
+ .neo-media-scrim > :where(figcaption, [data-media-caption]) {
1376
+ position: absolute;
1377
+ z-index: 1;
1378
+ inset-inline: 0;
1379
+ inset-block-end: 0;
1380
+ padding: clamp(1rem, 4vw, 2rem);
1381
+ color: #fff;
1382
+ background: linear-gradient(to top, rgb(0 0 0 / .9), rgb(0 0 0 / .58) 56%, transparent);
1383
+ }
1384
+
1385
+ .neo-media-scrim > :where(figcaption, [data-media-caption]) * {
1386
+ color: inherit;
1387
+ }
1388
+
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);
1400
+ }
1401
+
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
+ }
1409
+
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);
1417
+ }
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);
1423
+ }
1424
+
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);
1431
+ }
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);
1439
+ }
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);
1448
+ }
1449
+
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
+ }
1493
+ }
437
1494
 
438
1495
  @media (prefers-reduced-motion: reduce) {
439
- [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
+ }
440
1504
  }
1505
+
441
1506
  @media (prefers-contrast: more) {
442
- [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
+ }
443
1512
  }
1513
+
444
1514
  @media (forced-colors: active) {
445
- [data-ui="neumorphism"] * { forced-color-adjust: auto; }
446
- [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
+ }
447
1524
  }
1525
+
448
1526
  @media print {
449
- [data-ui="neumorphism"] { background: #fff !important; color: #000 !important; }
450
- [data-ui="neumorphism"] * { box-shadow: none !important; text-shadow: none !important; }
451
- [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
+ }
452
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
+
453
1556
  }