layout-style-css 1.1.1 → 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 +42 -10
  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} +23 -8
  12. package/dist/layout-style-css.css +1473 -1893
  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 +73 -67
  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} +23 -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
@@ -1,1928 +1,1508 @@
1
- /* layout-style-css bundle. Generated from styles/ by scripts/build.mjs. */
2
-
3
- /* layout-base.css */
4
- /*
5
- Layout Style Library base primitives.
6
- This file owns spatial composition only. Visual paint, typography, borders,
7
- shadows, and theme color are intentionally delegated to ui-style-kit-css.
8
- */
9
-
10
- @layer ly.tokens {
11
- :where(.ly-root) {
12
- --ly-space-0: 0;
13
- --ly-space-1: 0.25rem;
14
- --ly-space-2: 0.5rem;
15
- --ly-space-3: 0.75rem;
16
- --ly-space-4: 1rem;
17
- --ly-space-5: 1.5rem;
18
- --ly-space-6: 2rem;
19
- --ly-space-7: 3rem;
20
- --ly-space-8: 4rem;
21
- --ly-space-9: 6rem;
22
-
23
- --ly-container-sm: 40rem;
24
- --ly-container-md: 56rem;
25
- --ly-container-lg: 72rem;
26
- --ly-container-xl: 88rem;
27
- --ly-container-wide: 112rem;
28
- --ly-container-max: var(--ly-container-lg);
29
- --ly-content-readable: 68ch;
30
-
31
- --ly-page-padding-inline: clamp(1rem, 4vw, 3rem);
32
- --ly-section-padding-block: clamp(3rem, 7vw, 6rem);
33
- --ly-gap: var(--ly-space-5);
34
- --ly-grid-gap: var(--ly-gap);
35
- --ly-stack-gap: var(--ly-space-4);
36
- --ly-cluster-gap: var(--ly-space-3);
37
-
38
- --ly-grid-columns: 12;
39
- --ly-grid-min: 16rem;
40
- --ly-card-grid-min: 16rem;
41
- --ly-card-size-sm: 10rem;
42
- --ly-card-size-md: 14rem;
43
- --ly-card-size-lg: 18rem;
44
- --ly-gallery-min: 12rem;
45
- --ly-carousel-item-min: 16rem;
46
- --ly-carousel-item-max: 28rem;
47
- --ly-sidebar-min: 14rem;
48
- --ly-sidebar-width: 18rem;
49
- --ly-sidebar-max: 22rem;
50
- --ly-pane-fixed: 22rem;
51
- --ly-header-height: 4.5rem;
52
-
53
- --ly-radius-sm: 0.5rem;
54
- --ly-radius: 0.875rem;
55
- --ly-radius-lg: 1.5rem;
56
- --ly-radius-xl: 2.25rem;
57
-
58
- --ly-z-header: 20;
59
- --ly-z-sidebar: 10;
60
- }
61
- }
62
-
63
- @layer ly.reset {
64
- :where(.ly-root),
65
- :where(.ly-root *) {
66
- box-sizing: border-box;
67
- }
68
-
69
- :where(.ly-root) {
70
- min-width: 0;
71
- margin: 0;
72
- }
73
-
74
- :where(.ly-root img),
75
- :where(.ly-root svg),
76
- :where(.ly-root video),
77
- :where(.ly-root canvas) {
78
- max-width: 100%;
79
- }
80
- }
81
-
82
- @layer ly.layout {
83
- .ly-page {
84
- min-height: 100svh;
85
- }
86
-
87
- .ly-header,
88
- .ly-footer,
89
- .ly-main,
90
- .ly-wrapper,
91
- .ly-section,
92
- .ly-surface {
93
- min-width: 0;
94
- }
95
-
96
- .ly-header {
97
- min-height: var(--ly-header-height);
98
- }
99
-
100
- .ly-header--sticky {
101
- position: sticky;
102
- top: 0;
103
- z-index: var(--ly-z-header);
104
- }
105
-
106
- .ly-container,
107
- .ly-wrapper {
108
- /* Keep wrappers resilient during viewport resizing without owning visual paint. */
109
- width: min(100% - (var(--ly-page-padding-inline) * 2), var(--ly-container-max));
110
- margin-inline: auto;
111
- }
112
-
113
- .ly-container--sm,
114
- .ly-wrapper--sm {
115
- --ly-container-max: var(--ly-container-sm);
116
- }
117
-
118
- .ly-container--md,
119
- .ly-wrapper--md {
120
- --ly-container-max: var(--ly-container-md);
121
- }
122
-
123
- .ly-container--lg,
124
- .ly-wrapper--lg {
125
- --ly-container-max: var(--ly-container-lg);
126
- }
127
-
128
- .ly-container--xl,
129
- .ly-wrapper--xl {
130
- --ly-container-max: var(--ly-container-xl);
131
- }
132
-
133
- .ly-container--wide,
134
- .ly-wrapper--wide {
135
- --ly-container-max: var(--ly-container-wide);
136
- }
137
-
138
- .ly-container--fluid,
139
- .ly-wrapper--fluid {
140
- width: 100%;
141
- max-width: none;
142
- padding-inline: var(--ly-page-padding-inline);
143
- }
144
-
145
- .ly-wrapper--readable {
146
- --ly-container-max: var(--ly-content-readable);
147
- }
148
-
149
- .ly-readable {
150
- max-width: var(--ly-content-readable);
151
- }
152
-
153
- .ly-section {
154
- padding-block: var(--ly-section-padding-block);
155
- }
156
-
157
- .ly-section--compact {
158
- --ly-section-padding-block: var(--ly-space-7);
159
- }
160
-
161
- .ly-section--flush {
162
- --ly-section-padding-block: 0;
163
- }
164
-
165
- .ly-stack {
166
- display: flex;
167
- flex-direction: column;
168
- gap: var(--ly-stack-gap);
169
- }
170
-
171
- .ly-cluster {
172
- display: flex;
173
- flex-wrap: wrap;
174
- align-items: center;
175
- gap: var(--ly-cluster-gap);
176
- }
177
-
178
- .ly-button-group {
179
- /* Button groups provide flow only; UI libraries keep button paint and states. */
180
- display: flex;
181
- flex-wrap: wrap;
182
- align-items: center;
183
- gap: var(--ly-cluster-gap);
184
- }
185
-
186
- .ly-button-group > * {
187
- flex: 0 1 auto;
188
- min-width: min(100%, var(--ly-button-min, 8rem));
189
- }
190
-
191
- .ly-grid {
192
- display: grid;
193
- grid-template-columns: repeat(var(--ly-grid-columns), minmax(0, 1fr));
194
- gap: var(--ly-grid-gap);
195
- }
196
-
197
- .ly-grid--auto {
198
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
199
- }
200
-
201
- .ly-card-grid {
202
- display: grid;
203
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
204
- gap: var(--ly-grid-gap);
205
- }
206
-
207
- .ly-card-grid > * {
208
- min-width: 0;
209
- }
210
-
211
- .ly-card-sm {
212
- min-block-size: var(--ly-card-size-sm);
213
- }
214
-
215
- .ly-card-md {
216
- min-block-size: var(--ly-card-size-md);
217
- }
218
-
219
- .ly-card-lg {
220
- min-block-size: var(--ly-card-size-lg);
221
- }
222
-
223
- .ly-gallery {
224
- display: grid;
225
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
226
- gap: var(--ly-grid-gap);
227
- }
228
-
229
- .ly-gallery > * {
230
- min-width: 0;
231
- }
232
-
233
- .ly-carousel {
234
- display: grid;
235
- grid-auto-flow: column;
236
- grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
237
- gap: var(--ly-grid-gap);
238
- overflow-x: auto;
239
- overscroll-behavior-inline: contain;
240
- scroll-snap-type: x proximity;
241
- }
242
-
243
- .ly-carousel > * {
244
- min-width: 0;
245
- scroll-snap-align: start;
246
- }
247
-
248
- .ly-row {
249
- display: flex;
250
- flex-wrap: wrap;
251
- margin-inline: calc(var(--ly-gutter, var(--ly-gap)) * -0.5);
252
- }
253
-
254
- .ly-col {
255
- flex: 1 1 0;
256
- min-width: 0;
257
- padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5);
258
- }
259
-
260
- .ly-sidebar-layout {
261
- display: grid;
262
- grid-template-columns: 1fr;
263
- gap: var(--ly-gap);
264
- }
265
-
266
- .ly-sidebar-layout > * {
267
- min-width: 0;
268
- }
269
-
270
- .ly-sidebar {
271
- min-width: 0;
272
- }
273
-
274
- .ly-content {
275
- min-width: 0;
276
- }
277
-
278
- .ly-split {
279
- display: grid;
280
- grid-template-columns: 1fr;
281
- gap: var(--ly-gap);
282
- align-items: var(--ly-split-align, center);
283
- }
284
-
285
- .ly-split > * {
286
- min-width: 0;
287
- }
288
-
289
- .ly-panes {
290
- display: grid;
291
- grid-template-columns: 1fr;
292
- gap: var(--ly-gap);
293
- }
294
-
295
- .ly-panes > * {
296
- min-width: 0;
297
- }
298
-
299
- .ly-surface {
300
- border-radius: var(--ly-radius);
301
- }
302
-
303
- .ly-surface--raised {
304
- border-radius: var(--ly-radius-lg);
305
- }
306
-
307
- .ly-divider {
308
- min-height: 1px;
309
- margin-block: var(--ly-space-5);
310
- }
311
-
312
- .ly-frame {
313
- aspect-ratio: var(--ly-frame-ratio, 16 / 9);
314
- overflow: hidden;
315
- }
316
-
317
- .ly-frame > * {
318
- width: 100%;
319
- height: 100%;
320
- object-fit: cover;
321
- }
322
-
323
- .ly-scroll-area {
324
- min-height: 0;
325
- overflow: auto;
326
- }
327
-
328
- .ly-app-shell {
329
- min-height: 100svh;
330
- display: grid;
331
- grid-template-areas:
332
- "header"
333
- "main";
334
- grid-template-columns: minmax(0, 1fr);
335
- grid-template-rows: auto minmax(0, 1fr);
336
- }
337
-
338
- .ly-app-header {
339
- grid-area: header;
340
- min-width: 0;
341
- }
342
-
343
- .ly-app-sidebar {
344
- grid-area: sidebar;
345
- display: none;
346
- min-width: 0;
347
- }
348
-
349
- .ly-app-main {
350
- grid-area: main;
351
- min-width: 0;
352
- }
353
-
354
- .ly-visually-hidden {
355
- position: absolute !important;
356
- width: 1px !important;
357
- height: 1px !important;
358
- padding: 0 !important;
359
- margin: -1px !important;
360
- overflow: hidden !important;
361
- clip: rect(0, 0, 0, 0) !important;
362
- clip-path: inset(50%) !important;
363
- white-space: nowrap !important;
364
- }
365
- }
366
-
367
- @layer ly.responsive {
368
- @media (min-width: 48rem) {
369
- /*
370
- Fixed support tracks are capped against their container so nested layouts
371
- can compress instead of forcing horizontal page overflow.
372
- */
373
- .ly-app-shell {
374
- grid-template-areas:
375
- "sidebar header"
376
- "sidebar main";
377
- grid-template-columns: minmax(min(100%, var(--ly-sidebar-min)), var(--ly-sidebar-width)) minmax(0, 1fr);
378
- }
379
-
380
- .ly-app-sidebar {
381
- display: block;
382
- position: sticky;
383
- top: 0;
384
- z-index: var(--ly-z-sidebar);
385
- height: 100svh;
386
- overflow: auto;
387
- }
388
-
389
- .ly-sidebar-layout {
390
- grid-template-columns: minmax(min(100%, var(--ly-sidebar-min)), var(--ly-sidebar-max)) minmax(0, 1fr);
391
- align-items: start;
392
- }
393
-
394
- .ly-sidebar-layout--right {
395
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, var(--ly-sidebar-min)), var(--ly-sidebar-max));
396
- }
397
-
398
- .ly-split {
399
- grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
400
- }
401
-
402
- .ly-panes--two {
403
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, var(--ly-pane-fixed)), 0.7fr);
404
- }
405
- }
406
-
407
- @media (min-width: 64rem) {
408
- .ly-panes--three {
409
- grid-template-columns: minmax(min(100%, 14rem), 0.35fr) minmax(0, 1fr) minmax(min(100%, 14rem), 0.35fr);
410
- }
411
- }
412
- }
413
-
414
- @layer ly.utilities {
415
- .ly-cols-1 { --ly-grid-columns: 1; }
416
- .ly-cols-2 { --ly-grid-columns: 2; }
417
- .ly-cols-3 { --ly-grid-columns: 3; }
418
- .ly-cols-4 { --ly-grid-columns: 4; }
419
- .ly-cols-5 { --ly-grid-columns: 5; }
420
- .ly-cols-6 { --ly-grid-columns: 6; }
421
- .ly-cols-7 { --ly-grid-columns: 7; }
422
- .ly-cols-8 { --ly-grid-columns: 8; }
423
- .ly-cols-9 { --ly-grid-columns: 9; }
424
- .ly-cols-10 { --ly-grid-columns: 10; }
425
- .ly-cols-11 { --ly-grid-columns: 11; }
426
- .ly-cols-12 { --ly-grid-columns: 12; }
427
- .ly-cols-16 { --ly-grid-columns: 16; }
428
-
429
- .ly-span-1 { grid-column: span 1; }
430
- .ly-span-2 { grid-column: span 2; }
431
- .ly-span-3 { grid-column: span 3; }
432
- .ly-span-4 { grid-column: span 4; }
433
- .ly-span-5 { grid-column: span 5; }
434
- .ly-span-6 { grid-column: span 6; }
435
- .ly-span-7 { grid-column: span 7; }
436
- .ly-span-8 { grid-column: span 8; }
437
- .ly-span-9 { grid-column: span 9; }
438
- .ly-span-10 { grid-column: span 10; }
439
- .ly-span-11 { grid-column: span 11; }
440
- .ly-span-12 { grid-column: span 12; }
441
- .ly-span-13 { grid-column: span 13; }
442
- .ly-span-14 { grid-column: span 14; }
443
- .ly-span-15 { grid-column: span 15; }
444
- .ly-span-16 { grid-column: span 16; }
445
- .ly-span-full { grid-column: 1 / -1; }
446
-
447
- .ly-col-1 { flex: 0 0 auto; width: 8.333333%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
448
- .ly-col-2 { flex: 0 0 auto; width: 16.666667%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
449
- .ly-col-3 { flex: 0 0 auto; width: 25%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
450
- .ly-col-4 { flex: 0 0 auto; width: 33.333333%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
451
- .ly-col-5 { flex: 0 0 auto; width: 41.666667%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
452
- .ly-col-6 { flex: 0 0 auto; width: 50%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
453
- .ly-col-7 { flex: 0 0 auto; width: 58.333333%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
454
- .ly-col-8 { flex: 0 0 auto; width: 66.666667%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
455
- .ly-col-9 { flex: 0 0 auto; width: 75%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
456
- .ly-col-10 { flex: 0 0 auto; width: 83.333333%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
457
- .ly-col-11 { flex: 0 0 auto; width: 91.666667%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
458
- .ly-col-12 { flex: 0 0 auto; width: 100%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
459
-
460
- .ly-gap-0 { --ly-gap: var(--ly-space-0); --ly-grid-gap: var(--ly-space-0); --ly-stack-gap: var(--ly-space-0); --ly-cluster-gap: var(--ly-space-0); }
461
- .ly-gap-1 { --ly-gap: var(--ly-space-1); --ly-grid-gap: var(--ly-space-1); --ly-stack-gap: var(--ly-space-1); --ly-cluster-gap: var(--ly-space-1); }
462
- .ly-gap-2 { --ly-gap: var(--ly-space-2); --ly-grid-gap: var(--ly-space-2); --ly-stack-gap: var(--ly-space-2); --ly-cluster-gap: var(--ly-space-2); }
463
- .ly-gap-3 { --ly-gap: var(--ly-space-3); --ly-grid-gap: var(--ly-space-3); --ly-stack-gap: var(--ly-space-3); --ly-cluster-gap: var(--ly-space-3); }
464
- .ly-gap-4 { --ly-gap: var(--ly-space-4); --ly-grid-gap: var(--ly-space-4); --ly-stack-gap: var(--ly-space-4); --ly-cluster-gap: var(--ly-space-4); }
465
- .ly-gap-5 { --ly-gap: var(--ly-space-5); --ly-grid-gap: var(--ly-space-5); --ly-stack-gap: var(--ly-space-5); --ly-cluster-gap: var(--ly-space-5); }
466
- .ly-gap-6 { --ly-gap: var(--ly-space-6); --ly-grid-gap: var(--ly-space-6); --ly-stack-gap: var(--ly-space-6); --ly-cluster-gap: var(--ly-space-6); }
467
- .ly-gap-7 { --ly-gap: var(--ly-space-7); --ly-grid-gap: var(--ly-space-7); --ly-stack-gap: var(--ly-space-7); --ly-cluster-gap: var(--ly-space-7); }
468
- .ly-gap-8 { --ly-gap: var(--ly-space-8); --ly-grid-gap: var(--ly-space-8); --ly-stack-gap: var(--ly-space-8); --ly-cluster-gap: var(--ly-space-8); }
469
- .ly-gap-9 { --ly-gap: var(--ly-space-9); --ly-grid-gap: var(--ly-space-9); --ly-stack-gap: var(--ly-space-9); --ly-cluster-gap: var(--ly-space-9); }
470
-
471
- .ly-pad-0 { padding: var(--ly-space-0); }
472
- .ly-pad-1 { padding: var(--ly-space-1); }
473
- .ly-pad-2 { padding: var(--ly-space-2); }
474
- .ly-pad-3 { padding: var(--ly-space-3); }
475
- .ly-pad-4 { padding: var(--ly-space-4); }
476
- .ly-pad-5 { padding: var(--ly-space-5); }
477
- .ly-pad-6 { padding: var(--ly-space-6); }
478
- .ly-pad-7 { padding: var(--ly-space-7); }
479
- .ly-pad-8 { padding: var(--ly-space-8); }
480
- .ly-pad-9 { padding: var(--ly-space-9); }
481
-
482
- .ly-px-4 { padding-inline: var(--ly-space-4); }
483
- .ly-px-6 { padding-inline: var(--ly-space-6); }
484
- .ly-px-8 { padding-inline: var(--ly-space-8); }
485
- .ly-py-4 { padding-block: var(--ly-space-4); }
486
- .ly-py-6 { padding-block: var(--ly-space-6); }
487
- .ly-py-8 { padding-block: var(--ly-space-8); }
488
-
489
- .ly-mx-auto { margin-inline: auto; }
490
- .ly-w-full { width: 100%; }
491
- .ly-h-full { height: 100%; }
492
- .ly-min-h-screen { min-height: 100svh; }
493
- .ly-bleed { width: 100vw; margin-inline: calc(50% - 50vw); }
494
- .ly-overflow-auto { overflow: auto; }
495
- .ly-overflow-hidden { overflow: hidden; }
496
-
497
- .ly-items-start { align-items: flex-start; }
498
- .ly-items-center { align-items: center; }
499
- .ly-items-end { align-items: flex-end; }
500
- .ly-items-stretch { align-items: stretch; }
501
- .ly-justify-start { justify-content: flex-start; }
502
- .ly-justify-center { justify-content: center; }
503
- .ly-justify-end { justify-content: flex-end; }
504
- .ly-justify-between { justify-content: space-between; }
505
-
506
- .ly-frame-1x1 { --ly-frame-ratio: 1 / 1; }
507
- .ly-frame-2x1 { --ly-frame-ratio: 2 / 1; }
508
- .ly-frame-3x2 { --ly-frame-ratio: 3 / 2; }
509
- .ly-frame-4x3 { --ly-frame-ratio: 4 / 3; }
510
- .ly-frame-16x9 { --ly-frame-ratio: 16 / 9; }
511
- .ly-frame-21x9 { --ly-frame-ratio: 21 / 9; }
512
-
513
- .ly-hidden { display: none !important; }
514
- .ly-show-md-up,
515
- .ly-show-lg-up {
516
- display: none !important;
517
- }
518
-
519
- @media (min-width: 48rem) {
520
- .ly-md-cols-1 { --ly-grid-columns: 1; }
521
- .ly-md-cols-2 { --ly-grid-columns: 2; }
522
- .ly-md-cols-3 { --ly-grid-columns: 3; }
523
- .ly-md-cols-4 { --ly-grid-columns: 4; }
524
- .ly-md-cols-6 { --ly-grid-columns: 6; }
525
- .ly-md-cols-8 { --ly-grid-columns: 8; }
526
- .ly-md-cols-12 { --ly-grid-columns: 12; }
527
- .ly-md-cols-16 { --ly-grid-columns: 16; }
528
- .ly-show-md-up { display: revert !important; }
529
- }
530
-
531
- @media (min-width: 64rem) {
532
- .ly-lg-cols-1 { --ly-grid-columns: 1; }
533
- .ly-lg-cols-2 { --ly-grid-columns: 2; }
534
- .ly-lg-cols-3 { --ly-grid-columns: 3; }
535
- .ly-lg-cols-4 { --ly-grid-columns: 4; }
536
- .ly-lg-cols-6 { --ly-grid-columns: 6; }
537
- .ly-lg-cols-8 { --ly-grid-columns: 8; }
538
- .ly-lg-cols-12 { --ly-grid-columns: 12; }
539
- .ly-lg-cols-16 { --ly-grid-columns: 16; }
540
- .ly-show-lg-up { display: revert !important; }
541
- }
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
+
3
+ /* layout-style-css bundle. Generated from focused styles/ modules by scripts/build.mjs. */
4
+
5
+ /* wrappers.css */
6
+ /*
7
+ Shared structural tokens and wrapper geometry. Theme, type, borders, shadows,
8
+ and interactive states remain outside Layout Style's ownership boundary.
9
+ */
10
+
11
+ @layer ly.tokens {
12
+ :where(.ly-root) {
13
+ --ly-space-0: 0;
14
+ --ly-space-1: 0.25rem;
15
+ --ly-space-2: 0.5rem;
16
+ --ly-space-3: 0.75rem;
17
+ --ly-space-4: 1rem;
18
+ --ly-space-5: 1.5rem;
19
+ --ly-space-6: 2rem;
20
+ --ly-space-7: 3rem;
21
+ --ly-space-8: 4rem;
22
+ --ly-space-9: 6rem;
23
+
24
+ --ly-wrapper-compact: 40rem;
25
+ --ly-wrapper-prose: 68ch;
26
+ --ly-wrapper-content: 72rem;
27
+ --ly-wrapper-wide: 112rem;
28
+ --ly-wrapper-max: var(--ly-wrapper-content);
29
+ --ly-page-padding-inline: clamp(1rem, 4vw, 3rem);
30
+ --ly-safe-area-inline: max(
31
+ env(safe-area-inset-left, 0px),
32
+ env(safe-area-inset-right, 0px)
33
+ );
34
+ --ly-wrapper-gutter: max(var(--ly-page-padding-inline), var(--ly-safe-area-inline));
35
+
36
+ --ly-section-padding-block: clamp(3rem, 7vw, 6rem);
37
+ --ly-gap: var(--ly-space-5);
38
+ --ly-grid-gap: var(--ly-gap);
39
+ --ly-stack-gap: var(--ly-space-4);
40
+ --ly-cluster-gap: var(--ly-space-3);
41
+ --ly-cover-min: 100svh;
42
+ --ly-switcher-threshold: 42rem;
43
+ --ly-sidebar-size: 18rem;
44
+ --ly-sidebar-content-min: 50%;
45
+ --ly-grid-columns: 12;
46
+ --ly-grid-min: 16rem;
47
+ --ly-pane-size: 22rem;
48
+ --ly-media-size: 14rem;
49
+ --ly-reel-item-min: 16rem;
50
+ --ly-reel-item-max: 28rem;
51
+ --ly-scroll-max: 70svh;
52
+ --ly-frame-ratio: 16 / 9;
53
+
54
+ --ly-recipe-rail: 18rem;
55
+ --ly-recipe-aside: 22rem;
56
+ --ly-card-grid-min: 16rem;
57
+ --ly-gallery-min: 12rem;
58
+ --ly-card-size-sm: 10rem;
59
+ --ly-card-size-md: 14rem;
60
+ --ly-card-size-lg: 18rem;
61
+ --ly-header-height: 4.5rem;
62
+ --ly-z-header: 20;
63
+
64
+ /* V1 token aliases remain available so legacy selectors can preserve sizing. */
65
+ --ly-container-sm: var(--ly-wrapper-compact);
66
+ --ly-container-md: 56rem;
67
+ --ly-container-lg: var(--ly-wrapper-content);
68
+ --ly-container-xl: 88rem;
69
+ --ly-container-wide: var(--ly-wrapper-wide);
70
+ --ly-container-max: var(--ly-container-lg);
71
+ --ly-content-readable: var(--ly-wrapper-prose);
72
+ --ly-carousel-item-min: var(--ly-reel-item-min);
73
+ --ly-carousel-item-max: var(--ly-reel-item-max);
74
+ --ly-sidebar-min: 14rem;
75
+ --ly-sidebar-width: var(--ly-recipe-rail);
76
+ --ly-sidebar-max: var(--ly-recipe-aside);
77
+ --ly-pane-fixed: var(--ly-pane-size);
78
+ --ly-z-sidebar: 10;
79
+ }
542
80
  }
543
81
 
544
- /* layout-ui-style-kit-bridge.css */
545
- /*
546
- Compatibility bridge for ui-style-kit-css.
547
- This bridge intentionally does not map color, type, border, or shadow tokens.
548
- ui-style-kit-css owns those visuals; layout-style-library owns structure.
549
- */
550
-
551
- @layer ly.bridge {
552
- :where(.ly-root[data-ui][data-theme][data-mode], [data-ui][data-theme][data-mode] .ly-root) {
553
- --ly-ui-style-kit-bridge: 1;
554
- }
555
-
556
- :where(.ly-root[data-ui="minimal-saas"], [data-ui="minimal-saas"] .ly-root) {
557
- --ly-ui-style-kit-bridge-style: minimal-saas;
558
- }
559
-
560
- :where(.ly-root[data-ui="bento"], [data-ui="bento"] .ly-root) {
561
- --ly-ui-style-kit-bridge-style: bento;
562
- }
563
-
564
- :where(.ly-root[data-ui="maximalist"], [data-ui="maximalist"] .ly-root) {
565
- --ly-ui-style-kit-bridge-style: maximalist;
566
- }
567
-
568
- :where(.ly-root[data-ui="bauhaus"], [data-ui="bauhaus"] .ly-root) {
569
- --ly-ui-style-kit-bridge-style: bauhaus;
570
- }
571
-
572
- :where(.ly-root[data-ui="tactile"], [data-ui="tactile"] .ly-root) {
573
- --ly-ui-style-kit-bridge-style: tactile;
574
- }
575
-
576
- :where(.ly-root[data-ui="neumorphism"], [data-ui="neumorphism"] .ly-root) {
577
- --ly-ui-style-kit-bridge-style: neumorphism;
578
- }
579
-
580
- :where(.ly-root[data-ui="retrofuturism"], [data-ui="retrofuturism"] .ly-root) {
581
- --ly-ui-style-kit-bridge-style: retrofuturism;
582
- }
583
-
584
- :where(.ly-root[data-ui="brutalism"], [data-ui="brutalism"] .ly-root) {
585
- --ly-ui-style-kit-bridge-style: brutalism;
586
- }
587
-
588
- :where(.ly-root[data-ui="cyberpunk"], [data-ui="cyberpunk"] .ly-root) {
589
- --ly-ui-style-kit-bridge-style: cyberpunk;
590
- }
591
-
592
- :where(.ly-root[data-ui="y2k"], [data-ui="y2k"] .ly-root) {
593
- --ly-ui-style-kit-bridge-style: y2k;
594
- }
595
-
596
- :where(.ly-root[data-ui="retro-glass"], [data-ui="retro-glass"] .ly-root) {
597
- --ly-ui-style-kit-bridge-style: retro-glass;
598
- }
599
-
600
- :where(.saas-container, .bento-container, .max-container, .bau-container, .tactile-container, .neo-container, .retro-container, .brutal-container, .cyber-container, .y2k-container, .rg-container) {
601
- /* UI Style Kit naming can opt into layout sizing without taking over visual paint. */
602
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
603
- margin-inline: auto;
604
- }
605
-
606
- :where(.saas-section, .bento-section, .max-section, .bau-section, .tactile-section, .neo-section, .retro-section, .brutal-section, .cyber-section, .y2k-section, .rg-section) {
607
- padding-block: var(--ly-section-padding-block);
608
- }
609
-
610
- :where(.saas-stack, .bento-stack, .max-stack, .bau-stack, .tactile-stack, .neo-stack, .retro-stack, .brutal-stack, .cyber-stack, .y2k-stack, .rg-stack) {
611
- display: flex;
612
- flex-direction: column;
613
- gap: var(--ly-stack-gap);
614
- }
615
-
616
- :where(.saas-cluster, .bento-cluster, .max-cluster, .bau-cluster, .tactile-cluster, .neo-cluster, .retro-cluster, .brutal-cluster, .cyber-cluster, .y2k-cluster, .rg-cluster) {
617
- display: flex;
618
- flex-wrap: wrap;
619
- align-items: center;
620
- gap: var(--ly-cluster-gap);
621
- }
622
-
623
- :where(.saas-grid, .bento-grid, .max-grid, .bau-grid, .tactile-grid, .neo-grid, .retro-grid, .brutal-grid, .cyber-grid, .y2k-grid, .rg-grid) {
624
- display: grid;
625
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
626
- gap: var(--ly-grid-gap);
627
- }
628
-
629
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
630
- display: grid;
631
- grid-template-columns: 1fr;
632
- gap: var(--ly-gap);
633
- align-items: var(--ly-split-align, center);
634
- }
635
-
636
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) > * {
637
- min-width: 0;
638
- }
639
-
640
- :where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) {
641
- display: flex;
642
- flex-wrap: wrap;
643
- align-items: center;
644
- gap: var(--ly-cluster-gap);
645
- }
646
-
647
- :where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) > * {
648
- flex: 0 1 auto;
649
- min-width: min(100%, var(--ly-button-min, 8rem));
650
- }
651
-
652
- :where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) {
653
- display: grid;
654
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
655
- gap: var(--ly-grid-gap);
656
- }
657
-
658
- :where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) > * {
659
- min-width: 0;
660
- }
661
-
662
- :where(.saas-card-sm, .bento-card-sm, .max-card-sm, .bau-card-sm, .tactile-card-sm, .neo-card-sm, .retro-card-sm, .brutal-card-sm, .cyber-card-sm, .y2k-card-sm, .rg-card-sm) {
663
- min-block-size: var(--ly-card-size-sm);
664
- }
665
-
666
- :where(.saas-card-md, .bento-card-md, .max-card-md, .bau-card-md, .tactile-card-md, .neo-card-md, .retro-card-md, .brutal-card-md, .cyber-card-md, .y2k-card-md, .rg-card-md) {
667
- min-block-size: var(--ly-card-size-md);
668
- }
669
-
670
- :where(.saas-card-lg, .bento-card-lg, .max-card-lg, .bau-card-lg, .tactile-card-lg, .neo-card-lg, .retro-card-lg, .brutal-card-lg, .cyber-card-lg, .y2k-card-lg, .rg-card-lg) {
671
- min-block-size: var(--ly-card-size-lg);
672
- }
673
-
674
- :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) {
675
- display: grid;
676
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
677
- gap: var(--ly-grid-gap);
678
- }
679
-
680
- :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) > * {
681
- min-width: 0;
682
- }
683
-
684
- :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) {
685
- display: grid;
686
- grid-auto-flow: column;
687
- grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
688
- gap: var(--ly-grid-gap);
689
- overflow-x: auto;
690
- overscroll-behavior-inline: contain;
691
- scroll-snap-type: x proximity;
692
- }
693
-
694
- :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) > * {
695
- min-width: 0;
696
- scroll-snap-align: start;
697
- }
698
-
699
- @media (min-width: 48rem) {
700
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
701
- grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
702
- }
703
- }
82
+ @layer ly.reset {
83
+ :where(.ly-root),
84
+ :where(.ly-root *) {
85
+ box-sizing: border-box;
86
+ }
87
+
88
+ :where(.ly-root) {
89
+ min-inline-size: 0;
90
+ margin: 0;
91
+ }
92
+
93
+ :where(.ly-root img),
94
+ :where(.ly-root svg),
95
+ :where(.ly-root video),
96
+ :where(.ly-root canvas) {
97
+ max-inline-size: 100%;
98
+ }
704
99
  }
705
100
 
706
- /* layout-style-minimal-saas.css */
707
- /*
708
- Layout style: minimal-saas.
709
- Steady left-rail SaaS shell with conservative content widths and predictable
710
- workspace rhythm. Visual identity remains owned by ui-style-kit-css.
711
- */
712
-
713
- @layer ly.styles.minimal_saas {
714
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) {
715
- --ly-container-max: 88rem;
716
- --ly-page-padding-inline: clamp(1rem, 3vw, 2.5rem);
717
- --ly-section-padding-block: clamp(2rem, 5vw, 4rem);
718
- --ly-sidebar-width: clamp(15rem, 18vw, 19rem);
719
- --ly-grid-min: 16rem;
720
- --ly-gap: clamp(1rem, 2vw, 1.75rem);
721
- --ly-grid-gap: var(--ly-gap);
722
- --ly-stack-gap: clamp(0.875rem, 1.6vw, 1.35rem);
723
- }
724
-
725
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-app-main {
726
- padding-block: clamp(1rem, 2vw, 2rem);
727
- }
728
-
729
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-container,
730
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-wrapper {
731
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
732
- }
733
-
734
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-section {
735
- padding-block: var(--ly-section-padding-block);
736
- }
737
-
738
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-grid--auto {
739
- grid-auto-rows: minmax(8rem, auto);
740
- }
741
-
742
- @media (min-width: 48rem) {
743
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-app-shell {
744
- grid-template-areas:
745
- "sidebar header"
746
- "sidebar main";
747
- grid-template-columns: minmax(min(100%, 14rem), var(--ly-sidebar-width)) minmax(0, 1fr);
748
- }
749
-
750
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-app-sidebar {
751
- display: block;
752
- position: sticky;
753
- top: 0;
754
- height: 100svh;
755
- overflow: auto;
756
- }
757
-
758
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-sidebar-layout {
759
- grid-template-columns: minmax(min(100%, 14rem), 0.24fr) minmax(0, 1fr);
760
- }
761
-
762
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-split,
763
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-panes--two {
764
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 18rem), 0.44fr);
765
- }
766
- }
767
-
768
- @media (min-width: 80rem) {
769
- :where(.ly-root[data-layout="minimal-saas"], .ly-root[layout-style="minimal-saas"], .ly-root.ly-layout-minimal-saas, .ly-root.ly-style-minimal-saas) .ly-panes--three {
770
- grid-template-columns: minmax(min(100%, 13rem), 0.22fr) minmax(0, 1fr) minmax(min(100%, 16rem), 0.32fr);
771
- }
772
- }
101
+ @layer ly.wrappers {
102
+ .ly-wrapper {
103
+ /* Personalities provide only the plain-wrapper default; explicit variants stay authoritative. */
104
+ --ly-wrapper-max: var(--ly-personality-wrapper-max, var(--ly-wrapper-content));
105
+
106
+ /* Symmetric safe-area compensation keeps logical gutters stable in either direction. */
107
+ container-name: ly-wrapper;
108
+ container-type: inline-size;
109
+ inline-size: min(100%, calc(var(--ly-wrapper-max) + (var(--ly-wrapper-gutter) * 2)));
110
+ margin-inline: auto;
111
+ padding-inline: var(--ly-wrapper-gutter);
112
+ }
113
+
114
+ .ly-wrapper--compact {
115
+ --ly-wrapper-max: 40rem;
116
+ }
117
+
118
+ .ly-wrapper--prose {
119
+ --ly-wrapper-max: 68ch;
120
+ }
121
+
122
+ .ly-wrapper--content {
123
+ --ly-wrapper-max: 72rem;
124
+ }
125
+
126
+ .ly-wrapper--wide {
127
+ --ly-wrapper-max: 112rem;
128
+ }
129
+
130
+ .ly-wrapper--full {
131
+ --ly-wrapper-max: 100%;
132
+ }
133
+
134
+ .ly-wrapper--breakout {
135
+ --ly-breakout-content-size: min(
136
+ var(--ly-wrapper-content),
137
+ calc(100% - (var(--ly-wrapper-gutter) * 2))
138
+ );
139
+ --ly-breakout-feature-size: min(
140
+ var(--ly-wrapper-wide),
141
+ calc(100% - (var(--ly-wrapper-gutter) * 2))
142
+ );
143
+
144
+ display: grid;
145
+ grid-template-columns:
146
+ [full-start] minmax(min(100%, var(--ly-wrapper-gutter)), 1fr)
147
+ [feature-start] minmax(
148
+ 0,
149
+ calc((var(--ly-breakout-feature-size) - var(--ly-breakout-content-size)) / 2)
150
+ )
151
+ [content-start] minmax(0, var(--ly-breakout-content-size)) [content-end]
152
+ minmax(
153
+ 0,
154
+ calc((var(--ly-breakout-feature-size) - var(--ly-breakout-content-size)) / 2)
155
+ )
156
+ [feature-end] minmax(min(100%, var(--ly-wrapper-gutter)), 1fr) [full-end];
157
+ inline-size: 100%;
158
+ padding-inline: 0;
159
+ }
160
+
161
+ .ly-wrapper--breakout > * {
162
+ grid-column: content;
163
+ min-inline-size: 0;
164
+ }
165
+
166
+ .ly-wrapper--breakout > :where(.ly-lane--content, [data-ly-lane="content"]) {
167
+ grid-column: content;
168
+ }
169
+
170
+ .ly-wrapper--breakout > :where(.ly-lane--feature, [data-ly-lane="feature"]) {
171
+ grid-column: feature;
172
+ }
173
+
174
+ .ly-wrapper--breakout > :where(.ly-lane--full, [data-ly-lane="full"]) {
175
+ grid-column: full;
176
+ }
773
177
  }
774
178
 
775
- /* layout-style-bento.css */
776
- /*
777
- Layout style: bento.
778
- Modular dashboard shell with staged mosaic zones. Visual identity remains
779
- owned by ui-style-kit-css.
780
- */
781
-
782
- @layer ly.styles.bento {
783
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) {
784
- --ly-container-max: 104rem;
785
- --ly-page-padding-inline: clamp(1rem, 3.5vw, 3rem);
786
- --ly-section-padding-block: clamp(2rem, 6vw, 5rem);
787
- --ly-sidebar-width: clamp(13rem, 16vw, 17rem);
788
- --ly-grid-min: 14rem;
789
- --ly-gap: clamp(1rem, 2.5vw, 2rem);
790
- --ly-grid-gap: var(--ly-gap);
791
- --ly-stack-gap: clamp(1rem, 2vw, 1.75rem);
792
- }
793
-
794
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-app-main {
795
- padding-block: clamp(1rem, 3vw, 2.5rem);
796
- }
797
-
798
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-container,
799
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-wrapper {
800
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
801
- }
802
-
803
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-section {
804
- padding-block: var(--ly-section-padding-block);
805
- }
806
-
807
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-grid--auto {
808
- grid-auto-rows: minmax(9rem, auto);
809
- }
810
-
811
- @media (min-width: 48rem) {
812
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-app-shell {
813
- grid-template-areas:
814
- "sidebar header"
815
- "sidebar main";
816
- grid-template-columns: minmax(min(100%, 13rem), 0.26fr) minmax(0, 1fr);
817
- }
818
-
819
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-app-sidebar {
820
- display: block;
821
- position: sticky;
822
- top: var(--ly-space-3);
823
- height: calc(100svh - (var(--ly-space-3) * 2));
824
- margin: var(--ly-space-3) 0 var(--ly-space-3) var(--ly-space-3);
825
- overflow: auto;
826
- }
827
-
828
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-grid--auto > :nth-child(4n + 1) {
829
- grid-column: span 2;
830
- min-height: 14rem;
831
- }
832
-
833
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-sidebar-layout {
834
- grid-template-columns: minmax(min(100%, 12rem), 0.3fr) minmax(0, 1fr);
835
- }
836
-
837
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-split {
838
- grid-template-columns: minmax(0, 0.78fr) minmax(min(100%, 18rem), 1.22fr);
839
- }
840
-
841
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-panes--two {
842
- grid-template-columns: minmax(0, 1.18fr) minmax(min(100%, 18rem), 0.82fr);
843
- }
844
- }
845
-
846
- @media (min-width: 80rem) {
847
- :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-panes--three {
848
- grid-template-columns: minmax(min(100%, 12rem), 0.6fr) minmax(0, 1.4fr) minmax(min(100%, 14rem), 0.8fr);
849
- }
850
- }
179
+ /* primitives.css */
180
+ /* Reusable composition primitives own flow and sizing only. */
181
+
182
+ @layer ly.primitives {
183
+ .ly-page {
184
+ min-block-size: 100svh;
185
+ }
186
+
187
+ .ly-header,
188
+ .ly-footer,
189
+ .ly-main,
190
+ .ly-section,
191
+ .ly-surface {
192
+ min-inline-size: 0;
193
+ min-block-size: 0;
194
+ }
195
+
196
+ .ly-header {
197
+ min-block-size: var(--ly-header-height);
198
+ }
199
+
200
+ .ly-header--sticky {
201
+ position: sticky;
202
+ inset-block-start: 0;
203
+ z-index: var(--ly-z-header);
204
+ }
205
+
206
+ .ly-section {
207
+ padding-block: var(--ly-section-padding-block);
208
+ }
209
+
210
+ .ly-section--compact {
211
+ --ly-section-padding-block: var(--ly-space-7);
212
+ }
213
+
214
+ .ly-section--flush {
215
+ --ly-section-padding-block: 0;
216
+ }
217
+
218
+ .ly-readable {
219
+ max-inline-size: var(--ly-wrapper-prose);
220
+ }
221
+
222
+ .ly-stack {
223
+ display: flex;
224
+ flex-direction: column;
225
+ gap: var(--ly-stack-gap);
226
+ }
227
+
228
+ .ly-cluster {
229
+ display: flex;
230
+ flex-wrap: wrap;
231
+ align-items: center;
232
+ gap: var(--ly-cluster-gap);
233
+ }
234
+
235
+ .ly-center {
236
+ inline-size: min(100%, var(--ly-center-max, var(--ly-wrapper-content)));
237
+ margin-inline: auto;
238
+ }
239
+
240
+ .ly-cover {
241
+ display: flex;
242
+ flex-direction: column;
243
+ min-block-size: var(--ly-cover-min);
244
+ padding-block: var(--ly-cover-padding, var(--ly-space-5));
245
+ }
246
+
247
+ .ly-cover > :where(.ly-cover__center, [data-ly-cover-center]) {
248
+ margin-block: auto;
249
+ }
250
+
251
+ .ly-switcher {
252
+ display: flex;
253
+ flex-wrap: wrap;
254
+ gap: var(--ly-gap);
255
+ }
256
+
257
+ .ly-switcher > * {
258
+ flex-basis: calc((var(--ly-switcher-threshold) - 100%) * 999);
259
+ flex-grow: 1;
260
+ min-inline-size: 0;
261
+ }
262
+
263
+ .ly-sidebar {
264
+ display: flex;
265
+ flex-wrap: wrap;
266
+ gap: var(--ly-gap);
267
+ }
268
+
269
+ .ly-sidebar > :where(.ly-sidebar__side, [data-ly-sidebar="side"]) {
270
+ flex-basis: var(--ly-sidebar-size);
271
+ flex-grow: 1;
272
+ }
273
+
274
+ .ly-sidebar > :where(.ly-sidebar__content, [data-ly-sidebar="content"]) {
275
+ flex-basis: 0;
276
+ flex-grow: 999;
277
+ min-inline-size: min(100%, var(--ly-sidebar-content-min));
278
+ }
279
+
280
+ .ly-grid {
281
+ display: grid;
282
+ grid-template-columns: repeat(var(--ly-grid-columns), minmax(0, 1fr));
283
+ gap: var(--ly-grid-gap);
284
+ }
285
+
286
+ .ly-grid--auto {
287
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
288
+ }
289
+
290
+ .ly-grid > *,
291
+ .ly-split > *,
292
+ .ly-panes > *,
293
+ .ly-media > * {
294
+ min-inline-size: 0;
295
+ }
296
+
297
+ .ly-split {
298
+ display: grid;
299
+ grid-template-columns: minmax(0, 1fr);
300
+ gap: var(--ly-gap);
301
+ align-items: var(--ly-split-align, center);
302
+ }
303
+
304
+ .ly-panes {
305
+ display: grid;
306
+ grid-template-columns: minmax(0, 1fr);
307
+ gap: var(--ly-gap);
308
+ }
309
+
310
+ .ly-media {
311
+ display: grid;
312
+ grid-template-areas:
313
+ "media"
314
+ "content"
315
+ "actions";
316
+ grid-template-columns: minmax(0, 1fr);
317
+ gap: var(--ly-gap);
318
+ align-items: var(--ly-media-align, start);
319
+ }
320
+
321
+ .ly-media > :where(.ly-media__asset, [data-ly-media="asset"]) {
322
+ grid-area: media;
323
+ }
324
+
325
+ .ly-media > :where(.ly-media__content, [data-ly-media="content"]) {
326
+ grid-area: content;
327
+ }
328
+
329
+ .ly-media > :where(.ly-media__actions, [data-ly-media="actions"]) {
330
+ grid-area: actions;
331
+ }
332
+
333
+ .ly-reel {
334
+ display: grid;
335
+ grid-auto-flow: column;
336
+ grid-auto-columns: minmax(min(100%, var(--ly-reel-item-min)), var(--ly-reel-item-max));
337
+ gap: var(--ly-grid-gap);
338
+ overflow-x: auto;
339
+ overflow-inline: auto;
340
+ overscroll-behavior-inline: contain;
341
+ scroll-snap-type: inline proximity;
342
+ }
343
+
344
+ .ly-reel > * {
345
+ min-inline-size: 0;
346
+ scroll-snap-align: start;
347
+ }
348
+
349
+ .ly-frame {
350
+ aspect-ratio: var(--ly-frame-ratio);
351
+ overflow: hidden;
352
+ }
353
+
354
+ .ly-frame > * {
355
+ inline-size: 100%;
356
+ block-size: 100%;
357
+ object-fit: cover;
358
+ }
359
+
360
+ .ly-scroll {
361
+ min-block-size: 0;
362
+ max-block-size: var(--ly-scroll-max);
363
+ overflow: auto;
364
+ overscroll-behavior: contain;
365
+ }
366
+
367
+ /* Unsupported container-query browsers retain this safe DOM-order stack. */
851
368
  }
852
369
 
853
- /* layout-style-maximalist.css */
854
- /*
855
- Layout style: maximalist.
856
- Editorial shell with oversized hero splits and staggered supporting regions.
857
- Visual identity remains owned by ui-style-kit-css.
858
- */
859
-
860
- @layer ly.styles.maximalist {
861
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) {
862
- --ly-container-max: 102rem;
863
- --ly-page-padding-inline: clamp(1rem, 6vw, 5.5rem);
864
- --ly-section-padding-block: clamp(4rem, 13vw, 10rem);
865
- --ly-sidebar-width: clamp(13rem, 18vw, 20rem);
866
- --ly-grid-min: 14rem;
867
- --ly-gap: clamp(1.25rem, 4vw, 3rem);
868
- --ly-grid-gap: var(--ly-gap);
869
- --ly-stack-gap: clamp(1.5rem, 4vw, 3.5rem);
870
- }
871
-
872
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-app-main {
873
- padding-block: clamp(1rem, 3vw, 3rem);
874
- }
875
-
876
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-container,
877
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-wrapper {
878
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
879
- }
880
-
881
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-section {
882
- padding-block: clamp(3.5rem, 11vw, 8rem);
883
- }
884
-
885
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-split {
886
- align-items: stretch;
887
- }
888
-
889
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-grid--auto {
890
- grid-auto-rows: minmax(10rem, auto);
891
- }
892
-
893
- @media (min-width: 48rem) {
894
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-split {
895
- /* Keep the editorial stage stacked until the wider shell can carry the oversized rhythm. */
896
- grid-template-columns: 1fr;
897
- }
898
-
899
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-grid--auto > :nth-child(5n + 1) {
900
- grid-column: span 2;
901
- min-height: 24rem;
902
- }
903
-
904
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-grid--auto > :nth-child(5n + 3) {
905
- transform: translateY(var(--ly-space-7));
906
- }
907
- }
908
-
909
- @media (min-width: 56rem) {
910
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-app-shell {
911
- grid-template-areas:
912
- "header header"
913
- "main sidebar";
914
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 13rem), 0.28fr);
915
- }
916
-
917
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-app-sidebar {
918
- display: block;
919
- position: sticky;
920
- top: calc(var(--ly-gap) * 1.5);
921
- height: max-content;
922
- margin-block: clamp(2rem, 8vw, 7rem);
923
- transform: translateX(calc(var(--ly-gap) * -0.35));
924
- overflow: auto;
925
- }
926
-
927
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-sidebar-layout {
928
- grid-template-columns: minmax(0, 1.55fr) minmax(min(100%, 15rem), 0.45fr);
929
- }
930
-
931
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-split {
932
- grid-template-columns: minmax(0, 1.62fr) minmax(min(100%, 16rem), 0.54fr);
933
- gap: clamp(1.5rem, 6vw, 5rem);
934
- }
935
-
936
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-panes--two {
937
- grid-template-columns: minmax(min(100%, 16rem), 0.44fr) minmax(0, 1.56fr);
938
- }
939
- }
940
-
941
- @media (min-width: 80rem) {
942
- :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-panes--three {
943
- grid-template-columns: minmax(min(100%, 14rem), 0.34fr) minmax(0, 1.28fr) minmax(min(100%, 18rem), 0.58fr);
944
- }
945
- }
370
+ @layer ly.primitives {
371
+ @container (min-width: 48rem) {
372
+ .ly-split {
373
+ grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
374
+ }
375
+
376
+ .ly-panes--2 {
377
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, var(--ly-pane-size)), 0.7fr);
378
+ }
379
+
380
+ .ly-media {
381
+ grid-template-areas:
382
+ "media content"
383
+ "media actions";
384
+ grid-template-columns: minmax(min(100%, var(--ly-media-size)), auto) minmax(0, 1fr);
385
+ }
386
+ }
387
+
388
+ @container (min-width: 64rem) {
389
+ .ly-panes--3 {
390
+ grid-template-columns:
391
+ minmax(min(100%, var(--ly-pane-rail, 14rem)), 0.35fr)
392
+ minmax(0, 1fr)
393
+ minmax(min(100%, var(--ly-pane-rail, 14rem)), 0.35fr);
394
+ }
395
+ }
946
396
  }
