layout-style-css 3.0.2 → 3.2.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 (47) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/README.md +35 -14
  3. package/dist/core.css +1 -1
  4. package/dist/foundation.css +168 -24
  5. package/dist/layout-style-css.css +486 -159
  6. package/dist/layout-style-css.min.css +1 -1
  7. package/dist/personalities/bauhaus.css +4 -11
  8. package/dist/personalities/bento.css +1 -11
  9. package/dist/personalities/brutalism.css +3 -11
  10. package/dist/personalities/cyberpunk.css +2 -2
  11. package/dist/personalities/data-terminal.css +13 -0
  12. package/dist/personalities/editorial.css +14 -0
  13. package/dist/personalities/f-pattern.css +4 -4
  14. package/dist/personalities/industrial-hmi.css +11 -0
  15. package/dist/personalities/maximalist.css +2 -11
  16. package/dist/personalities/minimal-saas.css +1 -1
  17. package/dist/personalities/mondrian.css +2 -2
  18. package/dist/personalities/neumorphism.css +4 -13
  19. package/dist/personalities/retro-glass.css +11 -11
  20. package/dist/personalities/retrofuturism.css +2 -2
  21. package/dist/personalities/split-screen.css +6 -6
  22. package/dist/personalities/synthwave.css +2 -2
  23. package/dist/personalities/tactile.css +4 -13
  24. package/dist/personalities/technical-blueprint.css +13 -0
  25. package/dist/personalities/y2k.css +9 -9
  26. package/dist/personalities/z-pattern.css +4 -4
  27. package/dist/personalities.css +5 -1
  28. package/dist/primitives.css +122 -4
  29. package/dist/recipes.css +84 -1
  30. package/dist/utilities.css +14 -35
  31. package/dist/wrappers.css +5 -1
  32. package/docs/wiki/Demo-And-GitHub-Pages.md +4 -2
  33. package/docs/wiki/Getting-Started.md +11 -4
  34. package/docs/wiki/Home.md +7 -2
  35. package/docs/wiki/Installation-And-CDN.md +6 -5
  36. package/docs/wiki/Layout-Personality-Reference.md +67 -0
  37. package/docs/wiki/Layout-Primitives.md +16 -3
  38. package/docs/wiki/Layout-Recipes.md +3 -1
  39. package/docs/wiki/Layout-Styles.md +10 -23
  40. package/docs/wiki/Migrating-To-3.1.md +62 -0
  41. package/docs/wiki/Migrating-To-3.2.md +70 -0
  42. package/docs/wiki/Release-And-Publishing.md +6 -6
  43. package/docs/wiki/UI-Style-Kit-Compatibility.md +6 -0
  44. package/docs/wiki/_Sidebar.md +3 -0
  45. package/manifest.json +48 -28
  46. package/package.json +3 -3
  47. package/personalities.json +76 -14
@@ -1,4 +1,4 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.context;
2
2
 
3
3
  /* layout-style-css v3 bundle. Generated from focused styles/ modules. */
4
4
 
@@ -24,6 +24,7 @@
24
24
  --ly-wrapper-compact: 40rem;
25
25
  --ly-wrapper-prose: 68ch;
26
26
  --ly-wrapper-content: 72rem;
27
+ --ly-wrapper-workspace: 96rem;
27
28
  --ly-wrapper-wide: 112rem;
28
29
  --ly-page-padding-inline: clamp(1rem, 3vw, 3rem);
29
30
  --ly-safe-area-inline: max(
@@ -39,19 +40,22 @@
39
40
  --ly-grid-gap: var(--ly-gap);
40
41
  --ly-stack-gap: var(--ly-space-4);
41
42
  --ly-cluster-gap: var(--ly-space-3);
42
- --ly-section-padding-block: clamp(3rem, 7vh, 6rem);
43
- --ly-section-padding-block-compact: clamp(1.5rem, 3.5vh, 3rem);
43
+ --ly-section-padding-block: clamp(2rem, 4vh, 4rem);
44
+ --ly-section-padding-block-compact: clamp(1rem, 2.5vh, 2rem);
44
45
  --ly-header-height: 4.5rem;
45
46
  --ly-sticky-position: sticky;
46
47
  --ly-cover-min: 100vh;
47
48
  --ly-shell-min: 100vh;
48
- --ly-scroll-max: min(70vh, 50rem);
49
+ --ly-scroll-max: 50rem;
50
+ --ly-scroll-viewport-max: min(70vh, 50rem);
49
51
 
50
52
  --ly-switcher-threshold: 42rem;
51
53
  --ly-sidebar-size: 18rem;
52
54
  --ly-sidebar-content-min: 50%;
53
55
  --ly-grid-columns: 12;
54
56
  --ly-grid-min: 16rem;
57
+ --ly-mosaic-medium-columns: 6;
58
+ --ly-mosaic-wide-columns: 12;
55
59
  --ly-split-min: 20rem;
56
60
  --ly-pane-min: 18rem;
57
61
  --ly-pane-size: 22rem;
@@ -63,6 +67,7 @@
63
67
  --ly-split-primary: 1fr;
64
68
  --ly-split-secondary: 1fr;
65
69
 
70
+ --ly-recipe-main-min: 20rem;
66
71
  --ly-recipe-rail: 18rem;
67
72
  --ly-recipe-aside: 22rem;
68
73
  --ly-gallery-min: 12rem;
@@ -77,7 +82,7 @@
77
82
  --ly-app-shell-medium-rows: auto auto minmax(0, 1fr) auto;
78
83
  --ly-app-shell-medium-columns:
79
84
  minmax(min(100%, var(--ly-recipe-rail)), auto)
80
- minmax(0, 1fr);
85
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr);
81
86
  --ly-app-shell-wide-areas:
82
87
  "sidebar header header"
83
88
  "sidebar main aside"
