layout-style-css 2.1.1 → 3.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 (79) hide show
  1. package/README.md +124 -145
  2. package/dist/core.css +2 -1
  3. package/dist/foundation.css +194 -0
  4. package/dist/layout-style-css.css +527 -984
  5. package/dist/layout-style-css.min.css +1 -1
  6. package/dist/personalities/bauhaus.css +13 -42
  7. package/dist/personalities/bento.css +16 -40
  8. package/dist/personalities/brutalism.css +13 -33
  9. package/dist/personalities/cyberpunk.css +12 -32
  10. package/dist/personalities/f-pattern.css +16 -45
  11. package/dist/personalities/maximalist.css +16 -48
  12. package/dist/personalities/minimal-saas.css +7 -33
  13. package/dist/personalities/mondrian.css +12 -40
  14. package/dist/personalities/neumorphism.css +15 -39
  15. package/dist/personalities/retro-glass.css +14 -42
  16. package/dist/personalities/retrofuturism.css +12 -32
  17. package/dist/personalities/split-screen.css +24 -36
  18. package/dist/personalities/synthwave.css +13 -41
  19. package/dist/personalities/tactile.css +15 -32
  20. package/dist/personalities/y2k.css +13 -33
  21. package/dist/personalities/z-pattern.css +16 -46
  22. package/dist/personalities.css +1 -1
  23. package/dist/primitives.css +27 -63
  24. package/dist/recipes.css +92 -175
  25. package/dist/utilities.css +39 -104
  26. package/dist/wrappers.css +28 -108
  27. package/package.json +12 -24
  28. package/CHANGELOG.md +0 -107
  29. package/CONTRIBUTING.md +0 -55
  30. package/SECURITY.md +0 -50
  31. package/demo/assets/apple-touch-icon.svg +0 -7
  32. package/demo/assets/favicon.svg +0 -7
  33. package/demo/assets/social-card.png +0 -0
  34. package/demo/browserconfig.xml +0 -9
  35. package/demo/demo.css +0 -523
  36. package/demo/demo.js +0 -605
  37. package/demo/index.html +0 -325
  38. package/demo/robots.txt +0 -4
  39. package/demo/site.webmanifest +0 -23
  40. package/demo/sitemap.xml +0 -9
  41. package/dist/integrations/ui-style-kit.css +0 -175
  42. package/dist/legacy.css +0 -822
  43. package/docs/wiki/Contributing.md +0 -36
  44. package/docs/wiki/Demo-And-GitHub-Pages.md +0 -53
  45. package/docs/wiki/Getting-Started.md +0 -51
  46. package/docs/wiki/Home.md +0 -33
  47. package/docs/wiki/Installation-And-CDN.md +0 -72
  48. package/docs/wiki/Layout-Primitives.md +0 -48
  49. package/docs/wiki/Layout-Recipes.md +0 -49
  50. package/docs/wiki/Layout-Styles.md +0 -33
  51. package/docs/wiki/Migrating-To-2.0.md +0 -186
  52. package/docs/wiki/Release-And-Publishing.md +0 -77
  53. package/docs/wiki/Security-And-Support.md +0 -36
  54. package/docs/wiki/UI-Style-Kit-Compatibility.md +0 -49
  55. package/docs/wiki/_Sidebar.md +0 -15
  56. package/styles/core.css +0 -6
  57. package/styles/integrations/ui-style-kit.css +0 -175
  58. package/styles/legacy.css +0 -173
  59. package/styles/personalities/bauhaus.css +0 -49
  60. package/styles/personalities/bento.css +0 -46
  61. package/styles/personalities/brutalism.css +0 -39
  62. package/styles/personalities/cyberpunk.css +0 -39
  63. package/styles/personalities/f-pattern.css +0 -51
  64. package/styles/personalities/maximalist.css +0 -54
  65. package/styles/personalities/minimal-saas.css +0 -39
  66. package/styles/personalities/mondrian.css +0 -47
  67. package/styles/personalities/neumorphism.css +0 -46
  68. package/styles/personalities/retro-glass.css +0 -47
  69. package/styles/personalities/retrofuturism.css +0 -39
  70. package/styles/personalities/split-screen.css +0 -41
  71. package/styles/personalities/synthwave.css +0 -48
  72. package/styles/personalities/tactile.css +0 -39
  73. package/styles/personalities/y2k.css +0 -39
  74. package/styles/personalities/z-pattern.css +0 -52
  75. package/styles/personalities.css +0 -18
  76. package/styles/primitives.css +0 -219
  77. package/styles/recipes.css +0 -278
  78. package/styles/utilities.css +0 -162
  79. package/styles/wrappers.css +0 -174