947
397
 
948
- /* layout-style-bauhaus.css */
949
- /*
950
- Layout style: bauhaus.
951
- Strict framed column shell with structural rails and measured offsets. Visual
952
- identity remains owned by ui-style-kit-css.
953
- */
954
-
955
- @layer ly.styles.bauhaus {
956
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) {
957
- --ly-container-max: 92rem;
958
- --ly-page-padding-inline: clamp(1rem, 2vw, 2rem);
959
- --ly-section-padding-block: clamp(2.5rem, 5vw, 4.5rem);
960
- --ly-sidebar-width: clamp(8rem, 12vw, 12rem);
961
- --ly-grid-min: 13rem;
962
- --ly-gap: clamp(0.75rem, 1.6vw, 1.25rem);
963
- --ly-grid-gap: var(--ly-gap);
964
- --ly-stack-gap: clamp(0.75rem, 1.5vw, 1.25rem);
965
- }
966
-
967
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-app-main {
968
- padding-block: clamp(0.75rem, 2vw, 1.5rem);
969
- }
970
-
971
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-container,
972
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-wrapper {
973
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
974
- }
975
-
976
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-section {
977
- padding-block: var(--ly-section-padding-block);
978
- }
979
-
980
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-grid--auto {
981
- grid-auto-rows: minmax(7rem, auto);
982
- }
983
-
984
- @media (min-width: 48rem) {
985
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-app-shell {
986
- grid-template-areas:
987
- "sidebar header"
988
- "sidebar main";
989
- grid-template-columns: minmax(min(100%, 7rem), 0.18fr) minmax(0, 1fr);
990
- }
991
-
992
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-app-sidebar {
993
- display: block;
994
- position: sticky;
995
- top: 0;
996
- height: 100svh;
997
- overflow: auto;
998
- }
999
-
1000
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-sidebar-layout {
1001
- grid-template-columns: minmax(min(100%, 8rem), 0.22fr) minmax(0, 1fr);
1002
- }
1003
-
1004
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-split {
1005
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1006
- }
1007
-
1008
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-panes--two {
1009
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 12rem), 0.5fr);
1010
- }
1011
- }
1012
-
1013
- @media (min-width: 80rem) {
1014
- :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-panes--three {
1015
- grid-template-columns: minmax(min(100%, 10rem), 0.25fr) minmax(0, 1fr) minmax(min(100%, 10rem), 0.25fr);
1016
- }
1017
- }
398
+ /* recipes.css */
399
+ /*
400
+ Built-in recipes follow semantic mobile DOM order. Wider arrangements use
401
+ named areas so visual placement never changes keyboard or reading order.
402
+ */
403
+
404
+ @layer ly.recipes {
405
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]),
406
+ :where(.ly-dashboard, [data-ly-recipe="dashboard"]),
407
+ :where(.ly-docs, [data-ly-recipe="docs"]),
408
+ :where(.ly-list-detail, [data-ly-recipe="list-detail"]),
409
+ :where(.ly-split-hero, [data-ly-recipe="split-hero"]),
410
+ :where(.ly-gallery, [data-ly-recipe="gallery"]),
411
+ :where(.ly-card-grid, [data-ly-recipe="card-grid"]) {
412
+ container-name: ly-recipe;
413
+ container-type: inline-size;
414
+ min-inline-size: 0;
415
+ }
416
+
417
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]),
418
+ :where(.ly-dashboard, [data-ly-recipe="dashboard"]),
419
+ :where(.ly-docs, [data-ly-recipe="docs"]),
420
+ :where(.ly-list-detail, [data-ly-recipe="list-detail"]),
421
+ :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
422
+ display: grid;
423
+ grid-template-columns: minmax(0, 1fr);
424
+ gap: var(--ly-gap);
425
+ }
426
+
427
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
428
+ min-block-size: 100svh;
429
+ grid-template-areas:
430
+ "header"
431
+ "sidebar"
432
+ "main"
433
+ "aside"
434
+ "footer";
435
+ grid-template-rows: auto auto minmax(0, 1fr) auto auto;
436
+ }
437
+
438
+ :where(.ly-dashboard, [data-ly-recipe="dashboard"]) {
439
+ grid-template-areas:
440
+ "header"
441
+ "nav"
442
+ "main"
443
+ "aside"
444
+ "footer";
445
+ }
446
+
447
+ :where(.ly-docs, [data-ly-recipe="docs"]) {
448
+ grid-template-areas:
449
+ "header"
450
+ "nav"
451
+ "main"
452
+ "aside"
453
+ "footer";
454
+ }
455
+
456
+ :where(.ly-list-detail, [data-ly-recipe="list-detail"]) {
457
+ grid-template-areas:
458
+ "primary"
459
+ "secondary"
460
+ "actions";
461
+ }
462
+
463
+ :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
464
+ grid-template-areas:
465
+ "content"
466
+ "media"
467
+ "actions";
468
+ align-items: var(--ly-split-hero-align, center);
469
+ }
470
+
471
+ :where(.ly-gallery, [data-ly-recipe="gallery"]),
472
+ :where(.ly-card-grid, [data-ly-recipe="card-grid"]) {
473
+ display: grid;
474
+ gap: var(--ly-grid-gap);
475
+ }
476
+
477
+ :where(.ly-gallery, [data-ly-recipe="gallery"]) {
478
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
479
+ }
480
+
481
+ :where(.ly-card-grid, [data-ly-recipe="card-grid"]) {
482
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
483
+ }
484
+
485
+ :where(.ly-gallery, [data-ly-recipe="gallery"]) > *,
486
+ :where(.ly-card-grid, [data-ly-recipe="card-grid"]) > * {
487
+ min-inline-size: 0;
488
+ }
489
+
490
+ :where(.ly-area--header, [data-ly-area="header"]) {
491
+ grid-area: header;
492
+ min-inline-size: 0;
493
+ }
494
+
495
+ :where(.ly-area--nav, [data-ly-area="nav"]) {
496
+ grid-area: nav;
497
+ min-inline-size: 0;
498
+ }
499
+
500
+ :where(.ly-area--main, [data-ly-area="main"]) {
501
+ grid-area: main;
502
+ min-inline-size: 0;
503
+ }
504
+
505
+ :where(.ly-area--aside, [data-ly-area="aside"]) {
506
+ grid-area: aside;
507
+ min-inline-size: 0;
508
+ }
509
+
510
+ :where(.ly-area--footer, [data-ly-area="footer"]) {
511
+ grid-area: footer;
512
+ min-inline-size: 0;
513
+ }
514
+
515
+ :where(.ly-area--content, [data-ly-area="content"]) {
516
+ grid-area: content;
517
+ min-inline-size: 0;
518
+ }
519
+
520
+ :where(.ly-area--media, [data-ly-area="media"]) {
521
+ grid-area: media;
522
+ min-inline-size: 0;
523
+ }
524
+
525
+ :where(.ly-area--actions, [data-ly-area="actions"]) {
526
+ grid-area: actions;
527
+ min-inline-size: 0;
528
+ }
529
+
530
+ :where(.ly-area--primary, [data-ly-area="primary"]) {
531
+ grid-area: primary;
532
+ min-inline-size: 0;
533
+ }
534
+
535
+ :where(.ly-area--secondary, [data-ly-area="secondary"]) {
536
+ grid-area: secondary;
537
+ min-inline-size: 0;
538
+ }
539
+
540
+ .ly-app-header {
541
+ grid-area: header;
542
+ min-inline-size: 0;
543
+ }
544
+
545
+ .ly-app-sidebar {
546
+ grid-area: sidebar;
547
+ min-inline-size: 0;
548
+ }
549
+
550
+ .ly-app-main {
551
+ grid-area: main;
552
+ min-inline-size: 0;
553
+ }
554
+
555
+ .ly-app-aside {
556
+ grid-area: aside;
557
+ min-inline-size: 0;
558
+ }
559
+
560
+ .ly-app-footer {
561
+ grid-area: footer;
562
+ min-inline-size: 0;
563
+ }
564
+
565
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"])
566
+ > :where(.ly-area--nav, [data-ly-area="nav"]) {
567
+ grid-area: sidebar;
568
+ }
569
+
570
+ /*
571
+ A recipe responds to its nearest ancestor container and then becomes the
572
+ containment scope for nested compositions. Standalone roots keep the safe
573
+ mobile template when no ancestor container is present.
574
+ */
575
+ @container (min-width: 48rem) {
576
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
577
+ grid-template-areas:
578
+ "header header"
579
+ "sidebar main"
580
+ "aside main"
581
+ "footer footer";
582
+ grid-template-columns: minmax(min(100%, var(--ly-recipe-rail)), auto) minmax(0, 1fr);
583
+ }
584
+
585
+ :where(.ly-dashboard, [data-ly-recipe="dashboard"]) {
586
+ grid-template-areas:
587
+ "header header"
588
+ "nav nav"
589
+ "main aside"
590
+ "footer footer";
591
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, var(--ly-recipe-aside)), 0.35fr);
592
+ }
593
+
594
+ :where(.ly-docs, [data-ly-recipe="docs"]) {
595
+ grid-template-areas:
596
+ "header header"
597
+ "nav main"
598
+ "nav aside"
599
+ "footer footer";
600
+ grid-template-columns: minmax(min(100%, var(--ly-recipe-rail)), auto) minmax(0, 1fr);
601
+ }
602
+
603
+ :where(.ly-list-detail, [data-ly-recipe="list-detail"]) {
604
+ grid-template-areas:
605
+ "primary secondary"
606
+ "actions actions";
607
+ grid-template-columns: minmax(min(100%, var(--ly-pane-size)), 0.7fr) minmax(0, 1fr);
608
+ }
609
+
610
+ :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
611
+ grid-template-areas:
612
+ "content media"
613
+ "actions media";
614
+ grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
615
+ }
616
+
617
+ :where(.ly-gallery, [data-ly-recipe="gallery"]) {
618
+ --ly-gallery-min: 14rem;
619
+ }
620
+
621
+ :where(.ly-card-grid, [data-ly-recipe="card-grid"]) {
622
+ --ly-card-grid-min: 18rem;
623
+ }
624
+ }
625
+
626
+ @container (min-width: 64rem) {
627
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
628
+ grid-template-areas:
629
+ "sidebar header header"
630
+ "sidebar main aside"
631
+ "sidebar footer footer";
632
+ grid-template-columns:
633
+ minmax(min(100%, var(--ly-recipe-rail)), auto)
634
+ minmax(0, 1fr)
635
+ minmax(min(100%, var(--ly-recipe-aside)), 0.35fr);
636
+ }
637
+
638
+ :where(.ly-dashboard, [data-ly-recipe="dashboard"]),
639
+ :where(.ly-docs, [data-ly-recipe="docs"]) {
640
+ grid-template-areas:
641
+ "nav header header"
642
+ "nav main aside"
643
+ "nav footer footer";
644
+ grid-template-columns:
645
+ minmax(min(100%, var(--ly-recipe-rail)), auto)
646
+ minmax(0, 1fr)
647
+ minmax(min(100%, var(--ly-recipe-aside)), 0.35fr);
648
+ }
649
+
650
+ :where(.ly-list-detail, [data-ly-recipe="list-detail"]) {
651
+ grid-template-columns: minmax(min(100%, var(--ly-pane-size)), 0.45fr) minmax(0, 1fr);
652
+ }
653
+
654
+ :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
655
+ grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
656
+ }
657
+
658
+ :where(.ly-gallery, [data-ly-recipe="gallery"]) {
659
+ --ly-gallery-min: 16rem;
660
+ }
661
+
662
+ :where(.ly-card-grid, [data-ly-recipe="card-grid"]) {
663
+ --ly-card-grid-min: 20rem;
664
+ }
665
+ }
1018
666
  }
