ui-style-kit-css 2.5.0 → 2.6.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 (61) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +84 -59
  3. package/dist/ui-style-kit.css +4089 -3591
  4. package/dist/ui-style-kit.min.css +3 -3
  5. package/dist/ui-style-kit.visual.css +4089 -3591
  6. package/dist/ui-style-kit.visual.min.css +3 -3
  7. package/dist/ui-style-kit.with-bridge.css +4089 -3591
  8. package/dist/ui-style-kit.with-bridge.min.css +3 -3
  9. package/dist/visual/art-deco.css +696 -339
  10. package/dist/visual/bauhaus.css +2 -2
  11. package/dist/visual/bento.css +2 -2
  12. package/dist/visual/brutalism.css +485 -170
  13. package/dist/visual/clay.css +2 -2
  14. package/dist/visual/cyberpunk.css +578 -263
  15. package/dist/visual/data-terminal.css +577 -262
  16. package/dist/visual/editorial-luxe.css +580 -265
  17. package/dist/visual/industrial-utility.css +644 -329
  18. package/dist/visual/maximalist.css +562 -247
  19. package/dist/visual/minimal-saas.css +511 -196
  20. package/dist/visual/neo-noir.css +2 -2
  21. package/dist/visual/neumorphism.css +534 -219
  22. package/dist/visual/organic-modern.css +2 -2
  23. package/dist/visual/paper-editorial.css +659 -344
  24. package/dist/visual/retro-glass.css +590 -275
  25. package/dist/visual/retrofuturism.css +539 -224
  26. package/dist/visual/tactile.css +552 -237
  27. package/dist/visual/technical-blueprint.css +618 -295
  28. package/dist/visual/y2k.css +521 -206
  29. package/docs/ART-DECO.md +2 -2
  30. package/docs/ECOSYSTEM.md +6 -6
  31. package/docs/PUBLISHING.md +7 -7
  32. package/docs/RELEASE-2.6.0.md +36 -0
  33. package/docs/STYLE-GUIDE.md +10 -0
  34. package/manifest.json +212 -179
  35. package/package.json +29 -1
  36. package/styles/art-deco.css +64 -1
  37. package/styles/bauhaus.css +8 -0
  38. package/styles/bento.css +10 -2
  39. package/styles/brutalism.css +8 -0
  40. package/styles/clay.css +11 -3
  41. package/styles/clean-defaults.css +295 -0
  42. package/styles/component-composition.css +829 -0
  43. package/styles/components.css +3 -3
  44. package/styles/cyberpunk.css +8 -0
  45. package/styles/data-terminal.css +8 -0
  46. package/styles/editorial-luxe.css +8 -0
  47. package/styles/industrial-utility.css +8 -0
  48. package/styles/interactive-surface-theme.css +23 -23
  49. package/styles/maximalist.css +8 -0
  50. package/styles/minimal-saas.css +8 -0
  51. package/styles/native-elements.css +7 -0
  52. package/styles/neo-noir.css +8 -0
  53. package/styles/neumorphism.css +8 -0
  54. package/styles/organic-modern.css +8 -0
  55. package/styles/paper-editorial.css +8 -0
  56. package/styles/retro-glass.css +8 -0
  57. package/styles/retrofuturism.css +8 -0
  58. package/styles/tactile.css +8 -0
  59. package/styles/technical-blueprint.css +16 -1
  60. package/styles/theme-colors.css +3 -0
  61. package/styles/y2k.css +8 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ui-style-kit-css",
3
- "version": "2.5.0",
3
+ "version": "2.6.0",
4
4
  "description": "CSS theme and UI style preset library for accessible websites, dashboards, admin interfaces, and client-facing pages.",
5
5
  "style": "dist/ui-style-kit.css",
6
6
  "main": "dist/ui-style-kit.css",
@@ -72,6 +72,17 @@
72
72
  "./visual/cyberpunk.css": "./dist/visual/cyberpunk.css",
73
73
  "./visual/y2k.css": "./dist/visual/y2k.css",
74
74
  "./visual/retro-glass.css": "./dist/visual/retro-glass.css",