@@ -85,7 +90,7 @@
85
90
  --ly-app-shell-wide-rows: auto minmax(0, 1fr) auto;
86
91
  --ly-app-shell-wide-columns:
87
92
  minmax(min(100%, var(--ly-recipe-rail)), auto)
88
- minmax(0, 1fr)
93
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
89
94
  minmax(min(100%, var(--ly-recipe-aside)), 0.35fr);
90
95
 
91
96
  --ly-dashboard-medium-areas:
@@ -94,7 +99,7 @@
94
99
  "main aside"
95
100
  "footer footer";
96
101
  --ly-dashboard-medium-columns:
97
- minmax(0, 1fr)
102
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
98
103
  minmax(min(100%, var(--ly-recipe-aside)), 0.35fr);
99
104
  --ly-dashboard-wide-areas:
100
105
  "nav header header"
@@ -102,7 +107,7 @@
102
107
  "nav footer footer";
103
108
  --ly-dashboard-wide-columns:
104
109
  minmax(min(100%, var(--ly-recipe-rail)), auto)
105
- minmax(0, 1fr)
110
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
106
111
  minmax(min(100%, var(--ly-recipe-aside)), 0.35fr);
107
112
 
108
113
  --ly-docs-wide-areas:
@@ -112,19 +117,19 @@
112
117
  "footer footer";
113
118
  --ly-docs-wide-columns:
114
119
  minmax(min(100%, var(--ly-recipe-rail)), auto)
115
- minmax(0, 1fr);
120
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr);
116
121
  --ly-list-detail-wide-areas:
117
122
  "primary secondary"
118
123
  "actions actions";
119
124
  --ly-list-detail-wide-columns:
120
- minmax(min(100%, var(--ly-pane-size)), 0.7fr)
121
- minmax(0, 1fr);
125
+ minmax(min(100%, max(var(--ly-pane-min), var(--ly-pane-size))), 0.7fr)
126
+ minmax(min(100%, var(--ly-pane-min)), 1fr);
122
127
  --ly-split-hero-wide-areas:
123
128
  "content media"
124
129
  "actions media";
125
130
  --ly-split-hero-wide-columns:
126
- minmax(0, var(--ly-split-primary, 1fr))
127
- minmax(0, var(--ly-split-secondary, 1fr));
131
+ minmax(min(100%, var(--ly-split-min)), var(--ly-split-primary, 1fr))
132
+ minmax(min(100%, var(--ly-split-min)), var(--ly-split-secondary, 1fr));
128
133
 
129
134
  container-name: ly-scope;
130
135
  container-type: inline-size;
@@ -144,7 +149,7 @@
144
149
  :where(.ly-root) {
145
150
  --ly-cover-min: 100dvh;
146
151
  --ly-shell-min: 100dvh;
147
- --ly-scroll-max: min(70dvh, 50rem);
152
+ --ly-scroll-viewport-max: min(70dvh, 50rem);
148
153
  }
149
154
  }
150
155
  }
@@ -175,19 +180,19 @@
175
180
  --ly-grid-gap: var(--ly-gap);
176
181
  --ly-stack-gap: min(var(--ly-space-4), 3vh);
177
182
  --ly-cluster-gap: min(var(--ly-space-3), 2vh);
178
- --ly-section-padding-block: clamp(1.5rem, 6vh, 3rem);
179
- --ly-section-padding-block-compact: clamp(0.75rem, 3vh, 1.25rem);
183
+ --ly-section-padding-block: clamp(1.25rem, 4vh, 2rem);
184
+ --ly-section-padding-block-compact: clamp(0.75rem, 2vh, 1.25rem);
180
185
  --ly-header-height: 3.5rem;
181
- --ly-scroll-max: min(62vh, 34rem);
186
+ --ly-scroll-viewport-max: min(62vh, 34rem);
182
187
  }
183
188
 
184
189
  @supports (height: 100dvh) {
185
190
  :where(.ly-root) {
186
191
  --ly-stack-gap: min(var(--ly-space-4), 3dvh);
187
192
  --ly-cluster-gap: min(var(--ly-space-3), 2dvh);
188
- --ly-section-padding-block: clamp(1.5rem, 6dvh, 3rem);
189
- --ly-section-padding-block-compact: clamp(0.75rem, 3dvh, 1.25rem);
190
- --ly-scroll-max: min(62dvh, 34rem);
193
+ --ly-section-padding-block: clamp(1.25rem, 4dvh, 2rem);
194
+ --ly-section-padding-block-compact: clamp(0.75rem, 2dvh, 1.25rem);
195
+ --ly-scroll-viewport-max: min(62dvh, 34rem);
191
196
  }
192
197
  }
193
198
  }
@@ -197,19 +202,158 @@
197
202
  --ly-cover-min: auto;
198
203
  --ly-shell-min: auto;
199
204
  --ly-sticky-position: static;
200
- --ly-section-padding-block: var(--ly-space-5);
201
- --ly-section-padding-block-compact: var(--ly-space-3);
202
- --ly-scroll-max: max(12rem, calc(100vh - 8rem));
205
+ --ly-section-padding-block: var(--ly-space-4);
206
+ --ly-section-padding-block-compact: var(--ly-space-2);
207
+ --ly-scroll-viewport-max: max(12rem, calc(100vh - 8rem));
203
208
  }
204
209
 
205
210
  @supports (height: 100dvh) {
206
211
  :where(.ly-root) {
207
- --ly-scroll-max: max(12rem, calc(100dvh - 8rem));
212
+ --ly-scroll-viewport-max: max(12rem, calc(100dvh - 8rem));
208
213
  }
209
214
  }
210
215
  }
211
216
  }
212
217
 