1019
667
 
1020
- /* layout-style-tactile.css */
1021
- /*
1022
- Layout style: tactile.
1023
- Instrument-panel shell with a heavier support dock and dense controls. Visual
1024
- identity remains owned by ui-style-kit-css.
1025
- */
1026
-
1027
- @layer ly.styles.tactile {
1028
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) {
1029
- --ly-container-max: 98rem;
1030
- --ly-page-padding-inline: clamp(1rem, 3vw, 2.75rem);
1031
- --ly-section-padding-block: clamp(2rem, 5vw, 4rem);
1032
- --ly-sidebar-width: clamp(18rem, 22vw, 24rem);
1033
- --ly-grid-min: 15rem;
1034
- --ly-gap: clamp(1rem, 2.2vw, 1.75rem);
1035
- --ly-grid-gap: var(--ly-gap);
1036
- --ly-stack-gap: clamp(1rem, 2vw, 1.75rem);
1037
- }
1038
-
1039
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-app-main {
1040
- padding-block: clamp(1rem, 2.5vw, 2rem);
1041
- }
1042
-
1043
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-container,
1044
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-wrapper {
1045
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1046
- }
1047
-
1048
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-section {
1049
- padding-block: var(--ly-section-padding-block);
1050
- }
1051
-
1052
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-grid--auto {
1053
- grid-auto-rows: minmax(8rem, auto);
1054
- }
1055
-
1056
- @media (min-width: 48rem) {
1057
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-app-shell {
1058
- grid-template-areas:
1059
- "sidebar header"
1060
- "sidebar main";
1061
- grid-template-columns: minmax(min(100%, 18rem), var(--ly-sidebar-width)) minmax(0, 1fr);
1062
- }
1063
-
1064
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-app-sidebar {
1065
- display: block;
1066
- position: sticky;
1067
- top: 0;
1068
- height: 100svh;
1069
- overflow: auto;
1070
- }
1071
-
1072
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-sidebar-layout {
1073
- grid-template-columns: minmax(min(100%, 18rem), 0.42fr) minmax(0, 1fr);
1074
- }
1075
-
1076
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-split {
1077
- grid-template-columns: minmax(0, 1.18fr) minmax(min(100%, 18rem), 0.82fr);
1078
- }
1079
-
1080
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-panes--two {
1081
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 20rem), 0.62fr);
1082
- }
1083
- }
1084
-
1085
- @media (min-width: 80rem) {
1086
- :where(.ly-root[data-layout="tactile"], .ly-root[layout-style="tactile"], .ly-root.ly-layout-tactile, .ly-root.ly-style-tactile) .ly-panes--three {
1087
- grid-template-columns: minmax(min(100%, 17rem), 0.4fr) minmax(0, 1fr) minmax(min(100%, 18rem), 0.46fr);
1088
- }
1089
- }
668
+ /* utilities.css */
669
+ @layer ly.utilities {
670
+ .ly-cols-1 { --ly-grid-columns: 1; }
671
+ .ly-cols-2 { --ly-grid-columns: 2; }
672
+ .ly-cols-3 { --ly-grid-columns: 3; }
673
+ .ly-cols-4 { --ly-grid-columns: 4; }
674
+ .ly-cols-5 { --ly-grid-columns: 5; }
675
+ .ly-cols-6 { --ly-grid-columns: 6; }
676
+ .ly-cols-7 { --ly-grid-columns: 7; }
677
+ .ly-cols-8 { --ly-grid-columns: 8; }
678
+ .ly-cols-9 { --ly-grid-columns: 9; }
679
+ .ly-cols-10 { --ly-grid-columns: 10; }
680
+ .ly-cols-11 { --ly-grid-columns: 11; }
681
+ .ly-cols-12 { --ly-grid-columns: 12; }
682
+ .ly-cols-16 { --ly-grid-columns: 16; }
683
+
684
+ .ly-span-1 { grid-column: span 1; }
685
+ .ly-span-2 { grid-column: span 2; }
686
+ .ly-span-3 { grid-column: span 3; }
687
+ .ly-span-4 { grid-column: span 4; }
688
+ .ly-span-5 { grid-column: span 5; }
689
+ .ly-span-6 { grid-column: span 6; }
690
+ .ly-span-7 { grid-column: span 7; }
691
+ .ly-span-8 { grid-column: span 8; }
692
+ .ly-span-9 { grid-column: span 9; }
693
+ .ly-span-10 { grid-column: span 10; }
694
+ .ly-span-11 { grid-column: span 11; }
695
+ .ly-span-12 { grid-column: span 12; }
696
+ .ly-span-13 { grid-column: span 13; }
697
+ .ly-span-14 { grid-column: span 14; }
698
+ .ly-span-15 { grid-column: span 15; }
699
+ .ly-span-16 { grid-column: span 16; }
700
+ .ly-span-full { grid-column: 1 / -1; }
701
+
702
+ .ly-gap-0 { --ly-gap: var(--ly-space-0); --ly-grid-gap: var(--ly-space-0); --ly-stack-gap: var(--ly-space-0); --ly-cluster-gap: var(--ly-space-0); }
703
+ .ly-gap-1 { --ly-gap: var(--ly-space-1); --ly-grid-gap: var(--ly-space-1); --ly-stack-gap: var(--ly-space-1); --ly-cluster-gap: var(--ly-space-1); }
704
+ .ly-gap-2 { --ly-gap: var(--ly-space-2); --ly-grid-gap: var(--ly-space-2); --ly-stack-gap: var(--ly-space-2); --ly-cluster-gap: var(--ly-space-2); }
705
+ .ly-gap-3 { --ly-gap: var(--ly-space-3); --ly-grid-gap: var(--ly-space-3); --ly-stack-gap: var(--ly-space-3); --ly-cluster-gap: var(--ly-space-3); }
706
+ .ly-gap-4 { --ly-gap: var(--ly-space-4); --ly-grid-gap: var(--ly-space-4); --ly-stack-gap: var(--ly-space-4); --ly-cluster-gap: var(--ly-space-4); }
707
+ .ly-gap-5 { --ly-gap: var(--ly-space-5); --ly-grid-gap: var(--ly-space-5); --ly-stack-gap: var(--ly-space-5); --ly-cluster-gap: var(--ly-space-5); }
708
+ .ly-gap-6 { --ly-gap: var(--ly-space-6); --ly-grid-gap: var(--ly-space-6); --ly-stack-gap: var(--ly-space-6); --ly-cluster-gap: var(--ly-space-6); }
709
+ .ly-gap-7 { --ly-gap: var(--ly-space-7); --ly-grid-gap: var(--ly-space-7); --ly-stack-gap: var(--ly-space-7); --ly-cluster-gap: var(--ly-space-7); }
710
+ .ly-gap-8 { --ly-gap: var(--ly-space-8); --ly-grid-gap: var(--ly-space-8); --ly-stack-gap: var(--ly-space-8); --ly-cluster-gap: var(--ly-space-8); }
711
+ .ly-gap-9 { --ly-gap: var(--ly-space-9); --ly-grid-gap: var(--ly-space-9); --ly-stack-gap: var(--ly-space-9); --ly-cluster-gap: var(--ly-space-9); }
712
+
713
+ .ly-pad-0 { padding: var(--ly-space-0); }
714
+ .ly-pad-1 { padding: var(--ly-space-1); }
715
+ .ly-pad-2 { padding: var(--ly-space-2); }
716
+ .ly-pad-3 { padding: var(--ly-space-3); }
717
+ .ly-pad-4 { padding: var(--ly-space-4); }
718
+ .ly-pad-5 { padding: var(--ly-space-5); }
719
+ .ly-pad-6 { padding: var(--ly-space-6); }
720
+ .ly-pad-7 { padding: var(--ly-space-7); }
721
+ .ly-pad-8 { padding: var(--ly-space-8); }
722
+ .ly-pad-9 { padding: var(--ly-space-9); }
723
+
724
+ .ly-px-4 { padding-inline: var(--ly-space-4); }
725
+ .ly-px-6 { padding-inline: var(--ly-space-6); }
726
+ .ly-px-8 { padding-inline: var(--ly-space-8); }
727
+ .ly-py-4 { padding-block: var(--ly-space-4); }
728
+ .ly-py-6 { padding-block: var(--ly-space-6); }
729
+ .ly-py-8 { padding-block: var(--ly-space-8); }
730
+
731
+ .ly-mx-auto { margin-inline: auto; }
732
+ .ly-w-full { inline-size: 100%; }
733
+ .ly-h-full { block-size: 100%; }
734
+ .ly-min-h-screen { min-block-size: 100svh; }
735
+ .ly-bleed { inline-size: 100vw; margin-inline: calc(50% - 50vw); }
736
+ .ly-overflow-auto { overflow: auto; }
737
+ .ly-overflow-hidden { overflow: hidden; }
738
+
739
+ .ly-items-start { align-items: flex-start; }
740
+ .ly-items-center { align-items: center; }
741
+ .ly-items-end { align-items: flex-end; }
742
+ .ly-items-stretch { align-items: stretch; }
743
+ .ly-justify-start { justify-content: flex-start; }
744
+ .ly-justify-center { justify-content: center; }
745
+ .ly-justify-end { justify-content: flex-end; }
746
+ .ly-justify-between { justify-content: space-between; }
747
+
748
+ .ly-frame-1x1 { --ly-frame-ratio: 1 / 1; }
749
+ .ly-frame-2x1 { --ly-frame-ratio: 2 / 1; }
750
+ .ly-frame-3x2 { --ly-frame-ratio: 3 / 2; }
751
+ .ly-frame-4x3 { --ly-frame-ratio: 4 / 3; }
752
+ .ly-frame-16x9 { --ly-frame-ratio: 16 / 9; }
753
+ .ly-frame-21x9 { --ly-frame-ratio: 21 / 9; }
754
+
755
+ .ly-hidden { display: none !important; }
756
+
757
+ .ly-show-md-up,
758
+ .ly-show-lg-up {
759
+ display: none !important;
760
+ }
761
+
762
+ .ly-visually-hidden {
763
+ position: absolute !important;
764
+ inline-size: 1px !important;
765
+ block-size: 1px !important;
766
+ padding: 0 !important;
767
+ margin: -1px !important;
768
+ overflow: hidden !important;
769
+ clip: rect(0, 0, 0, 0) !important;
770
+ clip-path: inset(50%) !important;
771
+ white-space: nowrap !important;
772
+ }
773
+
774
+ /* Explicit escape hatches require consumers to verify focus and reading order. */
775
+ .ly-order-first { order: -1; }
776
+ .ly-order-normal { order: 0; }
777
+ .ly-order-last { order: 999; }
778
+ .ly-order-1 { order: 1; }
779
+ .ly-order-2 { order: 2; }
780
+ .ly-order-3 { order: 3; }
781
+ .ly-order-4 { order: 4; }
782
+ .ly-order-5 { order: 5; }
783
+ .ly-order-6 { order: 6; }
784
+
785
+ @container (min-width: 48rem) {
786
+ .ly-md-cols-1 { --ly-grid-columns: 1; }
787
+ .ly-md-cols-2 { --ly-grid-columns: 2; }
788
+ .ly-md-cols-3 { --ly-grid-columns: 3; }
789
+ .ly-md-cols-4 { --ly-grid-columns: 4; }
790
+ .ly-md-cols-6 { --ly-grid-columns: 6; }
791
+ .ly-md-cols-8 { --ly-grid-columns: 8; }
792
+ .ly-md-cols-12 { --ly-grid-columns: 12; }
793
+ .ly-md-cols-16 { --ly-grid-columns: 16; }
794
+ .ly-show-md-up { display: revert !important; }
795
+
796
+ .ly-md-order-first { order: -1; }
797
+ .ly-md-order-normal { order: 0; }
798
+ .ly-md-order-last { order: 999; }
799
+ .ly-md-order-1 { order: 1; }
800
+ .ly-md-order-2 { order: 2; }
801
+ .ly-md-order-3 { order: 3; }
802
+ .ly-md-order-4 { order: 4; }
803
+ .ly-md-order-5 { order: 5; }
804
+ .ly-md-order-6 { order: 6; }
805
+ }
806
+
807
+ @container (min-width: 64rem) {
808
+ .ly-lg-cols-1 { --ly-grid-columns: 1; }
809
+ .ly-lg-cols-2 { --ly-grid-columns: 2; }
810
+ .ly-lg-cols-3 { --ly-grid-columns: 3; }
811
+ .ly-lg-cols-4 { --ly-grid-columns: 4; }
812
+ .ly-lg-cols-6 { --ly-grid-columns: 6; }
813
+ .ly-lg-cols-8 { --ly-grid-columns: 8; }
814
+ .ly-lg-cols-12 { --ly-grid-columns: 12; }
815
+ .ly-lg-cols-16 { --ly-grid-columns: 16; }
816
+ .ly-show-lg-up { display: revert !important; }
817
+
818
+ .ly-lg-order-first { order: -1; }
819
+ .ly-lg-order-normal { order: 0; }
820
+ .ly-lg-order-last { order: 999; }
821
+ .ly-lg-order-1 { order: 1; }
822
+ .ly-lg-order-2 { order: 2; }
823
+ .ly-lg-order-3 { order: 3; }
824
+ .ly-lg-order-4 { order: 4; }
825
+ .ly-lg-order-5 { order: 5; }
826
+ .ly-lg-order-6 { order: 6; }
827
+ }
828
+ }
829
+
830
+ /* personalities/minimal-saas.css */
831
+ /* Layout style: minimal-saas. A measured left rail keeps work areas predictable. */
832
+
833
+ @layer ly.personalities.minimal_saas {
834
+ :where(.ly-root[data-ly-layout="minimal-saas"]) {
835
+ --ly-recipe-rail: 15rem;
836
+ --ly-recipe-aside: 16rem;
837
+ --ly-grid-columns: 4;
838
+ --ly-grid-min: 16rem;
839
+ --ly-personality-wrapper-max: 88rem;
840
+
841
+ container-name: ly-personality;
842
+ container-type: inline-size;
843
+ min-inline-size: 0;
844
+ }
845
+
846
+ /* Named areas rearrange the shell without changing its mobile DOM or focus order. */
847
+ @container ly-personality (min-width: 48rem) {
848
+ :where(.ly-root[data-ly-layout="minimal-saas"])
849
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
850
+ grid-template-areas:
851
+ "sidebar header header"
852
+ "sidebar main aside"
853
+ "sidebar footer footer";
854
+ grid-template-rows: auto minmax(0, 1fr) auto;
855
+ grid-template-columns:
856
+ minmax(min(100%, 15rem), 0.24fr)
857
+ minmax(0, 1fr)
858
+ minmax(min(100%, 16rem), 0.28fr);
859
+ }
860
+
861
+ :where(.ly-root[data-ly-layout="minimal-saas"]) .ly-grid > :nth-child(4n + 1) {
862
+ grid-column: span 2;
863
+ }
864
+ }
865
+ }
866
+
867
+ /* personalities/bento.css */
868
+ /* Layout style: bento. A full-width shell and staggered spans form modular tiles. */
869
+
870
+ @layer ly.personalities.bento {
871
+ :where(.ly-root[data-ly-layout="bento"]) {
872
+ --ly-grid-columns: 6;
873
+ --ly-grid-min: 12rem;
874
+ --ly-card-grid-min: 13rem;
875
+ --ly-personality-wrapper-max: 112rem;
876
+
877
+ container-name: ly-personality;
878
+ container-type: inline-size;
879
+ min-inline-size: 0;
880
+ }
881
+
882
+ @container ly-personality (min-width: 48rem) {
883
+ :where(.ly-root[data-ly-layout="bento"])
884
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
885
+ grid-template-areas:
886
+ "header header header"
887
+ "sidebar main main"
888
+ "aside main main"
889
+ "footer footer footer";
890
+ grid-template-rows: auto minmax(0, 1fr) auto auto;
891
+ grid-template-columns:
892
+ minmax(min(100%, 14rem), 0.3fr)
893
+ minmax(0, 1fr)
894
+ minmax(0, 1fr);
895
+ }
896
+
897
+ :where(.ly-root[data-ly-layout="bento"]) .ly-grid > :nth-child(6n + 1) {
898
+ grid-column: span 2;
899
+ grid-row: span 2;
900
+ }
901
+
902
+ :where(.ly-root[data-ly-layout="bento"])
903
+ :where(.ly-card-grid, [data-ly-recipe="card-grid"])
904
+ > :nth-child(6n + 1) {
905
+ grid-column: span 2;
906
+ }
907
+ }
908
+ }
909
+
910
+ /* personalities/maximalist.css */
911
+ /* Layout style: maximalist. A full-bleed four-track mosaic favors dramatic spans. */
912
+
913
+ @layer ly.personalities.maximalist {
914
+ :where(.ly-root[data-ly-layout="maximalist"]) {
915
+ --ly-grid-columns: 12;
916
+ --ly-grid-min: 10rem;
917
+ --ly-personality-wrapper-max: 100%;
918
+ --ly-card-grid-min: 12rem;
919
+
920
+ container-name: ly-personality;
921
+ container-type: inline-size;
922
+ min-inline-size: 0;
923
+ }
924
+
925
+ @container ly-personality (min-width: 48rem) {
926
+ :where(.ly-root[data-ly-layout="maximalist"])
927
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
928
+ grid-template-columns: minmax(min(100%, 18rem), 0.3fr) minmax(0, 1fr);
929
+ }
930
+ }
931
+
932
+ @container ly-personality (min-width: 56rem) {
933
+ :where(.ly-root[data-ly-layout="maximalist"])
934
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
935
+ grid-template-areas:
936
+ "header header header header"
937
+ "main main sidebar aside"
938
+ "main main footer footer";
939
+ grid-template-rows: auto minmax(0, 1fr) auto;
940
+ grid-template-columns:
941
+ minmax(0, 1.4fr)
942
+ minmax(0, 0.6fr)
943
+ minmax(min(100%, 15rem), 0.32fr)
944
+ minmax(min(100%, 18rem), 0.38fr);
945
+ }
946
+
947
+ :where(.ly-root[data-ly-layout="maximalist"]) .ly-grid > :nth-child(7n + 1) {
948
+ grid-column: span 3;
949
+ grid-row: span 2;
950
+ }
951
+
952
+ :where(.ly-root[data-ly-layout="maximalist"])
953
+ :where(.ly-gallery, [data-ly-recipe="gallery"])
954
+ > :nth-child(5n + 1) {
955
+ grid-column: span 2;
956
+ grid-row: span 2;
957
+ }
958
+ }
1090
959
  }
