layout-style-css 2.1.1 → 3.0.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 (81) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +127 -143
  3. package/dist/core.css +2 -1
  4. package/dist/foundation.css +194 -0
  5. package/dist/layout-style-css.css +527 -984
  6. package/dist/layout-style-css.min.css +1 -1
  7. package/dist/personalities/bauhaus.css +13 -42
  8. package/dist/personalities/bento.css +16 -40
  9. package/dist/personalities/brutalism.css +13 -33
  10. package/dist/personalities/cyberpunk.css +12 -32
  11. package/dist/personalities/f-pattern.css +16 -45
  12. package/dist/personalities/maximalist.css +16 -48
  13. package/dist/personalities/minimal-saas.css +7 -33
  14. package/dist/personalities/mondrian.css +12 -40
  15. package/dist/personalities/neumorphism.css +15 -39
  16. package/dist/personalities/retro-glass.css +14 -42
  17. package/dist/personalities/retrofuturism.css +12 -32
  18. package/dist/personalities/split-screen.css +24 -36
  19. package/dist/personalities/synthwave.css +13 -41
  20. package/dist/personalities/tactile.css +15 -32
  21. package/dist/personalities/y2k.css +13 -33
  22. package/dist/personalities/z-pattern.css +16 -46
  23. package/dist/personalities.css +1 -1
  24. package/dist/primitives.css +27 -63
  25. package/dist/recipes.css +92 -175
  26. package/dist/utilities.css +39 -104
  27. package/dist/wrappers.css +28 -108
  28. package/docs/wiki/Contributing.md +3 -1
  29. package/docs/wiki/Demo-And-GitHub-Pages.md +24 -33
  30. package/docs/wiki/Getting-Started.md +39 -27
  31. package/docs/wiki/Home.md +21 -27
  32. package/docs/wiki/Installation-And-CDN.md +47 -42
  33. package/docs/wiki/Layout-Primitives.md +48 -34
  34. package/docs/wiki/Layout-Recipes.md +42 -33
  35. package/docs/wiki/Layout-Styles.md +60 -26
  36. package/docs/wiki/Migrating-To-3.0.md +205 -0
  37. package/docs/wiki/Release-And-Publishing.md +36 -51
  38. package/docs/wiki/Security-And-Support.md +18 -22
  39. package/docs/wiki/UI-Style-Kit-Compatibility.md +21 -30
  40. package/docs/wiki/_Sidebar.md +12 -15
  41. package/manifest.json +98 -0
  42. package/package.json +33 -28
  43. package/personalities.json +147 -0
  44. package/CONTRIBUTING.md +0 -55
  45. package/SECURITY.md +0 -50
  46. package/demo/assets/apple-touch-icon.svg +0 -7
  47. package/demo/assets/favicon.svg +0 -7
  48. package/demo/assets/social-card.png +0 -0
  49. package/demo/browserconfig.xml +0 -9
  50. package/demo/demo.css +0 -523
  51. package/demo/demo.js +0 -605
  52. package/demo/index.html +0 -325
  53. package/demo/robots.txt +0 -4
  54. package/demo/site.webmanifest +0 -23
  55. package/demo/sitemap.xml +0 -9
  56. package/dist/integrations/ui-style-kit.css +0 -175
  57. package/dist/legacy.css +0 -822
  58. package/styles/core.css +0 -6
  59. package/styles/integrations/ui-style-kit.css +0 -175
  60. package/styles/legacy.css +0 -173
  61. package/styles/personalities/bauhaus.css +0 -49
  62. package/styles/personalities/bento.css +0 -46
  63. package/styles/personalities/brutalism.css +0 -39
  64. package/styles/personalities/cyberpunk.css +0 -39
  65. package/styles/personalities/f-pattern.css +0 -51
  66. package/styles/personalities/maximalist.css +0 -54
  67. package/styles/personalities/minimal-saas.css +0 -39
  68. package/styles/personalities/mondrian.css +0 -47
  69. package/styles/personalities/neumorphism.css +0 -46
  70. package/styles/personalities/retro-glass.css +0 -47
  71. package/styles/personalities/retrofuturism.css +0 -39
  72. package/styles/personalities/split-screen.css +0 -41
  73. package/styles/personalities/synthwave.css +0 -48
  74. package/styles/personalities/tactile.css +0 -39
  75. package/styles/personalities/y2k.css +0 -39
  76. package/styles/personalities/z-pattern.css +0 -52
  77. package/styles/personalities.css +0 -18
  78. package/styles/primitives.css +0 -219
  79. package/styles/recipes.css +0 -278
  80. package/styles/utilities.css +0 -162
  81. package/styles/wrappers.css +0 -174