@@ -1,46 +1,22 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: neumorphism. A calm right rail preserves a compact workspace. */
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
4
2
 
5
3
  @layer ly.personalities.neumorphism {
6
4
  :where(.ly-root[data-ly-layout="neumorphism"]) {
5
+ --ly-personality-wrapper-max: 84rem;
6
+ --ly-profile-gap: var(--ly-space-6);
7
+ --ly-grid-min: 17rem;
7
8
  --ly-recipe-rail: 17rem;
8
9
  --ly-recipe-aside: 19rem;
9
- --ly-grid-columns: 4;
10
- --ly-grid-min: 17rem;
11
- --ly-personality-wrapper-max: 84rem;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- @container (min-width: 48rem) {
19
- :where(.ly-root[data-ly-layout="neumorphism"])
20
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
21
- grid-template-columns: minmax(min(100%, 17rem), 0.3fr) minmax(0, 1fr);
22
- }
23
- }
24
-
25
- @container (min-width: 52rem) {
26
- :where(.ly-root[data-ly-layout="neumorphism"])
27
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
28
- grid-template-areas:
29
- "header sidebar"
30
- "main sidebar"
31
- "aside sidebar"
32
- "footer sidebar";
33
- grid-template-rows: auto minmax(0, 1fr) auto auto;
34
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, 17rem), 0.3fr);
35
- }
36
-
37
- :where(.ly-root[data-ly-layout="neumorphism"]) .ly-grid > :nth-child(4n + 1) {
38
- grid-column: span 2;
39
- }
40
-
41
- :where(.ly-root[data-ly-layout="neumorphism"])
42
- :where(.ly-list-detail, [data-ly-recipe="list-detail"]) {
43
- grid-template-columns: minmax(0, 0.58fr) minmax(min(100%, 19rem), 0.42fr);
44
- }
10
+ --ly-app-shell-wide-areas:
11
+ "header sidebar"
12
+ "main sidebar"
13
+ "aside sidebar"
14
+ "footer sidebar";
15
+ --ly-app-shell-wide-columns:
16
+ minmax(0, 1fr)
17
+ minmax(min(100%, var(--ly-recipe-rail)), 0.3fr);
18
+ --ly-list-detail-wide-columns:
19
+ minmax(0, 1.1fr)
20
+ minmax(min(100%, var(--ly-pane-size)), 0.7fr);
45
21
  }
46
22
  }
@@ -1,47 +1,19 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
2
2
 
3
- /* Layout style: retro-glass. A stepped right rail floats beside a wide stage. */
4
-
5
- @layer ly.personalities.retro_glass {
3
+ @layer ly.personalities.retro-glass {
6
4
  :where(.ly-root[data-ly-layout="retro-glass"]) {
7
- --ly-recipe-rail: 18rem;
8
- --ly-recipe-aside: 20rem;
9
- --ly-grid-columns: 8;
10
- --ly-grid-min: 15rem;
11
5
  --ly-personality-wrapper-max: 104rem;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- @container (min-width: 48rem) {
19
- :where(.ly-root[data-ly-layout="retro-glass"])
20
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
21
- grid-template-columns: minmax(min(100%, 18rem), 0.3fr) minmax(0, 1fr);
22
- }
23
- }
24
-
25
- @container (min-width: 56rem) {
26
- :where(.ly-root[data-ly-layout="retro-glass"]) .ly-grid > :nth-child(4n) {
27
- grid-column: span 2;
28
- grid-row: span 2;
29
- }
30
- }
31
-
32
- /* The three-track shell waits for a locally feasible allocation. */
33
- @container (min-width: 64rem) {
34
- :where(.ly-root[data-ly-layout="retro-glass"])
35
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
36
- grid-template-areas:
37
- "header header sidebar"
38
- "main main sidebar"
39
- "aside footer footer";
40
- grid-template-rows: auto minmax(0, 1fr) auto;
41
- grid-template-columns:
42
- minmax(0, 1.25fr)
43
- minmax(0, 0.75fr)
44
- minmax(min(100%, 18rem), 0.32fr);
45
- }
6
+ --ly-profile-gap: var(--ly-space-5);
7
+ --ly-grid-min: 15rem;
8
+ --ly-recipe-rail: 18rem;
9
+ --ly-recipe-aside: 18rem;
10
+ --ly-app-shell-wide-areas:
11
+ "header header sidebar"
12
+ "main main sidebar"
13
+ "aside footer footer";
14
+ --ly-app-shell-wide-columns:
15
+ minmax(0, 1.25fr)
16
+ minmax(0, 0.75fr)
17
+ minmax(min(100%, var(--ly-recipe-rail)), 0.32fr);
46
18
  }
47
19
  }