1091
960
 
1092
- /* layout-style-neumorphism.css */
1093
- /*
1094
- Layout style: neumorphism.
1095
- Centered island shell with detached support regions. Visual identity remains
1096
- owned by ui-style-kit-css.
1097
- */
1098
-
1099
- @layer ly.styles.neumorphism {
1100
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) {
1101
- --ly-container-max: 86rem;
1102
- --ly-page-padding-inline: clamp(1.25rem, 5vw, 4rem);
1103
- --ly-section-padding-block: clamp(3rem, 8vw, 6rem);
1104
- --ly-sidebar-width: clamp(16rem, 20vw, 20rem);
1105
- --ly-grid-min: 16rem;
1106
- --ly-gap: clamp(1.25rem, 3vw, 2.5rem);
1107
- --ly-grid-gap: var(--ly-gap);
1108
- --ly-stack-gap: clamp(1.25rem, 2.5vw, 2rem);
1109
- }
1110
-
1111
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-app-main {
1112
- padding-block: clamp(2rem, 5vw, 4rem);
1113
- }
1114
-
1115
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-container,
1116
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-wrapper {
1117
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1118
- }
1119
-
1120
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-section {
1121
- padding-block: var(--ly-section-padding-block);
1122
- }
1123
-
1124
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-grid--auto {
1125
- grid-auto-rows: minmax(9rem, auto);
1126
- }
1127
-
1128
- @media (min-width: 56rem) {
1129
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-app-shell {
1130
- grid-template-areas:
1131
- "header header"
1132
- "main sidebar";
1133
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), 0.34fr);
1134
- align-items: start;
1135
- }
1136
-
1137
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-app-sidebar {
1138
- display: block;
1139
- position: sticky;
1140
- top: clamp(1rem, 3vw, 2rem);
1141
- max-height: calc(100svh - clamp(2rem, 6vw, 4rem));
1142
- margin: clamp(1rem, 4vw, 3rem) clamp(1rem, 4vw, 3rem) clamp(1rem, 4vw, 3rem) 0;
1143
- overflow: auto;
1144
- }
1145
-
1146
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-sidebar-layout {
1147
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), 0.42fr);
1148
- }
1149
-
1150
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-split {
1151
- grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
1152
- }
1153
-
1154
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-panes--two {
1155
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 17rem), 0.5fr);
1156
- }
1157
- }
1158
-
1159
- @media (min-width: 80rem) {
1160
- :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-panes--three {
1161
- grid-template-columns: minmax(min(100%, 15rem), 0.38fr) minmax(0, 1fr) minmax(min(100%, 15rem), 0.38fr);
1162
- }
1163
- }
961
+ /* personalities/bauhaus.css */
962
+ /* Layout style: bauhaus. A left rail anchors an intentionally asymmetric grid. */
963
+
964
+ @layer ly.personalities.bauhaus {
965
+ :where(.ly-root[data-ly-layout="bauhaus"]) {
966
+ --ly-recipe-rail: 14rem;
967
+ --ly-recipe-aside: 18rem;
968
+ --ly-grid-columns: 6;
969
+ --ly-grid-min: 13rem;
970
+ --ly-personality-wrapper-max: 96rem;
971
+
972
+ container-name: ly-personality;
973
+ container-type: inline-size;
974
+ min-inline-size: 0;
975
+ }
976
+
977
+ /* Cap the fallback rail until the wider personality template is eligible. */
978
+ @container ly-personality (min-width: 48rem) {
979
+ :where(.ly-root[data-ly-layout="bauhaus"])
980
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
981
+ grid-template-columns: minmax(min(100%, 14rem), 0.3fr) minmax(0, 1fr);
982
+ }
983
+ }
984
+
985
+ @container ly-personality (min-width: 52rem) {
986
+ :where(.ly-root[data-ly-layout="bauhaus"])
987
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
988
+ grid-template-areas:
989
+ "sidebar header header aside"
990
+ "sidebar main main aside"
991
+ "sidebar footer footer footer";
992
+ grid-template-rows: auto minmax(0, 1fr) auto;
993
+ grid-template-columns:
994
+ minmax(min(100%, 14rem), 0.24fr)
995
+ minmax(0, 0.7fr)
996
+ minmax(0, 1.3fr)
997
+ minmax(min(100%, 18rem), 0.3fr);
998
+ }
999
+
1000
+ :where(.ly-root[data-ly-layout="bauhaus"]) .ly-grid > :nth-child(3n + 1) {
1001
+ grid-column: span 2;
1002
+ grid-row: span 2;
1003
+ }
1004
+ }
1005
+ }
1006
+
1007
+ /* personalities/tactile.css */
1008
+ /* Layout style: tactile. A compact left rail leaves a broad, steady work lane. */
1009
+
1010
+ @layer ly.personalities.tactile {
1011
+ :where(.ly-root[data-ly-layout="tactile"]) {
1012
+ --ly-recipe-rail: 17rem;
1013
+ --ly-recipe-aside: 20rem;
1014
+ --ly-grid-columns: 5;
1015
+ --ly-grid-min: 15rem;
1016
+ --ly-personality-wrapper-max: 82rem;
1017
+
1018
+ container-name: ly-personality;
1019
+ container-type: inline-size;
1020
+ min-inline-size: 0;
1021
+ }
1022
+
1023
+ @container ly-personality (min-width: 48rem) {
1024
+ :where(.ly-root[data-ly-layout="tactile"])
1025
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1026
+ grid-template-areas:
1027
+ "sidebar header"
1028
+ "sidebar main"
1029
+ "sidebar aside"
1030
+ "sidebar footer";
1031
+ grid-template-rows: auto minmax(0, 1fr) auto auto;
1032
+ grid-template-columns: minmax(min(100%, 17rem), 0.28fr) minmax(0, 1fr);
1033
+ }
1034
+
1035
+ :where(.ly-root[data-ly-layout="tactile"]) .ly-grid > :nth-child(5n + 2) {
1036
+ grid-column: span 2;
1037
+ }
1038
+
1039
+ :where(.ly-root[data-ly-layout="tactile"])
1040
+ :where(.ly-list-detail, [data-ly-recipe="list-detail"]) {
1041
+ grid-template-columns: minmax(min(100%, 20rem), 0.42fr) minmax(0, 0.58fr);
1042
+ }
1043
+ }
1044
+ }
1045
+
1046
+ /* personalities/neumorphism.css */
1047
+ /* Layout style: neumorphism. A calm right rail preserves a compact workspace. */
1048
+
1049
+ @layer ly.personalities.neumorphism {
1050
+ :where(.ly-root[data-ly-layout="neumorphism"]) {
1051
+ --ly-recipe-rail: 17rem;
1052
+ --ly-recipe-aside: 19rem;
1053
+ --ly-grid-columns: 4;
1054
+ --ly-grid-min: 17rem;
1055
+ --ly-personality-wrapper-max: 84rem;
1056
+
1057
+ container-name: ly-personality;
1058
+ container-type: inline-size;
1059
+ min-inline-size: 0;
1060
+ }
1061
+
1062
+ @container ly-personality (min-width: 48rem) {
1063
+ :where(.ly-root[data-ly-layout="neumorphism"])
1064
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1065
+ grid-template-columns: minmax(min(100%, 17rem), 0.3fr) minmax(0, 1fr);
1066
+ }
1067
+ }
1068
+
1069
+ @container ly-personality (min-width: 52rem) {
1070
+ :where(.ly-root[data-ly-layout="neumorphism"])
1071
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1072
+ grid-template-areas:
1073
+ "header sidebar"
1074
+ "main sidebar"
1075
+ "aside sidebar"
1076
+ "footer sidebar";
1077
+ grid-template-rows: auto minmax(0, 1fr) auto auto;
1078
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 17rem), 0.3fr);
1079
+ }
1080
+
1081
+ :where(.ly-root[data-ly-layout="neumorphism"]) .ly-grid > :nth-child(4n + 1) {
1082
+ grid-column: span 2;
1083
+ }
1084
+
1085
+ :where(.ly-root[data-ly-layout="neumorphism"])
1086
+ :where(.ly-list-detail, [data-ly-recipe="list-detail"]) {
1087
+ grid-template-columns: minmax(0, 0.58fr) minmax(min(100%, 19rem), 0.42fr);
1088
+ }
1089
+ }
1164
1090
  }