218
+ @layer ly.context {
219
+ :where(
220
+ .ly-root[data-ly-density="compact"],
221
+ .ly-root [data-ly-density="compact"]
222
+ ) {
223
+ --ly-gap: var(--ly-space-3);
224
+ --ly-grid-gap: var(--ly-space-3);
225
+ --ly-stack-gap: var(--ly-space-3);
226
+ --ly-cluster-gap: var(--ly-space-2);
227
+ --ly-section-padding-block: clamp(1rem, 2.5vh, 2rem);
228
+ --ly-section-padding-block-compact: clamp(0.5rem, 1.5vh, 1rem);
229
+ }
230
+
231
+ :where(
232
+ .ly-root[data-ly-density="normal"],
233
+ .ly-root [data-ly-density="normal"]
234
+ ) {
235
+ --ly-gap: var(--ly-profile-gap);
236
+ --ly-grid-gap: var(--ly-gap);
237
+ --ly-stack-gap: var(--ly-space-4);
238
+ --ly-cluster-gap: var(--ly-space-3);
239
+ --ly-section-padding-block: clamp(2rem, 4vh, 4rem);
240
+ --ly-section-padding-block-compact: clamp(1rem, 2.5vh, 2rem);
241
+ }
242
+
243
+ :where(
244
+ .ly-root[data-ly-density="spacious"],
245
+ .ly-root [data-ly-density="spacious"]
246
+ ) {
247
+ --ly-gap: max(var(--ly-profile-gap), var(--ly-space-6));
248
+ --ly-grid-gap: var(--ly-gap);
249
+ --ly-stack-gap: var(--ly-space-5);
250
+ --ly-cluster-gap: var(--ly-space-4);
251
+ --ly-section-padding-block: clamp(3rem, 7vh, 6rem);
252
+ --ly-section-padding-block-compact: clamp(1.5rem, 3.5vh, 3rem);
253
+ }
254
+
255
+ @media (max-height: 44rem) {
256
+ :where(
257
+ .ly-root[data-ly-density="compact"],
258
+ .ly-root [data-ly-density="compact"]
259
+ ) {
260
+ --ly-gap: var(--ly-space-3);
261
+ --ly-grid-gap: var(--ly-space-3);
262
+ --ly-stack-gap: var(--ly-space-3);
263
+ --ly-cluster-gap: var(--ly-space-2);
264
+ --ly-section-padding-block: clamp(0.75rem, 2vh, 1.25rem);
265
+ --ly-section-padding-block-compact: var(--ly-space-2);
266
+ }
267
+
268
+ :where(
269
+ .ly-root[data-ly-density="normal"],
270
+ .ly-root [data-ly-density="normal"]
271
+ ) {
272
+ --ly-gap: min(var(--ly-profile-gap), var(--ly-space-4));
273
+ --ly-grid-gap: var(--ly-gap);
274
+ --ly-stack-gap: var(--ly-space-4);
275
+ --ly-cluster-gap: var(--ly-space-3);
276
+ --ly-section-padding-block: clamp(1.25rem, 4vh, 2rem);
277
+ --ly-section-padding-block-compact: clamp(0.75rem, 2vh, 1.25rem);
278
+ }
279
+
280
+ :where(
281
+ .ly-root[data-ly-density="spacious"],
282
+ .ly-root [data-ly-density="spacious"]
283
+ ) {
284
+ --ly-gap: var(--ly-space-5);
285
+ --ly-grid-gap: var(--ly-space-5);
286
+ --ly-stack-gap: var(--ly-space-4);
287
+ --ly-cluster-gap: var(--ly-space-3);
288
+ --ly-section-padding-block: clamp(1.5rem, 6vh, 3rem);
289
+ --ly-section-padding-block-compact: clamp(0.75rem, 3vh, 1.25rem);
290
+ }
291
+
292
+ @supports (height: 100dvh) {
293
+ :where(
294
+ .ly-root[data-ly-density="compact"],
295
+ .ly-root [data-ly-density="compact"]
296
+ ) {
297
+ --ly-section-padding-block: clamp(0.75rem, 2dvh, 1.25rem);
298
+ }
299
+
300
+ :where(
301
+ .ly-root[data-ly-density="normal"],
302
+ .ly-root [data-ly-density="normal"]
303
+ ) {
304
+ --ly-section-padding-block: clamp(1.25rem, 4dvh, 2rem);
305
+ --ly-section-padding-block-compact: clamp(0.75rem, 2dvh, 1.25rem);
306
+ }
307
+
308
+ :where(
309
+ .ly-root[data-ly-density="spacious"],
310
+ .ly-root [data-ly-density="spacious"]
311
+ ) {
312
+ --ly-section-padding-block: clamp(1.5rem, 6dvh, 3rem);
313
+ --ly-section-padding-block-compact: clamp(0.75rem, 3dvh, 1.25rem);
314
+ }
315
+ }
316
+ }
317
+
318
+ @media (max-height: 30rem) {
319
+ :where(
320
+ .ly-root[data-ly-density="compact"],
321
+ .ly-root [data-ly-density="compact"]
322
+ ) {
323
+ --ly-gap: var(--ly-space-2);
324
+ --ly-grid-gap: var(--ly-space-2);
325
+ --ly-stack-gap: var(--ly-space-2);
326
+ --ly-cluster-gap: var(--ly-space-1);
327
+ --ly-section-padding-block: var(--ly-space-3);
328
+ --ly-section-padding-block-compact: var(--ly-space-2);
329
+ }
330
+
331
+ :where(
332
+ .ly-root[data-ly-density="normal"],
333
+ .ly-root [data-ly-density="normal"]
334
+ ) {
335
+ --ly-gap: var(--ly-space-3);
336
+ --ly-grid-gap: var(--ly-space-3);
337
+ --ly-stack-gap: var(--ly-space-3);
338
+ --ly-cluster-gap: var(--ly-space-2);
339
+ --ly-section-padding-block: var(--ly-space-4);
340
+ --ly-section-padding-block-compact: var(--ly-space-2);
341
+ }
342
+
343
+ :where(
344
+ .ly-root[data-ly-density="spacious"],
345
+ .ly-root [data-ly-density="spacious"]
346
+ ) {
347
+ --ly-gap: var(--ly-space-4);
348
+ --ly-grid-gap: var(--ly-space-4);
349
+ --ly-stack-gap: var(--ly-space-4);
350
+ --ly-cluster-gap: var(--ly-space-3);
351
+ --ly-section-padding-block: var(--ly-space-5);
352
+ --ly-section-padding-block-compact: var(--ly-space-3);
353
+ }
354
+ }
355
+ }
356
+
213
357
  /* wrappers.css */
