ui-style-kit-css 2.0.2 → 2.0.4

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 (44) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/README.md +61 -14
  3. package/STYLE-MAP.md +9 -1
  4. package/dist/ui-style-kit.css +311 -15
  5. package/dist/ui-style-kit.min.css +6 -1
  6. package/dist/ui-style-kit.with-bridge.css +311 -15
  7. package/dist/ui-style-kit.with-bridge.min.css +6 -1
  8. package/docs/ECOSYSTEM.md +58 -0
  9. package/docs/PUBLISHING.md +10 -3
  10. package/package.json +9 -4
  11. package/styles/bauhaus.css +1 -0
  12. package/styles/bento.css +1 -0
  13. package/styles/brutalism.css +6 -5
  14. package/styles/content-overflow.css +292 -0
  15. package/styles/cyberpunk.css +3 -2
  16. package/styles/maximalist.css +1 -0
  17. package/styles/minimal-saas.css +1 -0
  18. package/styles/native-elements.css +3 -2
  19. package/styles/neumorphism.css +1 -0
  20. package/styles/retro-glass.css +3 -2
  21. package/styles/retrofuturism.css +1 -0
  22. package/styles/tactile.css +1 -0
  23. package/styles/y2k.css +3 -2
  24. package/demo/assets/README.md +0 -23
  25. package/demo/assets/android-chrome-192x192.png +0 -0
  26. package/demo/assets/android-chrome-512x512.png +0 -0
  27. package/demo/assets/apple-touch-icon.png +0 -0
  28. package/demo/assets/browserconfig.xml +0 -9
  29. package/demo/assets/favicon-128x128.png +0 -0
  30. package/demo/assets/favicon-16x16.png +0 -0
  31. package/demo/assets/favicon-256x256.png +0 -0
  32. package/demo/assets/favicon-32x32.png +0 -0
  33. package/demo/assets/favicon-384x384.png +0 -0
  34. package/demo/assets/favicon-48x48.png +0 -0
  35. package/demo/assets/favicon-64x64.png +0 -0
  36. package/demo/assets/favicon-96x96.png +0 -0
  37. package/demo/assets/favicon-head-snippet.html +0 -11
  38. package/demo/assets/favicon-master-1024.png +0 -0
  39. package/demo/assets/favicon.ico +0 -0
  40. package/demo/assets/favicon.svg +0 -26
  41. package/demo/assets/mstile-150x150.png +0 -0
  42. package/demo/assets/safari-pinned-tab.svg +0 -3
  43. package/demo/assets/site.webmanifest +0 -25
  44. package/demo/index.html +0 -1135
@@ -0,0 +1,58 @@
1
+ # Ecosystem Compatibility
2
+
3
+ UI Style Kit CSS is the visual layer in the three-library CSS ecosystem. It can run alone, but it also has stable integration points for Interactive Surface CSS and Layout Style CSS.
4
+
5
+ ## Aligned Versions
6
+
7
+ | Library | Current aligned version | Owns |
8
+ |---|---:|---|
9
+ | `ui-style-kit-css@2.0.4` | source release target | visual identity, color themes, UI paint, native HTML styling, content wrapping, and bridge tokens |
10
+ | `interactive-surface-css@1.3.0` | latest published sibling | interaction-state primitives, surface behavior, state layers, and input affordances |
11
+ | `layout-style-css@1.1.2` | latest published sibling | structural wrappers, grids, sections, app shells, and layout recipes |
12
+
13
+ `ui-style-kit-css@2.0.4` is prepared in source. Until it is published, production CDN examples should stay pinned to the latest published patch.
14
+
15
+ ## Adoption Paths
16
+
17
+ ### Use one
18
+
19
+ Use UI Style Kit by itself when an app needs visual identity, theme roles, native element styling, and long-text containment without layout primitives or richer interaction-state behavior.
20
+
21
+ ```js
22
+ import "ui-style-kit-css/minimal-saas.css";
23
+ ```
24
+
25
+ ### Use two
26
+
27
+ Pair UI Style Kit with Interactive Surface CSS when controls need the sibling interaction-state primitives. Import Interactive Surface first, then the visual style and the optional bridge.
28
+
29
+ ```js
30
+ import "interactive-surface-css/interactive-surface.css";
31
+ import "ui-style-kit-css/minimal-saas.css";
32
+ import "ui-style-kit-css/interactive-surface-bridge";
33
+ ```
34
+
35
+ Pair UI Style Kit with Layout Style CSS when the app already has interaction behavior but needs structural wrappers, grids, and sections.
36
+
37
+ ```js
38
+ import "layout-style-css";
39
+ import "ui-style-kit-css/minimal-saas.css";
40
+ ```
41
+
42
+ ### Use all three
43
+
44
+ Use all three libraries when a project needs structural layout, visual styling, and interaction-state behavior in separate layers.
45
+
46
+ ```js
47
+ import "layout-style-css";
48
+ import "interactive-surface-css/interactive-surface.css";
49
+ import "ui-style-kit-css/with-bridge.css";
50
+ ```
51
+
52
+ ## Ownership Boundaries
53
+
54
+ - UI Style Kit CSS owns visual identity, color themes, UI paint, scoped native element styling, content wrapping, and the bridge token mapping.
55
+ - Interactive Surface CSS owns interaction-state semantics, input affordances, state layers, and surface behavior.
56
+ - Layout Style CSS owns structural wrappers, layout recipes, grids, app shells, and section composition.
57
+
58
+ The bridge does not make Interactive Surface a dependency of UI Style Kit. It only maps shared `--usk-*` roles to `--interactive-surface-*` tokens when consumers opt into the bridge import.
@@ -3,19 +3,26 @@
3
3
  ## Dry run
4
4
 
5
5
  ```bash
6
- npm run check
7
- npm run pack:dry-run
6
+ npm run release:verify
8
7
  ```
9
8
 
9
+ `npm run release:verify` is the non-publishing hotfix release gate. It runs `npm run check`, `npm run test:e2e`, `npm run test:visual`, `npm audit --audit-level=moderate`, and `npm run pack:dry-run`.
10
+
10
11
  `npm run check` rebuilds dist CSS, runs stylelint, executes package, class API, shared theme-color, and vendor-prefix unit checks, validates core text/link contrast pairs and filled component `on-*` contrast pairs, and confirms package metadata. `npm run pack:dry-run` shows the exact files that would publish.
11
12
 