1165
1091
 
1166
- /* layout-style-retrofuturism.css */
1167
- /*
1168
- Layout style: retrofuturism.
1169
- Panoramic bridge shell with symmetric pods and a wide central stage. Visual
1170
- identity remains owned by ui-style-kit-css.
1171
- */
1172
-
1173
- @layer ly.styles.retrofuturism {
1174
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) {
1175
- --ly-container-max: 110rem;
1176
- --ly-page-padding-inline: clamp(1rem, 4vw, 4rem);
1177
- --ly-section-padding-block: clamp(3rem, 8vw, 7rem);
1178
- --ly-sidebar-width: clamp(12rem, 14vw, 16rem);
1179
- --ly-grid-min: 15rem;
1180
- --ly-gap: clamp(1rem, 3vw, 2.5rem);
1181
- --ly-grid-gap: var(--ly-gap);
1182
- --ly-stack-gap: clamp(1rem, 2.4vw, 2rem);
1183
- }
1184
-
1185
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-app-main {
1186
- padding-block: clamp(1.5rem, 4vw, 3rem);
1187
- }
1188
-
1189
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-container,
1190
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-wrapper {
1191
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1192
- }
1193
-
1194
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-section {
1195
- padding-block: var(--ly-section-padding-block);
1196
- }
1197
-
1198
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-grid--auto {
1199
- grid-auto-rows: minmax(8rem, auto);
1200
- }
1201
-
1202
- @media (min-width: 56rem) {
1203
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-app-shell {
1204
- grid-template-areas:
1205
- "header header header"
1206
- "sidebar main main";
1207
- grid-template-columns: minmax(min(100%, 12rem), 0.24fr) minmax(0, 1fr) minmax(min(100%, 12rem), 0.24fr);
1208
- }
1209
-
1210
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-app-sidebar {
1211
- display: block;
1212
- position: sticky;
1213
- top: clamp(1rem, 2vw, 1.5rem);
1214
- height: calc(100svh - clamp(2rem, 4vw, 3rem));
1215
- margin: clamp(1rem, 2vw, 1.5rem) 0 clamp(1rem, 2vw, 1.5rem) clamp(1rem, 2vw, 1.5rem);
1216
- overflow: auto;
1217
- }
1218
-
1219
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-sidebar-layout {
1220
- grid-template-columns: minmax(min(100%, 12rem), 0.32fr) minmax(0, 1fr);
1221
- }
1222
-
1223
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-split {
1224
- grid-template-columns: minmax(0, 1.35fr) minmax(min(100%, 16rem), 0.65fr);
1225
- }
1226
-
1227
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-panes--two {
1228
- grid-template-columns: minmax(min(100%, 14rem), 0.44fr) minmax(0, 1.2fr);
1229
- }
1230
- }
1231
-
1232
- @media (min-width: 80rem) {
1233
- :where(.ly-root[data-layout="retrofuturism"], .ly-root[layout-style="retrofuturism"], .ly-root.ly-layout-retrofuturism, .ly-root.ly-style-retrofuturism) .ly-panes--three {
1234
- grid-template-columns: minmax(min(100%, 12rem), 0.44fr) minmax(0, 1.4fr) minmax(min(100%, 12rem), 0.44fr);
1235
- }
1236
- }
1092
+ /* personalities/retrofuturism.css */
1093
+ /* Layout style: retrofuturism. Twin rails frame a focused central work zone. */
1094
+
1095
+ @layer ly.personalities.retrofuturism {
1096
+ :where(.ly-root[data-ly-layout="retrofuturism"]) {
1097
+ --ly-recipe-rail: 14rem;
1098
+ --ly-recipe-aside: 17rem;
1099
+ --ly-grid-columns: 6;
1100
+ --ly-grid-min: 14rem;
1101
+ --ly-personality-wrapper-max: 106rem;
1102
+
1103
+ container-name: ly-personality;
1104
+ container-type: inline-size;
1105
+ min-inline-size: 0;
1106
+ }
1107
+
1108
+ @container ly-personality (min-width: 48rem) {
1109
+ :where(.ly-root[data-ly-layout="retrofuturism"])
1110
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1111
+ grid-template-areas:
1112
+ "sidebar header aside"
1113
+ "sidebar main aside"
1114
+ "sidebar footer aside";
1115
+ grid-template-rows: auto minmax(0, 1fr) auto;
1116
+ grid-template-columns:
1117
+ minmax(min(100%, 14rem), 0.24fr)
1118
+ minmax(0, 1fr)
1119
+ minmax(min(100%, 17rem), 0.3fr);
1120
+ }
1121
+
1122
+ :where(.ly-root[data-ly-layout="retrofuturism"]) .ly-grid > :nth-child(6n + 1) {
1123
+ grid-column: span 2;
1124
+ }
1125
+ }
1237
1126
  }