214
358
  /* Wrappers provide fluid measures and become the nearest responsive scope. */
215
359
 
@@ -242,6 +386,10 @@
242
386
  --ly-wrapper-max: var(--ly-wrapper-content);
243
387
  }
244
388
 
389
+ .ly-wrapper--workspace {
390
+ --ly-wrapper-max: var(--ly-wrapper-workspace);
391
+ }
392
+
245
393
  .ly-wrapper--wide {
246
394
  --ly-wrapper-max: var(--ly-wrapper-wide);
247
395
  }
@@ -413,6 +561,44 @@
413
561
  grid-template-columns: repeat(var(--ly-grid-columns), minmax(0, 1fr));
414
562
  }
415
563
 
564
+ .ly-mosaic {
565
+ display: grid;
566
+ grid-template-columns: minmax(0, 1fr);
567
+ gap: var(--ly-grid-gap);
568
+ }
569
+
570
+ .ly-mosaic > * {
571
+ min-inline-size: 0;
572
+ min-block-size: 0;
573
+ }
574
+
575
+ .ly-action-bar {
576
+ display: flex;
577
+ flex-wrap: wrap;
578
+ align-items: center;
579
+ gap: var(--ly-cluster-gap);
580
+ min-inline-size: 0;
581
+ padding-block-end: var(--ly-safe-area-block-end);
582
+ }
583
+
584
+ .ly-action-bar > :where([data-ly-actions="start"], [data-ly-actions="end"]) {
585
+ display: flex;
586
+ flex-wrap: wrap;
587
+ align-items: center;
588
+ gap: var(--ly-cluster-gap);
589
+ min-inline-size: 0;
590
+ }
591
+
592
+ .ly-action-bar > [data-ly-actions="end"] {
593
+ margin-inline-start: auto;
594
+ }
595
+
596
+ .ly-action-bar--sticky {
597
+ position: var(--ly-sticky-position, sticky);
598
+ inset-block-end: 0;
599
+ z-index: var(--ly-z-header, 20);
600
+ }
601
+
416
602
  .ly-split {
417
603
  display: grid;
418
604
  grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-split-min)), 1fr));
@@ -473,11 +659,91 @@
473
659
 
474
660
  .ly-scroll {
475
661
  min-block-size: 0;
476
- max-block-size: var(--ly-scroll-max);
477
- overflow-x: clip;
478
- overflow-y: auto;
662
+ overflow: auto;
479
663
  overscroll-behavior-block: contain;
480
664
  }
665
+
666
+ .ly-scroll--bounded {
667
+ max-block-size: var(--ly-scroll-max);
668
+ }
669
+
670
+ .ly-scroll--viewport {
671
+ max-block-size: var(--ly-scroll-viewport-max);
672
+ }
673
+ }
674
+
675
+ /*
676
+ Mosaic span behavior lives in the final structural context layer so it can
677
+ deliberately override the general-purpose span utilities at automatic tiers.
678
+ */
679
+ @layer ly.context {
680
+ .ly-mosaic:not([data-ly-responsive="manual"]) > :where(
681
+ .ly-span-1,
682
+ .ly-span-2,
683
+ .ly-span-3,
684
+ .ly-span-4,
685
+ .ly-span-6,
686
+ .ly-span-full
687
+ ) {
688
+ grid-column: 1 / -1;
689
+ }
690
+
691
+ .ly-mosaic:not([data-ly-responsive="manual"]) > :where(
692
+ .ly-row-span-2,
693
+ .ly-row-span-3
694
+ ) {
695
+ grid-row: auto;
696
+ }
697
+
698
+ @container ly-scope (min-width: 42rem) {
699
+ .ly-mosaic:not([data-ly-responsive="manual"]) {
700
+ grid-template-columns: repeat(
701
+ var(--ly-mosaic-medium-columns),
702
+ minmax(0, 1fr)
703
+ );
704
+ }
705
+
706
+ .ly-mosaic:not([data-ly-responsive="manual"]) > .ly-span-1 {
707
+ grid-column: span 1;
708
+ }
709
+
710
+ .ly-mosaic:not([data-ly-responsive="manual"]) > .ly-span-2 {
711
+ grid-column: span 2;
712
+ }
713
+
714
+ .ly-mosaic:not([data-ly-responsive="manual"]) > .ly-span-3 {
715
+ grid-column: span 3;
716
+ }
717
+
718
+ .ly-mosaic:not([data-ly-responsive="manual"]) > .ly-span-4 {
719
+ grid-column: span 4;
720
+ }
721
+
722
+ .ly-mosaic:not([data-ly-responsive="manual"]) > .ly-span-6 {
723
+ grid-column: span 6;
724
+ }
725
+
726
+ .ly-mosaic:not([data-ly-responsive="manual"]) > .ly-span-full {
727
+ grid-column: 1 / -1;
728
+ }
729
+
730
+ .ly-mosaic:not([data-ly-responsive="manual"]) > .ly-row-span-2 {
731
+ grid-row: span 2;
732
+ }
733
+
734
+ .ly-mosaic:not([data-ly-responsive="manual"]) > .ly-row-span-3 {
735
+ grid-row: span 3;
736
+ }
737
+ }
738
+
739
+ @container ly-scope (min-width: 72rem) {
740
+ .ly-mosaic:not([data-ly-responsive="manual"]) {
741
+ grid-template-columns: repeat(
742
+ var(--ly-mosaic-wide-columns),
743
+ minmax(0, 1fr)
744
+ );
745
+ }
746
+ }
481
747
  }