13
+ `npm run build` uses the exactly pinned Lightning CSS parser-minifier. Generated minified bundles retain the release banner while preserving grammar-sensitive selector and `calc()` whitespace.
14
+
15
+ The npm artifact is library-focused: `dist/`, `styles/`, docs, and metadata. Demo pages, favicon source assets, and social preview images remain checked in for GitHub Pages but are excluded from the tarball to keep package installs small.
16
+
12
17
  ## Publish
13
18
 
19
+ No package, tag, or registry release occurs without explicit approval.
20
+
14
21
  ```bash
15
22
  npm publish
16
23
  ```
17
24
 
18
- For GitHub releases, create or dispatch a release for the matching package tag, such as `v2.0.2`. The release workflows verify that `package.json`, `package-lock.json`, `CHANGELOG.md`, and generated dist banners are aligned before publishing.
25
+ `prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the full hotfix release gate. For GitHub releases, create or dispatch a release for the matching package tag, such as `v2.0.4`. The release workflows verify that `package.json`, `package-lock.json`, `CHANGELOG.md`, and generated dist banners are aligned before publishing.
19
26
 
20
27
  ## Versioning
21
28
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ui-style-kit-css",
3
- "version": "2.0.2",
3
+ "version": "2.0.4",
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",
@@ -9,7 +9,6 @@
9
9
  "files": [
10
10
  "dist",
11
11
  "styles",
12
- "demo",
13
12
  "docs",
14
13
  "README.md",
15
14
  "LICENSE",
@@ -69,6 +68,10 @@
69
68
  "./styles/native-elements.css": "./styles/native-elements.css",
70
69
  "./native-elements": "./styles/native-elements.css",
71
70
  "./native-elements.css": "./styles/native-elements.css",
71
+ "./styles/content-overflow": "./styles/content-overflow.css",
72
+ "./styles/content-overflow.css": "./styles/content-overflow.css",
73
+ "./content-overflow": "./styles/content-overflow.css",
74
+ "./content-overflow.css": "./styles/content-overflow.css",
72
75
  "./styles/minimal-saas": "./styles/minimal-saas.css",
73
76
  "./styles/minimal-saas.css": "./styles/minimal-saas.css",
74
77
  "./minimal-saas": "./styles/minimal-saas.css",
@@ -136,11 +139,12 @@
136
139
  "type": "module",
137
140
  "devDependencies": {
138
141
  "@playwright/test": "~1.61.1",
142
+ "lightningcss": "1.33.0",
139
143
  "stylelint": "~17.14.0"
140
144
  },
141
145
  "scripts": {
142
146
  "build": "node scripts/build.mjs",
143
- "lint": "stylelint \"styles/**/*.css\"",
147
+ "lint": "stylelint \"styles/**/*.css\" \"demo/**/*.css\"",
144
148
  "check:contrast": "node scripts/check-contrast.mjs",
145
149
  "check:package": "node scripts/check-package.mjs",
146
150
  "test": "npm run test:unit",
@@ -150,7 +154,8 @@
150
154
  "check": "npm run build && npm run lint && npm run test:unit && npm run check:contrast && npm run check:package",
151
155
  "pack:dry-run": "npm pack --dry-run",
152
156
  "prepack": "npm run check",
153
- "prepublishOnly": "npm run check",
157
+ "release:verify": "npm run check && npm run test:e2e && npm run test:visual && npm audit --audit-level=moderate && npm run pack:dry-run",
158
+ "prepublishOnly": "npm run release:verify",
154
159
  "release:patch": "npm version patch && npm publish",
155
160
  "release:minor": "npm version minor && npm publish",
156
161
  "release:major": "npm version major && npm publish",
@@ -13,6 +13,7 @@
13
13
 
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
+ @import url("./content-overflow.css");
16
17
 
17
18
  @layer ui-style-kit.bauhaus {
18
19
  :root {
package/styles/bento.css CHANGED
@@ -13,6 +13,7 @@
13
13
 
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
+ @import url("./content-overflow.css");
16
17
 
17
18
  @layer ui-style-kit.bento {
18
19
  :root {
@@ -14,6 +14,7 @@
14
14
 
15
15
  @import url("./theme-colors.css");
16
16
  @import url("./native-elements.css");
17
+ @import url("./content-overflow.css");
17
18
 
18
19
  @layer ui-style-kit.brutalism {
19
20
  :root {
@@ -356,7 +357,7 @@
356
357
  .brutal-button-primary:hover { background: var(--brutal-primary-hover); }
357
358
  .brutal-button-secondary { background: var(--brutal-secondary); color: var(--brutal-on-secondary); box-shadow: 6px 6px 0 var(--brutal-primary); }
358
359
  .brutal-button-secondary:hover { background: var(--brutal-secondary-hover); }
359
- .brutal-button-danger { background: var(--brutal-danger); color: #fff; }
360
+ .brutal-button-danger { background: var(--brutal-danger); color: var(--brutal-on-danger); }
360
361
  .brutal-icon-button { width: 2.85rem; padding: 0; }
361
362
  .brutal-button:disabled, .brutal-icon-button:disabled, .brutal-disabled { opacity: 0.55; cursor: not-allowed; transform: none; }
362
363
 
@@ -377,9 +378,9 @@
377
378
  .brutal-badge { display: inline-flex; align-items: center; min-height: 1.8rem; padding: 0.35rem 0.75rem; background: var(--brutal-surface-strong); color: var(--brutal-text); border: 3px solid var(--brutal-border); box-shadow: 4px 4px 0 var(--brutal-accent); font-size: 0.8rem; font-weight: 900; }
378
379
  .brutal-badge-primary { background: var(--brutal-primary); color: var(--brutal-on-primary); }
379
380
  .brutal-badge-secondary { background: var(--brutal-secondary); color: var(--brutal-on-secondary); }
380
- .brutal-badge-success { background: var(--brutal-success); color: #fff; }
381
- .brutal-badge-warning { background: var(--brutal-warning); color: #111; }
382
- .brutal-badge-danger { background: var(--brutal-danger); color: #fff; }
381
+ .brutal-badge-success { background: var(--brutal-success); color: var(--brutal-on-success); }
382
+ .brutal-badge-warning { background: var(--brutal-warning); color: var(--brutal-on-warning); }
383
+ .brutal-badge-danger { background: var(--brutal-danger); color: var(--brutal-on-danger); }
383
384
 
384
385
  .brutal-nav { display: flex; flex-wrap: wrap; gap: var(--brutal-space-2); padding: var(--brutal-space-2); background: var(--brutal-surface-strong); border: 3px solid var(--brutal-border); box-shadow: 8px 8px 0 var(--brutal-primary); }
385
386
  .brutal-nav-link { display: inline-flex; min-height: 2.5rem; align-items: center; padding: 0.65rem 1rem; color: var(--brutal-text); border: 3px solid transparent; font-weight: 900; text-decoration: none; }
@@ -389,7 +390,7 @@
389
390
  /* Tooltips use compact contrast surfaces that stay readable across theme modes. */
390
391
  .brutal-tooltip, [data-ui="brutalism"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) {
391
392
  display: inline-flex; align-items: center; gap: .45rem; max-inline-size: 16rem; padding: .58rem .78rem;
392
- background: var(--brutal-warning); color: #111; border: 3px solid var(--brutal-border); border-radius: 0; box-shadow: .28rem .28rem 0 var(--brutal-primary);
393
+ background: var(--brutal-warning); color: var(--brutal-on-warning); border: 3px solid var(--brutal-border); border-radius: 0; box-shadow: .28rem .28rem 0 var(--brutal-primary);
393
394
  font-size: .82rem; font-weight: 950; line-height: 1.2; text-transform: uppercase; letter-spacing: .04em;
394
395
  }
395
396
  .brutal-tooltip-arrow { inline-size: .6rem; block-size: .6rem; flex: 0 0 auto; background: var(--brutal-danger); border: 3px solid var(--brutal-border); transform: rotate(45deg); }
@@ -0,0 +1,292 @@
1
+ /* =========================================================
2
+ UI Style Kit CSS - Shared Content Overflow Contract
3
+
4
+ Text-bearing layout wrappers and controls must shrink within
5
+ their parent wrapper instead of widening the page.
6
+ ========================================================= */
7
+
8
+ @layer ui-style-kit.content_overflow {
9
+ [data-ui][data-theme][data-mode] :where(
10
+ h1,
11
+ h2,
12
+ h3,
13
+ h4,
14
+ h5,
15
+ h6,
16
+ p,
17
+ a,
18
+ li,
19
+ dt,
20
+ dd,
21
+ figcaption,
22
+ blockquote,
23
+ label,
24
+ legend,
25
+ summary,
26
+ code,
27
+ kbd,
28
+ samp,
29
+ pre,
30
+ th,
31
+ td
32
+ ) {
33
+ max-inline-size: 100%;
34
+ min-inline-size: 0;
35
+ overflow-wrap: anywhere;
36
+ }
37
+
38
+ [data-ui][data-theme][data-mode] :where(
39
+ [class~="saas-page"],
40
+ [class~="saas-container"],
41
+ [class~="saas-section"],
42
+ [class~="saas-stack"],
43
+ [class~="saas-cluster"],
44
+ [class~="saas-grid"],
45
+ [class~="saas-split"],
46
+ [class~="saas-surface"],
47
+ [class~="saas-surface-sm"],
48
+ [class~="saas-surface-lg"],
49
+ [class~="saas-card"],
50
+ [class~="saas-panel"],
51
+ [class~="saas-toolbar"],
52
+ [class~="saas-well"],
53
+ [class~="saas-inset"],
54
+ [class~="saas-field"],
55
+ [class~="saas-alert"],
56
+ [class~="saas-table-wrap"],
57
+ [class~="saas-nav"],
58
+ [class~="bento-page"],
59
+ [class~="bento-container"],
60
+ [class~="bento-section"],
61
+ [class~="bento-stack"],
62
+ [class~="bento-cluster"],
63
+ [class~="bento-grid"],
64
+ [class~="bento-split"],
65
+ [class~="bento-surface"],
66
+ [class~="bento-surface-sm"],
67
+ [class~="bento-surface-lg"],
68
+ [class~="bento-card"],
69
+ [class~="bento-panel"],
70
+ [class~="bento-toolbar"],
71
+ [class~="bento-well"],
72
+ [class~="bento-inset"],
73
+ [class~="bento-field"],
74
+ [class~="bento-alert"],
75
+ [class~="bento-table-wrap"],
76
+ [class~="bento-nav"],
77
+ [class~="max-page"],
78
+ [class~="max-container"],
79
+ [class~="max-section"],
80
+ [class~="max-stack"],
81
+ [class~="max-cluster"],
82
+ [class~="max-grid"],
83
+ [class~="max-split"],
84
+ [class~="max-surface"],
85
+ [class~="max-surface-sm"],
86
+ [class~="max-surface-lg"],
87
+ [class~="max-card"],
88
+ [class~="max-panel"],
89
+ [class~="max-toolbar"],
90
+ [class~="max-well"],
91
+ [class~="max-inset"],
92
+ [class~="max-field"],
93
+ [class~="max-alert"],
94
+ [class~="max-table-wrap"],
95
+ [class~="max-nav"],
96
+ [class~="bau-page"],
97
+ [class~="bau-container"],
98
+ [class~="bau-section"],
99
+ [class~="bau-stack"],
100
+ [class~="bau-cluster"],
101
+ [class~="bau-grid"],
102
+ [class~="bau-split"],
103
+ [class~="bau-surface"],
104
+ [class~="bau-surface-sm"],
105
+ [class~="bau-surface-lg"],
106
+ [class~="bau-card"],
107
+ [class~="bau-panel"],
108
+ [class~="bau-toolbar"],
109
+ [class~="bau-well"],
110
+ [class~="bau-inset"],
111
+ [class~="bau-field"],
112
+ [class~="bau-alert"],
113
+ [class~="bau-table-wrap"],
114
+ [class~="bau-nav"],
115
+ [class~="tactile-page"],
116
+ [class~="tactile-container"],
117
+ [class~="tactile-section"],
118
+ [class~="tactile-stack"],
119
+ [class~="tactile-cluster"],
120
+ [class~="tactile-grid"],
121
+ [class~="tactile-split"],
122
+ [class~="tactile-surface"],
123
+ [class~="tactile-surface-sm"],
124
+ [class~="tactile-surface-lg"],
125
+ [class~="tactile-card"],
126
+ [class~="tactile-panel"],
127
+ [class~="tactile-toolbar"],
128
+ [class~="tactile-well"],
129
+ [class~="tactile-inset"],
130
+ [class~="tactile-field"],
131
+ [class~="tactile-alert"],
132
+ [class~="tactile-table-wrap"],
133
+ [class~="tactile-nav"],
134
+ [class~="neo-page"],
135
+ [class~="neo-container"],
136
+ [class~="neo-section"],
137
+ [class~="neo-stack"],
138
+ [class~="neo-cluster"],
139
+ [class~="neo-grid"],
140
+ [class~="neo-split"],
141
+ [class~="neo-surface"],
142
+ [class~="neo-surface-sm"],
143
+ [class~="neo-surface-lg"],
144
+ [class~="neo-card"],
145
+ [class~="neo-panel"],
146
+ [class~="neo-toolbar"],
147
+ [class~="neo-well"],
148
+ [class~="neo-inset"],
149
+ [class~="neo-field"],
150
+ [class~="neo-alert"],
151
+ [class~="neo-table-wrap"],
152
+ [class~="neo-nav"],
153
+ [class~="retro-page"],
154
+ [class~="retro-container"],
155
+ [class~="retro-section"],
156
+ [class~="retro-stack"],
157
+ [class~="retro-cluster"],
158
+ [class~="retro-grid"],
159
+ [class~="retro-split"],
160
+ [class~="retro-surface"],
161
+ [class~="retro-surface-sm"],
162
+ [class~="retro-surface-lg"],
163
+ [class~="retro-card"],
164
+ [class~="retro-panel"],
165
+ [class~="retro-toolbar"],
166
+ [class~="retro-well"],
167
+ [class~="retro-inset"],
168
+ [class~="retro-field"],
169
+ [class~="retro-alert"],
170
+ [class~="retro-table-wrap"],
171
+ [class~="retro-nav"],
172
+ [class~="brutal-page"],
173
+ [class~="brutal-container"],
174
+ [class~="brutal-section"],
175
+ [class~="brutal-stack"],
176
+ [class~="brutal-cluster"],
177
+ [class~="brutal-grid"],
178
+ [class~="brutal-surface"],
179
+ [class~="brutal-card"],
180
+ [class~="brutal-panel"],
181
+ [class~="brutal-toolbar"],
182
+ [class~="brutal-well"],
183
+ [class~="brutal-inset"],
184
+ [class~="brutal-field"],
185
+ [class~="brutal-alert"],
186
+ [class~="brutal-table-wrap"],
187
+ [class~="brutal-nav"],
188
+ [class~="cyber-page"],
189
+ [class~="cyber-container"],
190
+ [class~="cyber-section"],
191
+ [class~="cyber-stack"],
192
+ [class~="cyber-cluster"],
193
+ [class~="cyber-grid"],
194
+ [class~="cyber-surface"],
195
+ [class~="cyber-card"],
196
+ [class~="cyber-panel"],
197
+ [class~="cyber-toolbar"],
198
+ [class~="cyber-well"],
199
+ [class~="cyber-inset"],
200
+ [class~="cyber-field"],
201
+ [class~="cyber-alert"],
202
+ [class~="cyber-table-wrap"],
203
+ [class~="cyber-nav"],
204
+ [class~="y2k-page"],
205
+ [class~="y2k-container"],
206
+ [class~="y2k-section"],
207
+ [class~="y2k-stack"],
208
+ [class~="y2k-cluster"],
209
+ [class~="y2k-grid"],
210
+ [class~="y2k-surface"],
211
+ [class~="y2k-card"],
212
+ [class~="y2k-panel"],
213
+ [class~="y2k-toolbar"],
214
+ [class~="y2k-well"],
215
+ [class~="y2k-inset"],
216
+ [class~="y2k-field"],
217
+ [class~="y2k-alert"],
218
+ [class~="y2k-table-wrap"],
219
+ [class~="y2k-nav"],
220
+ [class~="rg-page"],
221
+ [class~="rg-container"],
222
+ [class~="rg-section"],
223
+ [class~="rg-stack"],
224
+ [class~="rg-cluster"],
225
+ [class~="rg-grid"],
226
+ [class~="rg-surface"],
227
+ [class~="rg-card"],
228
+ [class~="rg-panel"],
229
+ [class~="rg-toolbar"],
230
+ [class~="rg-well"],
231
+ [class~="rg-inset"],
232
+ [class~="rg-field"],
233
+ [class~="rg-alert"],
234
+ [class~="rg-table-wrap"],
235
+ [class~="rg-nav"]
236
+ ) {
237
+ max-inline-size: 100%;
238
+ min-inline-size: 0;
239
+ overflow-wrap: anywhere;
240
+ }
241
+
242
+ [data-ui][data-theme][data-mode] :where(
243
+ [class~="saas-button"],
244
+ [class~="saas-icon-button"],
245
+ [class~="saas-badge"],
246
+ [class~="saas-nav-link"],
247
+ [class~="bento-button"],
248
+ [class~="bento-icon-button"],
249
+ [class~="bento-badge"],
250
+ [class~="bento-nav-link"],
251
+ [class~="max-button"],
252
+ [class~="max-icon-button"],
253
+ [class~="max-badge"],
254
+ [class~="max-nav-link"],
255
+ [class~="bau-button"],
256
+ [class~="bau-icon-button"],
257
+ [class~="bau-badge"],
258
+ [class~="bau-nav-link"],
259
+ [class~="tactile-button"],
260
+ [class~="tactile-icon-button"],
261
+ [class~="tactile-badge"],
262
+ [class~="tactile-nav-link"],
263
+ [class~="neo-button"],
264
+ [class~="neo-icon-button"],
265
+ [class~="neo-badge"],
266
+ [class~="neo-nav-link"],
267
+ [class~="retro-button"],
268
+ [class~="retro-icon-button"],
269
+ [class~="retro-badge"],
270
+ [class~="retro-nav-link"],
271
+ [class~="brutal-button"],
272
+ [class~="brutal-icon-button"],
273
+ [class~="brutal-badge"],
274
+ [class~="brutal-nav-link"],
275
+ [class~="cyber-button"],
276
+ [class~="cyber-icon-button"],
277
+ [class~="cyber-badge"],
278
+ [class~="cyber-nav-link"],
279
+ [class~="y2k-button"],
280
+ [class~="y2k-icon-button"],
281
+ [class~="y2k-badge"],
282
+ [class~="y2k-nav-link"],
283
+ [class~="rg-button"],
284
+ [class~="rg-icon-button"],
285
+ [class~="rg-badge"],
286
+ [class~="rg-nav-link"]
287
+ ) {
288
+ max-inline-size: 100%;
289
+ min-inline-size: 0;
290
+ white-space: normal;
291
+ }
292
+ }
@@ -14,6 +14,7 @@
14
14
 
15
15
  @import url("./theme-colors.css");
16
16
  @import url("./native-elements.css");
17
+ @import url("./content-overflow.css");
17
18
 
18
19
  @layer ui-style-kit.cyberpunk {
19
20
  :root {
@@ -292,14 +293,14 @@
292
293
 
293
294
  .cyber-button, .cyber-icon-button { appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: var(--cyber-space-2); min-height: 2.85rem; padding: 0.75rem 1.1rem; background: linear-gradient(135deg, rgb(var(--cyber-primary-rgb) / 0.22), rgb(var(--cyber-accent-rgb) / 0.1)), var(--cyber-surface); color: var(--cyber-text); border: 1px solid rgb(var(--cyber-primary-rgb) / 0.7); border-radius: var(--cyber-radius-xs); box-shadow: var(--cyber-shadow-sm), 0 0 18px var(--cyber-glow-primary); font: inherit; font-family: var(--cyber-font-display); font-weight: 900; letter-spacing: 0.09em; cursor: pointer; text-decoration: none; clip-path: polygon(0 0, calc(100% - .75rem) 0, 100% .75rem, 100% 100%, .75rem 100%, 0 calc(100% - .75rem)); transition: transform var(--cyber-transition-fast), box-shadow var(--cyber-transition-fast), background var(--cyber-transition-fast); }
294
295
  .cyber-button:hover, .cyber-icon-button:hover { transform: translateY(-1px); box-shadow: var(--cyber-shadow-md), 0 0 26px var(--cyber-glow-primary); } .cyber-button:active, .cyber-icon-button:active, .cyber-button.is-active, .cyber-button[aria-pressed="true"] { transform: translateY(1px); box-shadow: inset 0 0 18px rgb(0 0 0 / 0.22), 0 0 18px var(--cyber-glow-primary); }
295
- .cyber-button-primary { background: linear-gradient(135deg, rgb(255 255 255 / 0.14), transparent), var(--cyber-primary); color: var(--cyber-on-primary); } .cyber-button-primary:hover { background: var(--cyber-primary-hover); } .cyber-button-secondary { background: linear-gradient(135deg, rgb(255 255 255 / 0.14), transparent), var(--cyber-secondary); color: var(--cyber-on-secondary); border-color: rgb(var(--cyber-secondary-rgb) / 0.7); } .cyber-button-secondary:hover { background: var(--cyber-secondary-hover); } .cyber-button-danger { background: var(--cyber-danger); color: #fff; } .cyber-icon-button { width: 2.85rem; padding: 0; }
296
+ .cyber-button-primary { background: linear-gradient(135deg, rgb(255 255 255 / 0.14), transparent), var(--cyber-primary); color: var(--cyber-on-primary); } .cyber-button-primary:hover { background: var(--cyber-primary-hover); } .cyber-button-secondary { background: linear-gradient(135deg, rgb(255 255 255 / 0.14), transparent), var(--cyber-secondary); color: var(--cyber-on-secondary); border-color: rgb(var(--cyber-secondary-rgb) / 0.7); } .cyber-button-secondary:hover { background: var(--cyber-secondary-hover); } .cyber-button-danger { background: var(--cyber-danger); color: var(--cyber-on-danger); } .cyber-icon-button { width: 2.85rem; padding: 0; }
296
297
 
297
298
  .cyber-field { display: flex; flex-direction: column; gap: var(--cyber-space-2); } .cyber-label { font-family: var(--cyber-font-heading); text-transform: uppercase; letter-spacing: 0.14em; font-weight: 800; font-size: 0.8rem; }
298
299
  .cyber-input, .cyber-textarea, .cyber-select { width: 100%; min-height: 2.9rem; padding: 0.8rem 1rem; background: var(--cyber-surface-soft); color: var(--cyber-text); border: 1px solid rgb(var(--cyber-border-rgb) / 0.58); border-radius: var(--cyber-radius-xs); box-shadow: inset 0 0 18px rgb(0 0 0 / 0.2); font: inherit; outline: none; } .cyber-textarea { min-height: 8rem; resize: vertical; }
299
300
  .cyber-input:focus, .cyber-textarea:focus, .cyber-select:focus { border-color: var(--cyber-focus); box-shadow: 0 0 0 2px rgb(var(--cyber-focus-rgb) / 0.24), 0 0 24px rgb(var(--cyber-focus-rgb) / 0.24), inset 0 0 18px rgb(0 0 0 / 0.2); } .cyber-help-text { color: var(--cyber-text-muted); font-size: 0.9rem; }
300
301
 
301
302
  .cyber-badge { display: inline-flex; align-items: center; min-height: 1.8rem; padding: 0.35rem 0.75rem; background: var(--cyber-surface); color: var(--cyber-text); border: 1px solid rgb(var(--cyber-primary-rgb) / 0.7); box-shadow: 0 0 16px var(--cyber-glow-primary); font-size: 0.78rem; font-weight: 900; letter-spacing: 0.1em; clip-path: polygon(.5rem 0, 100% 0, calc(100% - .5rem) 100%, 0 100%); }
302
- .cyber-badge-primary { background: var(--cyber-primary); color: var(--cyber-on-primary); } .cyber-badge-secondary { background: var(--cyber-secondary); color: var(--cyber-on-secondary); } .cyber-badge-success { background: var(--cyber-success); color: #fff; } .cyber-badge-warning { background: var(--cyber-warning); color: #111; } .cyber-badge-danger { background: var(--cyber-danger); color: #fff; }
303
+ .cyber-badge-primary { background: var(--cyber-primary); color: var(--cyber-on-primary); } .cyber-badge-secondary { background: var(--cyber-secondary); color: var(--cyber-on-secondary); } .cyber-badge-success { background: var(--cyber-success); color: var(--cyber-on-success); } .cyber-badge-warning { background: var(--cyber-warning); color: var(--cyber-on-warning); } .cyber-badge-danger { background: var(--cyber-danger); color: var(--cyber-on-danger); }
303
304
 
304
305
  .cyber-nav { display: flex; flex-wrap: wrap; gap: var(--cyber-space-2); padding: var(--cyber-space-2); background: var(--cyber-surface); border: 1px solid var(--cyber-border); border-radius: var(--cyber-radius-md); box-shadow: var(--cyber-shadow-md), 0 0 22px var(--cyber-glow-primary); } .cyber-nav-link { display: inline-flex; min-height: 2.5rem; align-items: center; padding: 0.65rem 1rem; color: var(--cyber-text-muted); border: 1px solid transparent; border-radius: var(--cyber-radius-xs); text-decoration: none; font-weight: 900; letter-spacing: 0.08em; } .cyber-nav-link:hover { color: var(--cyber-text); border-color: rgb(var(--cyber-primary-rgb) / 0.48); } .cyber-nav-link.is-active, .cyber-nav-link[aria-current="page"] { background: var(--cyber-primary); color: var(--cyber-on-primary); border-color: var(--cyber-primary); box-shadow: 0 0 18px var(--cyber-glow-primary); }
305
306
  /* Tooltips use compact contrast surfaces that stay readable across theme modes. */
@@ -13,6 +13,7 @@
13
13
 
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
+ @import url("./content-overflow.css");
16
17
 
17
18
  @layer ui-style-kit.maximalist {
18
19
  :root {
@@ -13,6 +13,7 @@
13
13
 
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
+ @import url("./content-overflow.css");
16
17
 
17
18
  @layer ui-style-kit.minimal_saas {
18
19
  :root {
@@ -239,7 +239,8 @@
239
239
 
240
240
  [data-ui][data-theme][data-mode] :where(input[type="file"]) { color: var(--usk-native-text-muted); }
241
241
 
242
- [data-ui][data-theme][data-mode] :where(input[type="file"]::file-selector-button) {
242
+ /* Keep pseudo-elements outside :where() because engines reject them inside selector-list arguments. */
243
+ [data-ui][data-theme][data-mode] :where(input[type="file"])::file-selector-button {
243
244
  margin-inline-end: .75rem;
244
245
  padding: .55rem .8rem;
245
246
  color: var(--usk-native-on-primary);
@@ -314,7 +315,7 @@
314
315
  box-shadow: var(--usk-native-shadow-md), 0 30px 80px rgb(0 0 0 / .42);
315
316
  }
316
317
 
317
- [data-ui][data-theme][data-mode] :where(dialog::backdrop) { background: rgb(0 0 0 / .62); }
318
+ [data-ui][data-theme][data-mode] :where(dialog)::backdrop { background: rgb(0 0 0 / .62); }
318
319
 
319
320
  [data-ui][data-theme][data-mode] :where(progress, meter) {
320
321
  width: 100%;
@@ -13,6 +13,7 @@
13
13
 
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
+ @import url("./content-overflow.css");
16
17
 
17
18
  @layer ui-style-kit.neumorphism {
18
19
  :root {
@@ -14,6 +14,7 @@
14
14
 
15
15
  @import url("./theme-colors.css");
16
16
  @import url("./native-elements.css");
17
+ @import url("./content-overflow.css");
17
18
 
18
19
  @layer ui-style-kit.retro_glass {
19
20
  :root {
@@ -276,11 +277,11 @@
276
277
  .rg-inset, .rg-well { background: linear-gradient(180deg, rgb(0 0 0 / .08), rgb(255 255 255 / .04)), var(--rg-surface-soft); border: 1px solid rgb(var(--rg-border-rgb) / .36); border-radius: var(--rg-radius-lg); box-shadow: inset 0 8px 22px rgb(0 0 0 / .16); -webkit-backdrop-filter: blur(12px) saturate(140%); backdrop-filter: blur(12px) saturate(140%); } .rg-well { padding: var(--rg-space-5); }
277
278
 
278
279
  .rg-button, .rg-icon-button { appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: var(--rg-space-2); min-height: 2.85rem; padding: .75rem 1.1rem; background: linear-gradient(135deg, rgb(255 255 255 / .24), rgb(255 255 255 / .04)), var(--rg-surface); color: var(--rg-text); border: 1px solid rgb(var(--rg-border-rgb) / .56); border-top-color: rgb(255 255 255 / .32); border-radius: var(--rg-radius-md); box-shadow: var(--rg-shadow-sm); -webkit-backdrop-filter: blur(14px) saturate(150%); backdrop-filter: blur(14px) saturate(150%); font: inherit; font-family: var(--rg-font-display); font-weight: 900; letter-spacing: .08em; cursor: pointer; text-decoration: none; transition: transform var(--rg-transition-fast), box-shadow var(--rg-transition-fast), background var(--rg-transition-fast), border-color var(--rg-transition-fast); }
279
- .rg-button:hover, .rg-icon-button:hover { transform: translateY(-2px); border-color: rgb(var(--rg-primary-rgb) / .68); box-shadow: var(--rg-shadow-md), 0 0 24px var(--rg-glow-primary); } .rg-button:active, .rg-icon-button:active, .rg-button.is-active, .rg-button[aria-pressed="true"] { transform: translateY(1px); box-shadow: inset 0 8px 18px rgb(0 0 0 / .18), 0 0 18px var(--rg-glow-primary); } .rg-button-primary { background: linear-gradient(135deg, rgb(255 255 255 / .22), rgb(255 255 255 / .04)), var(--rg-primary); color: var(--rg-on-primary); border-color: rgb(var(--rg-primary-rgb) / .72); } .rg-button-primary:hover { background: var(--rg-primary-hover); } .rg-button-secondary { background: linear-gradient(135deg, rgb(255 255 255 / .22), rgb(255 255 255 / .04)), var(--rg-secondary); color: var(--rg-on-secondary); border-color: rgb(var(--rg-secondary-rgb) / .72); } .rg-button-secondary:hover { background: var(--rg-secondary-hover); } .rg-button-danger { background: var(--rg-danger); color: #fff; } .rg-icon-button { width: 2.85rem; padding: 0; }
280
+ .rg-button:hover, .rg-icon-button:hover { transform: translateY(-2px); border-color: rgb(var(--rg-primary-rgb) / .68); box-shadow: var(--rg-shadow-md), 0 0 24px var(--rg-glow-primary); } .rg-button:active, .rg-icon-button:active, .rg-button.is-active, .rg-button[aria-pressed="true"] { transform: translateY(1px); box-shadow: inset 0 8px 18px rgb(0 0 0 / .18), 0 0 18px var(--rg-glow-primary); } .rg-button-primary { background: linear-gradient(135deg, rgb(255 255 255 / .22), rgb(255 255 255 / .04)), var(--rg-primary); color: var(--rg-on-primary); border-color: rgb(var(--rg-primary-rgb) / .72); } .rg-button-primary:hover { background: var(--rg-primary-hover); } .rg-button-secondary { background: linear-gradient(135deg, rgb(255 255 255 / .22), rgb(255 255 255 / .04)), var(--rg-secondary); color: var(--rg-on-secondary); border-color: rgb(var(--rg-secondary-rgb) / .72); } .rg-button-secondary:hover { background: var(--rg-secondary-hover); } .rg-button-danger { background: var(--rg-danger); color: var(--rg-on-danger); } .rg-icon-button { width: 2.85rem; padding: 0; }
280
281
 
281
282
  .rg-field { display: flex; flex-direction: column; gap: var(--rg-space-2); } .rg-label { font-family: var(--rg-font-heading); text-transform: uppercase; letter-spacing: .12em; font-weight: 900; font-size: .8rem; } .rg-input, .rg-textarea, .rg-select { width: 100%; min-height: 2.9rem; padding: .8rem 1rem; background: linear-gradient(180deg, rgb(255 255 255 / .06), rgb(0 0 0 / .08)), var(--rg-surface-soft); color: var(--rg-text); border: 1px solid rgb(var(--rg-border-rgb) / .44); border-radius: var(--rg-radius-md); box-shadow: inset 0 8px 18px rgb(0 0 0 / .14); font: inherit; outline: none; -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); } .rg-textarea { min-height: 8rem; resize: vertical; } .rg-input:focus, .rg-textarea:focus, .rg-select:focus { border-color: var(--rg-focus); box-shadow: inset 0 8px 18px rgb(0 0 0 / .14), 0 0 0 3px rgb(var(--rg-focus-rgb) / .24), 0 0 26px rgb(var(--rg-focus-rgb) / .22); } .rg-help-text { color: var(--rg-text-muted); font-size: .9rem; }
282
283
 
283
- .rg-badge { display: inline-flex; align-items: center; min-height: 1.8rem; padding: .35rem .75rem; background: linear-gradient(135deg, rgb(255 255 255 / .2), rgb(255 255 255 / .04)), var(--rg-surface); color: var(--rg-text); border: 1px solid rgb(var(--rg-border-rgb) / .5); border-radius: var(--rg-radius-pill); box-shadow: var(--rg-shadow-sm); font-size: .78rem; font-weight: 900; letter-spacing: .08em; -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); } .rg-badge-primary { background: var(--rg-primary); color: var(--rg-on-primary); } .rg-badge-secondary { background: var(--rg-secondary); color: var(--rg-on-secondary); } .rg-badge-success { background: var(--rg-success); color: #fff; } .rg-badge-warning { background: var(--rg-warning); color: #111; } .rg-badge-danger { background: var(--rg-danger); color: #fff; }
284
+ .rg-badge { display: inline-flex; align-items: center; min-height: 1.8rem; padding: .35rem .75rem; background: linear-gradient(135deg, rgb(255 255 255 / .2), rgb(255 255 255 / .04)), var(--rg-surface); color: var(--rg-text); border: 1px solid rgb(var(--rg-border-rgb) / .5); border-radius: var(--rg-radius-pill); box-shadow: var(--rg-shadow-sm); font-size: .78rem; font-weight: 900; letter-spacing: .08em; -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); } .rg-badge-primary { background: var(--rg-primary); color: var(--rg-on-primary); } .rg-badge-secondary { background: var(--rg-secondary); color: var(--rg-on-secondary); } .rg-badge-success { background: var(--rg-success); color: var(--rg-on-success); } .rg-badge-warning { background: var(--rg-warning); color: var(--rg-on-warning); } .rg-badge-danger { background: var(--rg-danger); color: var(--rg-on-danger); }
284
285
  .rg-nav { display: flex; flex-wrap: wrap; gap: var(--rg-space-2); padding: var(--rg-space-2); background: linear-gradient(135deg, rgb(255 255 255 / .18), rgb(255 255 255 / .04)), var(--rg-surface); border: 1px solid var(--rg-border); border-radius: var(--rg-radius-xl); box-shadow: var(--rg-shadow-md), 0 0 24px var(--rg-glow-primary); -webkit-backdrop-filter: blur(18px) saturate(150%); backdrop-filter: blur(18px) saturate(150%); } .rg-nav-link { display: inline-flex; min-height: 2.5rem; align-items: center; padding: .65rem 1rem; color: var(--rg-text-muted); border: 1px solid transparent; border-radius: var(--rg-radius-pill); text-decoration: none; font-weight: 900; letter-spacing: .08em; } .rg-nav-link:hover { color: var(--rg-text); background: rgb(255 255 255 / .1); border-color: rgb(var(--rg-primary-rgb) / .36); } .rg-nav-link.is-active, .rg-nav-link[aria-current="page"] { background: var(--rg-primary); color: var(--rg-on-primary); box-shadow: 0 0 22px var(--rg-glow-primary); }
285
286
  /* Tooltips use compact contrast surfaces that stay readable across theme modes. */
286
287
  .rg-tooltip, [data-ui="retro-glass"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) { display: inline-flex; align-items: center; gap: .45rem; max-inline-size: 16rem; padding: .62rem .88rem; background: linear-gradient(135deg, rgb(255 255 255 / .28), rgb(255 255 255 / .06)), var(--rg-surface); color: var(--rg-text); border: 1px solid rgb(255 255 255 / .34); border-radius: 38% 62% 48% 52% / 52% 42% 58% 48%; box-shadow: var(--rg-shadow-md), 0 0 1.25rem var(--rg-glow-primary); -webkit-backdrop-filter: blur(14px) saturate(145%); backdrop-filter: blur(14px) saturate(145%); font-size: .82rem; font-weight: 900; line-height: 1.3; letter-spacing: .04em; }
@@ -13,6 +13,7 @@
13
13
 
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
+ @import url("./content-overflow.css");
16
17
 
17
18
  @layer ui-style-kit.retrofuturism {
18
19
  :root {
@@ -13,6 +13,7 @@
13
13
 
14
14
  @import url("./theme-colors.css");
15
15
  @import url("./native-elements.css");
16
+ @import url("./content-overflow.css");
16
17
 
17
18
  @layer ui-style-kit.tactile {
18
19
  :root {
package/styles/y2k.css CHANGED
@@ -14,6 +14,7 @@
14
14
 
15
15
  @import url("./theme-colors.css");
16
16
  @import url("./native-elements.css");
17
+ @import url("./content-overflow.css");
17
18
 
18
19
  @layer ui-style-kit.y2k {
19
20
  :root {
@@ -275,11 +276,11 @@
275
276
 
276
277
  .y2k-button, .y2k-icon-button { appearance: none; display: inline-flex; align-items: center; justify-content: center; gap: var(--y2k-space-2); min-height: 2.85rem; padding: .75rem 1.15rem; background: linear-gradient(180deg, rgb(255 255 255 / .42), rgb(255 255 255 / .08)), var(--y2k-surface-strong); color: var(--y2k-text); border: 1px solid rgb(255 255 255 / .42); border-radius: var(--y2k-radius-pill); box-shadow: var(--y2k-shadow-sm), inset 0 1px 0 rgb(255 255 255 / .5); font: inherit; font-family: var(--y2k-font-display); font-weight: 900; letter-spacing: .02em; cursor: pointer; text-decoration: none; transition: transform var(--y2k-transition-fast), box-shadow var(--y2k-transition-fast), background var(--y2k-transition-fast); }
277
278
  .y2k-button:hover, .y2k-icon-button:hover { transform: translateY(-2px); box-shadow: var(--y2k-shadow-md), 0 0 26px var(--y2k-glow-accent); } .y2k-button:active, .y2k-icon-button:active, .y2k-button.is-active, .y2k-button[aria-pressed="true"] { transform: translateY(1px) scale(.99); box-shadow: inset 0 8px 16px rgb(0 0 0 / .14); }
278
- .y2k-button-primary { background: linear-gradient(180deg, rgb(255 255 255 / .46), rgb(255 255 255 / .08)), var(--y2k-primary); color: var(--y2k-on-primary); } .y2k-button-primary:hover { background: linear-gradient(180deg, rgb(255 255 255 / .5), rgb(255 255 255 / .1)), var(--y2k-primary-hover); } .y2k-button-secondary { background: linear-gradient(180deg, rgb(255 255 255 / .46), rgb(255 255 255 / .08)), var(--y2k-secondary); color: var(--y2k-on-secondary); } .y2k-button-secondary:hover { background: var(--y2k-secondary-hover); } .y2k-button-danger { background: var(--y2k-danger); color: #fff; } .y2k-icon-button { width: 2.85rem; padding: 0; }
279
+ .y2k-button-primary { background: linear-gradient(180deg, rgb(255 255 255 / .46), rgb(255 255 255 / .08)), var(--y2k-primary); color: var(--y2k-on-primary); } .y2k-button-primary:hover { background: linear-gradient(180deg, rgb(255 255 255 / .5), rgb(255 255 255 / .1)), var(--y2k-primary-hover); } .y2k-button-secondary { background: linear-gradient(180deg, rgb(255 255 255 / .46), rgb(255 255 255 / .08)), var(--y2k-secondary); color: var(--y2k-on-secondary); } .y2k-button-secondary:hover { background: var(--y2k-secondary-hover); } .y2k-button-danger { background: var(--y2k-danger); color: var(--y2k-on-danger); } .y2k-icon-button { width: 2.85rem; padding: 0; }
279
280
 
280
281
  .y2k-field { display: flex; flex-direction: column; gap: var(--y2k-space-2); } .y2k-label { font-weight: 900; letter-spacing: .04em; } .y2k-input, .y2k-textarea, .y2k-select { width: 100%; min-height: 2.9rem; padding: .8rem 1rem; background: linear-gradient(180deg, rgb(255 255 255 / .22), rgb(0 0 0 / .05)), var(--y2k-surface-soft); color: var(--y2k-text); border: 1px solid rgb(255 255 255 / .38); border-radius: var(--y2k-radius-lg); box-shadow: inset 0 6px 14px rgb(0 0 0 / .12); font: inherit; outline: none; } .y2k-textarea { min-height: 8rem; resize: vertical; } .y2k-input:focus, .y2k-textarea:focus, .y2k-select:focus { border-color: var(--y2k-focus); box-shadow: inset 0 6px 14px rgb(0 0 0 / .12), 0 0 0 3px rgb(var(--y2k-focus-rgb) / .25), 0 0 24px rgb(var(--y2k-focus-rgb) / .22); } .y2k-help-text { color: var(--y2k-text-muted); font-size: .9rem; }
281
282
 
282
- .y2k-badge { display: inline-flex; align-items: center; min-height: 1.8rem; padding: .35rem .8rem; background: linear-gradient(180deg, rgb(255 255 255 / .4), rgb(255 255 255 / .08)), var(--y2k-surface-strong); color: var(--y2k-text); border: 1px solid rgb(255 255 255 / .42); border-radius: var(--y2k-radius-pill); box-shadow: var(--y2k-shadow-sm); font-size: .78rem; font-weight: 900; } .y2k-badge-primary { background: var(--y2k-primary); color: var(--y2k-on-primary); } .y2k-badge-secondary { background: var(--y2k-secondary); color: var(--y2k-on-secondary); } .y2k-badge-success { background: var(--y2k-success); color: #fff; } .y2k-badge-warning { background: var(--y2k-warning); color: #111; } .y2k-badge-danger { background: var(--y2k-danger); color: #fff; }
283
+ .y2k-badge { display: inline-flex; align-items: center; min-height: 1.8rem; padding: .35rem .8rem; background: linear-gradient(180deg, rgb(255 255 255 / .4), rgb(255 255 255 / .08)), var(--y2k-surface-strong); color: var(--y2k-text); border: 1px solid rgb(255 255 255 / .42); border-radius: var(--y2k-radius-pill); box-shadow: var(--y2k-shadow-sm); font-size: .78rem; font-weight: 900; } .y2k-badge-primary { background: var(--y2k-primary); color: var(--y2k-on-primary); } .y2k-badge-secondary { background: var(--y2k-secondary); color: var(--y2k-on-secondary); } .y2k-badge-success { background: var(--y2k-success); color: var(--y2k-on-success); } .y2k-badge-warning { background: var(--y2k-warning); color: var(--y2k-on-warning); } .y2k-badge-danger { background: var(--y2k-danger); color: var(--y2k-on-danger); }
283
284
  .y2k-nav { display: flex; flex-wrap: wrap; gap: var(--y2k-space-2); padding: var(--y2k-space-2); background: linear-gradient(180deg, rgb(255 255 255 / .38), rgb(255 255 255 / .08)), var(--y2k-surface); border: 1px solid rgb(255 255 255 / .42); border-radius: var(--y2k-radius-pill); box-shadow: var(--y2k-shadow-md); } .y2k-nav-link { display: inline-flex; min-height: 2.5rem; align-items: center; padding: .65rem 1rem; color: var(--y2k-text-muted); border-radius: var(--y2k-radius-pill); text-decoration: none; font-weight: 900; } .y2k-nav-link:hover { color: var(--y2k-text); background: rgb(255 255 255 / .16); } .y2k-nav-link.is-active, .y2k-nav-link[aria-current="page"] { background: var(--y2k-primary); color: var(--y2k-on-primary); box-shadow: 0 0 20px var(--y2k-glow-primary); }
284
285
  /* Tooltips use compact contrast surfaces that stay readable across theme modes. */
285
286
  .y2k-tooltip, [data-ui="y2k"] :where(.ui-tooltip, [role="tooltip"], [data-tooltip]) { display: inline-flex; align-items: center; gap: .45rem; max-inline-size: 16rem; padding: .62rem .9rem; background: radial-gradient(circle at 28% 18%, rgb(255 255 255 / .76), transparent 26%), linear-gradient(135deg, var(--y2k-primary), var(--y2k-secondary)); color: var(--y2k-on-primary); border: 1px solid rgb(255 255 255 / .54); border-radius: var(--y2k-radius-pill); box-shadow: var(--y2k-shadow-md), 0 0 1.1rem var(--y2k-glow-primary); font-size: .82rem; font-weight: 900; line-height: 1.3; }