1238
1127
 
1239
- /* layout-style-brutalism.css */
1240
- /*
1241
- Layout style: brutalism.
1242
- Full-bleed slab shell with abrupt section breaks and compressed rails. Visual
1243
- identity remains owned by ui-style-kit-css.
1244
- */
1245
-
1246
- @layer ly.styles.brutalism {
1247
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) {
1248
- --ly-container-max: 100vw;
1249
- --ly-page-padding-inline: clamp(0.75rem, 3vw, 3rem);
1250
- --ly-section-padding-block: clamp(2rem, 6vw, 5rem);
1251
- --ly-sidebar-width: clamp(12rem, 15vw, 16rem);
1252
- --ly-grid-min: 12rem;
1253
- --ly-gap: clamp(0.75rem, 2vw, 1.5rem);
1254
- --ly-grid-gap: var(--ly-gap);
1255
- --ly-stack-gap: clamp(0.75rem, 2vw, 1.5rem);
1256
- }
1257
-
1258
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-app-main {
1259
- padding-block: 0;
1260
- }
1261
-
1262
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-container,
1263
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-wrapper {
1264
- width: min(100%, var(--ly-container-max));
1265
- }
1266
-
1267
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-section {
1268
- padding-block: var(--ly-section-padding-block);
1269
- }
1270
-
1271
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-grid--auto {
1272
- grid-auto-rows: minmax(7rem, auto);
1273
- }
1274
-
1275
- @media (min-width: 48rem) {
1276
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-app-shell {
1277
- grid-template-areas:
1278
- "header header"
1279
- "main sidebar";
1280
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 12rem), 0.22fr);
1281
- }
1282
-
1283
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-app-sidebar {
1284
- display: block;
1285
- position: sticky;
1286
- top: 0;
1287
- height: 100svh;
1288
- overflow: auto;
1289
- }
1290
-
1291
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-sidebar-layout {
1292
- grid-template-columns: minmax(0, 1.55fr) minmax(min(100%, 12rem), 0.45fr);
1293
- }
1294
-
1295
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-split {
1296
- grid-template-columns: minmax(0, 1.7fr) minmax(min(100%, 12rem), 0.3fr);
1297
- }
1298
-
1299
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-panes--two {
1300
- grid-template-columns: minmax(min(100%, 12rem), 0.35fr) minmax(0, 1.65fr);
1301
- }
1302
- }
1303
-
1304
- @media (min-width: 80rem) {
1305
- :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-panes--three {
1306
- grid-template-columns: minmax(min(100%, 11rem), 0.28fr) minmax(0, 1.42fr) minmax(min(100%, 14rem), 0.4fr);
1307
- }
1308
- }
1128
+ /* personalities/brutalism.css */
1129
+ /* Layout style: brutalism. A blunt right rail counters a broad primary plane. */
1130
+
1131
+ @layer ly.personalities.brutalism {
1132
+ :where(.ly-root[data-ly-layout="brutalism"]) {
1133
+ --ly-recipe-rail: 18rem;
1134
+ --ly-recipe-aside: 16rem;
1135
+ --ly-grid-columns: 6;
1136
+ --ly-grid-min: 14rem;
1137
+ --ly-personality-wrapper-max: 100rem;
1138
+
1139
+ container-name: ly-personality;
1140
+ container-type: inline-size;
1141
+ min-inline-size: 0;
1142
+ }
1143
+
1144
+ @container ly-personality (min-width: 48rem) {
1145
+ :where(.ly-root[data-ly-layout="brutalism"])
1146
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1147
+ grid-template-areas:
1148
+ "header header sidebar"
1149
+ "main aside sidebar"
1150
+ "footer footer sidebar";
1151
+ grid-template-rows: auto minmax(0, 1fr) auto;
1152
+ grid-template-columns:
1153
+ minmax(0, 1.3fr)
1154
+ minmax(min(100%, 16rem), 0.7fr)
1155
+ minmax(min(100%, 18rem), 0.34fr);
1156
+ }
1157
+
1158
+ :where(.ly-root[data-ly-layout="brutalism"]) .ly-grid > :nth-child(3n) {
1159
+ grid-column: span 2;
1160
+ }
1161
+ }
1309
1162
  }
1310
1163
 
1311
- /* layout-style-cyberpunk.css */
1312
- /*
1313
- Layout style: cyberpunk.
1314
- Narrow utility rail with dense command workspace and compact gutters. Visual
1315
- identity remains owned by ui-style-kit-css.
1316
- */
1317
-
1318
- @layer ly.styles.cyberpunk {
1319
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) {
1320
- --ly-container-max: 104rem;
1321
- --ly-page-padding-inline: clamp(0.75rem, 2vw, 2rem);
1322
- --ly-section-padding-block: clamp(2rem, 5vw, 4rem);
1323
- --ly-sidebar-width: clamp(10rem, 12vw, 12.5rem);
1324
- --ly-grid-min: 12rem;
1325
- --ly-gap: clamp(0.75rem, 1.8vw, 1.25rem);
1326
- --ly-grid-gap: var(--ly-gap);
1327
- --ly-stack-gap: clamp(0.75rem, 1.5vw, 1.25rem);
1328
- }
1329
-
1330
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-app-main {
1331
- padding-block: clamp(0.75rem, 2vw, 1.5rem);
1332
- }
1333
-
1334
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-container,
1335
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-wrapper {
1336
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1337
- }
1338
-
1339
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-section {
1340
- padding-block: var(--ly-section-padding-block);
1341
- }
1342
-
1343
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-grid--auto {
1344
- grid-auto-rows: minmax(7rem, auto);
1345
- }
1346
-
1347
- @media (min-width: 48rem) {
1348
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-app-shell {
1349
- grid-template-areas:
1350
- "sidebar header"
1351
- "sidebar main";
1352
- grid-template-columns: minmax(min(100%, var(--ly-sidebar-width)), var(--ly-sidebar-width)) minmax(0, 1fr);
1353
- }
1354
-
1355
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-app-sidebar {
1356
- display: block;
1357
- position: sticky;
1358
- top: 0;
1359
- height: 100svh;
1360
- overflow: auto;
1361
- }
1362
-
1363
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-sidebar-layout {
1364
- grid-template-columns: minmax(min(100%, 10rem), 0.24fr) minmax(0, 1fr);
1365
- }
1366
-
1367
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-split {
1368
- grid-template-columns: minmax(0, 1.2fr) minmax(min(100%, 16rem), 0.8fr);
1369
- }
1370
-
1371
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-panes--two {
1372
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 15rem), 0.38fr);
1373
- }
1374
- }
1375
-
1376
- @media (min-width: 80rem) {
1377
- :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-panes--three {
1378
- grid-template-columns: minmax(min(100%, 10rem), 0.24fr) minmax(0, 1fr) minmax(min(100%, 16rem), 0.38fr);
1379
- }
1380
- }
1164
+ /* personalities/cyberpunk.css */
1165
+ /* Layout style: cyberpunk. A narrow command rail fronts a dense three-lane shell. */
1166
+
1167
+ @layer ly.personalities.cyberpunk {
1168
+ :where(.ly-root[data-ly-layout="cyberpunk"]) {
1169
+ --ly-recipe-rail: 13rem;
1170
+ --ly-recipe-aside: 19rem;
1171
+ --ly-grid-columns: 8;
1172
+ --ly-grid-min: 12rem;
1173
+ --ly-personality-wrapper-max: 112rem;
1174
+
1175
+ container-name: ly-personality;
1176
+ container-type: inline-size;
1177
+ min-inline-size: 0;
1178
+ }
1179
+
1180
+ @container ly-personality (min-width: 44rem) {
1181
+ :where(.ly-root[data-ly-layout="cyberpunk"])
1182
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1183
+ grid-template-areas:
1184
+ "sidebar header aside"
1185
+ "sidebar main aside"
1186
+ "sidebar footer aside";
1187
+ grid-template-rows: auto minmax(0, 1fr) auto;
1188
+ grid-template-columns:
1189
+ minmax(min(100%, 13rem), 0.2fr)
1190
+ minmax(0, 1fr)
1191
+ minmax(min(100%, 19rem), 0.32fr);
1192
+ }
1193
+
1194
+ :where(.ly-root[data-ly-layout="cyberpunk"]) .ly-grid > :nth-child(4n + 2) {
1195
+ grid-column: span 3;
1196
+ }
1197
+ }
1381
1198
  }