482
748
 
483
749
  /* recipes.css */
@@ -675,6 +941,89 @@
675
941
  grid-template-columns: var(--ly-dashboard-wide-columns);
676
942
  }
677
943
  }
944
+
945
+ /*
946
+ Feature-detected presence rules remove absent side tracks without changing
947
+ the canonical area vocabulary or personality-owned both-side topologies.
948
+ */
949
+ @supports selector(:has(*)) {
950
+ @container ly-scope (min-width: 52rem) {
951
+ [data-ly-recipe="app-shell"]:not([data-ly-responsive="manual"]):has(
952
+ > [data-ly-area="sidebar"]
953
+ ):not(:has(> [data-ly-area="aside"])) {
954
+ grid-template-areas:
955
+ "header header"
956
+ "sidebar main"
957
+ "footer footer";
958
+ grid-template-columns:
959
+ minmax(min(100%, var(--ly-recipe-rail)), auto)
960
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr);
961
+ grid-template-rows: auto minmax(0, 1fr) auto;
962
+ }
963
+
964
+ [data-ly-recipe="app-shell"]:not([data-ly-responsive="manual"]):not(
965
+ :has(> [data-ly-area="sidebar"])
966
+ ):has(> [data-ly-area="aside"]) {
967
+ grid-template-areas:
968
+ "header header"
969
+ "main aside"
970
+ "footer footer";
971
+ grid-template-columns:
972
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
973
+ minmax(min(100%, var(--ly-recipe-aside)), 0.35fr);
974
+ grid-template-rows: auto minmax(0, 1fr) auto;
975
+ }
976
+
977
+ [data-ly-recipe="app-shell"]:not([data-ly-responsive="manual"]):not(
978
+ :has(> [data-ly-area="sidebar"])
979
+ ):not(:has(> [data-ly-area="aside"])) {
980
+ grid-template-areas:
981
+ "header"
982
+ "main"
983
+ "footer";
984
+ grid-template-columns:
985
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr);
986
+ grid-template-rows: auto minmax(0, 1fr) auto;
987
+ }
988
+ }
989
+
990
+ @container ly-scope (min-width: 72rem) {
991
+ [data-ly-recipe="app-shell"]:not([data-ly-responsive="manual"]):has(
992
+ > [data-ly-area="sidebar"]
993
+ ):not(:has(> [data-ly-area="aside"])) {
994
+ grid-template-areas:
995
+ "sidebar header"
996
+ "sidebar main"
997
+ "sidebar footer";
998
+ grid-template-columns:
999
+ minmax(min(100%, var(--ly-recipe-rail)), auto)
1000
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr);
1001
+ }
1002
+
1003
+ [data-ly-recipe="app-shell"]:not([data-ly-responsive="manual"]):not(
1004
+ :has(> [data-ly-area="sidebar"])
1005
+ ):has(> [data-ly-area="aside"]) {
1006
+ grid-template-areas:
1007
+ "header header"
1008
+ "main aside"
1009
+ "footer footer";
1010
+ grid-template-columns:
1011
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
1012
+ minmax(min(100%, var(--ly-recipe-aside)), 0.35fr);
1013
+ }
1014
+
1015
+ [data-ly-recipe="app-shell"]:not([data-ly-responsive="manual"]):not(
1016
+ :has(> [data-ly-area="sidebar"])
1017
+ ):not(:has(> [data-ly-area="aside"])) {
1018
+ grid-template-areas:
1019
+ "header"
1020
+ "main"
1021
+ "footer";
1022
+ grid-template-columns:
1023
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr);
1024
+ }
1025
+ }
1026
+ }
678
1027
  }
679
1028
 
680
1029
  /* utilities.css */
@@ -692,42 +1041,21 @@
692
1041
  .ly-span-2 { grid-column: span 2; }
693
1042
  .ly-span-3 { grid-column: span 3; }
694
1043
  .ly-span-4 { grid-column: span 4; }
1044
+ .ly-span-6 { grid-column: span 6; }
695
1045
  .ly-span-full { grid-column: 1 / -1; }
696
-
697
- .ly-gap-0 {
698
- --ly-gap: var(--ly-space-0);
699
- --ly-grid-gap: var(--ly-space-0);
700
- --ly-stack-gap: var(--ly-space-0);
701
- --ly-cluster-gap: var(--ly-space-0);
702
- }
703
-
704
- .ly-gap-2 {
705
- --ly-gap: var(--ly-space-2);
706
- --ly-grid-gap: var(--ly-space-2);
707
- --ly-stack-gap: var(--ly-space-2);
708
- --ly-cluster-gap: var(--ly-space-2);
709
- }
710
-
711
- .ly-gap-4 {
712
- --ly-gap: var(--ly-space-4);
713
- --ly-grid-gap: var(--ly-space-4);
714
- --ly-stack-gap: var(--ly-space-4);
715
- --ly-cluster-gap: var(--ly-space-4);
716
- }
717
-
718
- .ly-gap-6 {
719
- --ly-gap: var(--ly-space-6);
720
- --ly-grid-gap: var(--ly-space-6);
721
- --ly-stack-gap: var(--ly-space-6);
722
- --ly-cluster-gap: var(--ly-space-6);
723
- }
724
-
725
- .ly-gap-8 {
726
- --ly-gap: var(--ly-space-8);
727
- --ly-grid-gap: var(--ly-space-8);
728
- --ly-stack-gap: var(--ly-space-8);
729
- --ly-cluster-gap: var(--ly-space-8);
730
- }
1046
+ .ly-row-span-2 { grid-row: span 2; }
1047
+ .ly-row-span-3 { grid-row: span 3; }
1048
+
1049
+ .ly-gap-0 { gap: var(--ly-space-0); }
1050
+ .ly-gap-1 { gap: var(--ly-space-1); }
1051
+ .ly-gap-2 { gap: var(--ly-space-2); }
1052
+ .ly-gap-3 { gap: var(--ly-space-3); }
1053
+ .ly-gap-4 { gap: var(--ly-space-4); }
1054
+ .ly-gap-5 { gap: var(--ly-space-5); }
1055
+ .ly-gap-6 { gap: var(--ly-space-6); }
1056
+ .ly-gap-7 { gap: var(--ly-space-7); }
1057
+ .ly-gap-8 { gap: var(--ly-space-8); }
1058
+ .ly-gap-9 { gap: var(--ly-space-9); }
731
1059
 