@@ -1,39 +1,19 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: retrofuturism. Twin rails frame a focused central work zone. */
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
4
2
 
5
3
  @layer ly.personalities.retrofuturism {
6
4
  :where(.ly-root[data-ly-layout="retrofuturism"]) {
5
+ --ly-personality-wrapper-max: 106rem;
6
+ --ly-profile-gap: var(--ly-space-5);
7
+ --ly-grid-min: 14rem;
7
8
  --ly-recipe-rail: 14rem;
8
9
  --ly-recipe-aside: 17rem;
9
- --ly-grid-columns: 6;
10
- --ly-grid-min: 14rem;
11
- --ly-personality-wrapper-max: 106rem;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- @container (min-width: 48rem) {
19
- :where(.ly-root[data-ly-layout="retrofuturism"]) .ly-grid > :nth-child(6n + 1) {
20
- grid-column: span 2;
21
- }
22
- }
23
-
24
- /* The three-track shell waits for a locally feasible allocation. */
25
- @container (min-width: 64rem) {
26
- :where(.ly-root[data-ly-layout="retrofuturism"])
27
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
28
- grid-template-areas:
29
- "sidebar header aside"
30
- "sidebar main aside"
31
- "sidebar footer aside";
32
- grid-template-rows: auto minmax(0, 1fr) auto;
33
- grid-template-columns:
34
- minmax(min(100%, 14rem), 0.24fr)
35
- minmax(0, 1fr)
36
- minmax(min(100%, 17rem), 0.3fr);
37
- }
10
+ --ly-app-shell-wide-areas:
11
+ "sidebar header aside"
12
+ "sidebar main aside"
13
+ "sidebar footer aside";
14
+ --ly-app-shell-wide-columns:
15
+ minmax(min(100%, var(--ly-recipe-rail)), 0.24fr)
16
+ minmax(0, 1fr)
17
+ minmax(min(100%, var(--ly-recipe-aside)), 0.3fr);
38
18
  }
39
19
  }
@@ -1,41 +1,29 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
2
2
 