75
+ "./presets/minimal-saas.css": "./dist/visual/minimal-saas.css",
76
+ "./presets/bento.css": "./dist/visual/bento.css",
77
+ "./presets/maximalist.css": "./dist/visual/maximalist.css",
78
+ "./presets/bauhaus.css": "./dist/visual/bauhaus.css",
79
+ "./presets/tactile.css": "./dist/visual/tactile.css",
80
+ "./presets/neumorphism.css": "./dist/visual/neumorphism.css",
81
+ "./presets/retrofuturism.css": "./dist/visual/retrofuturism.css",
82
+ "./presets/brutalism.css": "./dist/visual/brutalism.css",
83
+ "./presets/cyberpunk.css": "./dist/visual/cyberpunk.css",
84
+ "./presets/y2k.css": "./dist/visual/y2k.css",
85
+ "./presets/retro-glass.css": "./dist/visual/retro-glass.css",
75
86
  "./dist/ui-style-kit.css": "./dist/ui-style-kit.css",
76
87
  "./dist/ui-style-kit.min.css": "./dist/ui-style-kit.min.css",
77
88
  "./package.json": "./package.json",
@@ -83,6 +94,14 @@
83
94
  "./styles/native-elements.css": "./styles/native-elements.css",
84
95
  "./native-elements": "./styles/native-elements.css",
85
96
  "./native-elements.css": "./styles/native-elements.css",
97
+ "./styles/clean-defaults": "./styles/clean-defaults.css",
98
+ "./styles/clean-defaults.css": "./styles/clean-defaults.css",
99
+ "./clean-defaults": "./styles/clean-defaults.css",
100
+ "./clean-defaults.css": "./styles/clean-defaults.css",
101
+ "./styles/component-composition": "./styles/component-composition.css",
102
+ "./styles/component-composition.css": "./styles/component-composition.css",
103
+ "./component-composition": "./styles/component-composition.css",
104
+ "./component-composition.css": "./styles/component-composition.css",
86
105
  "./styles/content-overflow": "./styles/content-overflow.css",
87
106
  "./styles/content-overflow.css": "./styles/content-overflow.css",
88
107
  "./content-overflow": "./styles/content-overflow.css",
@@ -143,46 +162,55 @@
143
162
  "./dist/ui-style-kit.with-bridge.min.css": "./dist/ui-style-kit.with-bridge.min.css",
144
163
  "./manifest.json": "./manifest.json",
145
164
  "./visual/editorial-luxe.css": "./dist/visual/editorial-luxe.css",
165
+ "./presets/editorial-luxe.css": "./dist/visual/editorial-luxe.css",
146
166
  "./styles/editorial-luxe": "./styles/editorial-luxe.css",
147
167
  "./styles/editorial-luxe.css": "./styles/editorial-luxe.css",
148
168
  "./editorial-luxe": "./styles/editorial-luxe.css",
149
169
  "./editorial-luxe.css": "./styles/editorial-luxe.css",
150
170
  "./visual/organic-modern.css": "./dist/visual/organic-modern.css",
171
+ "./presets/organic-modern.css": "./dist/visual/organic-modern.css",
151
172
  "./styles/organic-modern": "./styles/organic-modern.css",
152
173
  "./styles/organic-modern.css": "./styles/organic-modern.css",
153
174
  "./organic-modern": "./styles/organic-modern.css",
154
175
  "./organic-modern.css": "./styles/organic-modern.css",
155
176
  "./visual/industrial-utility.css": "./dist/visual/industrial-utility.css",
177
+ "./presets/industrial-utility.css": "./dist/visual/industrial-utility.css",
156
178
  "./styles/industrial-utility": "./styles/industrial-utility.css",
157
179
  "./styles/industrial-utility.css": "./styles/industrial-utility.css",
158
180
  "./industrial-utility": "./styles/industrial-utility.css",
159
181
  "./industrial-utility.css": "./styles/industrial-utility.css",
160
182
  "./visual/technical-blueprint.css": "./dist/visual/technical-blueprint.css",
183
+ "./presets/technical-blueprint.css": "./dist/visual/technical-blueprint.css",
161
184
  "./styles/technical-blueprint": "./styles/technical-blueprint.css",
162
185
  "./styles/technical-blueprint.css": "./styles/technical-blueprint.css",
163
186
  "./technical-blueprint": "./styles/technical-blueprint.css",
164
187
  "./technical-blueprint.css": "./styles/technical-blueprint.css",
165
188
  "./visual/art-deco.css": "./dist/visual/art-deco.css",
189
+ "./presets/art-deco.css": "./dist/visual/art-deco.css",
166
190
  "./styles/art-deco": "./styles/art-deco.css",
167
191
  "./styles/art-deco.css": "./styles/art-deco.css",