1382
1199
 
1383
- /* layout-style-y2k.css */
1384
- /*
1385
- Layout style: y2k.
1386
- Centered hub shell with floating-window rhythm and in-flow support regions.
1387
- Visual identity remains owned by ui-style-kit-css.
1388
- */
1389
-
1390
- @layer ly.styles.y2k {
1391
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) {
1392
- --ly-container-max: 84rem;
1393
- --ly-page-padding-inline: clamp(1rem, 5vw, 4rem);
1394
- --ly-section-padding-block: clamp(3rem, 8vw, 6rem);
1395
- --ly-sidebar-width: clamp(17rem, 22vw, 21rem);
1396
- --ly-grid-min: 16rem;
1397
- --ly-gap: clamp(1.25rem, 3vw, 2.5rem);
1398
- --ly-grid-gap: var(--ly-gap);
1399
- --ly-stack-gap: clamp(1rem, 2.5vw, 2rem);
1400
- }
1401
-
1402
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-app-main {
1403
- padding-block: clamp(2rem, 6vw, 4rem);
1404
- }
1405
-
1406
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-container,
1407
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-wrapper {
1408
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1409
- }
1410
-
1411
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-section {
1412
- padding-block: var(--ly-section-padding-block);
1413
- }
1414
-
1415
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-grid--auto {
1416
- grid-auto-rows: minmax(8rem, auto);
1417
- }
1418
-
1419
- @media (min-width: 54rem) {
1420
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-app-shell {
1421
- grid-template-areas:
1422
- "header header"
1423
- "main sidebar";
1424
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 17rem), 0.34fr);
1425
- align-items: start;
1426
- }
1427
-
1428
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-app-sidebar {
1429
- display: block;
1430
- position: sticky;
1431
- top: clamp(1rem, 4vw, 3rem);
1432
- max-height: calc(100svh - clamp(2rem, 8vw, 6rem));
1433
- margin: clamp(3rem, 8vw, 6rem) clamp(1rem, 5vw, 3rem) clamp(2rem, 6vw, 4rem) 0;
1434
- overflow: auto;
1435
- }
1436
-
1437
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-sidebar-layout {
1438
- grid-template-columns: minmax(0, 0.92fr) minmax(min(100%, 16rem), 1.08fr);
1439
- }
1440
-
1441
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-split {
1442
- grid-template-columns: minmax(0, 0.86fr) minmax(min(100%, 18rem), 1.14fr);
1443
- }
1444
-
1445
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-panes--two {
1446
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 17rem), 0.56fr);
1447
- }
1448
- }
1449
-
1450
- @media (min-width: 80rem) {
1451
- :where(.ly-root[data-layout="y2k"], .ly-root[layout-style="y2k"], .ly-root.ly-layout-y2k, .ly-root.ly-style-y2k) .ly-panes--three {
1452
- grid-template-columns: minmax(min(100%, 16rem), 0.5fr) minmax(0, 1fr) minmax(min(100%, 16rem), 0.5fr);
1453
- }
1454
- }
1200
+ /* personalities/y2k.css */
1201
+ /* Layout style: y2k. A tall right rail frames a reversed supporting workspace. */
1202
+
1203
+ @layer ly.personalities.y2k {
1204
+ :where(.ly-root[data-ly-layout="y2k"]) {
1205
+ --ly-recipe-rail: 16rem;
1206
+ --ly-recipe-aside: 18rem;
1207
+ --ly-grid-columns: 5;
1208
+ --ly-grid-min: 13rem;
1209
+ --ly-personality-wrapper-max: 90rem;
1210
+
1211
+ container-name: ly-personality;
1212
+ container-type: inline-size;
1213
+ min-inline-size: 0;
1214
+ }
1215
+
1216
+ @container ly-personality (min-width: 48rem) {
1217
+ :where(.ly-root[data-ly-layout="y2k"])
1218
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1219
+ grid-template-areas:
1220
+ "header header sidebar"
1221
+ "aside main sidebar"
1222
+ "footer footer sidebar";
1223
+ grid-template-rows: auto minmax(0, 1fr) auto;
1224
+ grid-template-columns:
1225
+ minmax(min(100%, 18rem), 0.34fr)
1226
+ minmax(0, 1fr)
1227
+ minmax(min(100%, 16rem), 0.28fr);
1228
+ }
1229
+
1230
+ :where(.ly-root[data-ly-layout="y2k"]) .ly-grid > :nth-child(5n + 1) {
1231
+ grid-column: span 3;
1232
+ }
1233
+ }
1455
1234
  }
1456
1235
 
1457
- /* layout-style-retro-glass.css */
1458
- /*
1459
- Layout style: retro-glass.
1460
- Top-framed content shell with a floating right utility rail. Visual identity
1461
- remains owned by ui-style-kit-css.
1462
- */
1463
-
1464
- @layer ly.styles.retro_glass {
1465
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) {
1466
- --ly-container-max: 96rem;
1467
- --ly-page-padding-inline: clamp(1rem, 4vw, 3rem);
1468
- --ly-section-padding-block: clamp(3rem, 8vw, 6rem);
1469
- --ly-sidebar-width: 18rem;
1470
- --ly-grid-min: 15rem;
1471
- --ly-gap: clamp(1rem, 2.6vw, 2rem);
1472
- --ly-grid-gap: var(--ly-gap);
1473
- --ly-stack-gap: clamp(1rem, 2vw, 1.75rem);
1474
- }
1475
-
1476
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-app-main {
1477
- padding: clamp(1rem, 3vw, 2rem);
1478
- }
1479
-
1480
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-container,
1481
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-wrapper {
1482
- width: min(100%, var(--ly-container-max));
1483
- }
1484
-
1485
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-section {
1486
- padding-block: clamp(2rem, 6vw, 5rem);
1487
- }
1488
-
1489
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-split {
1490
- align-items: stretch;
1491
- }
1492
-
1493
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-grid--auto {
1494
- grid-auto-rows: minmax(9rem, auto);
1495
- }
1496
-
1497
- @media (min-width: 48rem) {
1498
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-split {
1499
- /* Keep glass feature panels stacked until the floating rail has enough horizontal room. */
1500
- grid-template-columns: 1fr;
1501
- }
1502
-
1503
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-panes--two {
1504
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), 0.62fr);
1505
- }
1506
- }
1507
-
1508
- @media (min-width: 56rem) {
1509
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-app-shell {
1510
- grid-template-areas:
1511
- "header header"
1512
- "main sidebar";
1513
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), var(--ly-sidebar-width));
1514
- }
1515
-
1516
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-app-sidebar {
1517
- display: block;
1518
- position: sticky;
1519
- top: var(--ly-space-4);
1520
- height: calc(100svh - (var(--ly-space-4) * 2));
1521
- margin: var(--ly-space-4) var(--ly-space-4) var(--ly-space-4) 0;
1522
- overflow: auto;
1523
- }
1524
-
1525
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-sidebar-layout {
1526
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), 0.48fr);
1527
- }
1528
-
1529
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-split {
1530
- grid-template-columns: minmax(0, 1.1fr) minmax(min(100%, 18rem), 0.9fr);
1531
- }
1532
- }
1533
-
1534
- @media (min-width: 78rem) {
1535
- :where(.ly-root[data-layout="retro-glass"], .ly-root[layout-style="retro-glass"], .ly-root.ly-layout-retro-glass, .ly-root.ly-style-retro-glass) .ly-panes--three {
1536
- grid-template-columns: minmax(min(100%, 15rem), 0.4fr) minmax(0, 1fr) minmax(min(100%, 18rem), 0.52fr);
1537
- }
1538
- }
1236
+ /* personalities/retro-glass.css */
1237
+ /* Layout style: retro-glass. A stepped right rail floats beside a wide stage. */
1238
+
1239
+ @layer ly.personalities.retro_glass {
1240
+ :where(.ly-root[data-ly-layout="retro-glass"]) {
1241
+ --ly-recipe-rail: 18rem;
1242
+ --ly-recipe-aside: 20rem;
1243
+ --ly-grid-columns: 8;
1244
+ --ly-grid-min: 15rem;
1245
+ --ly-personality-wrapper-max: 104rem;
1246
+
1247
+ container-name: ly-personality;
1248
+ container-type: inline-size;
1249
+ min-inline-size: 0;
1250
+ }
1251
+
1252
+ @container ly-personality (min-width: 48rem) {
1253
+ :where(.ly-root[data-ly-layout="retro-glass"])
1254
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1255
+ grid-template-columns: minmax(min(100%, 18rem), 0.3fr) minmax(0, 1fr);
1256
+ }
1257
+ }
1258
+
1259
+ @container ly-personality (min-width: 56rem) {
1260
+ :where(.ly-root[data-ly-layout="retro-glass"])
1261
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1262
+ grid-template-areas:
1263
+ "header header sidebar"
1264
+ "main main sidebar"
1265
+ "aside footer footer";
1266
+ grid-template-rows: auto minmax(0, 1fr) auto;
1267
+ grid-template-columns:
1268
+ minmax(0, 1.25fr)
1269
+ minmax(0, 0.75fr)
1270
+ minmax(min(100%, 18rem), 0.32fr);
1271
+ }
1272
+
1273
+ :where(.ly-root[data-ly-layout="retro-glass"]) .ly-grid > :nth-child(4n) {
1274
+ grid-column: span 2;
1275
+ grid-row: span 2;
1276
+ }
1277
+ }
1539
1278
  }
1540
1279
 
1541
- /* layout-style-f-pattern.css */
1542
- /*
1543
- Layout style: f-pattern.
1544
- Top-led scan path with a persistent left rail and heavier early content rows.
1545
- Visual identity remains owned by ui-style-kit-css.
1546
- */
1547
-
1548
- @layer ly.styles.f_pattern {
1549
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) {
1550
- --ly-container-max: 94rem;
1551
- --ly-page-padding-inline: clamp(1rem, 3vw, 2.75rem);
1552
- --ly-section-padding-block: clamp(2rem, 5vw, 4.5rem);
1553
- --ly-sidebar-width: clamp(13rem, 19vw, 20rem);
1554
- --ly-grid-min: 15rem;
1555
- --ly-gap: clamp(1rem, 2.25vw, 1.85rem);
1556
- --ly-grid-gap: var(--ly-gap);
1557
- --ly-stack-gap: clamp(0.875rem, 1.8vw, 1.45rem);
1558
- }
1559
-
1560
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-app-main {
1561
- padding-block: clamp(0.75rem, 2vw, 2rem);
1562
- }
1563
-
1564
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-container,
1565
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-wrapper {
1566
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1567
- }
1568
-
1569
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-section {
1570
- padding-block: var(--ly-section-padding-block);
1571
- }
1572
-
1573
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-grid--auto {
1574
- grid-auto-rows: minmax(8rem, auto);
1575
- }
1576
-
1577
- @media (min-width: 48rem) {
1578
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-app-shell {
1579
- grid-template-areas:
1580
- "header header"
1581
- "sidebar main";
1582
- grid-template-columns: minmax(min(100%, 13rem), 0.3fr) minmax(0, 1fr);
1583
- grid-template-rows: auto 1fr;
1584
- }
1585
-
1586
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-app-sidebar {
1587
- display: block;
1588
- position: sticky;
1589
- top: 0;
1590
- height: 100svh;
1591
- overflow: auto;
1592
- }
1593
-
1594
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-grid--auto > :nth-child(3n + 1) {
1595
- grid-column: span 2;
1596
- min-height: 13rem;
1597
- }
1598
-
1599
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-sidebar-layout {
1600
- grid-template-columns: minmax(min(100%, 14rem), 0.34fr) minmax(0, 1fr);
1601
- }
1602
-
1603
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-split {
1604
- grid-template-columns: minmax(0, 1.35fr) minmax(min(100%, 18rem), 0.65fr);
1605
- }
1606
-
1607
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-panes--two {
1608
- grid-template-columns: minmax(min(100%, 15rem), 0.38fr) minmax(0, 1fr);
1609
- }
1610
- }
1611
-
1612
- @media (min-width: 80rem) {
1613
- :where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-panes--three {
1614
- grid-template-columns: minmax(min(100%, 13rem), 0.28fr) minmax(0, 1.28fr) minmax(min(100%, 16rem), 0.44fr);
1615
- }
1616
- }
1280
+ /* personalities/f-pattern.css */
1281
+ /* Layout style: f-pattern. A left rail supports a wide first-reading column. */
1282
+
1283
+ @layer ly.personalities.f_pattern {
1284
+ :where(.ly-root[data-ly-layout="f-pattern"]) {
1285
+ --ly-recipe-rail: 16rem;
1286
+ --ly-recipe-aside: 18rem;
1287
+ --ly-grid-columns: 6;
1288
+ --ly-grid-min: 14rem;
1289
+ --ly-personality-wrapper-max: 92rem;
1290
+
1291
+ container-name: ly-personality;
1292
+ container-type: inline-size;
1293
+ min-inline-size: 0;
1294
+ }
1295
+
1296
+ @container ly-personality (min-width: 48rem) {
1297
+ :where(.ly-root[data-ly-layout="f-pattern"])
1298
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1299
+ grid-template-columns: minmax(min(100%, 16rem), 0.3fr) minmax(0, 1fr);
1300
+ }
1301
+ }
1302
+
1303
+ @container ly-personality (min-width: 56rem) {
1304
+ :where(.ly-root[data-ly-layout="f-pattern"])
1305
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1306
+ grid-template-areas:
1307
+ "sidebar header header"
1308
+ "sidebar main aside"
1309
+ "sidebar footer aside";
1310
+ grid-template-rows: auto minmax(0, 1fr) auto;
1311
+ grid-template-columns:
1312
+ minmax(min(100%, 16rem), 0.26fr)
1313
+ minmax(0, 1.35fr)
1314
+ minmax(min(100%, 18rem), 0.65fr);
1315
+ }
1316
+
1317
+ :where(.ly-root[data-ly-layout="f-pattern"]) .ly-grid > :nth-child(3n + 1) {
1318
+ grid-column: span 2;
1319
+ }
1320
+
1321
+ :where(.ly-root[data-ly-layout="f-pattern"])
1322
+ :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
1323
+ grid-template-columns: minmax(0, 1.35fr) minmax(0, 0.65fr);
1324
+ }
1325
+ }
1617
1326
  }
1618
1327
 