3
- /* Layout style: split-screen. Equal tracks keep two primary experiences in balance. */
4
-
5
- @layer ly.personalities.split_screen {
3
+ @layer ly.personalities.split-screen {
6
4
  :where(.ly-root[data-ly-layout="split-screen"]) {
7
- --ly-grid-columns: 2;
8
- --ly-grid-min: 20rem;
9
5
  --ly-personality-wrapper-max: 100%;
10
- --ly-split-primary: 1fr;
11
- --ly-split-secondary: 1fr;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- @container (min-width: 48rem) {
19
- :where(.ly-root[data-ly-layout="split-screen"])
20
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
21
- grid-template-areas:
22
- "header header"
23
- "main sidebar"
24
- "aside sidebar"
25
- "footer footer";
26
- grid-template-rows: auto minmax(0, 1fr) auto auto;
27
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
28
- }
29
-
30
- :where(.ly-root[data-ly-layout="split-screen"])
31
- :where(
32
- .ly-split,
33
- .ly-split-hero,
34
- [data-ly-recipe="split-hero"],
35
- .ly-list-detail,
36
- [data-ly-recipe="list-detail"]
37
- ) {
38
- grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
39
- }
6
+ --ly-profile-gap: var(--ly-space-4);
7
+ --ly-grid-min: 20rem;
8
+ /*
9
+ Fixed preferred halves leave a shrink-safe center track in recipes that
10
+ retain the shared three-column dashboard topology.
11
+ */
12
+ --ly-recipe-rail: 24rem;
13
+ --ly-recipe-aside: 24rem;
14
+ --ly-app-shell-wide-areas:
15
+ "header header"
16
+ "main sidebar"
17
+ "aside sidebar"
18
+ "footer footer";
19
+ --ly-app-shell-wide-columns:
20
+ minmax(0, 1fr)
21
+ minmax(0, 1fr);
22
+ --ly-split-hero-wide-columns:
23
+ minmax(0, 1fr)
24
+ minmax(0, 1fr);
25
+ --ly-list-detail-wide-columns:
26
+ minmax(0, 1fr)
27
+ minmax(0, 1fr);
40
28
  }
41
29
  }
@@ -1,48 +1,20 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: synthwave. A cinematic center stage sits between support zones. */
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
4
2
 
5
3
  @layer ly.personalities.synthwave {
6
4
  :where(.ly-root[data-ly-layout="synthwave"]) {
5
+ --ly-personality-wrapper-max: 112rem;
6
+ --ly-profile-gap: var(--ly-space-6);
7
+ --ly-grid-min: 14rem;
7
8
  --ly-recipe-rail: 16rem;
8
9
  --ly-recipe-aside: 20rem;
9
- --ly-grid-columns: 12;
10
- --ly-grid-min: 14rem;
11
- --ly-reel-item-max: 34rem;
12
- --ly-personality-wrapper-max: 112rem;
13
-
14
- container-name: ly-personality;
15
- container-type: inline-size;
16
- min-inline-size: 0;
17
- }
18
-
19
- @container (min-width: 48rem) {
20
- :where(.ly-root[data-ly-layout="synthwave"])
21
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
22
- grid-template-columns: minmax(min(100%, 16rem), 0.3fr) minmax(0, 1fr);
23
- }
24
- }
25
-
26
- @container (min-width: 64rem) {
27
- :where(.ly-root[data-ly-layout="synthwave"])
28
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
29
- grid-template-areas:
30
- "header header header"
31
- "sidebar main aside"
32
- "footer footer footer";
33
- grid-template-rows: auto minmax(0, 1fr) auto;
34
- grid-template-columns:
35
- minmax(min(100%, 16rem), 0.28fr)
36
- minmax(0, 1fr)
37
- minmax(min(100%, 20rem), 0.34fr);
38
- }
39
-
40
- :where(.ly-root[data-ly-layout="synthwave"]) .ly-grid > :nth-child(4n + 1) {
41
- grid-column: span 3;
42
- }
43
-
44
- :where(.ly-root[data-ly-layout="synthwave"]) .ly-reel {
45
- grid-auto-columns: minmax(min(100%, 20rem), var(--ly-reel-item-max));
46
- }
10
+ --ly-app-shell-wide-areas:
11
+ "header header header"
12
+ "sidebar main aside"
13
+ "footer footer footer";
14
+ --ly-app-shell-wide-columns:
15
+ minmax(min(100%, var(--ly-recipe-rail)), 0.28fr)
16
+ minmax(0, 1fr)
17
+ minmax(min(100%, var(--ly-recipe-aside)), 0.34fr);
18
+ --ly-reel-item-min: 20rem;
47
19
  }
48
20
  }
@@ -1,39 +1,22 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: tactile. A compact left rail leaves a broad, steady work lane. */
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
4
2
 
