layout-style-css 1.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 (42) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +447 -0
  3. package/demo/assets/apple-touch-icon.svg +7 -0
  4. package/demo/assets/favicon.svg +7 -0
  5. package/demo/assets/social-card.svg +17 -0
  6. package/demo/browserconfig.xml +9 -0
  7. package/demo/index.html +700 -0
  8. package/demo/robots.txt +4 -0
  9. package/demo/site.webmanifest +23 -0
  10. package/demo/sitemap.xml +9 -0
  11. package/dist/layout-all-with-ui-kit-and-interactive-surface.css +3 -0
  12. package/dist/layout-all-with-ui-kit.css +2 -0
  13. package/dist/layout-all.css +13 -0
  14. package/dist/layout-base.css +472 -0
  15. package/dist/layout-style-bauhaus.css +70 -0
  16. package/dist/layout-style-bento.css +76 -0
  17. package/dist/layout-style-brutalism.css +70 -0
  18. package/dist/layout-style-css.css +1367 -0
  19. package/dist/layout-style-css.min.css +1 -0
  20. package/dist/layout-style-cyberpunk.css +70 -0
  21. package/dist/layout-style-maximalist.css +93 -0
  22. package/dist/layout-style-minimal-saas.css +67 -0
  23. package/dist/layout-style-neumorphism.css +72 -0
  24. package/dist/layout-style-retro-glass.css +82 -0
  25. package/dist/layout-style-retrofuturism.css +71 -0
  26. package/dist/layout-style-tactile.css +70 -0
  27. package/dist/layout-style-y2k.css +72 -0
  28. package/dist/layout-ui-style-kit-bridge.css +55 -0
  29. package/package.json +97 -0
  30. package/styles/layout-base.css +472 -0
  31. package/styles/layout-style-bauhaus.css +70 -0
  32. package/styles/layout-style-bento.css +76 -0
  33. package/styles/layout-style-brutalism.css +70 -0
  34. package/styles/layout-style-cyberpunk.css +70 -0
  35. package/styles/layout-style-maximalist.css +93 -0
  36. package/styles/layout-style-minimal-saas.css +67 -0
  37. package/styles/layout-style-neumorphism.css +72 -0
  38. package/styles/layout-style-retro-glass.css +82 -0
  39. package/styles/layout-style-retrofuturism.css +71 -0
  40. package/styles/layout-style-tactile.css +70 -0
  41. package/styles/layout-style-y2k.css +72 -0
  42. package/styles/layout-ui-style-kit-bridge.css +55 -0
