layout-style-css 1.1.2 → 2.0.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 (110) hide show
  1. package/CHANGELOG.md +33 -8
  2. package/CONTRIBUTING.md +12 -7
  3. package/README.md +231 -636
  4. package/SECURITY.md +11 -6
  5. package/demo/demo.css +523 -0
  6. package/demo/demo.js +520 -0
  7. package/demo/index.html +323 -976
  8. package/demo/site.webmanifest +1 -1
  9. package/demo/sitemap.xml +1 -1
  10. package/dist/core.css +6 -0
  11. package/dist/{layout-ui-style-kit-bridge.css → integrations/ui-style-kit.css} +13 -8
  12. package/dist/layout-style-css.css +1473 -1903
  13. package/dist/layout-style-css.min.css +1 -1
  14. package/dist/legacy.css +787 -0
  15. package/dist/personalities/bauhaus.css +46 -0
  16. package/dist/personalities/bento.css +43 -0
  17. package/dist/personalities/brutalism.css +36 -0
  18. package/dist/personalities/cyberpunk.css +36 -0
  19. package/dist/personalities/f-pattern.css +48 -0
  20. package/dist/personalities/maximalist.css +51 -0
  21. package/dist/personalities/minimal-saas.css +37 -0
  22. package/dist/personalities/mondrian.css +44 -0
  23. package/dist/personalities/neumorphism.css +46 -0
  24. package/dist/personalities/retro-glass.css +44 -0
  25. package/dist/personalities/retrofuturism.css +36 -0
  26. package/dist/personalities/split-screen.css +41 -0
  27. package/dist/personalities/synthwave.css +48 -0
  28. package/dist/personalities/tactile.css +39 -0
  29. package/dist/personalities/y2k.css +36 -0
  30. package/dist/personalities/z-pattern.css +49 -0
  31. package/dist/personalities.css +18 -0
  32. package/dist/primitives.css +219 -0
  33. package/dist/recipes.css +270 -0
  34. package/dist/utilities.css +162 -0
  35. package/dist/wrappers.css +174 -0
  36. package/docs/wiki/Contributing.md +36 -30
  37. package/docs/wiki/Demo-And-GitHub-Pages.md +53 -39
  38. package/docs/wiki/Getting-Started.md +51 -68
  39. package/docs/wiki/Home.md +33 -48
  40. package/docs/wiki/Installation-And-CDN.md +73 -58
  41. package/docs/wiki/Layout-Primitives.md +48 -57
  42. package/docs/wiki/Layout-Recipes.md +49 -80
  43. package/docs/wiki/Layout-Styles.md +33 -43
  44. package/docs/wiki/Migrating-To-2.0.md +186 -0
  45. package/docs/wiki/Release-And-Publishing.md +75 -69
  46. package/docs/wiki/Security-And-Support.md +36 -34
  47. package/docs/wiki/UI-Style-Kit-Compatibility.md +50 -54
  48. package/docs/wiki/_Sidebar.md +15 -14
  49. package/package.json +36 -45
  50. package/styles/core.css +6 -0
  51. package/styles/{layout-ui-style-kit-bridge.css → integrations/ui-style-kit.css} +13 -8
  52. package/styles/legacy.css +173 -0
  53. package/styles/personalities/bauhaus.css +46 -0
  54. package/styles/personalities/bento.css +43 -0
  55. package/styles/personalities/brutalism.css +36 -0
  56. package/styles/personalities/cyberpunk.css +36 -0
  57. package/styles/personalities/f-pattern.css +48 -0
  58. package/styles/personalities/maximalist.css +51 -0
  59. package/styles/personalities/minimal-saas.css +37 -0
  60. package/styles/personalities/mondrian.css +44 -0
  61. package/styles/personalities/neumorphism.css +46 -0
  62. package/styles/personalities/retro-glass.css +44 -0
  63. package/styles/personalities/retrofuturism.css +36 -0
  64. package/styles/personalities/split-screen.css +41 -0
  65. package/styles/personalities/synthwave.css +48 -0
  66. package/styles/personalities/tactile.css +39 -0
  67. package/styles/personalities/y2k.css +36 -0
  68. package/styles/personalities/z-pattern.css +49 -0
  69. package/styles/personalities.css +18 -0
  70. package/styles/primitives.css +219 -0
  71. package/styles/recipes.css +270 -0
  72. package/styles/utilities.css +162 -0
  73. package/styles/wrappers.css +174 -0
  74. package/dist/layout-all-with-ui-kit-and-interactive-surface.css +0 -3
  75. package/dist/layout-all-with-ui-kit.css +0 -2
  76. package/dist/layout-all.css +0 -18
  77. package/dist/layout-base.css +0 -539
  78. package/dist/layout-style-bauhaus.css +0 -70
  79. package/dist/layout-style-bento.css +0 -76
  80. package/dist/layout-style-brutalism.css +0 -70
  81. package/dist/layout-style-cyberpunk.css +0 -70
  82. package/dist/layout-style-f-pattern.css +0 -76
  83. package/dist/layout-style-maximalist.css +0 -93
  84. package/dist/layout-style-minimal-saas.css +0 -67
  85. package/dist/layout-style-mondrian.css +0 -77
  86. package/dist/layout-style-neumorphism.css +0 -72
  87. package/dist/layout-style-retro-glass.css +0 -82
  88. package/dist/layout-style-retrofuturism.css +0 -71
  89. package/dist/layout-style-split-screen.css +0 -62
  90. package/dist/layout-style-synthwave.css +0 -88
  91. package/dist/layout-style-tactile.css +0 -70
  92. package/dist/layout-style-y2k.css +0 -72
  93. package/dist/layout-style-z-pattern.css +0 -76
  94. package/styles/layout-base.css +0 -539
  95. package/styles/layout-style-bauhaus.css +0 -70
  96. package/styles/layout-style-bento.css +0 -76
  97. package/styles/layout-style-brutalism.css +0 -70
  98. package/styles/layout-style-cyberpunk.css +0 -70
  99. package/styles/layout-style-f-pattern.css +0 -76
  100. package/styles/layout-style-maximalist.css +0 -93
  101. package/styles/layout-style-minimal-saas.css +0 -67
  102. package/styles/layout-style-mondrian.css +0 -77
  103. package/styles/layout-style-neumorphism.css +0 -72
  104. package/styles/layout-style-retro-glass.css +0 -82
  105. package/styles/layout-style-retrofuturism.css +0 -71
  106. package/styles/layout-style-split-screen.css +0 -62
  107. package/styles/layout-style-synthwave.css +0 -88
  108. package/styles/layout-style-tactile.css +0 -70
  109. package/styles/layout-style-y2k.css +0 -72
  110. package/styles/layout-style-z-pattern.css +0 -76