5
3
  @layer ly.personalities.tactile {
6
4
  :where(.ly-root[data-ly-layout="tactile"]) {
5
+ --ly-personality-wrapper-max: 82rem;
6
+ --ly-profile-gap: var(--ly-space-4);
7
+ --ly-grid-min: 15rem;
7
8
  --ly-recipe-rail: 17rem;
8
9
  --ly-recipe-aside: 20rem;
9
- --ly-grid-columns: 5;
10
- --ly-grid-min: 15rem;
11
- --ly-personality-wrapper-max: 82rem;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- @container (min-width: 48rem) {
19
- :where(.ly-root[data-ly-layout="tactile"])
20
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
21
- grid-template-areas:
22
- "sidebar header"
23
- "sidebar main"
24
- "sidebar aside"
25
- "sidebar footer";
26
- grid-template-rows: auto minmax(0, 1fr) auto auto;
27
- grid-template-columns: minmax(min(100%, 17rem), 0.28fr) minmax(0, 1fr);
28
- }
29
-
30
- :where(.ly-root[data-ly-layout="tactile"]) .ly-grid > :nth-child(5n + 2) {
31
- grid-column: span 2;
32
- }
33
-
34
- :where(.ly-root[data-ly-layout="tactile"])
35
- :where(.ly-list-detail, [data-ly-recipe="list-detail"]) {
36
- grid-template-columns: minmax(min(100%, 20rem), 0.42fr) minmax(0, 0.58fr);
37
- }
10
+ --ly-app-shell-wide-areas:
11
+ "header header"
12
+ "sidebar main"
13
+ "aside main"
14
+ "footer footer";
15
+ --ly-app-shell-wide-columns:
16
+ minmax(min(100%, var(--ly-recipe-rail)), 0.28fr)
17
+ minmax(0, 1fr);
18
+ --ly-list-detail-wide-columns:
19
+ minmax(min(100%, var(--ly-pane-size)), 0.5fr)
20
+ minmax(0, 0.9fr);
38
21
  }
39
22
  }
@@ -1,39 +1,19 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: y2k. A tall right rail frames a reversed supporting workspace. */
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
4
2
 
5
3
  @layer ly.personalities.y2k {
6
4
  :where(.ly-root[data-ly-layout="y2k"]) {
7
- --ly-recipe-rail: 16rem;
8
- --ly-recipe-aside: 18rem;
9
- --ly-grid-columns: 5;
10
- --ly-grid-min: 13rem;
11
5
  --ly-personality-wrapper-max: 90rem;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- @container (min-width: 48rem) {
19
- :where(.ly-root[data-ly-layout="y2k"]) .ly-grid > :nth-child(5n + 1) {
20
- grid-column: span 3;
21
- }
22
- }
23
-
24
- /* The three-track shell waits for a locally feasible allocation. */
25
- @container (min-width: 64rem) {
26
- :where(.ly-root[data-ly-layout="y2k"])
27
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
28
- grid-template-areas:
29
- "header header sidebar"
30
- "aside main sidebar"
31
- "footer footer sidebar";
32
- grid-template-rows: auto minmax(0, 1fr) auto;
33
- grid-template-columns:
34
- minmax(min(100%, 18rem), 0.34fr)
35
- minmax(0, 1fr)
36
- minmax(min(100%, 16rem), 0.28fr);
37
- }
6
+ --ly-profile-gap: var(--ly-space-6);
7
+ --ly-grid-min: 13rem;
8
+ --ly-recipe-rail: 18rem;
9
+ --ly-recipe-aside: 16rem;
10
+ --ly-app-shell-wide-areas:
11
+ "header header sidebar"
12
+ "aside main sidebar"
13
+ "footer footer sidebar";
14
+ --ly-app-shell-wide-columns:
15
+ minmax(min(100%, var(--ly-recipe-aside)), 0.34fr)
16
+ minmax(0, 1fr)
17
+ minmax(min(100%, var(--ly-recipe-rail)), 0.28fr);
38
18
  }
39
19
  }
@@ -1,52 +1,22 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
2
2
 