package/styles/core.css DELETED
@@ -1,6 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- @import url("./wrappers.css");
4
- @import url("./primitives.css");
5
- @import url("./recipes.css");
6
- @import url("./utilities.css");
@@ -1,175 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /*
4
- Compatibility bridge for ui-style-kit-css.
5
- This bridge intentionally does not map color, type, border, or shadow tokens.
6
- ui-style-kit-css owns those visuals; layout-style-css owns structure.
7
- */
8
-
9
- @layer ly.integrations.ui_style_kit {
10
- :where(.ly-root[data-ui][data-theme][data-mode], [data-ui][data-theme][data-mode] .ly-root) {
11
- --ly-ui-style-kit-bridge: 1;
12
-
13
- /*
14
- Normalize UI kit root background geometry without redefining its paint.
15
- Patterned theme layers should fill the viewport once instead of tiling.
16
- */
17
- min-block-size: 100svh;
18
- background-attachment: fixed;
19
- background-position: center;
20
- background-repeat: no-repeat;
21
- background-size: 100% 100%;
22
- }
23
-
24
- :where(.ly-root[data-ui="minimal-saas"], [data-ui="minimal-saas"] .ly-root) {
25
- --ly-ui-style-kit-bridge-style: minimal-saas;
26
- }
27
-
28
- :where(.ly-root[data-ui="bento"], [data-ui="bento"] .ly-root) {
29
- --ly-ui-style-kit-bridge-style: bento;
30
- }
31
-
32
- :where(.ly-root[data-ui="maximalist"], [data-ui="maximalist"] .ly-root) {
33
- --ly-ui-style-kit-bridge-style: maximalist;
34
- }
35
-
36
- :where(.ly-root[data-ui="bauhaus"], [data-ui="bauhaus"] .ly-root) {
37
- --ly-ui-style-kit-bridge-style: bauhaus;
38
- }
39
-
40
- :where(.ly-root[data-ui="tactile"], [data-ui="tactile"] .ly-root) {
41
- --ly-ui-style-kit-bridge-style: tactile;
42
- }
43
-
44
- :where(.ly-root[data-ui="neumorphism"], [data-ui="neumorphism"] .ly-root) {
45
- --ly-ui-style-kit-bridge-style: neumorphism;
46
- }
47
-
48
- :where(.ly-root[data-ui="retrofuturism"], [data-ui="retrofuturism"] .ly-root) {
49
- --ly-ui-style-kit-bridge-style: retrofuturism;
50
- }
51
-
52
- :where(.ly-root[data-ui="brutalism"], [data-ui="brutalism"] .ly-root) {
53
- --ly-ui-style-kit-bridge-style: brutalism;
54
- }
55
-
56
- :where(.ly-root[data-ui="cyberpunk"], [data-ui="cyberpunk"] .ly-root) {
57
- --ly-ui-style-kit-bridge-style: cyberpunk;
58
- }
59
-
60
- :where(.ly-root[data-ui="y2k"], [data-ui="y2k"] .ly-root) {
61
- --ly-ui-style-kit-bridge-style: y2k;
62
- }
63
-
64
- :where(.ly-root[data-ui="retro-glass"], [data-ui="retro-glass"] .ly-root) {
65
- --ly-ui-style-kit-bridge-style: retro-glass;
66
- }
67
-
68
- :where(.saas-container, .bento-container, .max-container, .bau-container, .tactile-container, .neo-container, .retro-container, .brutal-container, .cyber-container, .y2k-container, .rg-container) {
69
- /* UI Style Kit naming can opt into layout sizing without taking over visual paint. */
70
- container-name: ly-wrapper;
71
- container-type: inline-size;
72
- inline-size: min(100%, calc(var(--ly-wrapper-max) + (var(--ly-wrapper-gutter) * 2)));
73
- margin-inline: auto;
74
- padding-inline: var(--ly-wrapper-gutter);
75
- }
76
-
77
- :where(.saas-section, .bento-section, .max-section, .bau-section, .tactile-section, .neo-section, .retro-section, .brutal-section, .cyber-section, .y2k-section, .rg-section) {
78
- padding-block: var(--ly-section-padding-block);
79
- }
80
-
81
- :where(.saas-stack, .bento-stack, .max-stack, .bau-stack, .tactile-stack, .neo-stack, .retro-stack, .brutal-stack, .cyber-stack, .y2k-stack, .rg-stack) {
82
- display: flex;
83
- flex-direction: column;
84
- gap: var(--ly-stack-gap);
85
- }
86
-
87
- :where(.saas-cluster, .bento-cluster, .max-cluster, .bau-cluster, .tactile-cluster, .neo-cluster, .retro-cluster, .brutal-cluster, .cyber-cluster, .y2k-cluster, .rg-cluster) {
88
- display: flex;
89
- flex-wrap: wrap;
90
- align-items: center;
91
- gap: var(--ly-cluster-gap);
92
- }
93
-
94
- :where(.saas-grid, .bento-grid, .max-grid, .bau-grid, .tactile-grid, .neo-grid, .retro-grid, .brutal-grid, .cyber-grid, .y2k-grid, .rg-grid) {
95
- display: grid;
96
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
97
- gap: var(--ly-grid-gap);
98
- }
99
-
100
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
101
- display: grid;
102
- grid-template-columns: 1fr;
103
- gap: var(--ly-gap);
104
- align-items: var(--ly-split-align, center);
105
- }
106
-
107
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) > * {
108
- min-width: 0;
109
- }
110
-
111
- :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) {
112
- display: flex;
113
- flex-wrap: wrap;
114
- align-items: center;
115
- gap: var(--ly-cluster-gap);
116
- }
117
-
118
- :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) > * {
119
- flex: 0 1 auto;
120
- min-width: min(100%, var(--ly-button-min, 8rem));
121
- }
122
-
123
- :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) {
124
- display: grid;
125
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
126
- gap: var(--ly-grid-gap);
127
- }
128
-
129
- :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) > * {
130
- min-width: 0;
131
- }
132
-
133
- :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) {
134
- min-block-size: var(--ly-card-size-sm);
135
- }
136
-
137
- :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) {
138
- min-block-size: var(--ly-card-size-md);
139
- }
140
-
141
- :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) {
142
- min-block-size: var(--ly-card-size-lg);
143
- }
144
-
145
- :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) {
146
- display: grid;
147
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
148
- gap: var(--ly-grid-gap);
149
- }
150
-
151
- :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) > * {
152
- min-width: 0;
153
- }
154
-
155
- :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) {
156
- display: grid;
157
- grid-auto-flow: column;
158
- grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
159
- gap: var(--ly-grid-gap);
160
- overflow-x: auto;
161
- overscroll-behavior-inline: contain;
162
- scroll-snap-type: x proximity;
163
- }
164
-
165
- :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) > * {
166
- min-width: 0;
167
- scroll-snap-align: start;
168
- }
169
-
170
- @container (min-width: 48rem) {
171
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
172
- grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
173
- }
174
- }
175
- }
package/styles/legacy.css DELETED
@@ -1,173 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- @import url("./layout-style-css.css");
4
-
5
- @layer ly.legacy {
6
- /* Preserve v1 wrapper measures while applications migrate to semantic v2 names. */
7
- .ly-container {
8
- container-name: ly-wrapper;
9
- container-type: inline-size;
10
- width: min(100% - (var(--ly-page-padding-inline) * 2), var(--ly-container-max));
11
- margin-inline: auto;
12
- }
13
-
14
- .ly-container--sm,
15
- .ly-wrapper--sm {
16
- --ly-container-max: var(--ly-container-sm);
17
- --ly-wrapper-max: 40rem;
18
- }
19
-
20
- .ly-container--md,
21
- .ly-wrapper--md {
22
- --ly-container-max: var(--ly-container-md);
23
- --ly-wrapper-max: 56rem;
24
- }
25
-
26
- .ly-container--lg,
27
- .ly-wrapper--lg {
28
- --ly-container-max: var(--ly-container-lg);
29
- --ly-wrapper-max: 72rem;
30
- }
31
-
32
- .ly-container--xl,
33
- .ly-wrapper--xl {
34
- --ly-container-max: var(--ly-container-xl);
35
- --ly-wrapper-max: 88rem;
36
- }
37
-
38
- .ly-container--wide {
39
- --ly-container-max: var(--ly-container-wide);
40
- }
41
-
42
- .ly-container--fluid {
43
- width: 100%;
44
- max-width: none;
45
- padding-inline: var(--ly-wrapper-gutter);
46
- }
47
-
48
- .ly-wrapper--fluid {
49
- --ly-wrapper-max: 100%;
50
- }
51
-
52
- .ly-wrapper--readable {
53
- --ly-wrapper-max: 68ch;
54
- }
55
-
56
- .ly-row {
57
- display: flex;
58
- flex-wrap: wrap;
59
- /* Outer compensation preserves exact percentage tracks while columns own gutters. */
60
- margin-inline: calc(var(--ly-gutter, var(--ly-gap)) * -0.5);
61
- }
62
-
63
- .ly-col {
64
- flex: 1 1 0;
65
- min-inline-size: 0;
66
- padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5);
67
- }
68
-
69
- .ly-col-1 { flex: 0 0 auto; width: 8.333333%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
70
- .ly-col-2 { flex: 0 0 auto; width: 16.666667%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
71
- .ly-col-3 { flex: 0 0 auto; width: 25%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
72
- .ly-col-4 { flex: 0 0 auto; width: 33.333333%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
73
- .ly-col-5 { flex: 0 0 auto; width: 41.666667%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
74
- .ly-col-6 { flex: 0 0 auto; width: 50%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
75
- .ly-col-7 { flex: 0 0 auto; width: 58.333333%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
76
- .ly-col-8 { flex: 0 0 auto; width: 66.666667%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
77
- .ly-col-9 { flex: 0 0 auto; width: 75%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
78
- .ly-col-10 { flex: 0 0 auto; width: 83.333333%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
79
- .ly-col-11 { flex: 0 0 auto; width: 91.666667%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
80
- .ly-col-12 { flex: 0 0 auto; width: 100%; padding-inline: calc(var(--ly-gutter, var(--ly-gap)) * 0.5); }
81
-
82
- .ly-carousel {
83
- display: grid;
84
- grid-auto-flow: column;
85
- grid-auto-columns: minmax(min(100%, var(--ly-reel-item-min)), var(--ly-reel-item-max));
86
- gap: var(--ly-grid-gap);
87
- overflow-x: auto;
88
- overflow-inline: auto;
89
- overscroll-behavior-inline: contain;
90
- scroll-snap-type: inline proximity;
91
- }
92
-
93
- .ly-carousel > * {
94
- min-inline-size: 0;
95
- scroll-snap-align: start;
96
- }
97
-
98
- .ly-button-group {
99
- display: flex;
100
- flex-wrap: wrap;
101
- align-items: center;
102
- gap: var(--ly-cluster-gap);
103
- }
104
-
105
- .ly-button-group > * {
106
- flex: 0 1 auto;
107
- min-inline-size: min(100%, var(--ly-button-min, 8rem));
108
- }
109
-
110
- .ly-sidebar-layout {
111
- display: grid;
112
- grid-template-columns: minmax(0, 1fr);
113
- gap: var(--ly-gap);
114
- }
115
-
116
- .ly-sidebar-layout > * {
117
- min-inline-size: 0;
118
- }
119
-
120
- .ly-content {
121
- min-inline-size: 0;
122
- }
123
-
124
- .ly-divider {
125
- /* V2 preserves separator geometry here; themes remain responsible for visible paint. */
126
- min-block-size: 1px;
127
- margin-block: var(--ly-space-5);
128
- }
129
-
130
- .ly-card-sm { min-block-size: var(--ly-card-size-sm); }
131
- .ly-card-md { min-block-size: var(--ly-card-size-md); }
132
- .ly-card-lg { min-block-size: var(--ly-card-size-lg); }
133
-
134
- .ly-scroll-area {
135
- min-block-size: 0;
136
- max-block-size: var(--ly-scroll-max);
137
- overflow: auto;
138
- overscroll-behavior: contain;
139
- }
140
-
141
- .ly-app-header { grid-area: header; min-inline-size: 0; }
142
- .ly-app-sidebar { grid-area: sidebar; min-inline-size: 0; }
143
- .ly-app-main { grid-area: main; min-inline-size: 0; }
144
- .ly-app-aside { grid-area: aside; min-inline-size: 0; }
145
- .ly-app-footer { grid-area: footer; min-inline-size: 0; }
146
-
147
- /* The build expands canonical personality rules into functional v1 aliases here. */
148
- /* @generated-personality-aliases */
149
-
150
- @container (min-width: 48rem) {
151
- .ly-sidebar-layout {
152
- grid-template-columns: minmax(min(100%, var(--ly-sidebar-min)), var(--ly-sidebar-max)) minmax(0, 1fr);
153
- align-items: start;
154
- }
155
-
156
- .ly-sidebar-layout--right {
157
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, var(--ly-sidebar-min)), var(--ly-sidebar-max));
158
- }
159
-
160
- .ly-panes--two {
161
- grid-template-columns: minmax(0, 1fr) minmax(min(100%, var(--ly-pane-size)), 0.7fr);
162
- }
163
- }
164
-
165
- @container (min-width: 64rem) {
166
- .ly-panes--three {
167
- grid-template-columns:
168
- minmax(min(100%, var(--ly-pane-rail, 14rem)), 0.35fr)
169
- minmax(0, 1fr)
170
- minmax(min(100%, var(--ly-pane-rail, 14rem)), 0.35fr);
171
- }
172
- }
173
- }
@@ -1,49 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: bauhaus. A left rail anchors an intentionally asymmetric grid. */
4
-
5
- @layer ly.personalities.bauhaus {
6
- :where(.ly-root[data-ly-layout="bauhaus"]) {
7
- --ly-recipe-rail: 14rem;
8
- --ly-recipe-aside: 18rem;
9
- --ly-grid-columns: 6;
10
- --ly-grid-min: 13rem;
11
- --ly-personality-wrapper-max: 96rem;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- /* Cap the fallback rail until the wider personality template is eligible. */
19
- @container (min-width: 48rem) {
20
- :where(.ly-root[data-ly-layout="bauhaus"])
21
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
22
- grid-template-columns: minmax(min(100%, 14rem), 0.3fr) minmax(0, 1fr);
23
- }
24
- }
25
-
26
- @container (min-width: 52rem) {
27
- :where(.ly-root[data-ly-layout="bauhaus"]) .ly-grid > :nth-child(3n + 1) {
28
- grid-column: span 2;
29
- grid-row: span 2;
30
- }
31
- }
32
-
33
- /* The four-track shell waits for a locally feasible allocation. */
34
- @container (min-width: 64rem) {
35
- :where(.ly-root[data-ly-layout="bauhaus"])
36
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
37
- grid-template-areas:
38
- "sidebar header header aside"
39
- "sidebar main main aside"
40
- "sidebar footer footer footer";
41
- grid-template-rows: auto minmax(0, 1fr) auto;
42
- grid-template-columns:
43
- minmax(min(100%, 14rem), 0.24fr)
44
- minmax(0, 0.7fr)
45
- minmax(0, 1.3fr)
46
- minmax(min(100%, 18rem), 0.3fr);
47
- }
48
- }
49
- }
@@ -1,46 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: bento. A full-width shell and staggered spans form modular tiles. */
4
-
5
- @layer ly.personalities.bento {
6
- :where(.ly-root[data-ly-layout="bento"]) {
7
- --ly-grid-columns: 6;
8
- --ly-grid-min: 12rem;
9
- --ly-card-grid-min: 13rem;
10
- --ly-personality-wrapper-max: 112rem;
11
-
12
- container-name: ly-personality;
13
- container-type: inline-size;
14
- min-inline-size: 0;
15
- }
16
-
17
- @container (min-width: 48rem) {
18
- :where(.ly-root[data-ly-layout="bento"]) .ly-grid > :nth-child(6n + 1) {
19
- grid-column: span 2;
20
- grid-row: span 2;
21
- }
22
-
23
- :where(.ly-root[data-ly-layout="bento"])
24
- :where(.ly-card-grid, [data-ly-recipe="card-grid"])
25
- > :nth-child(6n + 1) {
26
- grid-column: span 2;
27
- }
28
- }
29
-
30
- /* The three-track shell waits for a locally feasible allocation. */
31
- @container (min-width: 64rem) {
32
- :where(.ly-root[data-ly-layout="bento"])
33
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
34
- grid-template-areas:
35
- "header header header"
36
- "sidebar main main"
37
- "aside main main"
38
- "footer footer footer";
39
- grid-template-rows: auto minmax(0, 1fr) auto auto;
40
- grid-template-columns:
41
- minmax(min(100%, 14rem), 0.3fr)
42
- minmax(0, 1fr)
43
- minmax(0, 1fr);
44
- }
45
- }
46
- }
@@ -1,39 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: brutalism. A blunt right rail counters a broad primary plane. */
4
-
5
- @layer ly.personalities.brutalism {
6
- :where(.ly-root[data-ly-layout="brutalism"]) {
7
- --ly-recipe-rail: 18rem;
8
- --ly-recipe-aside: 16rem;
9
- --ly-grid-columns: 6;
10
- --ly-grid-min: 14rem;
11
- --ly-personality-wrapper-max: 100rem;
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="brutalism"]) .ly-grid > :nth-child(3n) {
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="brutalism"])
27
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
28
- grid-template-areas:
29
- "header header sidebar"
30
- "main aside sidebar"
31
- "footer footer sidebar";
32
- grid-template-rows: auto minmax(0, 1fr) auto;
33
- grid-template-columns:
34
- minmax(0, 1.3fr)
35
- minmax(min(100%, 16rem), 0.7fr)
36
- minmax(min(100%, 18rem), 0.34fr);
37
- }
38
- }
39
- }
@@ -1,39 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: cyberpunk. A narrow command rail fronts a dense three-lane shell. */
4
-
5
- @layer ly.personalities.cyberpunk {
6
- :where(.ly-root[data-ly-layout="cyberpunk"]) {
7
- --ly-recipe-rail: 13rem;
8
- --ly-recipe-aside: 19rem;
9
- --ly-grid-columns: 8;
10
- --ly-grid-min: 12rem;
11
- --ly-personality-wrapper-max: 112rem;
12
-
13
- container-name: ly-personality;
14
- container-type: inline-size;
15
- min-inline-size: 0;
16
- }
17
-
18
- @container (min-width: 44rem) {
19
- :where(.ly-root[data-ly-layout="cyberpunk"]) .ly-grid > :nth-child(4n + 2) {
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="cyberpunk"])
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%, 13rem), 0.2fr)
35
- minmax(0, 1fr)
36
- minmax(min(100%, 19rem), 0.32fr);
37
- }
38
- }
39
- }
@@ -1,51 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: f-pattern. A left rail supports a wide first-reading column. */
4
-
5
- @layer ly.personalities.f_pattern {
6
- :where(.ly-root[data-ly-layout="f-pattern"]) {
7
- --ly-recipe-rail: 16rem;
8
- --ly-recipe-aside: 18rem;
9
- --ly-grid-columns: 6;
10
- --ly-grid-min: 14rem;
11
- --ly-personality-wrapper-max: 92rem;
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="f-pattern"])
20
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
21
- grid-template-columns: minmax(min(100%, 16rem), 0.3fr) minmax(0, 1fr);
22
- }
23
- }
24
-
25
- @container (min-width: 56rem) {
26
- :where(.ly-root[data-ly-layout="f-pattern"]) .ly-grid > :nth-child(3n + 1) {
27
- grid-column: span 2;
28
- }
29
-
30
- :where(.ly-root[data-ly-layout="f-pattern"])
31
- :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
32
- grid-template-columns: minmax(0, 1.35fr) minmax(0, 0.65fr);
33
- }
34
- }
35
-
36
- /* The three-track shell waits for a locally feasible allocation. */
37
- @container (min-width: 64rem) {
38
- :where(.ly-root[data-ly-layout="f-pattern"])
39
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
40
- grid-template-areas:
41
- "sidebar header header"
42
- "sidebar main aside"
43
- "sidebar footer aside";
44
- grid-template-rows: auto minmax(0, 1fr) auto;
45
- grid-template-columns:
46
- minmax(min(100%, 16rem), 0.26fr)
47
- minmax(0, 1.35fr)
48
- minmax(min(100%, 18rem), 0.65fr);
49
- }
50
- }
51
- }
@@ -1,54 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: maximalist. A full-bleed four-track mosaic favors dramatic spans. */
4
-
5
- @layer ly.personalities.maximalist {
6
- :where(.ly-root[data-ly-layout="maximalist"]) {
7
- --ly-grid-columns: 12;
8
- --ly-grid-min: 10rem;
9
- --ly-personality-wrapper-max: 100%;
10
- --ly-card-grid-min: 12rem;
11
-
12
- container-name: ly-personality;
13
- container-type: inline-size;
14
- min-inline-size: 0;
15
- }
16
-
17
- @container (min-width: 48rem) {
18
- :where(.ly-root[data-ly-layout="maximalist"])
19
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
20
- grid-template-columns: minmax(min(100%, 18rem), 0.3fr) minmax(0, 1fr);
21
- }
22
- }
23
-
24
- @container (min-width: 56rem) {
25
- :where(.ly-root[data-ly-layout="maximalist"]) .ly-grid > :nth-child(7n + 1) {
26
- grid-column: span 3;
27
- grid-row: span 2;
28
- }
29
-
30
- :where(.ly-root[data-ly-layout="maximalist"])
31
- :where(.ly-gallery, [data-ly-recipe="gallery"])
32
- > :nth-child(5n + 1) {
33
- grid-column: span 2;
34
- grid-row: span 2;
35
- }
36
- }
37
-
38
- /* The four-track shell waits for a locally feasible allocation. */
39
- @container (min-width: 64rem) {
40
- :where(.ly-root[data-ly-layout="maximalist"])
41
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
42
- grid-template-areas:
43
- "header header header header"
44
- "main main sidebar aside"
45
- "main main footer footer";
46
- grid-template-rows: auto minmax(0, 1fr) auto;
47
- grid-template-columns:
48
- minmax(0, 1.4fr)
49
- minmax(0, 0.6fr)
50
- minmax(min(100%, 15rem), 0.32fr)
51
- minmax(min(100%, 18rem), 0.38fr);
52
- }
53
- }
54
- }
@@ -1,39 +0,0 @@
1
- @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
-
3
- /* Layout style: minimal-saas. A measured left rail keeps work areas predictable. */
4
-
5
- @layer ly.personalities.minimal_saas {
6
- :where(.ly-root[data-ly-layout="minimal-saas"]) {
7
- --ly-recipe-rail: 15rem;
8
- --ly-recipe-aside: 16rem;
9
- --ly-grid-columns: 4;
10
- --ly-grid-min: 16rem;
11
- --ly-personality-wrapper-max: 88rem;
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="minimal-saas"]) .ly-grid > :nth-child(4n + 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="minimal-saas"])
27
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
28
- grid-template-areas:
29
- "sidebar header header"
30
- "sidebar main aside"
31
- "sidebar footer footer";
32
- grid-template-rows: auto minmax(0, 1fr) auto;
33
- grid-template-columns:
34
- minmax(min(100%, 15rem), 0.24fr)
35
- minmax(0, 1fr)
36
- minmax(min(100%, 16rem), 0.28fr);
37
- }
38
- }
39
- }