732
1060
  .ly-pad-0 { padding: var(--ly-space-0); }
733
1061
  .ly-pad-2 { padding: var(--ly-space-2); }
@@ -797,16 +1125,6 @@
797
1125
  --ly-gallery-min: 11rem;
798
1126
  --ly-recipe-rail: 14rem;
799
1127
  --ly-recipe-aside: 18rem;
800
- --ly-app-shell-wide-areas:
801
- "header header header"
802
- "sidebar main main"
803
- "aside main main"
804
- "footer footer footer";
805
- --ly-app-shell-wide-rows: auto auto minmax(0, 1fr) auto;
806
- --ly-app-shell-wide-columns:
807
- minmax(min(100%, var(--ly-recipe-rail)), 0.3fr)
808
- minmax(0, 1fr)
809
- minmax(0, 1fr);
810
1128
  }
811
1129
  }
812
1130
 
@@ -814,21 +1132,12 @@
814
1132
  @layer ly.personalities.maximalist {
815
1133
  :where(.ly-root[data-ly-layout="maximalist"]) {
816
1134
  --ly-personality-wrapper-max: 100%;
817
- --ly-profile-gap: var(--ly-space-7);
1135
+ --ly-profile-gap: var(--ly-space-3);
818
1136
  --ly-grid-min: 10rem;
819
1137
  --ly-card-grid-min: 13rem;
820
1138
  --ly-gallery-min: 10rem;
821
1139
  --ly-recipe-rail: 15rem;
822
1140
  --ly-recipe-aside: 18rem;
823
- --ly-app-shell-wide-areas:
824
- "header header header header"
825
- "main main sidebar aside"
826
- "main main footer footer";
827
- --ly-app-shell-wide-columns:
828
- minmax(0, 1.4fr)
829
- minmax(0, 0.6fr)
830
- minmax(min(100%, var(--ly-recipe-rail)), 0.32fr)
831
- minmax(min(100%, var(--ly-recipe-aside)), 0.38fr);
832
1141
  }
833
1142
  }
834
1143
 
@@ -836,42 +1145,26 @@
836
1145
  @layer ly.personalities.bauhaus {
837
1146
  :where(.ly-root[data-ly-layout="bauhaus"]) {
838
1147
  --ly-personality-wrapper-max: 96rem;
839
- --ly-profile-gap: var(--ly-space-6);
1148
+ --ly-profile-gap: var(--ly-space-2);
840
1149
  --ly-grid-min: 13rem;
841
1150
  --ly-recipe-rail: 14rem;
842
1151
  --ly-recipe-aside: 18rem;
843
- --ly-app-shell-wide-areas:
844
- "header header header header"
845
- "sidebar main main aside"
846
- "sidebar footer footer aside";
847
- --ly-app-shell-wide-columns:
848
- minmax(min(100%, var(--ly-recipe-rail)), 0.24fr)
849
- minmax(0, 0.7fr)
850
- minmax(0, 1.3fr)
851
- minmax(min(100%, var(--ly-recipe-aside)), 0.3fr);
1152
+ --ly-split-primary: 0.7fr;
1153
+ --ly-split-secondary: 1.3fr;
852
1154
  }
853
1155
  }
854
1156
 
855
1157
  /* personalities/tactile.css */
856
1158
  @layer ly.personalities.tactile {
857
1159
  :where(.ly-root[data-ly-layout="tactile"]) {
858
- --ly-personality-wrapper-max: 82rem;
1160
+ --ly-personality-wrapper-max: 96rem;
859
1161
  --ly-profile-gap: var(--ly-space-4);
860
1162
  --ly-grid-min: 15rem;
861
1163
  --ly-recipe-rail: 17rem;
862
1164
  --ly-recipe-aside: 20rem;
863
- --ly-app-shell-wide-areas:
864
- "header header"
865
- "sidebar main"
866
- "aside main"
867
- "footer footer";
868
- --ly-app-shell-wide-rows: auto auto minmax(0, 1fr) auto;
869
- --ly-app-shell-wide-columns:
870
- minmax(min(100%, var(--ly-recipe-rail)), 0.28fr)
871
- minmax(0, 1fr);
872
1165
  --ly-list-detail-wide-columns:
873
- minmax(min(100%, var(--ly-pane-size)), 0.5fr)
874
- minmax(0, 0.9fr);
1166
+ minmax(min(100%, var(--ly-pane-min)), 0.5fr)
1167
+ minmax(min(100%, var(--ly-pane-min)), 0.9fr);
875
1168
  }
876
1169
  }
877
1170
 
@@ -882,19 +1175,10 @@
882
1175
  --ly-profile-gap: var(--ly-space-6);
883
1176
  --ly-grid-min: 17rem;
884
1177
  --ly-recipe-rail: 17rem;
