layout-style-css 2.1.0 → 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 -941
  5. package/dist/layout-style-css.min.css +1 -1
  6. package/dist/personalities/bauhaus.css +13 -39
  7. package/dist/personalities/bento.css +16 -37
  8. package/dist/personalities/brutalism.css +13 -30
  9. package/dist/personalities/cyberpunk.css +12 -29
  10. package/dist/personalities/f-pattern.css +16 -42
  11. package/dist/personalities/maximalist.css +16 -45
  12. package/dist/personalities/minimal-saas.css +7 -31
  13. package/dist/personalities/mondrian.css +12 -37
  14. package/dist/personalities/neumorphism.css +15 -39
  15. package/dist/personalities/retro-glass.css +14 -39
  16. package/dist/personalities/retrofuturism.css +12 -29
  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 -30
  21. package/dist/personalities/z-pattern.css +16 -43
  22. package/dist/personalities.css +1 -1
  23. package/dist/primitives.css +27 -63
  24. package/dist/recipes.css +92 -167
  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 -90
  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 -787
  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 -46
  60. package/styles/personalities/bento.css +0 -43
  61. package/styles/personalities/brutalism.css +0 -36
  62. package/styles/personalities/cyberpunk.css +0 -36
  63. package/styles/personalities/f-pattern.css +0 -48
  64. package/styles/personalities/maximalist.css +0 -51
  65. package/styles/personalities/minimal-saas.css +0 -37
  66. package/styles/personalities/mondrian.css +0 -44
  67. package/styles/personalities/neumorphism.css +0 -46
  68. package/styles/personalities/retro-glass.css +0 -44
  69. package/styles/personalities/retrofuturism.css +0 -36
  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 -36
  74. package/styles/personalities/z-pattern.css +0 -49
  75. package/styles/personalities.css +0 -18
  76. package/styles/primitives.css +0 -219
  77. package/styles/recipes.css +0 -270
  78. package/styles/utilities.css +0 -162
  79. package/styles/wrappers.css +0 -174