package/SECURITY.md CHANGED
@@ -4,10 +4,11 @@
4
4
 
5
5
  ## Supported Versions
6
6
 
7
- | Version | Supported |
8
- | --- | --- |
9
- | `1.1.x` | Yes |
10
- | `1.0.x` | Security fixes only when practical |
7
+ | Version | Supported |
8
+ | --- | --- |
9
+ | `2.x` | Yes |
10
+ | `1.1.x` | Migration support only |
11
+ | `1.0.x` | No |
11
12
 
12
13
  ## Reporting A Vulnerability
13
14
 
@@ -31,7 +32,7 @@ The primary security risks for this package are supply-chain and documentation r
31
32
  - package contents that include secrets, build caches, or unrelated local files
32
33
  - CSS that hides important controls or breaks keyboard-visible flows in the demo
33
34
 
34
- The release gate verifies package contents, README imports, documentation links, CSS contracts, rendered demo behavior, and GitHub Pages artifact structure.
35
+ The release gate verifies package contents, README imports, documentation links, CSS contracts, GitHub Pages artifact structure, and rendered behavior in Chromium, Firefox, and WebKit.
35
36
 
36
37
  ## Dependency Checks
37
38
 
@@ -41,5 +42,9 @@ Run the local dependency audit before publishing:
41
42
  npm audit --audit-level=moderate
