layout-style-css 1.0.0 → 1.1.2
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 +53 -0
- package/CONTRIBUTING.md +50 -0
- package/README.md +205 -16
- 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 +571 -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 +115 -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 +115 -0
- package/demo/assets/social-card.svg +0 -17
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Release And Publishing
|
|
2
|
+
|
|
3
|
+
This page is the release checklist for `layout-style-css@1.1.2`.
|
|
4
|
+
|
|
5
|
+
## Version Contract
|
|
6
|
+
|
|
7
|
+
- `package.json` version is `1.1.2`.
|
|
8
|
+
- `package-lock.json` is synchronized with `1.1.2`.
|
|
9
|
+
- `CHANGELOG.md` contains a `1.1.2` entry.
|
|
10
|
+
- README and wiki docs link to the current public API.
|
|
11
|
+
|
|
12
|
+
## Verification
|
|
13
|
+
|
|
14
|
+
Run:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
npm run build
|
|
18
|
+
npm run lint
|
|
19
|
+
npm test
|
|
20
|
+
npm run check
|
|
21
|
+
npm run release:verify
|
|
22
|
+
npm audit --audit-level=moderate
|
|
23
|
+
git diff --check
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Expected result: every command exits with status `0`. `git diff --check` may print line-ending warnings on Windows, but it must not report whitespace errors.
|
|
27
|
+
|
|
28
|
+
## Publish
|
|
29
|
+
|
|
30
|
+
Before publishing, confirm npm does not already have the target version:
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
npm view layout-style-css@1.1.2 version --json
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
Publish:
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
npm login
|
|
40
|
+
npm publish --access public
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Verify:
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
npm view layout-style-css@1.1.2
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
## Tag
|
|
50
|
+
|
|
51
|
+
Tag the release:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
git tag v1.1.2
|
|
55
|
+
git push origin v1.1.2
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The npm publish workflow runs when the `v1.1.2` GitHub release is published. If the release event needs to be replayed, run the `Node.js Package` workflow manually from the default branch with `release_tag` set to `v1.1.2`.
|
|
59
|
+
|
|
60
|
+
## GitHub Wiki Mirror
|
|
61
|
+
|
|
62
|
+
If the repository wiki is enabled, mirror `docs/wiki/*.md` into:
|
|
63
|
+
|
|
64
|
+
```txt
|
|
65
|
+
https://github.com/Foscat/Layout-Style-CSS.wiki.git
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
The wiki remote was not available during local preparation, so the versioned source remains the authoritative documentation until the remote is initialized.
|
|
69
|
+
|
|
@@ -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.2",
|
|
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
|
+
}
|