layout-style-css 3.0.1 → 3.1.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.
- package/CHANGELOG.md +32 -0
- package/README.md +31 -8
- package/dist/core.css +1 -1
- package/dist/foundation.css +168 -13
- package/dist/layout-style-css.css +200 -59
- package/dist/layout-style-css.min.css +1 -1
- package/dist/personalities/bauhaus.css +1 -1
- package/dist/personalities/bento.css +2 -1
- package/dist/personalities/brutalism.css +1 -1
- package/dist/personalities/cyberpunk.css +1 -1
- package/dist/personalities/f-pattern.css +1 -1
- package/dist/personalities/maximalist.css +1 -1
- package/dist/personalities/minimal-saas.css +1 -1
- package/dist/personalities/mondrian.css +1 -1
- package/dist/personalities/neumorphism.css +2 -1
- package/dist/personalities/retro-glass.css +1 -1
- package/dist/personalities/retrofuturism.css +1 -1
- package/dist/personalities/split-screen.css +2 -1
- package/dist/personalities/synthwave.css +1 -1
- package/dist/personalities/tactile.css +2 -1
- package/dist/personalities/y2k.css +1 -1
- package/dist/personalities/z-pattern.css +1 -1
- package/dist/personalities.css +1 -1
- package/dist/primitives.css +11 -4
- package/dist/recipes.css +4 -2
- package/dist/utilities.css +11 -35
- package/dist/wrappers.css +6 -9
- package/docs/wiki/Getting-Started.md +9 -4
- package/docs/wiki/Home.md +3 -1
- package/docs/wiki/Installation-And-CDN.md +6 -5
- package/docs/wiki/Layout-Primitives.md +16 -3
- package/docs/wiki/Layout-Recipes.md +4 -0
- package/docs/wiki/Layout-Styles.md +7 -1
- package/docs/wiki/Migrating-To-3.1.md +62 -0
- package/docs/wiki/Release-And-Publishing.md +5 -5
- package/docs/wiki/_Sidebar.md +1 -0
- package/manifest.json +18 -7
- package/package.json +2 -2
- package/personalities.json +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,38 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `layout-style-css` are documented here. This project follows semantic versioning.
|
|
4
4
|
|
|
5
|
+
## [3.1.0] - 2026-08-25
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Added compact, normal, and spacious density contexts that can be applied at the root or to a nested layout subtree.
|
|
10
|
+
- Added the `96rem` workspace Wrapper, all ten local gap utilities, explicit bounded and viewport-relative Scroll modifiers, and recipe-owned threshold metadata.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Made normal section spacing more conservative while retaining the former marketing rhythm through spacious density.
|
|
15
|
+
- Made gap utilities local to the element carrying the class and made base Scroll rely on its containing layout for height constraints.
|
|
16
|
+
|
|
17
|
+
### Migration
|
|
18
|
+
|
|
19
|
+
- Use spacious density for the former section rhythm, explicit inherited gap tokens for a shared spacing context, and `ly-scroll--viewport` for the former viewport-relative Scroll behavior.
|
|
20
|
+
|
|
21
|
+
### Tests
|
|
22
|
+
|
|
23
|
+
- Added density, workspace utilization, nested-gap isolation, Scroll-mode, public-token liveness, threshold metadata, cross-height, generated-output, package, and Pages contracts.
|
|
24
|
+
|
|
25
|
+
## [3.0.2] - 2026-08-25
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- Matched App Shell row tracks to base, medium, wide, and personality-specific area topologies so primary content receives flexible height while headers and footers remain intrinsic.
|
|
30
|
+
- Separated compact section spacing from normal section spacing and preserved the compact-smaller-than-normal invariant across regular, short, and shallow viewport heights.
|
|
31
|
+
- Connected the documented page-padding and Wrapper-gutter tokens to rendered Wrapper padding while retaining safe-area handling.
|
|
32
|
+
|
|
33
|
+
### Tests
|
|
34
|
+
|
|
35
|
+
- Added static and rendered regression coverage for App Shell row counts, flexible workspace allocation, compact section ordering, public gutter overrides, generated CSS parity, package metadata, and Pages artifacts.
|
|
36
|
+
|
|
5
37
|
## [3.0.1] - 2026-08-09
|
|
6
38
|
|
|
7
39
|
### Changed
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Zero-configuration, dependency-free structural CSS that responds to the width and height a layout actually receives.
|
|
4
4
|
|
|
5
|
-
`layout-style-css@3.0
|
|
5
|
+
`layout-style-css@3.1.0` is the current additive v3 release. It provides intrinsic wrappers, composition primitives, seven semantic recipes, explicit local density controls, and sixteen spatial personalities. Layout owns structure; UI Style Kit owns paint; Interactive Surface owns interaction styling.
|
|
6
6
|
|
|
7
7
|
## Requirements
|
|
8
8
|
|
|
@@ -13,7 +13,7 @@ Zero-configuration, dependency-free structural CSS that responds to the width an
|
|
|
13
13
|
## Install
|
|
14
14
|
|
|
15
15
|
```bash
|
|
16
|
-
npm install layout-style-css@3.0
|
|
16
|
+
npm install layout-style-css@3.1.0
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
Most applications need one import:
|
|
@@ -44,6 +44,17 @@ Use `.ly-root` as the responsive boundary and keep the mobile DOM order authorit
|
|
|
44
44
|
|
|
45
45
|
`.ly-root`, wrappers, and recipe roots establish the named `ly-scope` inline-size container. A recipe works directly in the root; when it is nested in a wrapper, it responds to that nearest wrapper.
|
|
46
46
|
|
|
47
|
+
## Density Contexts
|
|
48
|
+
|
|
49
|
+
Normal density is the zero-configuration default. Use `data-ly-density="compact"`, `data-ly-density="normal"`, or `data-ly-density="spacious"` on `.ly-root` or any nested layout subtree. A nested density explicitly resets inherited gaps and section rhythm, so task controls can remain compact inside a spacious marketing page.
|
|
50
|
+
|
|
51
|
+
```html
|
|
52
|
+
<main class="ly-root" data-ly-density="normal">
|
|
53
|
+
<section data-ly-density="compact">Dense application controls</section>
|
|
54
|
+
<section data-ly-density="spacious">Campaign presentation</section>
|
|
55
|
+
</main>
|
|
56
|
+
```
|
|
57
|
+
|
|
47
58
|
## Wrappers
|
|
48
59
|
|
|
49
60
|
Wrappers are optional measure and nesting controls. Every wrapper uses logical properties, fluid container-relative gutters, safe-area compensation, and shrink-safe sizing.
|
|
@@ -54,6 +65,7 @@ Wrappers are optional measure and nesting controls. Every wrapper uses logical p
|
|
|
54
65
|
| `.ly-wrapper--compact` | `40rem` compact measure |
|
|
55
66
|
| `.ly-wrapper--prose` | `68ch` reading measure |
|
|
56
67
|
| `.ly-wrapper--content` | `72rem` content measure |
|
|
68
|
+
| `.ly-wrapper--workspace` | `96rem` task-oriented application measure |
|
|
57
69
|
| `.ly-wrapper--wide` | `112rem` wide measure |
|
|
58
70
|
| `.ly-wrapper--full` | Full available inline size |
|
|
59
71
|
| `.ly-wrapper--breakout` | Clamped content, feature, and full lanes |
|
|
@@ -68,6 +80,8 @@ Wrappers are optional measure and nesting controls. Every wrapper uses logical p
|
|
|
68
80
|
|
|
69
81
|
All lanes clamp to the available inline size, including allocations from 320px through ultrawide screens.
|
|
70
82
|
|
|
83
|
+
`--ly-page-padding-inline` supplies the default `--ly-wrapper-gutter` value. Override `--ly-wrapper-gutter` on `.ly-root` or a narrower scope to control rendered Wrapper padding; safe-area compensation is still applied once at the Wrapper edge.
|
|
84
|
+
|
|
71
85
|
## Composition Primitives
|
|
72
86
|
|
|
73
87
|
The core includes:
|
|
@@ -77,7 +91,9 @@ The core includes:
|
|
|
77
91
|
- `.ly-panes` and `.ly-media`
|
|
78
92
|
- `.ly-reel`, `.ly-frame`, and `.ly-scroll`
|
|
79
93
|
|
|
80
|
-
Grid and flex primitives wrap intrinsically whenever track wrapping can replace a query.
|
|
94
|
+
Grid and flex primitives wrap intrinsically whenever track wrapping can replace a query. Base `.ly-scroll` owns overflow but no height cap. Add `.ly-scroll--bounded` for the stable `--ly-scroll-max` cap or `.ly-scroll--viewport` for height-aware `--ly-scroll-viewport-max` behavior. Only `.ly-reel` deliberately scrolls horizontally; only the Scroll family deliberately creates vertical scrolling.
|
|
95
|
+
|
|
96
|
+
Gap utilities `.ly-gap-0` through `.ly-gap-9` assign `gap` only on the element carrying the class. They do not alter inherited primitive gap variables. Override `--ly-gap`, `--ly-grid-gap`, `--ly-stack-gap`, or `--ly-cluster-gap` when a shared spacing context is intentional.
|
|
81
97
|
|
|
82
98
|
## Automatic Recipe Engine
|
|
83
99
|
|
|
@@ -93,6 +109,10 @@ Recipes use attributes only. The stacked semantic source order is always safe, a
|
|
|
93
109
|
| `data-ly-recipe="gallery"` | Intrinsic tracks; no topology breakpoint |
|
|
94
110
|
| `data-ly-recipe="card-grid"` | Intrinsic tracks; no topology breakpoint |
|
|
95
111
|
|
|
112
|
+
The same ownership is available in `manifest.json` through `thresholds.recipes`, alongside the generic container-width and viewport-height arrays. Release checks verify every mapping against authored queries and require every public geometry token to reach a runtime CSS declaration.
|
|
113
|
+
|
|
114
|
+
App Shell base, medium, and wide topologies own matching row definitions. This keeps the primary workspace flexible while header and footer tracks remain intrinsic, including personality-specific four-row topologies.
|
|
115
|
+
|
|
96
116
|
Canonical regions use `data-ly-area`, including `header`, `sidebar`, `nav`, `main`, `aside`, `footer`, `content`, `media`, `actions`, `primary`, and `secondary`.
|
|
97
117
|
|
|
98
118
|
Recipe class aliases such as `.ly-dashboard` no longer exist. Use:
|
|
@@ -129,6 +149,8 @@ The system responds to available block size without orientation queries:
|
|
|
129
149
|
- At viewport heights of `30rem` or less, recipe-owned sticky behavior becomes normal flow, and cover/shell minimums stop forcing full-height regions.
|
|
130
150
|
- Safe-area block insets remain available, and required regions are never hidden solely because the viewport is short.
|
|
131
151
|
|
|
152
|
+
`--ly-section-padding-block` controls normal sections. `--ly-section-padding-block-compact` independently controls `.ly-section--compact`, preserving a smaller rhythm through the regular, short, and shallow height tiers.
|
|
153
|
+
|
|
132
154
|
Use the public height, gap, measure, ratio, rail, media, card, and grid-minimum custom properties for advanced tuning. Defaults use `100vh` fallbacks followed by `100dvh`.
|
|
133
155
|
|
|
134
156
|
## Personalities
|
|
@@ -156,7 +178,7 @@ Each personality is a token/topology profile consumed by the shared recipe engin
|
|
|
156
178
|
| `layout-style-css/personalities.json` | Public layout-to-visual pairing recommendations |
|
|
157
179
|
| `layout-style-css/package.json` | Package metadata |
|
|
158
180
|
|
|
159
|
-
The cascade order is `ly.reset`, `ly.tokens`, `ly.wrappers`, `ly.primitives`, `ly.recipes`, `ly.utilities`, and `ly.
|
|
181
|
+
The cascade order is `ly.reset`, `ly.tokens`, `ly.wrappers`, `ly.primitives`, `ly.recipes`, `ly.utilities`, `ly.personalities`, and `ly.context`. Unlayered application CSS remains stronger than every library layer.
|
|
160
182
|
|
|
161
183
|
## Ecosystem Imports
|
|
162
184
|
|
|
@@ -171,18 +193,18 @@ import "layout-style-css";
|
|
|
171
193
|
|
|
172
194
|
This order lets UI Style Kit establish paint and theme roles, Interactive Surface add interaction states, and Layout apply structure.
|
|
173
195
|
|
|
174
|
-
`data-ly-layout`, `data-ui`, `data-theme`, and `data-mode` are independently selectable. See [Layout Styles](docs/wiki/Layout-Styles.md#visual-pairing-guidance) for the full recommendation matrix; pairings are never dependencies.
|
|
196
|
+
`data-ly-layout`, `data-ly-density`, `data-ui`, `data-theme`, and `data-mode` are independently selectable. See [Layout Styles](docs/wiki/Layout-Styles.md#visual-pairing-guidance) for the full recommendation matrix; pairings are never dependencies.
|
|
175
197
|
|
|
176
198
|
## CDN
|
|
177
199
|
|
|
178
200
|
```html
|
|
179
|
-
<link rel="stylesheet" href="https://unpkg.com/layout-style-css@3.0
|
|
180
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layout-style-css@3.0
|
|
201
|
+
<link rel="stylesheet" href="https://unpkg.com/layout-style-css@3.1.0/dist/layout-style-css.min.css">
|
|
202
|
+
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layout-style-css@3.1.0/dist/layout-style-css.min.css">
|
|
181
203
|
```
|
|
182
204
|
|
|
183
205
|
## Clean-Break Migration
|
|
184
206
|
|
|
185
|
-
v3 has no compatibility bundle. It removes `legacy.css`, the deprecated UI Style Kit structural bridge, v1/v2 aliases, responsive `ly-md-*` and `ly-lg-*` utilities, and all visual-order utilities. See [Migrating To 3.0](docs/wiki/Migrating-To-3.0.md) for
|
|
207
|
+
v3 has no compatibility bundle. It removes `legacy.css`, the deprecated UI Style Kit structural bridge, v1/v2 aliases, responsive `ly-md-*` and `ly-lg-*` utilities, and all visual-order utilities. See [Migrating To 3.0](docs/wiki/Migrating-To-3.0.md) for the major-version mappings and [Migrating To 3.1](docs/wiki/Migrating-To-3.1.md) for density, local gap, and Scroll behavior changes.
|
|
186
208
|
|
|
187
209
|
## Demo And Verification
|
|
188
210
|
|
|
@@ -208,6 +230,7 @@ npm run release:verify
|
|
|
208
230
|
- [Layout Recipes](docs/wiki/Layout-Recipes.md)
|
|
209
231
|
- [Layout Styles](docs/wiki/Layout-Styles.md)
|
|
210
232
|
- [Migrating To 3.0](docs/wiki/Migrating-To-3.0.md)
|
|
233
|
+
- [Migrating To 3.1](docs/wiki/Migrating-To-3.1.md)
|
|
211
234
|
- [Demo And GitHub Pages](docs/wiki/Demo-And-GitHub-Pages.md)
|
|
212
235
|
- [Release And Publishing](docs/wiki/Release-And-Publishing.md)
|
|
213
236
|
- [Security And Support](docs/wiki/Security-And-Support.md)
|
package/dist/core.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
|
|
1
|
+
@layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.context;
|
|
2
2
|
|
|
3
3
|
@import url("./foundation.css");
|
|
4
4
|
@import url("./wrappers.css");
|
package/dist/foundation.css
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
@layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities;
|
|
1
|
+
@layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.context;
|
|
2
2
|
|
|
3
3
|
/*
|
|
4
4
|
Foundation owns only shared spatial tokens, containment, and defensive
|
|
@@ -21,27 +21,30 @@
|
|
|
21
21
|
--ly-wrapper-compact: 40rem;
|
|
22
22
|
--ly-wrapper-prose: 68ch;
|
|
23
23
|
--ly-wrapper-content: 72rem;
|
|
24
|
+
--ly-wrapper-workspace: 96rem;
|
|
24
25
|
--ly-wrapper-wide: 112rem;
|
|
25
|
-
--ly-page-padding-inline: clamp(1rem,
|
|
26
|
+
--ly-page-padding-inline: clamp(1rem, 3vw, 3rem);
|
|
26
27
|
--ly-safe-area-inline: max(
|
|
27
28
|
env(safe-area-inset-left, 0px),
|
|
28
29
|
env(safe-area-inset-right, 0px)
|
|
29
30
|
);
|
|
30
31
|
--ly-safe-area-block-start: env(safe-area-inset-top, 0px);
|
|
31
32
|
--ly-safe-area-block-end: env(safe-area-inset-bottom, 0px);
|
|
32
|
-
--ly-wrapper-gutter:
|
|
33
|
+
--ly-wrapper-gutter: var(--ly-page-padding-inline);
|
|
33
34
|
|
|
34
35
|
--ly-profile-gap: var(--ly-space-5);
|
|
35
36
|
--ly-gap: var(--ly-profile-gap);
|
|
36
37
|
--ly-grid-gap: var(--ly-gap);
|
|
37
38
|
--ly-stack-gap: var(--ly-space-4);
|
|
38
39
|
--ly-cluster-gap: var(--ly-space-3);
|
|
39
|
-
--ly-section-padding-block: clamp(
|
|
40
|
+
--ly-section-padding-block: clamp(2rem, 4vh, 4rem);
|
|
41
|
+
--ly-section-padding-block-compact: clamp(1rem, 2.5vh, 2rem);
|
|
40
42
|
--ly-header-height: 4.5rem;
|
|
41
43
|
--ly-sticky-position: sticky;
|
|
42
44
|
--ly-cover-min: 100vh;
|
|
43
45
|
--ly-shell-min: 100vh;
|
|
44
|
-
--ly-scroll-max:
|
|
46
|
+
--ly-scroll-max: 50rem;
|
|
47
|
+
--ly-scroll-viewport-max: min(70vh, 50rem);
|
|
45
48
|
|
|
46
49
|
--ly-switcher-threshold: 42rem;
|
|
47
50
|
--ly-sidebar-size: 18rem;
|
|
@@ -64,11 +67,13 @@
|
|
|
64
67
|
--ly-gallery-min: 12rem;
|
|
65
68
|
--ly-card-grid-min: 16rem;
|
|
66
69
|
|
|
70
|
+
--ly-app-shell-base-rows: auto auto minmax(0, 1fr) auto auto;
|
|
67
71
|
--ly-app-shell-medium-areas:
|
|
68
72
|
"header header"
|
|
69
73
|
"sidebar main"
|
|
70
74
|
"aside main"
|
|
71
75
|
"footer footer";
|
|
76
|
+
--ly-app-shell-medium-rows: auto auto minmax(0, 1fr) auto;
|
|
72
77
|
--ly-app-shell-medium-columns:
|
|
73
78
|
minmax(min(100%, var(--ly-recipe-rail)), auto)
|
|
74
79
|
minmax(0, 1fr);
|
|
@@ -76,6 +81,7 @@
|
|
|
76
81
|
"sidebar header header"
|
|
77
82
|
"sidebar main aside"
|
|
78
83
|
"sidebar footer footer";
|
|
84
|
+
--ly-app-shell-wide-rows: auto minmax(0, 1fr) auto;
|
|
79
85
|
--ly-app-shell-wide-columns:
|
|
80
86
|
minmax(min(100%, var(--ly-recipe-rail)), auto)
|
|
81
87
|
minmax(0, 1fr)
|
|
@@ -125,12 +131,19 @@
|
|
|
125
131
|
min-block-size: 0;
|
|
126
132
|
}
|
|
127
133
|
|
|
134
|
+
/* Prefer the nearest layout scope for gutters when container units parse. */
|
|
135
|
+
@supports (width: 1cqi) {
|
|
136
|
+
:where(.ly-root) {
|
|
137
|
+
--ly-page-padding-inline: clamp(1rem, 3cqi, 3rem);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
128
141
|
/* Enhance viewport-bound tokens only when dynamic viewport units parse. */
|
|
129
142
|
@supports (height: 100dvh) {
|
|
130
143
|
:where(.ly-root) {
|
|
131
144
|
--ly-cover-min: 100dvh;
|
|
132
145
|
--ly-shell-min: 100dvh;
|
|
133
|
-
--ly-scroll-max: min(70dvh, 50rem);
|
|
146
|
+
--ly-scroll-viewport-max: min(70dvh, 50rem);
|
|
134
147
|
}
|
|
135
148
|
}
|
|
136
149
|
}
|
|
@@ -161,17 +174,19 @@
|
|
|
161
174
|
--ly-grid-gap: var(--ly-gap);
|
|
162
175
|
--ly-stack-gap: min(var(--ly-space-4), 3vh);
|
|
163
176
|
--ly-cluster-gap: min(var(--ly-space-3), 2vh);
|
|
164
|
-
--ly-section-padding-block: clamp(1.
|
|
177
|
+
--ly-section-padding-block: clamp(1.25rem, 4vh, 2rem);
|
|
178
|
+
--ly-section-padding-block-compact: clamp(0.75rem, 2vh, 1.25rem);
|
|
165
179
|
--ly-header-height: 3.5rem;
|
|
166
|
-
--ly-scroll-max: min(62vh, 34rem);
|
|
180
|
+
--ly-scroll-viewport-max: min(62vh, 34rem);
|
|
167
181
|
}
|
|
168
182
|
|
|
169
183
|
@supports (height: 100dvh) {
|
|
170
184
|
:where(.ly-root) {
|
|
171
185
|
--ly-stack-gap: min(var(--ly-space-4), 3dvh);
|
|
172
186
|
--ly-cluster-gap: min(var(--ly-space-3), 2dvh);
|
|
173
|
-
--ly-section-padding-block: clamp(1.
|
|
174
|
-
--ly-
|
|
187
|
+
--ly-section-padding-block: clamp(1.25rem, 4dvh, 2rem);
|
|
188
|
+
--ly-section-padding-block-compact: clamp(0.75rem, 2dvh, 1.25rem);
|
|
189
|
+
--ly-scroll-viewport-max: min(62dvh, 34rem);
|
|
175
190
|
}
|
|
176
191
|
}
|
|
177
192
|
}
|
|
@@ -181,14 +196,154 @@
|
|
|
181
196
|
--ly-cover-min: auto;
|
|
182
197
|
--ly-shell-min: auto;
|
|
183
198
|
--ly-sticky-position: static;
|
|
184
|
-
--ly-section-padding-block: var(--ly-space-
|
|
185
|
-
--ly-
|
|
199
|
+
--ly-section-padding-block: var(--ly-space-4);
|
|
200
|
+
--ly-section-padding-block-compact: var(--ly-space-2);
|
|
201
|
+
--ly-scroll-viewport-max: max(12rem, calc(100vh - 8rem));
|
|
186
202
|
}
|
|
187
203
|
|
|
188
204
|
@supports (height: 100dvh) {
|
|
189
205
|
:where(.ly-root) {
|
|
190
|
-
--ly-scroll-max: max(12rem, calc(100dvh - 8rem));
|
|
206
|
+
--ly-scroll-viewport-max: max(12rem, calc(100dvh - 8rem));
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
@layer ly.context {
|
|
213
|
+
:where(
|
|
214
|
+
.ly-root[data-ly-density="compact"],
|
|
215
|
+
.ly-root [data-ly-density="compact"]
|
|
216
|
+
) {
|
|
217
|
+
--ly-gap: var(--ly-space-3);
|
|
218
|
+
--ly-grid-gap: var(--ly-space-3);
|
|
219
|
+
--ly-stack-gap: var(--ly-space-3);
|
|
220
|
+
--ly-cluster-gap: var(--ly-space-2);
|
|
221
|
+
--ly-section-padding-block: clamp(1rem, 2.5vh, 2rem);
|
|
222
|
+
--ly-section-padding-block-compact: clamp(0.5rem, 1.5vh, 1rem);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
:where(
|
|
226
|
+
.ly-root[data-ly-density="normal"],
|
|
227
|
+
.ly-root [data-ly-density="normal"]
|
|
228
|
+
) {
|
|
229
|
+
--ly-gap: var(--ly-profile-gap);
|
|
230
|
+
--ly-grid-gap: var(--ly-gap);
|
|
231
|
+
--ly-stack-gap: var(--ly-space-4);
|
|
232
|
+
--ly-cluster-gap: var(--ly-space-3);
|
|
233
|
+
--ly-section-padding-block: clamp(2rem, 4vh, 4rem);
|
|
234
|
+
--ly-section-padding-block-compact: clamp(1rem, 2.5vh, 2rem);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
:where(
|
|
238
|
+
.ly-root[data-ly-density="spacious"],
|
|
239
|
+
.ly-root [data-ly-density="spacious"]
|
|
240
|
+
) {
|
|
241
|
+
--ly-gap: max(var(--ly-profile-gap), var(--ly-space-6));
|
|
242
|
+
--ly-grid-gap: var(--ly-gap);
|
|
243
|
+
--ly-stack-gap: var(--ly-space-5);
|
|
244
|
+
--ly-cluster-gap: var(--ly-space-4);
|
|
245
|
+
--ly-section-padding-block: clamp(3rem, 7vh, 6rem);
|
|
246
|
+
--ly-section-padding-block-compact: clamp(1.5rem, 3.5vh, 3rem);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
@media (max-height: 44rem) {
|
|
250
|
+
:where(
|
|
251
|
+
.ly-root[data-ly-density="compact"],
|
|
252
|
+
.ly-root [data-ly-density="compact"]
|
|
253
|
+
) {
|
|
254
|
+
--ly-gap: var(--ly-space-3);
|
|
255
|
+
--ly-grid-gap: var(--ly-space-3);
|
|
256
|
+
--ly-stack-gap: var(--ly-space-3);
|
|
257
|
+
--ly-cluster-gap: var(--ly-space-2);
|
|
258
|
+
--ly-section-padding-block: clamp(0.75rem, 2vh, 1.25rem);
|
|
259
|
+
--ly-section-padding-block-compact: var(--ly-space-2);
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
:where(
|
|
263
|
+
.ly-root[data-ly-density="normal"],
|
|
264
|
+
.ly-root [data-ly-density="normal"]
|
|
265
|
+
) {
|
|
266
|
+
--ly-gap: min(var(--ly-profile-gap), var(--ly-space-4));
|
|
267
|
+
--ly-grid-gap: var(--ly-gap);
|
|
268
|
+
--ly-stack-gap: var(--ly-space-4);
|
|
269
|
+
--ly-cluster-gap: var(--ly-space-3);
|
|
270
|
+
--ly-section-padding-block: clamp(1.25rem, 4vh, 2rem);
|
|
271
|
+
--ly-section-padding-block-compact: clamp(0.75rem, 2vh, 1.25rem);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
:where(
|
|
275
|
+
.ly-root[data-ly-density="spacious"],
|
|
276
|
+
.ly-root [data-ly-density="spacious"]
|
|
277
|
+
) {
|
|
278
|
+
--ly-gap: var(--ly-space-5);
|
|
279
|
+
--ly-grid-gap: var(--ly-space-5);
|
|
280
|
+
--ly-stack-gap: var(--ly-space-4);
|
|
281
|
+
--ly-cluster-gap: var(--ly-space-3);
|
|
282
|
+
--ly-section-padding-block: clamp(1.5rem, 6vh, 3rem);
|
|
283
|
+
--ly-section-padding-block-compact: clamp(0.75rem, 3vh, 1.25rem);
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
@supports (height: 100dvh) {
|
|
287
|
+
:where(
|
|
288
|
+
.ly-root[data-ly-density="compact"],
|
|
289
|
+
.ly-root [data-ly-density="compact"]
|
|
290
|
+
) {
|
|
291
|
+
--ly-section-padding-block: clamp(0.75rem, 2dvh, 1.25rem);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
:where(
|
|
295
|
+
.ly-root[data-ly-density="normal"],
|
|
296
|
+
.ly-root [data-ly-density="normal"]
|
|
297
|
+
) {
|
|
298
|
+
--ly-section-padding-block: clamp(1.25rem, 4dvh, 2rem);
|
|
299
|
+
--ly-section-padding-block-compact: clamp(0.75rem, 2dvh, 1.25rem);
|
|
191
300
|
}
|
|
301
|
+
|
|
302
|
+
:where(
|
|
303
|
+
.ly-root[data-ly-density="spacious"],
|
|
304
|
+
.ly-root [data-ly-density="spacious"]
|
|
305
|
+
) {
|
|
306
|
+
--ly-section-padding-block: clamp(1.5rem, 6dvh, 3rem);
|
|
307
|
+
--ly-section-padding-block-compact: clamp(0.75rem, 3dvh, 1.25rem);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
@media (max-height: 30rem) {
|
|
313
|
+
:where(
|
|
314
|
+
.ly-root[data-ly-density="compact"],
|
|
315
|
+
.ly-root [data-ly-density="compact"]
|
|
316
|
+
) {
|
|
317
|
+
--ly-gap: var(--ly-space-2);
|
|
318
|
+
--ly-grid-gap: var(--ly-space-2);
|
|
319
|
+
--ly-stack-gap: var(--ly-space-2);
|
|
320
|
+
--ly-cluster-gap: var(--ly-space-1);
|
|
321
|
+
--ly-section-padding-block: var(--ly-space-3);
|
|
322
|
+
--ly-section-padding-block-compact: var(--ly-space-2);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
:where(
|
|
326
|
+
.ly-root[data-ly-density="normal"],
|
|
327
|
+
.ly-root [data-ly-density="normal"]
|
|
328
|
+
) {
|
|
329
|
+
--ly-gap: var(--ly-space-3);
|
|
330
|
+
--ly-grid-gap: var(--ly-space-3);
|
|
331
|
+
--ly-stack-gap: var(--ly-space-3);
|
|
332
|
+
--ly-cluster-gap: var(--ly-space-2);
|
|
333
|
+
--ly-section-padding-block: var(--ly-space-4);
|
|
334
|
+
--ly-section-padding-block-compact: var(--ly-space-2);
|
|
335
|
+
}
|
|
336
|
+
|
|
337
|
+
:where(
|
|
338
|
+
.ly-root[data-ly-density="spacious"],
|
|
339
|
+
.ly-root [data-ly-density="spacious"]
|
|
340
|
+
) {
|
|
341
|
+
--ly-gap: var(--ly-space-4);
|
|
342
|
+
--ly-grid-gap: var(--ly-space-4);
|
|
343
|
+
--ly-stack-gap: var(--ly-space-4);
|
|
344
|
+
--ly-cluster-gap: var(--ly-space-3);
|
|
345
|
+
--ly-section-padding-block: var(--ly-space-5);
|
|
346
|
+
--ly-section-padding-block-compact: var(--ly-space-3);
|
|
192
347
|
}
|
|
193
348
|
}
|
|
194
349
|
}
|