layout-style-css 1.0.0 → 1.1.1

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 (37) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/CONTRIBUTING.md +50 -0
  3. package/README.md +208 -19
  4. package/SECURITY.md +45 -0
  5. package/demo/assets/social-card.png +0 -0
  6. package/demo/index.html +358 -82
  7. package/dist/layout-all.css +5 -0
  8. package/dist/layout-base.css +67 -0
  9. package/dist/layout-style-css.css +561 -0
  10. package/dist/layout-style-css.min.css +1 -1
  11. package/dist/layout-style-f-pattern.css +76 -0
  12. package/dist/layout-style-mondrian.css +77 -0
  13. package/dist/layout-style-split-screen.css +62 -0
  14. package/dist/layout-style-synthwave.css +88 -0
  15. package/dist/layout-style-z-pattern.css +76 -0
  16. package/dist/layout-ui-style-kit-bridge.css +105 -0
  17. package/docs/wiki/Contributing.md +30 -0
  18. package/docs/wiki/Demo-And-GitHub-Pages.md +39 -0
  19. package/docs/wiki/Getting-Started.md +68 -0
  20. package/docs/wiki/Home.md +48 -0
  21. package/docs/wiki/Installation-And-CDN.md +58 -0
  22. package/docs/wiki/Layout-Primitives.md +57 -0
  23. package/docs/wiki/Layout-Recipes.md +80 -0
  24. package/docs/wiki/Layout-Styles.md +43 -0
  25. package/docs/wiki/Release-And-Publishing.md +69 -0
  26. package/docs/wiki/Security-And-Support.md +34 -0
  27. package/docs/wiki/UI-Style-Kit-Compatibility.md +54 -0
  28. package/docs/wiki/_Sidebar.md +14 -0
  29. package/package.json +12 -2
  30. package/styles/layout-base.css +67 -0
  31. package/styles/layout-style-f-pattern.css +76 -0
  32. package/styles/layout-style-mondrian.css +77 -0
  33. package/styles/layout-style-split-screen.css +62 -0
  34. package/styles/layout-style-synthwave.css +88 -0
  35. package/styles/layout-style-z-pattern.css +76 -0
  36. package/styles/layout-ui-style-kit-bridge.css +105 -0
  37. package/demo/assets/social-card.svg +0 -17
@@ -34,6 +34,13 @@
34
34
 
35
35
  --ly-grid-columns: 12;
36
36
  --ly-grid-min: 16rem;
37
+ --ly-card-grid-min: 16rem;
38
+ --ly-card-size-sm: 10rem;
39
+ --ly-card-size-md: 14rem;
40
+ --ly-card-size-lg: 18rem;
41
+ --ly-gallery-min: 12rem;
42
+ --ly-carousel-item-min: 16rem;
43
+ --ly-carousel-item-max: 28rem;
37
44
  --ly-sidebar-min: 14rem;
38
45
  --ly-sidebar-width: 18rem;
39
46
  --ly-sidebar-max: 22rem;
@@ -165,6 +172,19 @@
165
172
  gap: var(--ly-cluster-gap);
166
173
  }
167
174
 
175
+ .ly-button-group {
176
+ /* Button groups provide flow only; UI libraries keep button paint and states. */
177
+ display: flex;
178
+ flex-wrap: wrap;
179
+ align-items: center;
180
+ gap: var(--ly-cluster-gap);
181
+ }
182
+
183
+ .ly-button-group > * {
184
+ flex: 0 1 auto;
185
+ min-width: min(100%, var(--ly-button-min, 8rem));
186
+ }
187
+
168
188
  .ly-grid {
169
189
  display: grid;
170
190
  grid-template-columns: repeat(var(--ly-grid-columns), minmax(0, 1fr));
@@ -175,6 +195,53 @@
175
195
  grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
176
196
  }
177
197
 
198
+ .ly-card-grid {
199
+ display: grid;
200
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
201
+ gap: var(--ly-grid-gap);
202
+ }
203
+
204
+ .ly-card-grid > * {
205
+ min-width: 0;
206
+ }
207
+
208
+ .ly-card-sm {
209
+ min-block-size: var(--ly-card-size-sm);
210
+ }
211
+
212
+ .ly-card-md {
213
+ min-block-size: var(--ly-card-size-md);
214
+ }
215
+
216
+ .ly-card-lg {
217
+ min-block-size: var(--ly-card-size-lg);
218
+ }
219
+
220
+ .ly-gallery {
221
+ display: grid;
222
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
223
+ gap: var(--ly-grid-gap);
224
+ }
225
+
226
+ .ly-gallery > * {
227
+ min-width: 0;
228
+ }
229
+
230
+ .ly-carousel {
231
+ display: grid;
232
+ grid-auto-flow: column;
233
+ grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
234
+ gap: var(--ly-grid-gap);
235
+ overflow-x: auto;
236
+ overscroll-behavior-inline: contain;
237
+ scroll-snap-type: x proximity;
238
+ }
239
+
240
+ .ly-carousel > * {
241
+ min-width: 0;
242
+ scroll-snap-align: start;
243
+ }
244
+
178
245
  .ly-row {
179
246
  display: flex;
180
247
  flex-wrap: wrap;
@@ -37,6 +37,13 @@
37
37
 
38
38
  --ly-grid-columns: 12;
39
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;
40
47
  --ly-sidebar-min: 14rem;
41
48
  --ly-sidebar-width: 18rem;
42
49
  --ly-sidebar-max: 22rem;
@@ -168,6 +175,19 @@
168
175
  gap: var(--ly-cluster-gap);
169
176
  }
170
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
+
171
191
  .ly-grid {
172
192
  display: grid;
173
193
  grid-template-columns: repeat(var(--ly-grid-columns), minmax(0, 1fr));
@@ -178,6 +198,53 @@
178
198
  grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
179
199
  }
180
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
+
181
248
  .ly-row {
182
249
  display: flex;
183
250
  flex-wrap: wrap;
@@ -529,6 +596,111 @@
529
596
  :where(.ly-root[data-ui="retro-glass"], [data-ui="retro-glass"] .ly-root) {
530
597
  --ly-ui-style-kit-bridge-style: retro-glass;
531
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
+ }
532
704
  }
533
705
 
534
706
  /* layout-style-minimal-saas.css */
@@ -1365,3 +1537,392 @@
1365
1537
  }
1366
1538
  }
1367
1539
  }
1540
+
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
+ }
1617
+ }
1618
+
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
+ }
1695
+ }
1696
+
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
+ }
1759
+ }
1760
+
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
+ }
1838
+ }
1839
+
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
+ }
1928
+ }