3
- /* Layout style: z-pattern. A right rail closes a diagonal reading progression. */
4
-
5
- @layer ly.personalities.z_pattern {
3
+ @layer ly.personalities.z-pattern {
6
4
  :where(.ly-root[data-ly-layout="z-pattern"]) {
5
+ --ly-personality-wrapper-max: 108rem;
6
+ --ly-profile-gap: var(--ly-space-5);
7
+ --ly-grid-min: 14rem;
7
8
  --ly-recipe-rail: 17rem;
8
9
  --ly-recipe-aside: 19rem;
9
- --ly-grid-columns: 8;
10
- --ly-grid-min: 14rem;
11
- --ly-personality-wrapper-max: 108rem;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- @container (min-width: 48rem) {
19
- :where(.ly-root[data-ly-layout="z-pattern"])
20
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
21
- grid-template-columns: minmax(min(100%, 17rem), 0.3fr) minmax(0, 1fr);
22
- }
23
- }
24
-
25
- @container (min-width: 60rem) {
26
- :where(.ly-root[data-ly-layout="z-pattern"]) .ly-grid > :nth-child(4n + 2) {
27
- grid-column: span 2;
28
- align-self: end;
29
- }
30
-
31
- :where(.ly-root[data-ly-layout="z-pattern"])
32
- :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
33
- grid-template-columns: minmax(0, 1.5fr) minmax(0, 0.5fr);
34
- }
35
- }
36
-
37
- /* The three-track shell waits for a locally feasible allocation. */
38
- @container (min-width: 64rem) {
39
- :where(.ly-root[data-ly-layout="z-pattern"])
40
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
41
- grid-template-areas:
42
- "header header sidebar"
43
- "main aside sidebar"
44
- "footer aside sidebar";
45
- grid-template-rows: auto minmax(0, 1fr) auto;
46
- grid-template-columns:
47
- minmax(0, 1.45fr)
48
- minmax(min(100%, 19rem), 0.55fr)
49
- minmax(min(100%, 17rem), 0.3fr);
50
- }
10
+ --ly-app-shell-wide-areas:
11
+ "header header sidebar"
12
+ "main aside sidebar"
13
+ "footer aside sidebar";
14
+ --ly-app-shell-wide-columns:
15
+ minmax(0, 1.45fr)
16
+ minmax(min(100%, var(--ly-recipe-aside)), 0.55fr)
17
+ minmax(min(100%, var(--ly-recipe-rail)), 0.3fr);
18
+ --ly-split-hero-wide-columns:
19
+ minmax(0, 1.5fr)
20
+ minmax(0, 0.5fr);
51
21
  }
52
22
  }
@@ -1,4 +1,4 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
2
2
 
3
3
  @import url("./personalities/minimal-saas.css");
4
4
  @import url("./personalities/bento.css");
@@ -1,10 +1,13 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
1
+ @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
2
2
 
3
- /* Reusable composition primitives own flow and sizing only. */
3
+ /* Composition primitives use intrinsic sizing so their content chooses reflow points. */
4
4
 
5
5
  @layer ly.primitives {
6
6
  .ly-page {
7
- min-block-size: 100svh;
7
+ min-block-size: 100vh;
8
+ min-block-size: 100dvh;
9
+ padding-block-start: var(--ly-safe-area-block-start);
10
+ padding-block-end: var(--ly-safe-area-block-end);
8
11
  }
9
12
 
10
13
  .ly-header,
@@ -21,9 +24,9 @@
21
24
  }
22
25
 
23
26
  .ly-header--sticky {
24
- position: sticky;
27
+ position: var(--ly-sticky-position, sticky);
25
28
  inset-block-start: 0;
26
- z-index: var(--ly-z-header);
29
+ z-index: var(--ly-z-header, 20);
27
30
  }
28
31
 
29
32
  .ly-section {
@@ -63,6 +66,7 @@
63
66
  .ly-cover {
64
67
  display: flex;
65
68
  flex-direction: column;
69
+ min-block-size: 100vh;
66
70
  min-block-size: var(--ly-cover-min);
67
71
  padding-block: var(--ly-cover-padding, var(--ly-space-5));
68
72
  }
@@ -92,6 +96,7 @@
92
96
  .ly-sidebar > :where(.ly-sidebar__side, [data-ly-sidebar="side"]) {
93
97
  flex-basis: var(--ly-sidebar-size);
94
98
  flex-grow: 1;
99
+ min-inline-size: min(100%, var(--ly-sidebar-size));
95
100
  }
96
101
 
97
102
  .ly-sidebar > :where(.ly-sidebar__content, [data-ly-sidebar="content"]) {
@@ -102,55 +107,44 @@
102
107
 
103
108
  .ly-grid {
104
109
  display: grid;
105
- grid-template-columns: repeat(var(--ly-grid-columns), minmax(0, 1fr));
106
- gap: var(--ly-grid-gap);
107
- }
108
-
109
- .ly-grid--auto {
110
110
  grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
111
+ gap: var(--ly-grid-gap);
111
112
  }
112
113
 
113
- .ly-grid > *,
114
- .ly-split > *,
115
- .ly-panes > *,
116
- .ly-media > * {
117
- min-inline-size: 0;
114
+ .ly-grid--fixed {
115
+ grid-template-columns: repeat(var(--ly-grid-columns), minmax(0, 1fr));
118
116
  }
119
117
 
120
118
  .ly-split {
121
119
  display: grid;
122
- grid-template-columns: minmax(0, 1fr);
120
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-split-min)), 1fr));
123
121
  gap: var(--ly-gap);