42
43
  ```
43
44
 
44
- The package also uses `npm run release:verify` to run build, lint, tests, pack dry-run, and publish dry-run checks.
45
+ The package also uses `npm run release:verify` to run build, lint, static, Pages, cross-browser, pack dry-run, and publish dry-run checks.
46
+
47
+ The npm workflow validates a strict tag, exact peeled commit, protected-main ancestry, and package version before dependency lifecycle code runs. Publishing requires the protected `npm` GitHub Environment, emits npm provenance, and exposes `NODE_AUTH_TOKEN` only to the publish step. npm trusted publishing and immutable commit SHA pins for GitHub Actions remain follow-up hardening work.
48
+
49
+ The demo's two exact-version companion CDN fixtures use SHA-384 subresource integrity with anonymous CORS. Their hashes are derived from the pinned local development fixtures and enforced by the rendered smoke contract.
45
50
 
package/demo/demo.css ADDED
@@ -0,0 +1,523 @@
1
+ /*
2
+ Demo paint is intentionally local: the published layout modules continue to
3
+ own structure only, while the lab remains legible in layout-only mode.
4
+ */
5
+
6
+ :root {
7
+ --demo-bg: #f1f5f9;
8
+ --demo-panel: #ffffff;
9
+ --demo-panel-strong: #e2e8f0;
10
+ --demo-text: #172033;
11
+ --demo-muted: #526079;
12
+ --demo-line: #b8c3d3;
13
+ --demo-accent: #4f46e5;
14
+ --demo-accent-soft: #e0e7ff;
15
+ --demo-danger: #b42318;
16
+ --demo-radius: 1rem;
17
+ --demo-shadow: 0 1rem 3rem rgb(15 23 42 / 0.12);
18
+ --demo-density-gap: 1rem;
19
+ --demo-region-padding: 1rem;
20
+ color-scheme: light;
21
+ }
22
+
23
+ body[data-mode="dark"] {
24
+ --demo-bg: #101827;
25
+ --demo-panel: #172033;
26
+ --demo-panel-strong: #273449;
27
+ --demo-text: #f8fafc;
28
+ --demo-muted: #cbd5e1;
29
+ --demo-line: #46556d;
30
+ --demo-accent: #a5b4fc;
31
+ --demo-accent-soft: #312e81;
32
+ --demo-shadow: 0 1rem 3rem rgb(0 0 0 / 0.38);
33
+ color-scheme: dark;
34
+ }
35
+
36
+ body[data-mode="contrast"] {
37
+ --demo-bg: #000000;
38
+ --demo-panel: #000000;
39
+ --demo-panel-strong: #1a1a1a;
40
+ --demo-text: #ffffff;
41
+ --demo-muted: #ffffff;
42
+ --demo-line: #ffffff;
43
+ --demo-accent: #ffeb3b;
44
+ --demo-accent-soft: #322f00;
45
+ color-scheme: dark;
46
+ }
47
+
48
+ body[data-density="compact"] {
49
+ --demo-density-gap: 0.5rem;
50
+ --demo-region-padding: 0.75rem;
51
+ }
52
+
53
+ body[data-density="spacious"] {
54
+ --demo-density-gap: 1.5rem;
55
+ --demo-region-padding: 1.5rem;
56
+ }
57
+
58
+ html {
59
+ min-inline-size: 20rem;
60
+ scroll-behavior: smooth;
61
+ }
62
+
63
+ body {
64
+ min-block-size: 100svh;
65
+ margin: 0;
66
+ overflow-x: clip;
67
+ background: var(--demo-bg);
68
+ color: var(--demo-text);
69
+ font-family:
70
+ Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI",
71
+ sans-serif;
72
+ line-height: 1.5;
73
+ }
74
+
75
+ body * {
76
+ box-sizing: border-box;
77
+ }
78
+
79
+ button,
80
+ select {
81
+ min-block-size: 2.75rem;
82
+ max-inline-size: 100%;
83
+ font: inherit;
84
+ }
85
+
86
+ button {
87
+ cursor: pointer;
88
+ }
89
+
90
+ button:focus-visible,
91
+ select:focus-visible,
92
+ a:focus-visible {
93
+ outline: 0.1875rem solid var(--demo-accent);
94
+ outline-offset: 0.1875rem;
95
+ }
96
+
97
+ select {
98
+ inline-size: 100%;
99
+ }
100
+
101
+ h1,
102
+ h2,
103
+ h3,
104
+ p,
105
+ pre {
106
+ margin-block: 0;
107
+ }
108
+
109
+ h1,
110
+ h2,
111
+ h3,
112
+ p,
113
+ code,
114
+ strong,
115
+ span,
116
+ label {
117
+ overflow-wrap: anywhere;
118
+ }
119
+
120
+ h1 {
121
+ max-inline-size: 18ch;
122
+ font-size: clamp(2rem, 4vw, 4.5rem);
123
+ line-height: 0.98;
124
+ }
125
+
126
+ h2 {
127
+ font-size: clamp(1.25rem, 2.5vw, 2rem);
128
+ line-height: 1.1;
129
+ }
130
+
131
+ h3 {
132
+ font-size: 1rem;
133
+ }
134
+
135
+ .demo-skip-link {
136
+ position: fixed;
137
+ inset-block-start: 0.5rem;
138
+ inset-inline-start: 0.5rem;
139
+ z-index: 100;
140
+ padding: 0.75rem 1rem;
141
+ translate: 0 -150%;
142
+ background: var(--demo-panel);
143
+ color: var(--demo-text);
144
+ }
145
+
146
+ .demo-skip-link:focus {
147
+ translate: 0;
148
+ }
149
+
150
+ .demo-topbar {
151
+ position: sticky;
152
+ inset-block-start: 0;
153
+ z-index: 20;
154
+ display: flex;
155
+ flex-wrap: wrap;
156
+ align-items: center;
157
+ justify-content: space-between;
158
+ gap: 0.75rem;
159
+ min-block-size: 4.5rem;
160
+ padding:
161
+ max(0.75rem, env(safe-area-inset-top, 0px))
162
+ max(1rem, env(safe-area-inset-right, 0px))
163
+ 0.75rem
164
+ max(1rem, env(safe-area-inset-left, 0px));
165
+ border-block-end: 1px solid var(--demo-line);
166
+ background: color-mix(in srgb, var(--demo-panel) 92%, transparent);
167
+ backdrop-filter: blur(1rem);
168
+ }
169
+
170
+ .demo-brand,
171
+ .demo-controls-heading,
172
+ .demo-section-heading,
173
+ .demo-code-card-heading,
174
+ .demo-topbar-actions {
175
+ display: flex;
176
+ align-items: center;
177
+ justify-content: space-between;
178
+ gap: 0.75rem;
179
+ }
180
+
181
+ .demo-brand {
182
+ align-items: flex-start;
183
+ flex-direction: column;
184
+ gap: 0.125rem;
185
+ }
186
+
187
+ .demo-kicker {
188
+ color: var(--demo-muted);
189
+ font-size: 0.75rem;
190
+ font-weight: 750;
191
+ letter-spacing: 0.12em;
192
+ text-transform: uppercase;
193
+ }
194
+
195
+ .demo-status,
196
+ .demo-copy-status,
197
+ #containerReadout {
198
+ color: var(--demo-muted);
199
+ font-size: 0.875rem;
200
+ }
201
+
202
+ .demo-status {
203
+ padding: 0.4rem 0.7rem;
204
+ border: 1px solid var(--demo-line);
205
+ border-radius: 999px;
206
+ background: var(--demo-accent-soft);
207
+ }
208
+
209
+ body[data-ecosystem="layout-only"] .demo-status {
210
+ border-style: dashed;
211
+ background: var(--demo-panel-strong);
212
+ }
213
+
214
+ body[data-ecosystem="all-three"] .demo-status {
215
+ box-shadow: inset 0 0 0 0.125rem color-mix(in srgb, var(--demo-accent) 30%, transparent);
216
+ }
217
+
218
+ .demo-page {
219
+ display: grid;
220
+ inline-size: min(calc(100% - 2rem), 112rem);
221
+ margin-inline: auto;
222
+ padding-block: clamp(1rem, 3vw, 2rem) 4rem;
223
+ }
224
+
225
+ .demo-controls,
226
+ .demo-intro,
227
+ .demo-lab,
228
+ .demo-code-card {
229
+ border: 1px solid var(--demo-line);
230
+ border-radius: var(--demo-radius);
231
+ background: var(--demo-panel);
232
+ box-shadow: var(--demo-shadow);
233
+ }
234
+
235
+ .demo-controls {
236
+ min-inline-size: 0;
237
+ padding: 1rem;
238
+ }
239
+
240
+ .demo-controls-heading {
241
+ margin-block-end: 1rem;
242
+ }
243
+
244
+ .demo-controls-grid {
245
+ display: grid;
246
+ gap: 0.875rem;
247
+ }
248
+
249
+ .demo-controls-grid label {
250
+ display: grid;
251
+ gap: 0.35rem;
252
+ min-inline-size: 0;
253
+ color: var(--demo-muted);
254
+ font-size: 0.8125rem;
255
+ font-weight: 700;
256
+ }
257
+
258
+ .demo-controls-grid select {
259
+ padding-inline: 0.625rem;
260
+ }
261
+
262
+ .demo-main {
263
+ display: grid;
264
+ min-inline-size: 0;
265
+ gap: clamp(1rem, 3vw, 2rem);
266
+ }
267
+
268
+ .demo-intro {
269
+ display: grid;
270
+ grid-template-columns: minmax(0, 1fr);
271
+ gap: 1.5rem;
272
+ padding: clamp(1.25rem, 4vw, 3rem);
273
+ }
274
+
275
+ .demo-intro > div:first-child {
276
+ display: grid;
277
+ gap: 1rem;
278
+ }
279
+
280
+ .demo-intro p {
281
+ max-inline-size: 68ch;
282
+ color: var(--demo-muted);
283
+ }
284
+
285
+ .demo-state-panel {
286
+ display: grid;
287
+ align-content: center;
288
+ gap: 0.75rem;
289
+ min-inline-size: 0;
290
+ padding: 1rem;
291
+ border: 1px solid var(--demo-line);
292
+ border-radius: calc(var(--demo-radius) * 0.75);
293
+ background: var(--demo-panel-strong);
294
+ }
295
+
296
+ .demo-lab {
297
+ min-inline-size: 0;
298
+ padding: clamp(1rem, 2vw, 1.5rem);
299
+ }
300
+
301
+ .demo-section-heading {
302
+ flex-wrap: wrap;
303
+ margin-block-end: 1rem;
304
+ }
305
+
306
+ .demo-preview-frame {
307
+ --demo-container-inline-size: 100%;
308
+
309
+ container-name: demo-preview;
310
+ container-type: inline-size;
311
+ inline-size: min(100%, var(--demo-container-inline-size));
312
+ min-inline-size: 0;
313
+ margin-inline: auto;
314
+ overflow: clip;
315
+ border: 1px dashed var(--demo-line);
316
+ border-radius: calc(var(--demo-radius) * 0.85);
317
+ background: var(--demo-bg);
318
+ }
319
+
320
+ /* The nested root lets personalities respond to preview width, not viewport width. */
321
+ .demo-preview-root {
322
+ min-block-size: 0;
323
+ min-inline-size: 0;
324
+ padding-block: 0.75rem;
325
+ }
326
+
327
+ .demo-preview-root > .ly-wrapper {
328
+ /* The width control represents the queried content box exactly at 48rem/64rem. */
329
+ --ly-wrapper-gutter: 0px;
330
+
331
+ min-inline-size: 0;
332
+ }
333
+
334
+ .demo-recipe {
335
+ min-block-size: 30rem;
336
+ min-inline-size: 0;
337
+ gap: var(--demo-density-gap);
338
+ }
339
+
340
+ .demo-recipe:is(.ly-gallery, [data-ly-recipe="gallery"]),
341
+ .demo-recipe:is(.ly-card-grid, [data-ly-recipe="card-grid"]) {
342
+ min-block-size: auto;
343
+ }
344
+
345
+ .demo-recipe:is(.ly-app-shell, [data-ly-recipe="app-shell"]) {
346
+ min-block-size: 32rem;
347
+ }
348
+
349
+ .demo-region {
350
+ display: grid;
351
+ align-content: start;
352
+ min-block-size: 5rem;
353
+ min-inline-size: 0;
354
+ gap: 0.75rem;
355
+ padding: var(--demo-region-padding);
356
+ overflow: hidden;
357
+ border: 1px solid var(--demo-line);
358
+ border-radius: calc(var(--demo-radius) * 0.65);
359
+ background: var(--demo-panel);
360
+ }
361
+
362
+ .demo-region[data-ly-area="main"],
363
+ .demo-region[data-ly-area="secondary"],
364
+ .demo-region[data-ly-area="content"] {
365
+ background: var(--demo-accent-soft);
366
+ }
367
+
368
+ .demo-region > button {
369
+ justify-self: start;
370
+ }
371
+
372
+ .demo-grid-item {
373
+ min-block-size: 8rem;
374
+ }
375
+
376
+ .demo-list-scroll {
377
+ --ly-scroll-max: 10rem;
378
+
379
+ display: grid;
380
+ gap: 0.5rem;
381
+ padding-inline-end: 0.25rem;
382
+ }
383
+
384
+ .demo-list-scroll p {
385
+ padding: 0.5rem;
386
+ background: var(--demo-panel-strong);
387
+ }
388
+
389
+ .demo-code-grid {
390
+ display: grid;
391
+ grid-template-columns: minmax(0, 1fr);
392
+ gap: 1rem;
393
+ min-inline-size: 0;
394
+ }
395
+
396
+ .demo-code-heading {
397
+ grid-column: 1 / -1;
398
+ margin-block-end: 0;
399
+ }
400
+
401
+ .demo-code-card {
402
+ display: grid;
403
+ align-content: start;
404
+ min-inline-size: 0;
405
+ gap: 1rem;
406
+ padding: 1rem;
407
+ }
408
+
409
+ .demo-code-card-heading {
410
+ flex-wrap: wrap;
411
+ }
412
+
413
+ .demo-code-card pre {
414
+ max-block-size: 22rem;
415
+ min-inline-size: 0;
416
+ margin: 0;
417
+ padding: 1rem;
418
+ overflow: auto;
419
+ border-radius: calc(var(--demo-radius) * 0.65);
420
+ background: #0f172a;
421
+ color: #e2e8f0;
422
+ font-size: 0.8rem;
423
+ tab-size: 2;
424
+ white-space: pre;
425
+ }
426
+
427
+ .demo-copy-status[data-copy-state="error"] {
428
+ color: var(--demo-danger);
429
+ }
430
+
431
+ .demo-backdrop[hidden],
432
+ .demo-controls[hidden] {
433
+ display: none;
434
+ }
435
+
436
+ @media (min-width: 48rem) {
437
+ .demo-intro {
438
+ grid-template-columns: minmax(0, 1.5fr) minmax(14rem, 0.5fr);
439
+ align-items: end;
440
+ }
441
+
442
+ .demo-code-grid {
443
+ grid-template-columns: repeat(2, minmax(0, 1fr));
444
+ }
445
+ }
446
+
447
+ @media (min-width: 64rem) {
448
+ #demoControlsToggle,
449
+ #demoControlsClose {
450
+ display: none;
451
+ }
452
+
453
+ .demo-page {
454
+ grid-template-columns: minmax(13rem, 14rem) minmax(0, 1fr);
455
+ align-items: start;
456
+ gap: 1.5rem;
457
+ }
458
+
459
+ .demo-controls {
460
+ position: sticky;
461
+ inset-block-start: 6rem;
462
+ display: block;
463
+ max-block-size: calc(100svh - 7rem);
464
+ overflow: auto;
465
+ }
466
+ }
467
+
468
+ @media (max-width: 63.999rem) {
469
+ .demo-page {
470
+ inline-size: min(calc(100% - 1rem), 72rem);
471
+ }
472
+
473
+ .demo-status {
474
+ display: none;
475
+ }
476
+
477
+ .demo-controls {
478
+ position: fixed;
479
+ inset-block: 0;
480
+ inset-inline-end: 0;
481
+ z-index: 40;
482
+ inline-size: min(24rem, calc(100% - 1rem));
483
+ max-block-size: 100svh;
484
+ padding:
485
+ max(1rem, env(safe-area-inset-top, 0px))
486
+ max(1rem, env(safe-area-inset-right, 0px))
487
+ max(1rem, env(safe-area-inset-bottom, 0px))
488
+ 1rem;
489
+ overflow: auto;
490
+ border-radius: var(--demo-radius) 0 0 var(--demo-radius);
491
+ }
492
+
493
+ .demo-backdrop {
494
+ position: fixed;
495
+ inset: 0;
496
+ z-index: 30;
497
+ background: rgb(15 23 42 / 0.72);
498
+ }
499
+ }
500
+
501
+ @media (max-width: 34rem) {
502
+ .demo-topbar-actions,
503
+ #demoControlsToggle {
504
+ inline-size: 100%;
505
+ }
506
+
507
+ .demo-intro,
508
+ .demo-lab {
509
+ border-radius: calc(var(--demo-radius) * 0.75);
510
+ }
511
+
512
+ .demo-section-heading,
513
+ .demo-code-card-heading {
514
+ align-items: flex-start;
515
+ flex-direction: column;
516
+ }
517
+ }
518
+
519
+ @media (prefers-reduced-motion: reduce) {
520
+ html {
521
+ scroll-behavior: auto;
522
+ }
523
+ }