885
- --ly-recipe-aside: 19rem;
886
- --ly-app-shell-wide-areas:
887
- "header sidebar"
888
- "main sidebar"
889
- "aside sidebar"
890
- "footer sidebar";
891
- --ly-app-shell-wide-rows: auto minmax(0, 1fr) auto auto;
892
- --ly-app-shell-wide-columns:
893
- minmax(0, 1fr)
894
- minmax(min(100%, var(--ly-recipe-rail)), 0.3fr);
1178
+ --ly-recipe-aside: 22rem;
895
1179
  --ly-list-detail-wide-columns:
896
- minmax(0, 1.1fr)
897
- minmax(min(100%, var(--ly-pane-size)), 0.7fr);
1180
+ minmax(min(100%, var(--ly-pane-min)), 1.1fr)
1181
+ minmax(min(100%, var(--ly-pane-min)), 0.7fr);
898
1182
  }
899
1183
  }
900
1184
 
@@ -912,7 +1196,7 @@
912
1196
  "sidebar footer aside";
913
1197
  --ly-app-shell-wide-columns:
914
1198
  minmax(min(100%, var(--ly-recipe-rail)), 0.24fr)
915
- minmax(0, 1fr)
1199
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
916
1200
  minmax(min(100%, var(--ly-recipe-aside)), 0.3fr);
917
1201
  }
918
1202
  }
@@ -920,19 +1204,11 @@
920
1204
  /* personalities/brutalism.css */
921
1205
  @layer ly.personalities.brutalism {
922
1206
  :where(.ly-root[data-ly-layout="brutalism"]) {
923
- --ly-personality-wrapper-max: 100rem;
924
- --ly-profile-gap: var(--ly-space-3);
1207
+ --ly-personality-wrapper-max: 100%;
1208
+ --ly-profile-gap: var(--ly-space-1);
925
1209
  --ly-grid-min: 14rem;
926
1210
  --ly-recipe-rail: 16rem;
927
1211
  --ly-recipe-aside: 18rem;
928
- --ly-app-shell-wide-areas:
929
- "header header sidebar"
930
- "main aside sidebar"
931
- "footer footer sidebar";
932
- --ly-app-shell-wide-columns:
933
- minmax(0, 1.3fr)
934
- minmax(0, 0.7fr)
935
- minmax(min(100%, var(--ly-recipe-rail)), 0.34fr);
936
1212
  }
937
1213
  }
938
1214
 
@@ -950,7 +1226,7 @@
950
1226
  "sidebar footer footer";
951
1227
  --ly-app-shell-wide-columns:
952
1228
  minmax(min(100%, var(--ly-recipe-rail)), 0.2fr)
953
- minmax(0, 1fr)
1229
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
954
1230
  minmax(min(100%, var(--ly-recipe-aside)), 0.32fr);
955
1231
  }
956
1232
  }
@@ -958,38 +1234,38 @@
958
1234
  /* personalities/y2k.css */
959
1235
  @layer ly.personalities.y2k {
960
1236
  :where(.ly-root[data-ly-layout="y2k"]) {
961
- --ly-personality-wrapper-max: 90rem;
962
- --ly-profile-gap: var(--ly-space-6);
1237
+ --ly-personality-wrapper-max: 100%;
1238
+ --ly-profile-gap: var(--ly-space-2);
963
1239
  --ly-grid-min: 13rem;
964
1240
  --ly-recipe-rail: 18rem;
965
1241
  --ly-recipe-aside: 16rem;
966
1242
  --ly-app-shell-wide-areas:
967
- "header header sidebar"
968
- "aside main sidebar"
969
- "footer footer sidebar";
1243
+ "header header header"
1244
+ "sidebar main aside"
1245
+ "footer footer footer";
970
1246
  --ly-app-shell-wide-columns:
971
- minmax(min(100%, var(--ly-recipe-aside)), 0.34fr)
972
- minmax(0, 1fr)
973
- minmax(min(100%, var(--ly-recipe-rail)), 0.28fr);
1247
+ minmax(min(100%, var(--ly-recipe-rail)), 0.28fr)
1248
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
1249
+ minmax(min(100%, var(--ly-recipe-aside)), 0.26fr);
974
1250
  }
975
1251
  }
976
1252
 
977
1253
  /* personalities/retro-glass.css */
978
1254
  @layer ly.personalities.retro-glass {
979
1255
  :where(.ly-root[data-ly-layout="retro-glass"]) {
980
- --ly-personality-wrapper-max: 104rem;
981
- --ly-profile-gap: var(--ly-space-5);
1256
+ --ly-personality-wrapper-max: 100%;
1257
+ --ly-profile-gap: var(--ly-space-2);
982
1258
  --ly-grid-min: 15rem;
983
- --ly-recipe-rail: 18rem;
984
- --ly-recipe-aside: 18rem;
1259
+ --ly-recipe-rail: 16rem;
1260
+ --ly-recipe-aside: 17rem;
985
1261
  --ly-app-shell-wide-areas:
986
- "header header sidebar"
987
- "main main sidebar"
988
- "aside footer footer";
1262
+ "header header header"
1263
+ "sidebar main aside"
1264
+ "footer footer footer";
989
1265
  --ly-app-shell-wide-columns:
990
- minmax(0, 1.25fr)
991
- minmax(0, 0.75fr)
992
- minmax(min(100%, var(--ly-recipe-rail)), 0.32fr);
1266
+ minmax(min(100%, var(--ly-recipe-rail)), 0.3fr)
1267
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
1268
+ minmax(min(100%, var(--ly-recipe-aside)), 0.28fr);
993
1269
  }
994
1270
  }
995
1271
 
@@ -1007,11 +1283,11 @@
1007
1283
  "sidebar footer footer";
1008
1284
  --ly-app-shell-wide-columns:
1009
1285
  minmax(min(100%, var(--ly-recipe-rail)), 0.26fr)
1010
- minmax(0, 1.35fr)
1286
+ minmax(min(100%, var(--ly-recipe-main-min)), 1.35fr)
1011
1287
  minmax(min(100%, var(--ly-recipe-aside)), 0.65fr);
