layout-style-css 1.0.0 → 1.1.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.
- package/CHANGELOG.md +46 -0
- package/CONTRIBUTING.md +50 -0
- package/README.md +208 -19
- package/SECURITY.md +45 -0
- package/demo/assets/social-card.png +0 -0
- package/demo/index.html +358 -82
- package/dist/layout-all.css +5 -0
- package/dist/layout-base.css +67 -0
- package/dist/layout-style-css.css +561 -0
- package/dist/layout-style-css.min.css +1 -1
- package/dist/layout-style-f-pattern.css +76 -0
- package/dist/layout-style-mondrian.css +77 -0
- package/dist/layout-style-split-screen.css +62 -0
- package/dist/layout-style-synthwave.css +88 -0
- package/dist/layout-style-z-pattern.css +76 -0
- package/dist/layout-ui-style-kit-bridge.css +105 -0
- package/docs/wiki/Contributing.md +30 -0
- package/docs/wiki/Demo-And-GitHub-Pages.md +39 -0
- package/docs/wiki/Getting-Started.md +68 -0
- package/docs/wiki/Home.md +48 -0
- package/docs/wiki/Installation-And-CDN.md +58 -0
- package/docs/wiki/Layout-Primitives.md +57 -0
- package/docs/wiki/Layout-Recipes.md +80 -0
- package/docs/wiki/Layout-Styles.md +43 -0
- package/docs/wiki/Release-And-Publishing.md +69 -0
- package/docs/wiki/Security-And-Support.md +34 -0
- package/docs/wiki/UI-Style-Kit-Compatibility.md +54 -0
- package/docs/wiki/_Sidebar.md +14 -0
- package/package.json +12 -2
- package/styles/layout-base.css +67 -0
- package/styles/layout-style-f-pattern.css +76 -0
- package/styles/layout-style-mondrian.css +77 -0
- package/styles/layout-style-split-screen.css +62 -0
- package/styles/layout-style-synthwave.css +88 -0
- package/styles/layout-style-z-pattern.css +76 -0
- package/styles/layout-ui-style-kit-bridge.css +105 -0
- package/demo/assets/social-card.svg +0 -17
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Security And Support
|
|
2
|
+
|
|
3
|
+
`layout-style-css` is a CSS-only package. The package does not execute runtime JavaScript, call external services, read secrets, or process user input.
|
|
4
|
+
|
|
5
|
+
## Supported Versions
|
|
6
|
+
|
|
7
|
+
| Version | Supported |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `1.1.x` | Yes |
|
|
10
|
+
| `1.0.x` | Security fixes only when practical |
|
|
11
|
+
|
|
12
|
+
## Report A Security Issue
|
|
13
|
+
|
|
14
|
+
Use GitHub security advisories when available. If advisories are not enabled, open a minimal GitHub issue that requests a private coordination path and avoids public exploit details.
|
|
15
|
+
|
|
16
|
+
Include:
|
|
17
|
+
|
|
18
|
+
- affected version
|
|
19
|
+
- affected package export or CSS selector
|
|
20
|
+
- reproduction steps
|
|
21
|
+
- expected impact
|
|
22
|
+
- whether the issue affects package consumers, the demo, or GitHub Pages deployment
|
|
23
|
+
|
|
24
|
+
## Security Checks
|
|
25
|
+
|
|
26
|
+
Before release:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm audit --audit-level=moderate
|
|
30
|
+
npm run release:verify
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
The package contract tests check package exports, README import examples, npm tarball contents, generated CSS, demo smoke behavior, and GitHub Pages artifact structure.
|
|
34
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# UI Style Kit Compatibility
|
|
2
|
+
|
|
3
|
+
`layout-style-css` is built to pair with `ui-style-kit-css@2.0.1` while keeping each package responsible for one layer.
|
|
4
|
+
|
|
5
|
+
## Ownership Boundary
|
|
6
|
+
|
|
7
|
+
| Package | Owns |
|
|
8
|
+
| --- | --- |
|
|
9
|
+
| `ui-style-kit-css` | colors, typography, borders, shadows, native controls, component paint, focus states, themes, modes |
|
|
10
|
+
| `layout-style-css` | wrappers, shells, grid behavior, panes, sidebars, spacing, layout recipes, layout personalities |
|
|
11
|
+
|
|
12
|
+
## One Import Pairing
|
|
13
|
+
|
|
14
|
+
```js
|
|
15
|
+
import "layout-style-css/all-with-ui-kit.css";
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
This imports UI Style Kit and all layout files. Use `layout-style-css/all-with-ui-kit-and-interactive-surface.css` when Interactive Surface is also required.
|
|
19
|
+
|
|
20
|
+
## Prefix Aliases
|
|
21
|
+
|
|
22
|
+
The bridge maps UI-style structural names to layout primitives for these prefixes:
|
|
23
|
+
|
|
24
|
+
```txt
|
|
25
|
+
saas, bento, max, bau, tactile, neo, retro, brutal, cyber, y2k, rg
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
| Alias pattern | Layout primitive |
|
|
29
|
+
| --- | --- |
|
|
30
|
+
| `<prefix>-container` | `.ly-wrapper` |
|
|
31
|
+
| `<prefix>-section` | `.ly-section` |
|
|
32
|
+
| `<prefix>-stack` | `.ly-stack` |
|
|
33
|
+
| `<prefix>-cluster` | `.ly-cluster` |
|
|
34
|
+
| `<prefix>-grid` | `.ly-grid` |
|
|
35
|
+
| `<prefix>-split` | `.ly-split` |
|
|
36
|
+
| `<prefix>-button-group` | `.ly-button-group` |
|
|
37
|
+
| `<prefix>-card-grid` | `.ly-card-grid` |
|
|
38
|
+
| `<prefix>-card-sm`, `<prefix>-card-md`, `<prefix>-card-lg` | `.ly-card-sm`, `.ly-card-md`, `.ly-card-lg` |
|
|
39
|
+
| `<prefix>-gallery` | `.ly-gallery` |
|
|
40
|
+
| `<prefix>-carousel` | `.ly-carousel` |
|
|
41
|
+
|
|
42
|
+
Visual component aliases such as `<prefix>-button`, `<prefix>-card`, and `<prefix>-panel` remain owned by UI Style Kit.
|
|
43
|
+
|
|
44
|
+
## Integration Example
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<section class="saas-container saas-section">
|
|
48
|
+
<div class="saas-card-grid">
|
|
49
|
+
<article class="saas-card saas-card-md">Plan</article>
|
|
50
|
+
<article class="saas-card saas-card-md">Plan</article>
|
|
51
|
+
</div>
|
|
52
|
+
</section>
|
|
53
|
+
```
|
|
54
|
+
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|
+
- [Demo And GitHub Pages](Demo-And-GitHub-Pages.md)
|
|
11
|
+
- [Release And Publishing](Release-And-Publishing.md)
|
|
12
|
+
- [Security And Support](Security-And-Support.md)
|
|
13
|
+
- [Contributing](Contributing.md)
|
|
14
|
+
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "layout-style-css",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.1.1",
|
|
4
4
|
"description": "Shell-first CSS layout primitives that complement ui-style-kit-css@2.0.1.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
"./css.css": "./dist/layout-style-css.css",
|
|
61
61
|
"./min": "./dist/layout-style-css.min.css",
|
|
62
62
|
"./min.css": "./dist/layout-style-css.min.css",
|
|
63
|
+
"./dist/*.css": "./dist/*.css",
|
|
63
64
|
"./dist/layout-style-css.css": "./dist/layout-style-css.css",
|
|
64
65
|
"./dist/layout-style-css.min.css": "./dist/layout-style-css.min.css",
|
|
65
66
|
"./base.css": "./dist/layout-base.css",
|
|
@@ -78,20 +79,29 @@
|
|
|
78
79
|
"./cyberpunk.css": "./dist/layout-style-cyberpunk.css",
|
|
79
80
|
"./y2k.css": "./dist/layout-style-y2k.css",
|
|
80
81
|
"./retro-glass.css": "./dist/layout-style-retro-glass.css",
|
|
82
|
+
"./f-pattern.css": "./dist/layout-style-f-pattern.css",
|
|
83
|
+
"./z-pattern.css": "./dist/layout-style-z-pattern.css",
|
|
84
|
+
"./split-screen.css": "./dist/layout-style-split-screen.css",
|
|
85
|
+
"./mondrian.css": "./dist/layout-style-mondrian.css",
|
|
86
|
+
"./synthwave.css": "./dist/layout-style-synthwave.css",
|
|
81
87
|
"./package.json": "./package.json"
|
|
82
88
|
},
|
|
83
89
|
"files": [
|
|
84
90
|
"dist",
|
|
85
91
|
"styles",
|
|
92
|
+
"docs/wiki",
|
|
86
93
|
"demo/index.html",
|
|
87
94
|
"demo/assets/apple-touch-icon.svg",
|
|
88
95
|
"demo/assets/favicon.svg",
|
|
89
|
-
"demo/assets/social-card.
|
|
96
|
+
"demo/assets/social-card.png",
|
|
90
97
|
"demo/browserconfig.xml",
|
|
91
98
|
"demo/robots.txt",
|
|
92
99
|
"demo/site.webmanifest",
|
|
93
100
|
"demo/sitemap.xml",
|
|
94
101
|
"README.md",
|
|
102
|
+
"CHANGELOG.md",
|
|
103
|
+
"CONTRIBUTING.md",
|
|
104
|
+
"SECURITY.md",
|
|
95
105
|
"LICENSE"
|
|
96
106
|
]
|
|
97
107
|
}
|
package/styles/layout-base.css
CHANGED
|
@@ -34,6 +34,13 @@
|
|
|
34
34
|
|
|
35
35
|
--ly-grid-columns: 12;
|
|
36
36
|
--ly-grid-min: 16rem;
|
|
37
|
+
--ly-card-grid-min: 16rem;
|
|
38
|
+
--ly-card-size-sm: 10rem;
|
|
39
|
+
--ly-card-size-md: 14rem;
|
|
40
|
+
--ly-card-size-lg: 18rem;
|
|
41
|
+
--ly-gallery-min: 12rem;
|
|
42
|
+
--ly-carousel-item-min: 16rem;
|
|
43
|
+
--ly-carousel-item-max: 28rem;
|
|
37
44
|
--ly-sidebar-min: 14rem;
|
|
38
45
|
--ly-sidebar-width: 18rem;
|
|
39
46
|
--ly-sidebar-max: 22rem;
|
|
@@ -165,6 +172,19 @@
|
|
|
165
172
|
gap: var(--ly-cluster-gap);
|
|
166
173
|
}
|
|
167
174
|
|
|
175
|
+
.ly-button-group {
|
|
176
|
+
/* Button groups provide flow only; UI libraries keep button paint and states. */
|
|
177
|
+
display: flex;
|
|
178
|
+
flex-wrap: wrap;
|
|
179
|
+
align-items: center;
|
|
180
|
+
gap: var(--ly-cluster-gap);
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
.ly-button-group > * {
|
|
184
|
+
flex: 0 1 auto;
|
|
185
|
+
min-width: min(100%, var(--ly-button-min, 8rem));
|
|
186
|
+
}
|
|
187
|
+
|
|
168
188
|
.ly-grid {
|
|
169
189
|
display: grid;
|
|
170
190
|
grid-template-columns: repeat(var(--ly-grid-columns), minmax(0, 1fr));
|
|
@@ -175,6 +195,53 @@
|
|
|
175
195
|
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
|
|
176
196
|
}
|
|
177
197
|
|
|
198
|
+
.ly-card-grid {
|
|
199
|
+
display: grid;
|
|
200
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
|
|
201
|
+
gap: var(--ly-grid-gap);
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.ly-card-grid > * {
|
|
205
|
+
min-width: 0;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.ly-card-sm {
|
|
209
|
+
min-block-size: var(--ly-card-size-sm);
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.ly-card-md {
|
|
213
|
+
min-block-size: var(--ly-card-size-md);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.ly-card-lg {
|
|
217
|
+
min-block-size: var(--ly-card-size-lg);
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.ly-gallery {
|
|
221
|
+
display: grid;
|
|
222
|
+
grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
|
|
223
|
+
gap: var(--ly-grid-gap);
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
.ly-gallery > * {
|
|
227
|
+
min-width: 0;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
.ly-carousel {
|
|
231
|
+
display: grid;
|
|
232
|
+
grid-auto-flow: column;
|
|
233
|
+
grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
|
|
234
|
+
gap: var(--ly-grid-gap);
|
|
235
|
+
overflow-x: auto;
|
|
236
|
+
overscroll-behavior-inline: contain;
|
|
237
|
+
scroll-snap-type: x proximity;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
.ly-carousel > * {
|
|
241
|
+
min-width: 0;
|
|
242
|
+
scroll-snap-align: start;
|
|
243
|
+
}
|
|
244
|
+
|
|
178
245
|
.ly-row {
|
|
179
246
|
display: flex;
|
|
180
247
|
flex-wrap: wrap;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Layout style: f-pattern.
|
|
3
|
+
Top-led scan path with a persistent left rail and heavier early content rows.
|
|
4
|
+
Visual identity remains owned by ui-style-kit-css.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
@layer ly.styles.f_pattern {
|
|
8
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) {
|
|
9
|
+
--ly-container-max: 94rem;
|
|
10
|
+
--ly-page-padding-inline: clamp(1rem, 3vw, 2.75rem);
|
|
11
|
+
--ly-section-padding-block: clamp(2rem, 5vw, 4.5rem);
|
|
12
|
+
--ly-sidebar-width: clamp(13rem, 19vw, 20rem);
|
|
13
|
+
--ly-grid-min: 15rem;
|
|
14
|
+
--ly-gap: clamp(1rem, 2.25vw, 1.85rem);
|
|
15
|
+
--ly-grid-gap: var(--ly-gap);
|
|
16
|
+
--ly-stack-gap: clamp(0.875rem, 1.8vw, 1.45rem);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-app-main {
|
|
20
|
+
padding-block: clamp(0.75rem, 2vw, 2rem);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-container,
|
|
24
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-wrapper {
|
|
25
|
+
width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-section {
|
|
29
|
+
padding-block: var(--ly-section-padding-block);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-grid--auto {
|
|
33
|
+
grid-auto-rows: minmax(8rem, auto);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@media (min-width: 48rem) {
|
|
37
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-app-shell {
|
|
38
|
+
grid-template-areas:
|
|
39
|
+
"header header"
|
|
40
|
+
"sidebar main";
|
|
41
|
+
grid-template-columns: minmax(min(100%, 13rem), 0.3fr) minmax(0, 1fr);
|
|
42
|
+
grid-template-rows: auto 1fr;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-app-sidebar {
|
|
46
|
+
display: block;
|
|
47
|
+
position: sticky;
|
|
48
|
+
top: 0;
|
|
49
|
+
height: 100svh;
|
|
50
|
+
overflow: auto;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-grid--auto > :nth-child(3n + 1) {
|
|
54
|
+
grid-column: span 2;
|
|
55
|
+
min-height: 13rem;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-sidebar-layout {
|
|
59
|
+
grid-template-columns: minmax(min(100%, 14rem), 0.34fr) minmax(0, 1fr);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-split {
|
|
63
|
+
grid-template-columns: minmax(0, 1.35fr) minmax(min(100%, 18rem), 0.65fr);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-panes--two {
|
|
67
|
+
grid-template-columns: minmax(min(100%, 15rem), 0.38fr) minmax(0, 1fr);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media (min-width: 80rem) {
|
|
72
|
+
:where(.ly-root[data-layout="f-pattern"], .ly-root[layout-style="f-pattern"], .ly-root.ly-layout-f-pattern, .ly-root.ly-style-f-pattern) .ly-panes--three {
|
|
73
|
+
grid-template-columns: minmax(min(100%, 13rem), 0.28fr) minmax(0, 1.28fr) minmax(min(100%, 16rem), 0.44fr);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Layout style: mondrian.
|
|
3
|
+
Asymmetrical rectangular blocks with staggered spans inspired by Mondrian
|
|
4
|
+
composition. Visual identity remains owned by ui-style-kit-css.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
@layer ly.styles.mondrian {
|
|
8
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) {
|
|
9
|
+
--ly-container-max: 108rem;
|
|
10
|
+
--ly-page-padding-inline: clamp(0.75rem, 2.5vw, 2rem);
|
|
11
|
+
--ly-section-padding-block: clamp(1.75rem, 4.5vw, 4rem);
|
|
12
|
+
--ly-sidebar-width: clamp(11rem, 16vw, 17rem);
|
|
13
|
+
--ly-grid-min: 11rem;
|
|
14
|
+
--ly-gap: clamp(0.75rem, 1.6vw, 1.25rem);
|
|
15
|
+
--ly-grid-gap: var(--ly-gap);
|
|
16
|
+
--ly-stack-gap: clamp(0.75rem, 1.5vw, 1.2rem);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-app-main {
|
|
20
|
+
padding-block: clamp(0.75rem, 1.8vw, 1.5rem);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-container,
|
|
24
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-wrapper {
|
|
25
|
+
width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-section {
|
|
29
|
+
padding-block: var(--ly-section-padding-block);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-grid--auto {
|
|
33
|
+
grid-auto-rows: minmax(7rem, auto);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@media (min-width: 48rem) {
|
|
37
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-app-shell {
|
|
38
|
+
grid-template-areas:
|
|
39
|
+
"sidebar header header"
|
|
40
|
+
"sidebar main main";
|
|
41
|
+
grid-template-columns: minmax(min(100%, 11rem), 0.28fr) minmax(0, 0.86fr) minmax(0, 1.14fr);
|
|
42
|
+
grid-template-rows: auto 1fr;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-app-sidebar {
|
|
46
|
+
display: block;
|
|
47
|
+
position: sticky;
|
|
48
|
+
top: var(--ly-space-3);
|
|
49
|
+
height: calc(100svh - (var(--ly-space-3) * 2));
|
|
50
|
+
overflow: auto;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-grid--auto > :nth-child(5n + 1) {
|
|
54
|
+
grid-column: span 2;
|
|
55
|
+
grid-row: span 2;
|
|
56
|
+
min-height: 15rem;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-sidebar-layout {
|
|
60
|
+
grid-template-columns: minmax(min(100%, 11rem), 0.25fr) minmax(0, 1fr);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-split {
|
|
64
|
+
grid-template-columns: minmax(0, 0.7fr) minmax(min(100%, 20rem), 1.3fr);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-panes--two {
|
|
68
|
+
grid-template-columns: minmax(min(100%, 13rem), 0.46fr) minmax(0, 1.54fr);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
@media (min-width: 80rem) {
|
|
73
|
+
:where(.ly-root[data-layout="mondrian"], .ly-root[layout-style="mondrian"], .ly-root.ly-layout-mondrian, .ly-root.ly-style-mondrian) .ly-panes--three {
|
|
74
|
+
grid-template-columns: minmax(min(100%, 11rem), 0.28fr) minmax(0, 1.44fr) minmax(min(100%, 13rem), 0.28fr);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Layout style: split-screen.
|
|
3
|
+
Equal-weight shell columns for contrasting focal points or side-by-side
|
|
4
|
+
choices. Visual identity remains owned by ui-style-kit-css.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
@layer ly.styles.split_screen {
|
|
8
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) {
|
|
9
|
+
--ly-container-max: 100vw;
|
|
10
|
+
--ly-page-padding-inline: clamp(0.875rem, 2.5vw, 2rem);
|
|
11
|
+
--ly-section-padding-block: clamp(1.5rem, 4vw, 3.5rem);
|
|
12
|
+
--ly-sidebar-width: 50vw;
|
|
13
|
+
--ly-grid-min: 14rem;
|
|
14
|
+
--ly-gap: clamp(0.875rem, 2vw, 1.5rem);
|
|
15
|
+
--ly-grid-gap: var(--ly-gap);
|
|
16
|
+
--ly-stack-gap: clamp(0.875rem, 1.6vw, 1.25rem);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-app-main {
|
|
20
|
+
padding-block: 0;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-container,
|
|
24
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-wrapper {
|
|
25
|
+
width: min(100%, var(--ly-container-max));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-section {
|
|
29
|
+
padding-block: var(--ly-section-padding-block);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-grid--auto {
|
|
33
|
+
grid-auto-rows: minmax(9rem, auto);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@media (min-width: 48rem) {
|
|
37
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-app-shell {
|
|
38
|
+
grid-template-areas:
|
|
39
|
+
"header header"
|
|
40
|
+
"main sidebar";
|
|
41
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-app-sidebar {
|
|
45
|
+
display: block;
|
|
46
|
+
min-height: 100%;
|
|
47
|
+
overflow: auto;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-sidebar-layout,
|
|
51
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-split,
|
|
52
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-panes--two {
|
|
53
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@media (min-width: 80rem) {
|
|
58
|
+
:where(.ly-root[data-layout="split-screen"], .ly-root[layout-style="split-screen"], .ly-root.ly-layout-split-screen, .ly-root.ly-style-split-screen) .ly-panes--three {
|
|
59
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr) minmax(0, 1fr);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Layout style: synthwave.
|
|
3
|
+
Wide stage, dock-like support areas, and cinematic horizontal flow inspired
|
|
4
|
+
by retro-futuristic interface composition. Visual identity remains owned by
|
|
5
|
+
ui-style-kit-css.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
@layer ly.styles.synthwave {
|
|
9
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) {
|
|
10
|
+
--ly-container-max: 112rem;
|
|
11
|
+
--ly-page-padding-inline: clamp(1rem, 4vw, 3.5rem);
|
|
12
|
+
--ly-section-padding-block: clamp(2.5rem, 7vw, 6rem);
|
|
13
|
+
--ly-sidebar-width: clamp(14rem, 18vw, 20rem);
|
|
14
|
+
--ly-grid-min: 14rem;
|
|
15
|
+
--ly-gap: clamp(1rem, 2.8vw, 2.25rem);
|
|
16
|
+
--ly-grid-gap: var(--ly-gap);
|
|
17
|
+
--ly-stack-gap: clamp(1rem, 2.2vw, 1.8rem);
|
|
18
|
+
--ly-carousel-item-min: 18rem;
|
|
19
|
+
--ly-carousel-item-max: 34rem;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-main {
|
|
23
|
+
padding-block: clamp(1rem, 3vw, 3rem);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-container,
|
|
27
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-wrapper {
|
|
28
|
+
width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-section {
|
|
32
|
+
padding-block: var(--ly-section-padding-block);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-grid--auto {
|
|
36
|
+
grid-auto-rows: minmax(9rem, auto);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@media (min-width: 48rem) {
|
|
40
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-shell {
|
|
41
|
+
grid-template-areas:
|
|
42
|
+
"header header"
|
|
43
|
+
"main main"
|
|
44
|
+
"sidebar sidebar";
|
|
45
|
+
grid-template-columns: minmax(0, 1fr) minmax(0, 1fr);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-sidebar {
|
|
49
|
+
display: block;
|
|
50
|
+
overflow: auto;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-sidebar-layout {
|
|
54
|
+
grid-template-columns: minmax(0, 1.2fr) minmax(min(100%, 17rem), 0.8fr);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-split {
|
|
58
|
+
grid-template-columns: minmax(0, 1fr);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-panes--two {
|
|
62
|
+
grid-template-columns: minmax(0, 1.35fr) minmax(min(100%, 17rem), 0.65fr);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
@media (min-width: 80rem) {
|
|
67
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-shell {
|
|
68
|
+
grid-template-areas:
|
|
69
|
+
"header header"
|
|
70
|
+
"main sidebar";
|
|
71
|
+
grid-template-columns: minmax(0, 1.52fr) minmax(min(100%, 17rem), 0.48fr);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-app-sidebar {
|
|
75
|
+
position: sticky;
|
|
76
|
+
top: var(--ly-space-5);
|
|
77
|
+
height: calc(100svh - (var(--ly-space-5) * 2));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-split {
|
|
81
|
+
grid-template-columns: minmax(0, 1.42fr) minmax(min(100%, 20rem), 0.58fr);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
:where(.ly-root[data-layout="synthwave"], .ly-root[layout-style="synthwave"], .ly-root.ly-layout-synthwave, .ly-root.ly-style-synthwave) .ly-panes--three {
|
|
85
|
+
grid-template-columns: minmax(min(100%, 14rem), 0.36fr) minmax(0, 1.28fr) minmax(min(100%, 16rem), 0.36fr);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Layout style: z-pattern.
|
|
3
|
+
Header-first scan path that moves from broad lead content to a right-side
|
|
4
|
+
support rail. Visual identity remains owned by ui-style-kit-css.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
@layer ly.styles.z_pattern {
|
|
8
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) {
|
|
9
|
+
--ly-container-max: 100rem;
|
|
10
|
+
--ly-page-padding-inline: clamp(1rem, 3.4vw, 3rem);
|
|
11
|
+
--ly-section-padding-block: clamp(2rem, 5.5vw, 5rem);
|
|
12
|
+
--ly-sidebar-width: clamp(14rem, 20vw, 21rem);
|
|
13
|
+
--ly-grid-min: 15rem;
|
|
14
|
+
--ly-gap: clamp(1rem, 2.4vw, 2rem);
|
|
15
|
+
--ly-grid-gap: var(--ly-gap);
|
|
16
|
+
--ly-stack-gap: clamp(0.875rem, 1.9vw, 1.5rem);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-app-main {
|
|
20
|
+
padding-block: clamp(1rem, 2.6vw, 2.5rem);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-container,
|
|
24
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-wrapper {
|
|
25
|
+
width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-section {
|
|
29
|
+
padding-block: var(--ly-section-padding-block);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-grid--auto {
|
|
33
|
+
grid-auto-rows: minmax(8rem, auto);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
@media (min-width: 48rem) {
|
|
37
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-app-shell {
|
|
38
|
+
grid-template-areas:
|
|
39
|
+
"header header"
|
|
40
|
+
"main sidebar";
|
|
41
|
+
grid-template-columns: minmax(0, 1.18fr) minmax(min(100%, 15rem), 0.42fr);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-app-sidebar {
|
|
45
|
+
display: block;
|
|
46
|
+
position: sticky;
|
|
47
|
+
top: var(--ly-space-4);
|
|
48
|
+
height: calc(100svh - (var(--ly-space-4) * 2));
|
|
49
|
+
overflow: auto;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-grid--auto > :nth-child(4n + 2) {
|
|
53
|
+
grid-column: span 2;
|
|
54
|
+
min-height: 12rem;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-sidebar-layout {
|
|
58
|
+
grid-template-columns: minmax(0, 1fr) minmax(min(100%, 15rem), 0.36fr);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-split {
|
|
62
|
+
grid-template-columns: minmax(0, 0.92fr) minmax(min(100%, 19rem), 1.08fr);
|
|
63
|
+
align-items: end;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-panes--two {
|
|
67
|
+
grid-template-columns: minmax(0, 1.25fr) minmax(min(100%, 17rem), 0.75fr);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@media (min-width: 80rem) {
|
|
72
|
+
:where(.ly-root[data-layout="z-pattern"], .ly-root[layout-style="z-pattern"], .ly-root.ly-layout-z-pattern, .ly-root.ly-style-z-pattern) .ly-panes--three {
|
|
73
|
+
grid-template-columns: minmax(0, 1.1fr) minmax(min(100%, 15rem), 0.55fr) minmax(min(100%, 14rem), 0.35fr);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|