@@ -0,0 +1,70 @@
1
+ /*
2
+ Layout style: bauhaus.
3
+ Strict framed column shell with structural rails and measured offsets. Visual
4
+ identity remains owned by ui-style-kit-css.
5
+ */
6
+
7
+ @layer ly.styles.bauhaus {
8
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) {
9
+ --ly-container-max: 92rem;
10
+ --ly-page-padding-inline: clamp(1rem, 2vw, 2rem);
11
+ --ly-section-padding-block: clamp(2.5rem, 5vw, 4.5rem);
12
+ --ly-sidebar-width: clamp(8rem, 12vw, 12rem);
13
+ --ly-grid-min: 13rem;
14
+ --ly-gap: clamp(0.75rem, 1.6vw, 1.25rem);
15
+ --ly-grid-gap: var(--ly-gap);
16
+ --ly-stack-gap: clamp(0.75rem, 1.5vw, 1.25rem);
17
+ }
18
+
19
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-app-main {
20
+ padding-block: clamp(0.75rem, 2vw, 1.5rem);
21
+ }
22
+
23
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-container,
24
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-wrapper {
25
+ width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
26
+ }
27
+
28
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-section {
29
+ padding-block: var(--ly-section-padding-block);
30
+ }
31
+
32
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-grid--auto {
33
+ grid-auto-rows: minmax(7rem, auto);
34
+ }
35
+
36
+ @media (min-width: 48rem) {
37
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-app-shell {
38
+ grid-template-areas:
39
+ "sidebar header"
40
+ "sidebar main";
41
+ grid-template-columns: minmax(min(100%, 7rem), 0.18fr) minmax(0, 1fr);
42
+ }
43
+
44
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-app-sidebar {
45
+ display: block;
46
+ position: sticky;
47
+ top: 0;
48
+ height: 100svh;
49
+ overflow: auto;
50
+ }
51
+
52
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-sidebar-layout {
53
+ grid-template-columns: minmax(min(100%, 8rem), 0.22fr) minmax(0, 1fr);
54
+ }
55
+
56
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-split {
57
+ grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
58
+ }
59
+
60
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-panes--two {
61
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 12rem), 0.5fr);
62
+ }
63
+ }
64
+
65
+ @media (min-width: 80rem) {
66
+ :where(.ly-root[data-layout="bauhaus"], .ly-root[layout-style="bauhaus"], .ly-root.ly-layout-bauhaus, .ly-root.ly-style-bauhaus) .ly-panes--three {
67
+ grid-template-columns: minmax(min(100%, 10rem), 0.25fr) minmax(0, 1fr) minmax(min(100%, 10rem), 0.25fr);
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,76 @@
1
+ /*
2
+ Layout style: bento.
3
+ Modular dashboard shell with staged mosaic zones. Visual identity remains
4
+ owned by ui-style-kit-css.
5
+ */
6
+
7
+ @layer ly.styles.bento {
8
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) {
9
+ --ly-container-max: 104rem;
10
+ --ly-page-padding-inline: clamp(1rem, 3.5vw, 3rem);
11
+ --ly-section-padding-block: clamp(2rem, 6vw, 5rem);
12
+ --ly-sidebar-width: clamp(13rem, 16vw, 17rem);
13
+ --ly-grid-min: 14rem;
14
+ --ly-gap: clamp(1rem, 2.5vw, 2rem);
15
+ --ly-grid-gap: var(--ly-gap);
16
+ --ly-stack-gap: clamp(1rem, 2vw, 1.75rem);
17
+ }
18
+
19
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-app-main {
20
+ padding-block: clamp(1rem, 3vw, 2.5rem);
21
+ }
22
+
23
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-container,
24
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-wrapper {
25
+ width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
26
+ }
27
+
28
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-section {
29
+ padding-block: var(--ly-section-padding-block);
30
+ }
31
+
32
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-grid--auto {
33
+ grid-auto-rows: minmax(9rem, auto);
34
+ }
35
+
36
+ @media (min-width: 48rem) {
37
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-app-shell {
38
+ grid-template-areas:
39
+ "sidebar header"
40
+ "sidebar main";
41
+ grid-template-columns: minmax(min(100%, 13rem), 0.26fr) minmax(0, 1fr);
42
+ }
43
+
44
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-app-sidebar {
45
+ display: block;
46
+ position: sticky;
47
+ top: var(--ly-space-3);
48
+ height: calc(100svh - (var(--ly-space-3) * 2));
49
+ margin: var(--ly-space-3) 0 var(--ly-space-3) var(--ly-space-3);
50
+ overflow: auto;
51
+ }
52
+
53
+ :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) {
54
+ grid-column: span 2;
55
+ min-height: 14rem;
56
+ }
57
+
58
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-sidebar-layout {
59
+ grid-template-columns: minmax(min(100%, 12rem), 0.3fr) minmax(0, 1fr);
60
+ }
61
+
62
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-split {
63
+ grid-template-columns: minmax(0, 0.78fr) minmax(min(100%, 18rem), 1.22fr);
64
+ }
65
+
66
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-panes--two {
67
+ grid-template-columns: minmax(0, 1.18fr) minmax(min(100%, 18rem), 0.82fr);
68
+ }
69
+ }
70
+
71
+ @media (min-width: 80rem) {
72
+ :where(.ly-root[data-layout="bento"], .ly-root[layout-style="bento"], .ly-root.ly-layout-bento, .ly-root.ly-style-bento) .ly-panes--three {
73
+ grid-template-columns: minmax(min(100%, 12rem), 0.6fr) minmax(0, 1.4fr) minmax(min(100%, 14rem), 0.8fr);
74
+ }
75
+ }
76
+ }
@@ -0,0 +1,70 @@
1
+ /*
2
+ Layout style: brutalism.
3
+ Full-bleed slab shell with abrupt section breaks and compressed rails. Visual
4
+ identity remains owned by ui-style-kit-css.
5
+ */
6
+
7
+ @layer ly.styles.brutalism {
8
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) {
9
+ --ly-container-max: 100vw;
10
+ --ly-page-padding-inline: clamp(0.75rem, 3vw, 3rem);
11
+ --ly-section-padding-block: clamp(2rem, 6vw, 5rem);
12
+ --ly-sidebar-width: clamp(12rem, 15vw, 16rem);
13
+ --ly-grid-min: 12rem;
14
+ --ly-gap: clamp(0.75rem, 2vw, 1.5rem);
15
+ --ly-grid-gap: var(--ly-gap);
16
+ --ly-stack-gap: clamp(0.75rem, 2vw, 1.5rem);
17
+ }
18
+
19
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-app-main {
20
+ padding-block: 0;
21
+ }
22
+
23
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-container,
24
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-wrapper {
25
+ width: min(100%, var(--ly-container-max));
26
+ }
27
+
28
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-section {
29
+ padding-block: var(--ly-section-padding-block);
30
+ }
31
+
32
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-grid--auto {
33
+ grid-auto-rows: minmax(7rem, auto);
34
+ }
35
+
36
+ @media (min-width: 48rem) {
37
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-app-shell {
38
+ grid-template-areas:
39
+ "header header"
40
+ "main sidebar";
41
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 12rem), 0.22fr);
42
+ }
43
+
44
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-app-sidebar {
45
+ display: block;
46
+ position: sticky;
47
+ top: 0;
48
+ height: 100svh;
49
+ overflow: auto;
50
+ }
51
+
52
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-sidebar-layout {
53
+ grid-template-columns: minmax(0, 1.55fr) minmax(min(100%, 12rem), 0.45fr);
54
+ }
55
+
56
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-split {
57
+ grid-template-columns: minmax(0, 1.7fr) minmax(min(100%, 12rem), 0.3fr);
58
+ }
59
+
60
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-panes--two {
61
+ grid-template-columns: minmax(min(100%, 12rem), 0.35fr) minmax(0, 1.65fr);
62
+ }
63
+ }
64
+
65
+ @media (min-width: 80rem) {
66
+ :where(.ly-root[data-layout="brutalism"], .ly-root[layout-style="brutalism"], .ly-root.ly-layout-brutalism, .ly-root.ly-style-brutalism) .ly-panes--three {
67
+ grid-template-columns: minmax(min(100%, 11rem), 0.28fr) minmax(0, 1.42fr) minmax(min(100%, 14rem), 0.4fr);
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,70 @@
1
+ /*
2
+ Layout style: cyberpunk.
3
+ Narrow utility rail with dense command workspace and compact gutters. Visual
4
+ identity remains owned by ui-style-kit-css.
5
+ */
6
+
7
+ @layer ly.styles.cyberpunk {
8
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) {
9
+ --ly-container-max: 104rem;
10
+ --ly-page-padding-inline: clamp(0.75rem, 2vw, 2rem);
11
+ --ly-section-padding-block: clamp(2rem, 5vw, 4rem);
12
+ --ly-sidebar-width: clamp(10rem, 12vw, 12.5rem);
13
+ --ly-grid-min: 12rem;
14
+ --ly-gap: clamp(0.75rem, 1.8vw, 1.25rem);
15
+ --ly-grid-gap: var(--ly-gap);
16
+ --ly-stack-gap: clamp(0.75rem, 1.5vw, 1.25rem);
17
+ }
18
+
19
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-app-main {
20
+ padding-block: clamp(0.75rem, 2vw, 1.5rem);
21
+ }
22
+
23
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-container,
24
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-wrapper {
25
+ width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
26
+ }
27
+
28
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-section {
29
+ padding-block: var(--ly-section-padding-block);
30
+ }
31
+
32
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-grid--auto {
33
+ grid-auto-rows: minmax(7rem, auto);
34
+ }
35
+
36
+ @media (min-width: 48rem) {
37
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-app-shell {
38
+ grid-template-areas:
39
+ "sidebar header"
40
+ "sidebar main";
41
+ grid-template-columns: minmax(min(100%, var(--ly-sidebar-width)), var(--ly-sidebar-width)) minmax(0, 1fr);
42
+ }
43
+
44
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-app-sidebar {
45
+ display: block;
46
+ position: sticky;
47
+ top: 0;
48
+ height: 100svh;
49
+ overflow: auto;
50
+ }
51
+
52
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-sidebar-layout {
53
+ grid-template-columns: minmax(min(100%, 10rem), 0.24fr) minmax(0, 1fr);
54
+ }
55
+
56
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-split {
57
+ grid-template-columns: minmax(0, 1.2fr) minmax(min(100%, 16rem), 0.8fr);
58
+ }
59
+
60
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-panes--two {
61
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 15rem), 0.38fr);
62
+ }
63
+ }
64
+
65
+ @media (min-width: 80rem) {
66
+ :where(.ly-root[data-layout="cyberpunk"], .ly-root[layout-style="cyberpunk"], .ly-root.ly-layout-cyberpunk, .ly-root.ly-style-cyberpunk) .ly-panes--three {
67
+ grid-template-columns: minmax(min(100%, 10rem), 0.24fr) minmax(0, 1fr) minmax(min(100%, 16rem), 0.38fr);
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,93 @@
1
+ /*
2
+ Layout style: maximalist.
3
+ Editorial shell with oversized hero splits and staggered supporting regions.
4
+ Visual identity remains owned by ui-style-kit-css.
5
+ */
6
+
7
+ @layer ly.styles.maximalist {
8
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) {
9
+ --ly-container-max: 102rem;
10
+ --ly-page-padding-inline: clamp(1rem, 6vw, 5.5rem);
11
+ --ly-section-padding-block: clamp(4rem, 13vw, 10rem);
12
+ --ly-sidebar-width: clamp(13rem, 18vw, 20rem);
13
+ --ly-grid-min: 14rem;
14
+ --ly-gap: clamp(1.25rem, 4vw, 3rem);
15
+ --ly-grid-gap: var(--ly-gap);
16
+ --ly-stack-gap: clamp(1.5rem, 4vw, 3.5rem);
17
+ }
18
+
19
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-app-main {
20
+ padding-block: clamp(1rem, 3vw, 3rem);
21
+ }
22
+
23
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-container,
24
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-wrapper {
25
+ width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
26
+ }
27
+
28
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-section {
29
+ padding-block: clamp(3.5rem, 11vw, 8rem);
30
+ }
31
+
32
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-split {
33
+ align-items: stretch;
34
+ }
35
+
36
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-grid--auto {
37
+ grid-auto-rows: minmax(10rem, auto);
38
+ }
39
+
40
+ @media (min-width: 48rem) {
41
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-split {
42
+ /* Keep the editorial stage stacked until the wider shell can carry the oversized rhythm. */
43
+ grid-template-columns: 1fr;
44
+ }
45
+
46
+ :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) {
47
+ grid-column: span 2;
48
+ min-height: 24rem;
49
+ }
50
+
51
+ :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) {
52
+ transform: translateY(var(--ly-space-7));
53
+ }
54
+ }
55
+
56
+ @media (min-width: 56rem) {
57
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-app-shell {
58
+ grid-template-areas:
59
+ "header header"
60
+ "main sidebar";
61
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 13rem), 0.28fr);
62
+ }
63
+
64
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-app-sidebar {
65
+ display: block;
66
+ position: sticky;
67
+ top: calc(var(--ly-gap) * 1.5);
68
+ height: max-content;
69
+ margin-block: clamp(2rem, 8vw, 7rem);
70
+ transform: translateX(calc(var(--ly-gap) * -0.35));
71
+ overflow: auto;
72
+ }
73
+
74
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-sidebar-layout {
75
+ grid-template-columns: minmax(0, 1.55fr) minmax(min(100%, 15rem), 0.45fr);
76
+ }
77
+
78
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-split {
79
+ grid-template-columns: minmax(0, 1.62fr) minmax(min(100%, 16rem), 0.54fr);
80
+ gap: clamp(1.5rem, 6vw, 5rem);
81
+ }
82
+
83
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-panes--two {
84
+ grid-template-columns: minmax(min(100%, 16rem), 0.44fr) minmax(0, 1.56fr);
85
+ }
86
+ }
87
+
88
+ @media (min-width: 80rem) {
89
+ :where(.ly-root[data-layout="maximalist"], .ly-root[layout-style="maximalist"], .ly-root.ly-layout-maximalist, .ly-root.ly-style-maximalist) .ly-panes--three {
90
+ grid-template-columns: minmax(min(100%, 14rem), 0.34fr) minmax(0, 1.28fr) minmax(min(100%, 18rem), 0.58fr);
91
+ }
92
+ }
93
+ }
@@ -0,0 +1,67 @@
1
+ /*
2
+ Layout style: minimal-saas.
3
+ Steady left-rail SaaS shell with conservative content widths and predictable
4
+ workspace rhythm. Visual identity remains owned by ui-style-kit-css.
5
+ */
6
+
7
+ @layer ly.styles.minimal_saas {
8
+ :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) {
9
+ --ly-container-max: 88rem;
10
+ --ly-page-padding-inline: clamp(1rem, 3vw, 2.5rem);
11
+ --ly-section-padding-block: clamp(2rem, 5vw, 4rem);
12
+ --ly-sidebar-width: clamp(15rem, 18vw, 19rem);
13
+ --ly-grid-min: 16rem;
14
+ --ly-gap: clamp(1rem, 2vw, 1.75rem);
15
+ --ly-grid-gap: var(--ly-gap);
16
+ --ly-stack-gap: clamp(0.875rem, 1.6vw, 1.35rem);
17
+ }
18
+
19
+ :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 {
20
+ padding-block: clamp(1rem, 2vw, 2rem);
21
+ }
22
+
23
+ :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,
24
+ :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 {
25
+ width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
26
+ }
27
+
28
+ :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 {
29
+ padding-block: var(--ly-section-padding-block);
30
+ }
31
+
32
+ :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 {
33
+ grid-auto-rows: minmax(8rem, auto);
34
+ }
35
+
36
+ @media (min-width: 48rem) {
37
+ :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 {
38
+ grid-template-areas:
39
+ "sidebar header"
40
+ "sidebar main";
41
+ grid-template-columns: minmax(min(100%, 14rem), var(--ly-sidebar-width)) minmax(0, 1fr);
42
+ }
43
+
44
+ :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 {
45
+ display: block;
46
+ position: sticky;
47
+ top: 0;
48
+ height: 100svh;
49
+ overflow: auto;
50
+ }
51
+
52
+ :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 {
53
+ grid-template-columns: minmax(min(100%, 14rem), 0.24fr) minmax(0, 1fr);
54
+ }
55
+
56
+ :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,
57
+ :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 {
58
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 18rem), 0.44fr);
59
+ }
60
+ }
61
+
62
+ @media (min-width: 80rem) {
63
+ :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 {
64
+ grid-template-columns: minmax(min(100%, 13rem), 0.22fr) minmax(0, 1fr) minmax(min(100%, 16rem), 0.32fr);
65
+ }
66
+ }
67
+ }
@@ -0,0 +1,72 @@
1
+ /*
2
+ Layout style: neumorphism.
3
+ Centered island shell with detached support regions. Visual identity remains
4
+ owned by ui-style-kit-css.
5
+ */
6
+
7
+ @layer ly.styles.neumorphism {
8
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) {
9
+ --ly-container-max: 86rem;
10
+ --ly-page-padding-inline: clamp(1.25rem, 5vw, 4rem);
11
+ --ly-section-padding-block: clamp(3rem, 8vw, 6rem);
12
+ --ly-sidebar-width: clamp(16rem, 20vw, 20rem);
13
+ --ly-grid-min: 16rem;
14
+ --ly-gap: clamp(1.25rem, 3vw, 2.5rem);
15
+ --ly-grid-gap: var(--ly-gap);
16
+ --ly-stack-gap: clamp(1.25rem, 2.5vw, 2rem);
17
+ }
18
+
19
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-app-main {
20
+ padding-block: clamp(2rem, 5vw, 4rem);
21
+ }
22
+
23
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-container,
24
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-wrapper {
25
+ width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
26
+ }
27
+
28
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-section {
29
+ padding-block: var(--ly-section-padding-block);
30
+ }
31
+
32
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-grid--auto {
33
+ grid-auto-rows: minmax(9rem, auto);
34
+ }
35
+
36
+ @media (min-width: 56rem) {
37
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-app-shell {
38
+ grid-template-areas:
39
+ "header header"
40
+ "main sidebar";
41
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), 0.34fr);
42
+ align-items: start;
43
+ }
44
+
45
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-app-sidebar {
46
+ display: block;
47
+ position: sticky;
48
+ top: clamp(1rem, 3vw, 2rem);
49
+ max-height: calc(100svh - clamp(2rem, 6vw, 4rem));
50
+ margin: clamp(1rem, 4vw, 3rem) clamp(1rem, 4vw, 3rem) clamp(1rem, 4vw, 3rem) 0;
51
+ overflow: auto;
52
+ }
53
+
54
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-sidebar-layout {
55
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), 0.42fr);
56
+ }
57
+
58
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-split {
59
+ grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
60
+ }
61
+
62
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-panes--two {
63
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 17rem), 0.5fr);
64
+ }
65
+ }
66
+
67
+ @media (min-width: 80rem) {
68
+ :where(.ly-root[data-layout="neumorphism"], .ly-root[layout-style="neumorphism"], .ly-root.ly-layout-neumorphism, .ly-root.ly-style-neumorphism) .ly-panes--three {
69
+ grid-template-columns: minmax(min(100%, 15rem), 0.38fr) minmax(0, 1fr) minmax(min(100%, 15rem), 0.38fr);
70
+ }
71
+ }
72
+ }
@@ -0,0 +1,82 @@
1
+ /*
2
+ Layout style: retro-glass.
3
+ Top-framed content shell with a floating right utility rail. Visual identity
4
+ remains owned by ui-style-kit-css.
5
+ */
6
+
7
+ @layer ly.styles.retro_glass {
8
+ :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) {
9
+ --ly-container-max: 96rem;
10
+ --ly-page-padding-inline: clamp(1rem, 4vw, 3rem);
11
+ --ly-section-padding-block: clamp(3rem, 8vw, 6rem);
12
+ --ly-sidebar-width: 18rem;
13
+ --ly-grid-min: 15rem;
14
+ --ly-gap: clamp(1rem, 2.6vw, 2rem);
15
+ --ly-grid-gap: var(--ly-gap);
16
+ --ly-stack-gap: clamp(1rem, 2vw, 1.75rem);
17
+ }
18
+
19
+ :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 {
20
+ padding: clamp(1rem, 3vw, 2rem);
21
+ }
22
+
23
+ :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,
24
+ :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 {
25
+ width: min(100%, var(--ly-container-max));
26
+ }
27
+
28
+ :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 {
29
+ padding-block: clamp(2rem, 6vw, 5rem);
30
+ }
31
+
32
+ :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 {
33
+ align-items: stretch;
34
+ }
35
+
36
+ :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 {
37
+ grid-auto-rows: minmax(9rem, auto);
38
+ }
39
+
40
+ @media (min-width: 48rem) {
41
+ :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 {
42
+ /* Keep glass feature panels stacked until the floating rail has enough horizontal room. */
43
+ grid-template-columns: 1fr;
44
+ }
45
+
46
+ :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 {
47
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), 0.62fr);
48
+ }
49
+ }
50
+
51
+ @media (min-width: 56rem) {
52
+ :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 {
53
+ grid-template-areas:
54
+ "header header"
55
+ "main sidebar";
56
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), var(--ly-sidebar-width));
57
+ }
58
+
59
+ :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 {
60
+ display: block;
61
+ position: sticky;
62
+ top: var(--ly-space-4);
63
+ height: calc(100svh - (var(--ly-space-4) * 2));
64
+ margin: var(--ly-space-4) var(--ly-space-4) var(--ly-space-4) 0;
65
+ overflow: auto;
66
+ }
67
+
68
+ :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 {
69
+ grid-template-columns: minmax(0, 1fr) minmax(min(100%, 16rem), 0.48fr);
70
+ }
71
+
72
+ :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 {
73
+ grid-template-columns: minmax(0, 1.1fr) minmax(min(100%, 18rem), 0.9fr);
74
+ }
75
+ }
76
+
77
+ @media (min-width: 78rem) {
78
+ :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 {
79
+ grid-template-columns: minmax(min(100%, 15rem), 0.4fr) minmax(0, 1fr) minmax(min(100%, 18rem), 0.52fr);
80
+ }
81
+ }
82
+ }