1012
1288
  --ly-split-hero-wide-columns:
1013
- minmax(0, 1.8fr)
1014
- minmax(0, 0.8fr);
1289
+ minmax(min(100%, var(--ly-split-min)), 1.8fr)
1290
+ minmax(min(100%, var(--ly-split-min)), 0.8fr);
1015
1291
  }
1016
1292
  }
1017
1293
 
@@ -1028,12 +1304,12 @@
1028
1304
  "main aside sidebar"
1029
1305
  "footer aside sidebar";
1030
1306
  --ly-app-shell-wide-columns:
1031
- minmax(0, 1.45fr)
1307
+ minmax(min(100%, var(--ly-recipe-main-min)), 1.45fr)
1032
1308
  minmax(min(100%, var(--ly-recipe-aside)), 0.55fr)
1033
1309
  minmax(min(100%, var(--ly-recipe-rail)), 0.3fr);
1034
1310
  --ly-split-hero-wide-columns:
1035
- minmax(0, 1.5fr)
1036
- minmax(0, 0.5fr);
1311
+ minmax(min(100%, var(--ly-split-min)), 1.5fr)
1312
+ minmax(min(100%, var(--ly-split-min)), 0.5fr);
1037
1313
  }
1038
1314
  }
1039
1315
 
@@ -1056,14 +1332,14 @@
1056
1332
  "footer footer";
1057
1333
  --ly-app-shell-wide-rows: auto minmax(0, 1fr) auto auto;
1058
1334
  --ly-app-shell-wide-columns:
1059
- minmax(0, 1fr)
1335
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
1060
1336
  minmax(0, 1fr);
1061
1337
  --ly-split-hero-wide-columns:
1062
- minmax(0, 1fr)
1063
- minmax(0, 1fr);
1338
+ minmax(min(100%, var(--ly-split-min)), 1fr)
1339
+ minmax(min(100%, var(--ly-split-min)), 1fr);
1064
1340
  --ly-list-detail-wide-columns:
1065
- minmax(0, 1fr)
1066
- minmax(0, 1fr);
1341
+ minmax(min(100%, var(--ly-pane-min)), 1fr)
1342
+ minmax(min(100%, var(--ly-pane-min)), 1fr);
1067
1343
  }
1068
1344
  }
1069
1345
 
@@ -1081,7 +1357,7 @@
1081
1357
  "footer footer aside";
1082
1358
  --ly-app-shell-wide-columns:
1083
1359
  minmax(min(100%, var(--ly-recipe-rail)), 0.22fr)
1084
- minmax(0, 1.45fr)
1360
+ minmax(min(100%, var(--ly-recipe-main-min)), 1.45fr)
1085
1361
  minmax(min(100%, var(--ly-recipe-aside)), 0.55fr);
1086
1362
  }
1087
1363
  }
@@ -1100,8 +1376,59 @@
1100
1376
  "footer footer footer";
1101
1377
  --ly-app-shell-wide-columns:
1102
1378
  minmax(min(100%, var(--ly-recipe-rail)), 0.28fr)
1103
- minmax(0, 1fr)
1379
+ minmax(min(100%, var(--ly-recipe-main-min)), 1fr)
1104
1380
  minmax(min(100%, var(--ly-recipe-aside)), 0.34fr);
1105
1381
  --ly-reel-item-min: 20rem;
1106
1382
  }
1107
1383
  }
1384
+
1385
+ /* personalities/technical-blueprint.css */
1386
+ @layer ly.personalities.technical-blueprint {
1387
+ :where(.ly-root[data-ly-layout="technical-blueprint"]) {
1388
+ --ly-personality-wrapper-max: 100%;
1389
+ --ly-profile-gap: var(--ly-space-1);
1390
+ --ly-grid-min: 10rem;
1391
+ --ly-recipe-rail: 11rem;
1392
+ --ly-recipe-aside: 26rem;
1393
+ --ly-split-primary: 2.2fr;
1394
+ --ly-split-secondary: 0.8fr;
1395
+ }
1396
+ }
1397
+
1398
+ /* personalities/data-terminal.css */
1399
+ @layer ly.personalities.data-terminal {
1400
+ :where(.ly-root[data-ly-layout="data-terminal"]) {
1401
+ --ly-personality-wrapper-max: 100%;
1402
+ --ly-profile-gap: var(--ly-space-1);
1403
+ --ly-grid-min: 10rem;
1404
+ --ly-card-grid-min: 10rem;
1405
+ --ly-gallery-min: 10rem;
1406
+ --ly-recipe-rail: 12rem;
1407
+ --ly-recipe-aside: 18rem;
1408
+ }
1409
+ }
1410
+
1411
+ /* personalities/industrial-hmi.css */
1412
+ @layer ly.personalities.industrial-hmi {
1413
+ :where(.ly-root[data-ly-layout="industrial-hmi"]) {
1414
+ --ly-personality-wrapper-max: 100%;
1415
+ --ly-profile-gap: var(--ly-space-2);
1416
+ --ly-grid-min: 11rem;
1417
+ --ly-recipe-rail: 7rem;
1418
+ --ly-recipe-aside: 32rem;
1419
+ }
1420
+ }
1421
+
1422
+ /* personalities/editorial.css */
1423
+ @layer ly.personalities.editorial {
1424
+ :where(.ly-root[data-ly-layout="editorial"]) {
1425
+ --ly-personality-wrapper-max: 108rem;
1426
+ --ly-profile-gap: var(--ly-space-6);
1427
+ --ly-grid-min: 16rem;
1428
+ --ly-recipe-rail: 10rem;
1429
+ --ly-recipe-aside: 18rem;
1430
+ --ly-split-primary: 1.65fr;
1431
+ --ly-split-secondary: 0.75fr;
1432
+ --ly-frame-ratio: 4 / 5;
1433
+ }
1434
+ }