1619
- /* layout-style-z-pattern.css */
1620
- /*
1621
- Layout style: z-pattern.
1622
- Header-first scan path that moves from broad lead content to a right-side
1623
- support rail. Visual identity remains owned by ui-style-kit-css.
1624
- */
1625
-
1626
- @layer ly.styles.z_pattern {
1627
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) {
1628
- --ly-container-max: 100rem;
1629
- --ly-page-padding-inline: clamp(1rem, 3.4vw, 3rem);
1630
- --ly-section-padding-block: clamp(2rem, 5.5vw, 5rem);
1631
- --ly-sidebar-width: clamp(14rem, 20vw, 21rem);
1632
- --ly-grid-min: 15rem;
1633
- --ly-gap: clamp(1rem, 2.4vw, 2rem);
1634
- --ly-grid-gap: var(--ly-gap);
1635
- --ly-stack-gap: clamp(0.875rem, 1.9vw, 1.5rem);
1636
- }
1637
-
1638
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-app-main {
1639
- padding-block: clamp(1rem, 2.6vw, 2.5rem);
1640
- }
1641
-
1642
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-container,
1643
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-wrapper {
1644
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1645
- }
1646
-
1647
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-section {
1648
- padding-block: var(--ly-section-padding-block);
1649
- }
1650
-
1651
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-grid--auto {
1652
- grid-auto-rows: minmax(8rem, auto);
1653
- }
1654
-
1655
- @media (min-width: 48rem) {
1656
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-app-shell {
1657
- grid-template-areas:
1658
- "header header"
1659
- "main sidebar";
1660
- grid-template-columns: minmax(0, 1.18fr) minmax(min(100%, 15rem), 0.42fr);
1661
- }
1662
-
1663
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-app-sidebar {
1664
- display: block;
1665
- position: sticky;
1666
- top: var(--ly-space-4);
1667
- height: calc(100svh - (var(--ly-space-4) * 2));
1668
- overflow: auto;
1669
- }
1670
-
1671
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-grid--auto > :nth-child(4n + 2) {
1672
- grid-column: span 2;
1673
- min-height: 12rem;
1674
- }
1675
-
1676
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-sidebar-layout {
1677
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 15rem), 0.36fr);
1678
- }
1679
-
1680
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-split {
1681
- grid-template-columns: minmax(0, 0.92fr) minmax(min(100%, 19rem), 1.08fr);
1682
- align-items: end;
1683
- }
1684
-
1685
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-panes--two {
1686
- grid-template-columns: minmax(0, 1.25fr) minmax(min(100%, 17rem), 0.75fr);
1687
- }
1688
- }
1689
-
1690
- @media (min-width: 80rem) {
1691
- :where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-panes--three {
1692
- grid-template-columns: minmax(0, 1.1fr) minmax(min(100%, 15rem), 0.55fr) minmax(min(100%, 14rem), 0.35fr);
1693
- }
1694
- }
1328
+ /* personalities/z-pattern.css */
1329
+ /* Layout style: z-pattern. A right rail closes a diagonal reading progression. */
1330
+
1331
+ @layer ly.personalities.z_pattern {
1332
+ :where(.ly-root[data-ly-layout="z-pattern"]) {
1333
+ --ly-recipe-rail: 17rem;
1334
+ --ly-recipe-aside: 19rem;
1335
+ --ly-grid-columns: 8;
1336
+ --ly-grid-min: 14rem;
1337
+ --ly-personality-wrapper-max: 108rem;
1338
+
1339
+ container-name: ly-personality;
1340
+ container-type: inline-size;
1341
+ min-inline-size: 0;
1342
+ }
1343
+
1344
+ @container ly-personality (min-width: 48rem) {
1345
+ :where(.ly-root[data-ly-layout="z-pattern"])
1346
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1347
+ grid-template-columns: minmax(min(100%, 17rem), 0.3fr) minmax(0, 1fr);
1348
+ }
1349
+ }
1350
+
1351
+ @container ly-personality (min-width: 60rem) {
1352
+ :where(.ly-root[data-ly-layout="z-pattern"])
1353
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1354
+ grid-template-areas:
1355
+ "header header sidebar"
1356
+ "main aside sidebar"
1357
+ "footer aside sidebar";
1358
+ grid-template-rows: auto minmax(0, 1fr) auto;
1359
+ grid-template-columns:
1360
+ minmax(0, 1.45fr)
1361
+ minmax(min(100%, 19rem), 0.55fr)
1362
+ minmax(min(100%, 17rem), 0.3fr);
1363
+ }
1364
+
1365
+ :where(.ly-root[data-ly-layout="z-pattern"]) .ly-grid > :nth-child(4n + 2) {
1366
+ grid-column: span 2;
1367
+ align-self: end;
1368
+ }
1369
+
1370
+ :where(.ly-root[data-ly-layout="z-pattern"])
1371
+ :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
1372
+ grid-template-columns: minmax(0, 1.5fr) minmax(0, 0.5fr);
1373
+ }
1374
+ }
1695
1375
  }
1696
1376
 
1697
- /* layout-style-split-screen.css */
1698
- /*
1699
- Layout style: split-screen.
1700
- Equal-weight shell columns for contrasting focal points or side-by-side
1701
- choices. Visual identity remains owned by ui-style-kit-css.
1702
- */
1703
-
1704
- @layer ly.styles.split_screen {
1705
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) {
1706
- --ly-container-max: 100vw;
1707
- --ly-page-padding-inline: clamp(0.875rem, 2.5vw, 2rem);
1708
- --ly-section-padding-block: clamp(1.5rem, 4vw, 3.5rem);
1709
- --ly-sidebar-width: 50vw;
1710
- --ly-grid-min: 14rem;
1711
- --ly-gap: clamp(0.875rem, 2vw, 1.5rem);
1712
- --ly-grid-gap: var(--ly-gap);
1713
- --ly-stack-gap: clamp(0.875rem, 1.6vw, 1.25rem);
1714
- }
1715
-
1716
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-app-main {
1717
- padding-block: 0;
1718
- }
1719
-
1720
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-container,
1721
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-wrapper {
1722
- width: min(100%, var(--ly-container-max));
1723
- }
1724
-
1725
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-section {
1726
- padding-block: var(--ly-section-padding-block);
1727
- }
1728
-
1729
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-grid--auto {
1730
- grid-auto-rows: minmax(9rem, auto);
1731
- }
1732
-
1733
- @media (min-width: 48rem) {
1734
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-app-shell {
1735
- grid-template-areas:
1736
- "header header"
1737
- "main sidebar";
1738
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1739
- }
1740
-
1741
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-app-sidebar {
1742
- display: block;
1743
- min-height: 100%;
1744
- overflow: auto;
1745
- }
1746
-
1747
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-sidebar-layout,
1748
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-split,
1749
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-panes--two {
1750
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1751
- }
1752
- }
1753
-
1754
- @media (min-width: 80rem) {
1755
- :where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-panes--three {
1756
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
1757
- }
1758
- }
1377
+ /* personalities/split-screen.css */
1378
+ /* Layout style: split-screen. Equal tracks keep two primary experiences in balance. */
1379
+
1380
+ @layer ly.personalities.split_screen {
1381
+ :where(.ly-root[data-ly-layout="split-screen"]) {
1382
+ --ly-grid-columns: 2;
1383
+ --ly-grid-min: 20rem;
1384
+ --ly-personality-wrapper-max: 100%;
1385
+ --ly-split-primary: 1fr;
1386
+ --ly-split-secondary: 1fr;
1387
+
1388
+ container-name: ly-personality;
1389
+ container-type: inline-size;
1390
+ min-inline-size: 0;
1391
+ }
1392
+
1393
+ @container ly-personality (min-width: 48rem) {
1394
+ :where(.ly-root[data-ly-layout="split-screen"])
1395
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1396
+ grid-template-areas:
1397
+ "header header"
1398
+ "main sidebar"
1399
+ "aside sidebar"
1400
+ "footer footer";
1401
+ grid-template-rows: auto minmax(0, 1fr) auto auto;
1402
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1403
+ }
1404
+
1405
+ :where(.ly-root[data-ly-layout="split-screen"])
1406
+ :where(
1407
+ .ly-split,
1408
+ .ly-split-hero,
1409
+ [data-ly-recipe="split-hero"],
1410
+ .ly-list-detail,
1411
+ [data-ly-recipe="list-detail"]
1412
+ ) {
1413
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1414
+ }
1415
+ }
1759
1416
  }
1760
1417
 
1761
- /* layout-style-mondrian.css */
1762
- /*
1763
- Layout style: mondrian.
1764
- Asymmetrical rectangular blocks with staggered spans inspired by Mondrian
1765
- composition. Visual identity remains owned by ui-style-kit-css.
1766
- */
1767
-
1768
- @layer ly.styles.mondrian {
1769
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) {
1770
- --ly-container-max: 108rem;
1771
- --ly-page-padding-inline: clamp(0.75rem, 2.5vw, 2rem);
1772
- --ly-section-padding-block: clamp(1.75rem, 4.5vw, 4rem);
1773
- --ly-sidebar-width: clamp(11rem, 16vw, 17rem);
1774
- --ly-grid-min: 11rem;
1775
- --ly-gap: clamp(0.75rem, 1.6vw, 1.25rem);
1776
- --ly-grid-gap: var(--ly-gap);
1777
- --ly-stack-gap: clamp(0.75rem, 1.5vw, 1.2rem);
1778
- }
1779
-
1780
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-app-main {
1781
- padding-block: clamp(0.75rem, 1.8vw, 1.5rem);
1782
- }
1783
-
1784
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-container,
1785
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-wrapper {
1786
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1787
- }
1788
-
1789
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-section {
1790
- padding-block: var(--ly-section-padding-block);
1791
- }
1792
-
1793
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-grid--auto {
1794
- grid-auto-rows: minmax(7rem, auto);
1795
- }
1796
-
1797
- @media (min-width: 48rem) {
1798
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-app-shell {
1799
- grid-template-areas:
1800
- "sidebar header header"
1801
- "sidebar main main";
1802
- grid-template-columns: minmax(min(100%, 11rem), 0.28fr) minmax(0, 0.86fr) minmax(0, 1.14fr);
1803
- grid-template-rows: auto 1fr;
1804
- }
1805
-
1806
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-app-sidebar {
1807
- display: block;
1808
- position: sticky;
1809
- top: var(--ly-space-3);
1810
- height: calc(100svh - (var(--ly-space-3) * 2));
1811
- overflow: auto;
1812
- }
1813
-
1814
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-grid--auto > :nth-child(5n + 1) {
1815
- grid-column: span 2;
1816
- grid-row: span 2;
1817
- min-height: 15rem;
1818
- }
1819
-
1820
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-sidebar-layout {
1821
- grid-template-columns: minmax(min(100%, 11rem), 0.25fr) minmax(0, 1fr);
1822
- }
1823
-
1824
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-split {
1825
- grid-template-columns: minmax(0, 0.7fr) minmax(min(100%, 20rem), 1.3fr);
1826
- }
1827
-
1828
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-panes--two {
1829
- grid-template-columns: minmax(min(100%, 13rem), 0.46fr) minmax(0, 1.54fr);
1830
- }
1831
- }
1832
-
1833
- @media (min-width: 80rem) {
1834
- :where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-panes--three {
1835
- grid-template-columns: minmax(min(100%, 11rem), 0.28fr) minmax(0, 1.44fr) minmax(min(100%, 13rem), 0.28fr);
1836
- }
1837
- }
1418
+ /* personalities/mondrian.css */
1419
+ /* Layout style: mondrian. Unequal zones and spanning blocks create a strict mosaic. */
1420
+
1421
+ @layer ly.personalities.mondrian {
1422
+ :where(.ly-root[data-ly-layout="mondrian"]) {
1423
+ --ly-recipe-rail: 13rem;
1424
+ --ly-recipe-aside: 18rem;
1425
+ --ly-grid-columns: 10;
1426
+ --ly-grid-min: 11rem;
1427
+ --ly-personality-wrapper-max: 112rem;
1428
+
1429
+ container-name: ly-personality;
1430
+ container-type: inline-size;
1431
+ min-inline-size: 0;
1432
+ }
1433
+
1434
+ @container ly-personality (min-width: 48rem) {
1435
+ :where(.ly-root[data-ly-layout="mondrian"])
1436
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1437
+ grid-template-columns: minmax(min(100%, 13rem), 0.3fr) minmax(0, 1fr);
1438
+ }
1439
+ }
1440
+
1441
+ @container ly-personality (min-width: 52rem) {
1442
+ :where(.ly-root[data-ly-layout="mondrian"])
1443
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1444
+ grid-template-areas:
1445
+ "sidebar header header"
1446
+ "sidebar main aside"
1447
+ "footer footer aside";
1448
+ grid-template-rows: auto minmax(0, 1fr) auto;
1449
+ grid-template-columns:
1450
+ minmax(min(100%, 13rem), 0.22fr)
1451
+ minmax(0, 1.45fr)
1452
+ minmax(min(100%, 18rem), 0.55fr);
1453
+ }
1454
+
1455
+ :where(.ly-root[data-ly-layout="mondrian"]) .ly-grid > :nth-child(5n + 1) {
1456
+ grid-column: span 2;
1457
+ grid-row: span 2;
1458
+ }
1459
+ }
1838
1460
  }
1839
1461
 
1840
- /* layout-style-synthwave.css */
1841
- /*
1842
- Layout style: synthwave.
1843
- Wide stage, dock-like support areas, and cinematic horizontal flow inspired
1844
- by retro-futuristic interface composition. Visual identity remains owned by
1845
- ui-style-kit-css.
1846
- */
1847
-
1848
- @layer ly.styles.synthwave {
1849
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) {
1850
- --ly-container-max: 112rem;
1851
- --ly-page-padding-inline: clamp(1rem, 4vw, 3.5rem);
1852
- --ly-section-padding-block: clamp(2.5rem, 7vw, 6rem);
1853
- --ly-sidebar-width: clamp(14rem, 18vw, 20rem);
1854
- --ly-grid-min: 14rem;
1855
- --ly-gap: clamp(1rem, 2.8vw, 2.25rem);
1856
- --ly-grid-gap: var(--ly-gap);
1857
- --ly-stack-gap: clamp(1rem, 2.2vw, 1.8rem);
1858
- --ly-carousel-item-min: 18rem;
1859
- --ly-carousel-item-max: 34rem;
1860
- }
1861
-
1862
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-main {
1863
- padding-block: clamp(1rem, 3vw, 3rem);
1864
- }
1865
-
1866
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-container,
1867
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-wrapper {
1868
- width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
1869
- }
1870
-
1871
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-section {
1872
- padding-block: var(--ly-section-padding-block);
1873
- }
1874
-
1875
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-grid--auto {
1876
- grid-auto-rows: minmax(9rem, auto);
1877
- }
1878
-
1879
- @media (min-width: 48rem) {
1880
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-shell {
1881
- grid-template-areas:
1882
- "header header"
1883
- "main main"
1884
- "sidebar sidebar";
1885
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
1886
- }
1887
-
1888
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-sidebar {
1889
- display: block;
1890
- overflow: auto;
1891
- }
1892
-
1893
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-sidebar-layout {
1894
- grid-template-columns: minmax(0, 1.2fr) minmax(min(100%, 17rem), 0.8fr);
1895
- }
1896
-
1897
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-split {
1898
- grid-template-columns: minmax(0, 1fr);
1899
- }
1900
-
1901
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-panes--two {
1902
- grid-template-columns: minmax(0, 1.35fr) minmax(min(100%, 17rem), 0.65fr);
1903
- }
1904
- }
1905
-
1906
- @media (min-width: 80rem) {
1907
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-shell {
1908
- grid-template-areas:
1909
- "header header"
1910
- "main sidebar";
1911
- grid-template-columns: minmax(0, 1.52fr) minmax(min(100%, 17rem), 0.48fr);
1912
- }
1913
-
1914
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-sidebar {
1915
- position: sticky;
1916
- top: var(--ly-space-5);
1917
- height: calc(100svh - (var(--ly-space-5) * 2));
1918
- }
1919
-
1920
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-split {
1921
- grid-template-columns: minmax(0, 1.42fr) minmax(min(100%, 20rem), 0.58fr);
1922
- }
1923
-
1924
- :where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-panes--three {
1925
- grid-template-columns: minmax(min(100%, 14rem), 0.36fr) minmax(0, 1.28fr) minmax(min(100%, 16rem), 0.36fr);
1926
- }
1927
- }
1462
+ /* personalities/synthwave.css */
1463
+ /* Layout style: synthwave. A cinematic center stage sits between support zones. */
1464
+
1465
+ @layer ly.personalities.synthwave {
1466
+ :where(.ly-root[data-ly-layout="synthwave"]) {
1467
+ --ly-recipe-rail: 16rem;
1468
+ --ly-recipe-aside: 20rem;
1469
+ --ly-grid-columns: 12;
1470
+ --ly-grid-min: 14rem;
1471
+ --ly-reel-item-max: 34rem;
1472
+ --ly-personality-wrapper-max: 112rem;
1473
+
1474
+ container-name: ly-personality;
1475
+ container-type: inline-size;
1476
+ min-inline-size: 0;
1477
+ }
1478
+
1479
+ @container ly-personality (min-width: 48rem) {
1480
+ :where(.ly-root[data-ly-layout="synthwave"])
1481
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1482
+ grid-template-columns: minmax(min(100%, 16rem), 0.3fr) minmax(0, 1fr);
1483
+ }
1484
+ }
1485
+
1486
+ @container ly-personality (min-width: 64rem) {
1487
+ :where(.ly-root[data-ly-layout="synthwave"])
1488
+ :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
1489
+ grid-template-areas:
1490
+ "header header header"
1491
+ "sidebar main aside"
1492
+ "footer footer footer";
1493
+ grid-template-rows: auto minmax(0, 1fr) auto;
1494
+ grid-template-columns:
1495
+ minmax(min(100%, 16rem), 0.28fr)
1496
+ minmax(0, 1fr)
1497
+ minmax(min(100%, 20rem), 0.34fr);
1498
+ }
1499
+
1500
+ :where(.ly-root[data-ly-layout="synthwave"]) .ly-grid > :nth-child(4n + 1) {
1501
+ grid-column: span 3;
1502
+ }
1503
+
1504
+ :where(.ly-root[data-ly-layout="synthwave"]) .ly-reel {
1505
+ grid-auto-columns: minmax(min(100%, 20rem), var(--ly-reel-item-max));
1506
+ }
1507
+ }
1928
1508
  }