124
122
  align-items: var(--ly-split-align, center);
125
123
  }
126
124
 
127
125
  .ly-panes {
128
126
  display: grid;
129
- grid-template-columns: minmax(0, 1fr);
127
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-pane-min)), 1fr));
130
128
  gap: var(--ly-gap);
131
129
  }
132
130
 
133
131
  .ly-media {
134
132
  display: grid;
135
- grid-template-areas:
136
- "media"
137
- "content"
138
- "actions";
139
- grid-template-columns: minmax(0, 1fr);
133
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-media-min)), 1fr));
140
134
  gap: var(--ly-gap);
141
135
  align-items: var(--ly-media-align, start);
142
136
  }
143
137
 
144
- .ly-media > :where(.ly-media__asset, [data-ly-media="asset"]) {
145
- grid-area: media;
146
- }
147
-
148
- .ly-media > :where(.ly-media__content, [data-ly-media="content"]) {
149
- grid-area: content;
138
+ .ly-media > :where(.ly-media__actions, [data-ly-media="actions"]) {
139
+ min-inline-size: min(100%, var(--ly-media-size));
150
140
  }
151
141
 
152
- .ly-media > :where(.ly-media__actions, [data-ly-media="actions"]) {
153
- grid-area: actions;
142
+ .ly-grid > *,
143
+ .ly-split > *,
144
+ .ly-panes > *,
145
+ .ly-media > * {
146
+ min-inline-size: 0;
147
+ min-block-size: 0;
154
148
  }
155
149
 
156
150
  .ly-reel {
@@ -159,7 +153,6 @@
159
153
  grid-auto-columns: minmax(min(100%, var(--ly-reel-item-min)), var(--ly-reel-item-max));
160
154
  gap: var(--ly-grid-gap);
161
155
  overflow-x: auto;
162
- overflow-inline: auto;
163
156
  overscroll-behavior-inline: contain;
164
157
  scroll-snap-type: inline proximity;
165
158
  }
@@ -183,37 +176,8 @@
183
176
  .ly-scroll {
184
177
  min-block-size: 0;
185
178
  max-block-size: var(--ly-scroll-max);
186
- overflow: auto;
187
- overscroll-behavior: contain;
188
- }
189
-
190
- /* Unsupported container-query browsers retain this safe DOM-order stack. */
191
- }
192
-
193
- @layer ly.primitives {
194
- @container (min-width: 48rem) {
195
- .ly-split {
196
- grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
197
- }
198
-
199
- .ly-panes--2 {
200
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, var(--ly-pane-size)), 0.7fr);
201
- }
202
-
203
- .ly-media {
204
- grid-template-areas:
205
- "media content"
206
- "media actions";
207
- grid-template-columns: minmax(min(100%, var(--ly-media-size)), auto) minmax(0, 1fr);
208
- }
209
- }
210
-
211
- @container (min-width: 64rem) {
212
- .ly-panes--3 {
213
- grid-template-columns:
214
- minmax(min(100%, var(--ly-pane-rail, 14rem)), 0.35fr)
215
- minmax(0, 1fr)
216
- minmax(min(100%, var(--ly-pane-rail, 14rem)), 0.35fr);
217
- }
179
+ overflow-x: clip;
180
+ overflow-y: auto;
181
+ overscroll-behavior-block: contain;
218
182
  }
219
183
  }