168
192
  "./art-deco": "./styles/art-deco.css",
169
193
  "./art-deco.css": "./styles/art-deco.css",
170
194
  "./visual/clay.css": "./dist/visual/clay.css",
195
+ "./presets/clay.css": "./dist/visual/clay.css",
171
196
  "./styles/clay": "./styles/clay.css",
172
197
  "./styles/clay.css": "./styles/clay.css",
173
198
  "./clay": "./styles/clay.css",
174
199
  "./clay.css": "./styles/clay.css",
175
200
  "./visual/data-terminal.css": "./dist/visual/data-terminal.css",
201
+ "./presets/data-terminal.css": "./dist/visual/data-terminal.css",
176
202
  "./styles/data-terminal": "./styles/data-terminal.css",
177
203
  "./styles/data-terminal.css": "./styles/data-terminal.css",
178
204
  "./data-terminal": "./styles/data-terminal.css",
179
205
  "./data-terminal.css": "./styles/data-terminal.css",
180
206
  "./visual/paper-editorial.css": "./dist/visual/paper-editorial.css",
207
+ "./presets/paper-editorial.css": "./dist/visual/paper-editorial.css",
181
208
  "./styles/paper-editorial": "./styles/paper-editorial.css",
182
209
  "./styles/paper-editorial.css": "./styles/paper-editorial.css",
183
210
  "./paper-editorial": "./styles/paper-editorial.css",
184
211
  "./paper-editorial.css": "./styles/paper-editorial.css",
185
212
  "./visual/neo-noir.css": "./dist/visual/neo-noir.css",
213
+ "./presets/neo-noir.css": "./dist/visual/neo-noir.css",
186
214
  "./styles/neo-noir": "./styles/neo-noir.css",
187
215
  "./styles/neo-noir.css": "./styles/neo-noir.css",
188
216
  "./neo-noir": "./styles/neo-noir.css",
@@ -14,6 +14,7 @@
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
16
  @import url("./content-overflow.css");
17
+ @import url("./clean-defaults.css");
17
18
 