@@ -1,36 +0,0 @@
1
- # Security And Support
2
-
3
- `layout-style-css` is dependency-free runtime CSS. It executes no consumer JavaScript, calls no services, reads no secrets, and processes no user input. The demo JavaScript uses allowlisted query values and `textContent` for generated snippets.
4
-
5
- ## Supported Versions
6
-
7
- | Version | Supported |
8
- | --- | --- |
9
- | `2.x` | Yes |
10
- | `1.1.x` | Migration support only |
11
- | `1.0.x` | No |
12
-
13
- The v2 `legacy.css` compatibility bundle is scheduled for removal in v3.
14
-
15
- ## Browser Baseline
16
-
17
- Current evergreen Chromium, Firefox, and WebKit are supported. The mobile DOM-order fallback remains usable when container queries are unavailable, but current browser engines are the tested contract.
18
-
19
- ## Report A Security Issue
20
-
21
- Use GitHub security advisories when available. Otherwise, open a minimal issue requesting a private coordination path without publishing exploit details.
22
-
23
- Include the affected version, export or selector, reproduction, expected impact, and whether the issue affects package consumers, the demo, or GitHub Pages.
24
-
25
- ## Release Checks
26
-
27
- ```bash
28
- npm audit --audit-level=moderate
29
- npm run release:verify
30
- ```
31
-
32
- The release gate checks authored/generated parity, structural ownership, documentation, tarball contents, Pages output, and the Chromium, Firefox, and WebKit rendered matrices.
33
-
34
- The npm publish workflow also enforces a strict tag namespace, exact tag/HEAD identity, protected-main ancestry, package-version alignment, an `npm` GitHub Environment with required reviewers, and npm provenance. The registry token is scoped to the final publish step. Replacing it with npm trusted publishing and pinning GitHub Actions to an immutable commit SHA remain explicit hardening follow-ups.
35
-
36
- The demo protects its two exact-version companion CDN fixtures with SHA-384 subresource integrity and anonymous CORS; rendered tests recompute those hashes from the pinned local fixtures.
@@ -1,49 +0,0 @@
1
- # UI Style Kit Compatibility
2
-
3
- Layout Style CSS is dependency-free. `ui-style-kit-css@2.1.0` is the released visual fixture for 2.1 ecosystem verification and is not a runtime or peer dependency.
4
-
5
- ## Ownership Boundary
6
-
7
- | Package | Owns |
8
- | --- | --- |
9
- | `layout-style-css` | Wrappers, containment, flow, areas, grids, spans, recipes, and spatial personalities. |
10
- | `ui-style-kit-css` | Color, typography, borders, shadows, native controls, component paint, themes, and modes. |
11
- | `interactive-surface-css` | Interaction-state styling. |
12
-
13
- ## Explicit Imports
14
-
15
- Layout plus UI:
16
-
17
- ```js
18
- import "ui-style-kit-css/visual.css";
19
- import "layout-style-css";
20
- ```
21
-
22
- All three libraries:
23
-
24
- ```js
25
- import "ui-style-kit-css/visual.css";
26
- import "ui-style-kit-css/interactive-surface-theme.css";
27
- import "interactive-surface-css/state-core.css";
28
- import "layout-style-css";
29
- ```
30
-
31
- The Layout integration bridge contains structural mappings but no package imports. It remains available as deprecated compatibility for legacy UI-prefixed structural aliases. The removed `all-with-ui-kit*` aggregates have no v2 replacement because dependency ownership stays with the application.
32
-
33
- ## Structural Aliases
34
-
35
- The bridge supports the `saas`, `bento`, `max`, `bau`, `tactile`, `neo`, `retro`, `brutal`, `cyber`, `y2k`, and `rg` prefixes for container, section, stack, cluster, grid, split, button-group, card-grid, card-size, gallery, and carousel structure.
36
-
37
- Visual component names remain owned by UI Style Kit. The bridge does not map color, typography, border, shadow, theme, or interaction tokens.
38
-
39
- The removed v1 `.ly-surface--raised` selector is not restored by `legacy.css`; its radius and raised paint belong to UI Style Kit or application theme styling. Likewise, the legacy `.ly-divider` alias supplies structural size and spacing only, leaving the visible separator to the UI layer.
40
-
41
- ## Compatibility Baseline
42
-
43
- | Library | Verified fixture | Consumer requirement |
44
- | --- | --- | --- |
45
- | Layout Style CSS | `2.1.0` | Required for this API |
46
- | UI Style Kit CSS | `2.1.0` visual CSS and manifest | Optional released fixture |
47
- | Interactive Surface CSS | `1.5.0` `state-core.css` | Optional released fixture |
48
-
49
- Current evergreen Chromium, Firefox, and WebKit are covered by the release gate.
@@ -1,15 +0,0 @@
1
- # Wiki Navigation
2
-
3
- - [Home](Home.md)
4
- - [Getting Started](Getting-Started.md)
5
- - [Installation And CDN](Installation-And-CDN.md)
6
- - [Layout Primitives](Layout-Primitives.md)
7
- - [Layout Recipes](Layout-Recipes.md)
8
- - [Layout Styles](Layout-Styles.md)
9
- - [UI Style Kit Compatibility](UI-Style-Kit-Compatibility.md)
10
- - [Migrating To 2.0](Migrating-To-2.0.md)
11
- - [Demo And GitHub Pages](Demo-And-GitHub-Pages.md)
12
- - [Release And Publishing](Release-And-Publishing.md)
13
- - [Security And Support](Security-And-Support.md)
14
- - [Contributing](Contributing.md)
15
-
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,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: 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 ly-personality (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 ly-personality (min-width: 52rem) {
27
- :where(.ly-root[data-ly-layout="bauhaus"])
28
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
29
- grid-template-areas:
30
- "sidebar header header aside"
31
- "sidebar main main aside"
32
- "sidebar footer footer footer";
33
- grid-template-rows: auto minmax(0, 1fr) auto;
34
- grid-template-columns:
35
- minmax(min(100%, 14rem), 0.24fr)
36
- minmax(0, 0.7fr)
37
- minmax(0, 1.3fr)
38
- minmax(min(100%, 18rem), 0.3fr);
39
- }
40
-
41
- :where(.ly-root[data-ly-layout="bauhaus"]) .ly-grid > :nth-child(3n + 1) {
42
- grid-column: span 2;
43
- grid-row: span 2;
44
- }
45
- }
46
- }
@@ -1,43 +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 ly-personality (min-width: 48rem) {
18
- :where(.ly-root[data-ly-layout="bento"])
19
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
20
- grid-template-areas:
21
- "header header header"
22
- "sidebar main main"
23
- "aside main main"
24
- "footer footer footer";
25
- grid-template-rows: auto minmax(0, 1fr) auto auto;
26
- grid-template-columns:
27
- minmax(min(100%, 14rem), 0.3fr)
28
- minmax(0, 1fr)
29
- minmax(0, 1fr);
30
- }
31
-
32
- :where(.ly-root[data-ly-layout="bento"]) .ly-grid > :nth-child(6n + 1) {
33
- grid-column: span 2;
34
- grid-row: span 2;
35
- }
36
-
37
- :where(.ly-root[data-ly-layout="bento"])
38
- :where(.ly-card-grid, [data-ly-recipe="card-grid"])
39
- > :nth-child(6n + 1) {
40
- grid-column: span 2;
41
- }
42
- }
43
- }
@@ -1,36 +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 ly-personality (min-width: 48rem) {
19
- :where(.ly-root[data-ly-layout="brutalism"])
20
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
21
- grid-template-areas:
22
- "header header sidebar"
23
- "main aside sidebar"
24
- "footer footer sidebar";
25
- grid-template-rows: auto minmax(0, 1fr) auto;
26
- grid-template-columns:
27
- minmax(0, 1.3fr)
28
- minmax(min(100%, 16rem), 0.7fr)
29
- minmax(min(100%, 18rem), 0.34fr);
30
- }
31
-
32
- :where(.ly-root[data-ly-layout="brutalism"]) .ly-grid > :nth-child(3n) {
33
- grid-column: span 2;
34
- }
35
- }
36
- }
@@ -1,36 +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 ly-personality (min-width: 44rem) {
19
- :where(.ly-root[data-ly-layout="cyberpunk"])
20
- :where(.ly-app-shell, [data-ly-recipe="app-shell"]) {
21
- grid-template-areas:
22
- "sidebar header aside"
23
- "sidebar main aside"
24
- "sidebar footer aside";
25
- grid-template-rows: auto minmax(0, 1fr) auto;
26
- grid-template-columns:
27
- minmax(min(100%, 13rem), 0.2fr)
28
- minmax(0, 1fr)
29
- minmax(min(100%, 19rem), 0.32fr);
30
- }
31
-
32
- :where(.ly-root[data-ly-layout="cyberpunk"]) .ly-grid > :nth-child(4n + 2) {
33
- grid-column: span 3;
34
- }
35
- }
36
- }
@@ -1,48 +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 ly-personality (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 ly-personality (min-width: 56rem) {
26
- :where(.ly-root[data-ly-layout="f-pattern"])
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 aside";
32
- grid-template-rows: auto minmax(0, 1fr) auto;
33
- grid-template-columns:
34
- minmax(min(100%, 16rem), 0.26fr)
35
- minmax(0, 1.35fr)
36
- minmax(min(100%, 18rem), 0.65fr);
37
- }
38
-
39
- :where(.ly-root[data-ly-layout="f-pattern"]) .ly-grid > :nth-child(3n + 1) {
40
- grid-column: span 2;
41
- }
42
-
43
- :where(.ly-root[data-ly-layout="f-pattern"])
44
- :where(.ly-split-hero, [data-ly-recipe="split-hero"]) {
45
- grid-template-columns: minmax(0, 1.35fr) minmax(0, 0.65fr);
46
- }
47
- }
48
- }