18
19
  @layer ui-style-kit.art_deco {
19
20
  :root {
@@ -201,6 +202,13 @@
201
202
  --usk-native-primary: var(--deco-primary);
202
203
  --usk-native-primary-hover: var(--deco-primary-hover);
203
204
  --usk-native-on-primary: var(--deco-on-primary);
205
+ --usk-native-secondary: var(--deco-secondary);
206
+ --usk-native-on-secondary: var(--deco-on-secondary);
207
+ --usk-native-accent: var(--deco-accent);
208
+ --usk-native-on-accent: var(--deco-on-accent);
209
+ --usk-native-on-success: var(--deco-on-success);
210
+ --usk-native-on-warning: var(--deco-on-warning);
211
+ --usk-native-on-danger: var(--deco-on-danger);
204
212
  --usk-native-focus: var(--deco-focus);
205
213
  --usk-native-success: var(--deco-success);
206
214
  --usk-native-warning: var(--deco-warning);
@@ -1394,7 +1402,7 @@
1394
1402
  .deco-check input:checked + .deco-check-control::after {
1395
1403
  content: "";
1396
1404
  position: absolute;
1397
- inset-block-start: 50%;
1405
+ inset-block-start: calc(50% - 1px);
1398
1406
  inset-inline-start: 50%;
1399
1407
  display: block;
1400
1408
  inline-size: .5rem;
@@ -1806,6 +1814,8 @@
1806
1814
  --deco-status-warning: var(--deco-text);
1807
1815
  --deco-status-danger: var(--deco-text);
1808
1816
  --deco-info-rgb: var(--usk-primary-rgb, 0 80 150);
1817
+ --deco-link: var(--deco-text);
1818
+ --usk-native-link: var(--deco-text);
1809
1819
  }
1810
1820
  [data-ui="art-deco"][data-mode] {
1811
1821
  --deco-bg: rgb(var(--deco-bg-rgb));
@@ -2049,3 +2059,56 @@ dialog.deco-dialog:not([open]) { display: none; }
2049
2059
  font-weight: 800;
2050
2060
  line-height: 1;
2051
2061
  }
2062
+
2063
+ /**
2064
+ * Restores the reference action silhouette after shared semantic controls are
2065
+ * promoted. The double metallic keyline and stepped frame remain structural,
2066
+ * while each semantic variant continues to own its accessible paint pairing.
2067
+ */
2068
+ [data-ui="art-deco"][data-mode] :is(.deco-button, .deco-icon-button) {
2069
+ border: 3px double var(--deco-metal);
2070
+ border-radius: 0;
2071
+ clip-path: var(--deco-step-sm);
2072
+ box-shadow:
2073
+ inset 0 0 0 1px var(--deco-surface-strong),
2074
+ 0 3px 0 var(--deco-metal);
2075
+ }
2076
+
2077
+ @supports (color: color-mix(in srgb, black, white)) {
2078
+ [data-ui="art-deco"][data-mode] :is(.deco-button, .deco-icon-button) {
2079
+ box-shadow:
2080
+ inset 0 0 0 1px var(--deco-surface-strong),
2081
+ 0 3px 0 color-mix(in srgb, var(--deco-metal) 52%, var(--deco-text));
2082
+ }
2083
+ }
2084
+
2085
+ /**
2086
+ * Uses the system's diamond motif for compact identities while keeping initials,
2087
+ * photographs, and status metadata upright and independently readable.
2088
+ */
2089
+ [data-ui="art-deco"][data-mode] .deco-avatar {
2090
+ inline-size: 3rem;
2091
+ block-size: 3rem;
2092
+ overflow: visible;
2093
+ background: var(--deco-jewel-primary);
2094
+ color: var(--deco-jewel-on);
2095
+ border: 3px double var(--deco-metal-bright);
2096
+ border-radius: 0;
2097
+ box-shadow: inset 0 0 0 2px var(--deco-surface-strong);
2098
+ transform: rotate(45deg) scale(.78);
2099
+ }
2100
+
2101
+ [data-ui="art-deco"][data-mode] .deco-avatar > :where(img, [aria-hidden="true"]) {
2102
+ transform: rotate(-45deg) scale(1.12);
2103
+ }
2104
+
2105
+ [data-ui="art-deco"][data-mode] .deco-avatar > [role="status"] {
2106
+ inset-block-end: -.15rem;
2107
+ inset-inline-end: -.15rem;
2108
+ color: var(--deco-jewel-on);
2109
+ transform: rotate(-45deg);
2110
+ }
2111
+
2112
+ [data-ui="art-deco"][data-mode] .deco-avatar-group > * + * {
2113
+ margin-inline-start: .25rem;
2114
+ }
@@ -14,6 +14,7 @@
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
16
  @import url("./content-overflow.css");
17
+ @import url("./clean-defaults.css");
17
18
 
18
19
  /** Locally bundled OFL fonts keep workshop typography independent of network access. */
19
20
  @font-face { font-family: "Bauhaus Barlow"; src: url("./assets/bauhaus-barlow.ttf") format("truetype"); font-style: normal; font-weight: 400; font-display: swap; }
@@ -214,6 +215,13 @@
214
215
  --usk-native-primary: var(--bau-primary);
215
216
  --usk-native-primary-hover: var(--bau-primary-hover);
216
217
  --usk-native-on-primary: var(--bau-on-primary);
218
+ --usk-native-secondary: var(--bau-secondary);
219
+ --usk-native-on-secondary: var(--bau-on-secondary);
220
+ --usk-native-accent: var(--bau-accent);
221
+ --usk-native-on-accent: var(--bau-on-accent);
222
+ --usk-native-on-success: var(--bau-on-success);
223
+ --usk-native-on-warning: var(--bau-on-warning);
224
+ --usk-native-on-danger: var(--bau-on-danger);
217
225
  --usk-native-focus: var(--bau-focus);
218
226
  --usk-native-success: var(--bau-success);
219
227
  --usk-native-warning: var(--bau-warning);
package/styles/bento.css CHANGED
@@ -14,6 +14,7 @@
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
16
  @import url("./content-overflow.css");
17
+ @import url("./clean-defaults.css");
17
18
 
18
19
  @font-face {
19
20
  font-family: "Bento Manrope";
@@ -211,6 +212,13 @@
211
212
  --usk-native-primary: var(--bento-primary);
212
213
  --usk-native-primary-hover: var(--bento-primary-hover);
213
214
  --usk-native-on-primary: var(--bento-on-primary);
215
+ --usk-native-secondary: var(--bento-secondary);
216
+ --usk-native-on-secondary: var(--bento-on-secondary);
217
+ --usk-native-accent: var(--bento-accent);
218
+ --usk-native-on-accent: var(--bento-on-accent);
219
+ --usk-native-on-success: var(--bento-on-success);
220
+ --usk-native-on-warning: var(--bento-on-warning);
221
+ --usk-native-on-danger: var(--bento-on-danger);
214
222
  --usk-native-focus: var(--bento-focus);
215
223
  --usk-native-success: var(--bento-success);
216
224
  --usk-native-warning: var(--bento-warning);
@@ -1479,10 +1487,10 @@
1479
1487
  --bento-fallback-primary-rgb: 49 87 220;
1480
1488
  --bento-fallback-primary-hover-rgb: 70 99 212;
1481
1489
  --bento-fallback-primary-text-rgb: 255 255 255;
1482
- --bento-fallback-secondary-rgb: 117 108 228;
1490
+ --bento-fallback-secondary-rgb: 105 94 220;
1483
1491
  --bento-fallback-secondary-hover-rgb: 91 82 201;
1484
1492
  --bento-fallback-secondary-text-rgb: 255 255 255;
1485
- --bento-fallback-accent-rgb: 117 108 228;
1493
+ --bento-fallback-accent-rgb: 105 94 220;
1486
1494
  --bento-fallback-accent-text-rgb: 255 255 255;
1487
1495
  --bento-fallback-success-rgb: 53 168 103;
1488
1496
  --bento-fallback-success-text-rgb: 0 0 0;
@@ -15,6 +15,7 @@
15
15
  @import url("./theme-colors.css");
16
16
  @import url("./native-elements.css");
17
17
  @import url("./content-overflow.css");
18
+ @import url("./clean-defaults.css");
18
19
 
19
20
  @layer ui-style-kit.brutalism {
20
21
  :root {
@@ -212,6 +213,13 @@
212
213
  --usk-native-primary: var(--brutal-primary);
213
214
  --usk-native-primary-hover: var(--brutal-primary-hover);
214
215
  --usk-native-on-primary: var(--brutal-on-primary);
216
+ --usk-native-secondary: var(--brutal-secondary);
217
+ --usk-native-on-secondary: var(--brutal-on-secondary);
218
+ --usk-native-accent: var(--brutal-accent);
219
+ --usk-native-on-accent: var(--brutal-on-accent);
220
+ --usk-native-on-success: var(--brutal-on-success);
221
+ --usk-native-on-warning: var(--brutal-on-warning);
222
+ --usk-native-on-danger: var(--brutal-on-danger);
215
223
  --usk-native-focus: var(--brutal-focus);
216
224
  --usk-native-success: var(--brutal-success);
217
225
  --usk-native-warning: var(--brutal-warning);
package/styles/clay.css CHANGED
@@ -14,6 +14,7 @@
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
16
  @import url("./content-overflow.css");
17
+ @import url("./clean-defaults.css");
17
18
 
18
19
  @layer ui-style-kit.clay {
19
20
  /** Locally bundled rounded headings; body text retains the compact system face. */
@@ -57,7 +58,7 @@
57
58
  --clay-fallback-text-rgb: 43 36 25;
58
59
  --clay-fallback-text-muted-rgb: 107 97 78;
59
60
  --clay-fallback-border-rgb: 215 198 167;
60
- --clay-fallback-primary-rgb: 140 106 61;
61
+ --clay-fallback-primary-rgb: 115 75 32;
61
62
  --clay-fallback-primary-hover-rgb: 112 83 47;
62
63
  --clay-fallback-primary-text-rgb: 255 255 255;
63
64
  --clay-fallback-secondary-rgb: 95 118 85;
@@ -69,7 +70,7 @@
69
70
  --clay-fallback-success-text-rgb: 255 255 255;
70
71
  --clay-fallback-warning-rgb: 166 107 0;
71
72
  --clay-fallback-warning-text-rgb: 0 0 0;
72
- --clay-fallback-danger-rgb: 174 74 63;
73
+ --clay-fallback-danger-rgb: 148 48 42;
73
74
  --clay-fallback-danger-text-rgb: 255 255 255;
74
75
  --clay-fallback-link-rgb: 112 83 47;
75
76
  --clay-fallback-focus-rgb: 201 151 74;
@@ -209,6 +210,13 @@
209
210
  --usk-native-primary: var(--clay-primary);
210
211
  --usk-native-primary-hover: var(--clay-primary-hover);
211
212
  --usk-native-on-primary: var(--clay-on-primary);
213
+ --usk-native-secondary: var(--clay-secondary);
214
+ --usk-native-on-secondary: var(--clay-on-secondary);
215
+ --usk-native-accent: var(--clay-accent);
216
+ --usk-native-on-accent: var(--clay-on-accent);
217
+ --usk-native-on-success: var(--clay-on-success);
218
+ --usk-native-on-warning: var(--clay-on-warning);
219
+ --usk-native-on-danger: var(--clay-on-danger);
212
220
  --usk-native-focus: var(--clay-focus);
213
221
  --usk-native-success: var(--clay-success);
214
222
  --usk-native-warning: var(--clay-warning);
@@ -828,7 +836,7 @@
828
836
  --clay-thumb-material: #fff;
829
837
  --clay-pigment-base: #000;
830
838
  --clay-pigment-share: 100%;
831
- --clay-pigment-ink: #fff;
839
+ --clay-pigment-ink: #000;
832
840
  --clay-tooltip-material: #000;
833
841
  --clay-tooltip-ink: #fff;
834
842
  --clay-label-relief: none;
@@ -0,0 +1,295 @@
1
+ /* =========================================================
2
+ UI Style Kit CSS - Clean Defaults
3
+
4
+ Supplies conservative spacing and decoration defaults while
5
+ keeping deliberate flush and underlined treatments opt-in.
6
+ ========================================================= */
7
+
8
+ @layer ui-style-kit.components {
9
+ [data-ui][data-mode]:not([data-ui="technical-blueprint"]) {
10
+ --usk-element-margin-min: 2px;
11
+ --usk-element-padding-min: 2px;
12
+ --usk-wrapper-margin-min: var(--usk-element-margin-min);
13
+ --usk-wrapper-padding-min: var(--usk-element-padding-min);
14
+ --usk-compact-padding-block-min: 2px;
15
+ --usk-compact-padding-inline-min: 4px;
16
+ }
17
+
18
+ /**
19
+ * Establishes the library-wide non-zero spacing floor. Preset declarations in
20
+ * the later preset layer retain their roomier values, while either flush class
21
+ * provides an explicit opt-out for intentionally adjoining elements. Technical
22
+ * Blueprint is exempt because its drafting grammar intentionally joins controls.
23
+ */
24
+ [data-ui][data-mode]:not([data-ui="technical-blueprint"]) :where(:not(.flush):not(.usk-flush)) {
25
+ margin: var(--usk-element-margin-min);
26
+ padding: var(--usk-element-padding-min);
27
+ }
28
+
29
+ /** Compact controls remain operable even when a preset omits its own padding. */
30
+ [data-ui][data-mode]:not([data-ui="technical-blueprint"]) :where(
31
+ button,
32
+ input[type="button"],
33
+ input[type="submit"],
34
+ input[type="reset"],
35
+ [class~="usk-button"],
36
+ [class~="usk-icon-button"],
37
+ [class~="usk-badge"],
38
+ [class~="ui-button"],
39
+ [class~="ui-icon-button"],
40
+ [class~="ui-badge"],
41
+ [class$="-button"], [class*="-button "],
42
+ [class$="-icon-button"], [class*="-icon-button "],
43
+ [class$="-badge"], [class*="-badge "]
44
+ ) {
45
+ padding-block: var(--usk-compact-padding-block-min);
46
+ padding-inline: var(--usk-compact-padding-inline-min);
47
+ }
48
+ }
49
+
50
+ @layer ui-style-kit.clean_defaults {
51
+ /** Keeps semantic state paint paired when a preset also owns broad anchor or input rules. */
52
+ [data-ui][data-mode] :where(
53
+ [class~="usk-pagination-link"][aria-current="page"],
54
+ [class~="ui-pagination-link"][aria-current="page"]
55
+ ) {
56
+ color: var(--usk-native-on-primary);
57
+ }
58
+
59
+ /** Separates compact page numbers from roomier Previous and Next bookends. */
60
+ [data-ui][data-mode] :where([class~="usk-pagination-link"], [class~="ui-pagination-link"]) {
61
+ display: inline-flex;
62
+ align-items: center;
63
+ justify-content: center;
64
+ box-sizing: border-box;
65
+ line-height: 1;
66
+ vertical-align: middle;
67
+ }
68
+
69
+ [data-ui][data-mode] :where(
70
+ [class~="usk-pagination-link"][data-pagination-kind="page"],
71
+ [class~="ui-pagination-link"][data-pagination-kind="page"]
72
+ ) {
73
+ min-inline-size: 2.25rem;
74
+ min-block-size: 2.25rem;
75
+ padding: 2px 4px;
76
+ font-size: .9em;
77
+ }
78
+
79
+ [data-ui][data-mode] :where(
80
+ [class~="usk-pagination-link"][data-pagination-kind="direction"],
81
+ [class~="ui-pagination-link"][data-pagination-kind="direction"]
82
+ ) {
83
+ min-inline-size: 2.75rem;
84
+ min-block-size: 2.75rem;
85
+ }
86
+
87
+ /** Uses one centering model for native and semantic button content. */
88
+ [data-ui][data-mode] :where(
89
+ button,
90
+ input[type="button"],
91
+ input[type="submit"],
92
+ input[type="reset"],
93
+ [class~="usk-button"],
94
+ [class~="usk-icon-button"],
95
+ [class~="ui-button"],
96
+ [class~="ui-icon-button"]
97
+ ) {
98
+ display: inline-flex;
99
+ align-items: center;
100
+ justify-content: center;
101
+ line-height: 1;
102
+ vertical-align: middle;
103
+ }
104
+
105
+ [data-ui][data-mode] :where(input[type="checkbox"]:checked, input[type="radio"]:checked) {
106
+ color: var(--usk-native-choice-mark-color);
107
+ }
108
+
109
+ }
110
+
111
+ /**
112
+ * Provides choice-wrapper alignment below preset paint so authored spacing and
113
+ * density remain authoritative when a preset supplies them.
114
+ */
115
+ @layer ui-style-kit.components {
116
+ [data-ui][data-mode] :where(
117
+ [class~="usk-check"],
118
+ [class~="usk-radio"],
119
+ [class~="usk-switch"],
120
+ [class~="ui-check"],
121
+ [class~="ui-radio"],
122
+ [class~="ui-switch"]
123
+ ) {
124
+ display: inline-flex;
125
+ align-items: center;
126
+ gap: var(--usk-native-field-gap, .5rem);
127
+ margin: var(--usk-element-margin-min);
128
+ padding: .25rem .5rem;
129
+ line-height: 1.25;
130
+ vertical-align: middle;
131
+ }
132
+
133
+ [data-ui][data-mode] :where(
134
+ [class~="ui-check-control"],
135
+ [class~="ui-radio-control"],
136
+ [class~="usk-check-control"],
137
+ [class~="usk-radio-control"],
138
+ [class~="usk-switch-track"],
139
+ [class~="ui-switch-track"]
140
+ ) {
141
+ position: relative;
142
+ box-sizing: border-box;
143
+ flex: 0 0 auto;
144
+ align-self: center;
145
+ margin: var(--usk-element-margin-min);
146
+ }
147
+ }
148
+
149
+ @layer ui-style-kit.clean_defaults {
150
+
151
+ /** Keeps the moving switch face inside its preset-owned track dimensions. */
152
+ [data-ui][data-mode] :where([class~="usk-switch-thumb"], [class~="ui-switch-thumb"]) {
153
+ box-sizing: border-box;
154
+ margin: 0;
155
+ padding: 0;
156
+ }
157
+
158
+ /**
159
+ * Protects workflow-stepper markup from preset classes that use the same suffix
160
+ * for numeric steppers or other three-column controls.
161
+ */
162
+ [data-ui][data-mode] :where([class~="usk-stepper"], [class~="ui-stepper"]) {
163
+ display: flex;
164
+ flex-wrap: wrap;
165
+ align-items: stretch;
166
+ grid-template-columns: none;
167
+ inline-size: 100%;
168
+ max-inline-size: 100%;
169
+ }
170
+
171
+ [data-ui][data-mode] :where([class~="usk-step"], [class~="ui-step"]) {
172
+ display: flex;
173
+ flex: 1 1 12rem;
174
+ align-items: center;
175
+ inline-size: auto;
176
+ min-inline-size: min(100%, 12rem);
177
+ max-inline-size: 100%;
178
+ }
179
+
180
+ [data-ui][data-mode] :where([class~="usk-step-label"], [class~="ui-step-label"]) {
181
+ flex: 1 1 auto;
182
+ inline-size: auto;
183
+ min-inline-size: 8ch;
184
+ max-inline-size: 100%;
185
+ writing-mode: horizontal-tb;
186
+ }
187
+
188
+ }
189
+
190
+ @layer ui-style-kit.clean_defaults {
191
+
192
+ [data-ui][data-mode] :where(
193
+ [class~="ui-check"] > input:focus-visible + [class~="ui-check-control"],
194
+ [class~="ui-radio"] > input:focus-visible + [class~="ui-radio-control"],
195
+ [class~="ui-switch"] > input:focus-visible + [class~="ui-switch-track"],
196
+ [class~="usk-check"] > input:focus-visible + [class~="usk-check-control"],
197
+ [class~="usk-radio"] > input:focus-visible + [class~="usk-radio-control"],
198
+ [class~="usk-switch"] > input:focus-visible + [class~="usk-switch-track"]
199
+ ) {
200
+ outline: 2px solid var(--usk-native-focus);
201
+ outline-offset: 2px;
202
+ }
203
+
204
+ /** Keeps native choice inputs focusable without painting a duplicate control. */
205
+ [data-ui][data-mode] :where(
206
+ [class~="usk-check"],
207
+ [class~="usk-radio"],
208
+ [class~="usk-switch"],
209
+ [class~="ui-check"],
210
+ [class~="ui-radio"],
211
+ [class~="ui-switch"]
212
+ ) > input:is([type="checkbox"], [type="radio"]) {
213
+ position: absolute;
214
+ inline-size: 1px;
215
+ block-size: 1px;
216
+ margin: -1px;
217
+ padding: 0;
218
+ overflow: hidden;
219
+ clip: rect(0 0 0 0);
220
+ clip-path: inset(50%);
221
+ white-space: nowrap;
222
+ border: 0;
223
+ opacity: 0;
224
+ }
225
+
226
+ /** Centers fallback initials while keeping accessible status metadata out of the avatar grid. */
227
+ [data-ui][data-mode] :where([class~="usk-avatar"], [class~="ui-avatar"]) > [aria-hidden="true"] {
228
+ display: inline-flex;
229
+ align-items: center;
230
+ justify-content: center;
231
+ inline-size: 100%;
232
+ block-size: 100%;
233
+ line-height: 1;
234
+ translate: 0 .05em;
235
+ }
236
+
237
+ [data-ui][data-mode] :where([class~="usk-avatar"], [class~="ui-avatar"]) > [role="status"] {
238
+ position: absolute;
239
+ inset-block-end: 0;
240
+ inset-inline-end: 0;
241
+ }
242
+
243
+ /** Keeps the native remove action compact inside a chip without requiring a React-only class. */
244
+ [data-ui][data-mode] :where([class~="usk-chip"], [class~="ui-chip"]) > button {
245
+ display: inline-flex;
246
+ flex: 0 0 auto;
247
+ align-items: center;
248
+ align-self: center;
249
+ justify-content: center;
250
+ box-sizing: border-box;
251
+ inline-size: 1.5rem;
252
+ block-size: 1.5rem;
253
+ min-inline-size: 1.5rem;
254
+ min-block-size: 1.5rem;
255
+ margin: var(--usk-element-margin-min);
256
+ padding: 2px;
257
+ line-height: 1;
258
+ vertical-align: middle;
259
+ }
260
+
261
+ [data-ui][data-mode] :where([class~="usk-chip"], [class~="ui-chip"]) > button > svg {
262
+ display: block;
263
+ inline-size: 0.75rem;
264
+ block-size: 0.75rem;
265
+ margin: 0;
266
+ padding: 0;
267
+ }
268
+
269
+ /** Normalizes semantic SVG icons without requiring a framework-specific class. */
270
+ [data-ui][data-mode] :where([data-ui-icon]) {
271
+ display: block;
272
+ flex: 0 0 auto;
273
+ inline-size: 1em;
274
+ block-size: 1em;
275
+ margin: 0;
276
+ padding: 0;
277
+ overflow: visible;
278
+ }
279
+
280
+ /** Removes decorative underlines while preserving semantic edit notation. */
281
+ [data-ui][data-mode] :where(*:not(u):not(ins):not(del):not(s):not(.usk-underline)) {
282
+ text-decoration-line: none;
283
+ }
284
+
285
+ /** Explicitly restores an underline when a consumer chooses that treatment. */
286
+ [data-ui][data-mode] .usk-underline {
287
+ text-decoration-line: underline !important;
288
+ }
289
+
290
+ /** Explicitly removes the library's element spacing contract. */
291
+ [data-ui][data-mode] :where(.flush, .usk-flush) {
292
+ margin: 0 !important;
293
+ padding: 0 !important;
294
+ }
295
+ }