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.
Files changed (37) hide show
  1. package/CHANGELOG.md +53 -0
  2. package/CONTRIBUTING.md +50 -0
  3. package/README.md +205 -16
  4. package/SECURITY.md +45 -0
  5. package/demo/assets/social-card.png +0 -0
  6. package/demo/index.html +358 -82
  7. package/dist/layout-all.css +5 -0
  8. package/dist/layout-base.css +67 -0
  9. package/dist/layout-style-css.css +571 -0
  10. package/dist/layout-style-css.min.css +1 -1
  11. package/dist/layout-style-f-pattern.css +76 -0
  12. package/dist/layout-style-mondrian.css +77 -0
  13. package/dist/layout-style-split-screen.css +62 -0
  14. package/dist/layout-style-synthwave.css +88 -0
  15. package/dist/layout-style-z-pattern.css +76 -0
  16. package/dist/layout-ui-style-kit-bridge.css +115 -0
  17. package/docs/wiki/Contributing.md +30 -0
  18. package/docs/wiki/Demo-And-GitHub-Pages.md +39 -0
  19. package/docs/wiki/Getting-Started.md +68 -0
  20. package/docs/wiki/Home.md +48 -0
  21. package/docs/wiki/Installation-And-CDN.md +58 -0
  22. package/docs/wiki/Layout-Primitives.md +57 -0
  23. package/docs/wiki/Layout-Recipes.md +80 -0
  24. package/docs/wiki/Layout-Styles.md +43 -0
  25. package/docs/wiki/Release-And-Publishing.md +69 -0
  26. package/docs/wiki/Security-And-Support.md +34 -0
  27. package/docs/wiki/UI-Style-Kit-Compatibility.md +54 -0
  28. package/docs/wiki/_Sidebar.md +14 -0
  29. package/package.json +12 -2
  30. package/styles/layout-base.css +67 -0
  31. package/styles/layout-style-f-pattern.css +76 -0
  32. package/styles/layout-style-mondrian.css +77 -0
  33. package/styles/layout-style-split-screen.css +62 -0
  34. package/styles/layout-style-synthwave.css +88 -0
  35. package/styles/layout-style-z-pattern.css +76 -0
  36. package/styles/layout-ui-style-kit-bridge.css +115 -0
  37. package/demo/assets/social-card.svg +0 -17
@@ -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
+ }
@@ -7,6 +7,16 @@
7
7
  @layer ly.bridge {
8
8
  :where(.ly-root[data-ui][data-theme][data-mode], [data-ui][data-theme][data-mode] .ly-root) {
9
9
  --ly-ui-style-kit-bridge: 1;
10
+
11
+ /*
12
+ Normalize UI kit root background geometry without redefining its paint.
13
+ Patterned theme layers should fill the viewport once instead of tiling.
14
+ */
15
+ min-block-size: 100svh;
16
+ background-attachment: fixed;
17
+ background-position: center;
18
+ background-repeat: no-repeat;
19
+ background-size: 100% 100%;
10
20
  }
11
21
 
12
22
  :where(.ly-root[data-ui="minimal-saas"], [data-ui="minimal-saas"] .ly-root) {
@@ -52,4 +62,109 @@
52
62
  :where(.ly-root[data-ui="retro-glass"], [data-ui="retro-glass"] .ly-root) {
53
63
  --ly-ui-style-kit-bridge-style: retro-glass;
54
64
  }
65
+
66
+ :where(.saas-container, .bento-container, .max-container, .bau-container, .tactile-container, .neo-container, .retro-container, .brutal-container, .cyber-container, .y2k-container, .rg-container) {
67
+ /* UI Style Kit naming can opt into layout sizing without taking over visual paint. */
68
+ width: min(100% - var(--ly-page-padding-inline), var(--ly-container-max));
69
+ margin-inline: auto;
70
+ }
71
+
72
+ :where(.saas-section, .bento-section, .max-section, .bau-section, .tactile-section, .neo-section, .retro-section, .brutal-section, .cyber-section, .y2k-section, .rg-section) {
73
+ padding-block: var(--ly-section-padding-block);
74
+ }
75
+
76
+ :where(.saas-stack, .bento-stack, .max-stack, .bau-stack, .tactile-stack, .neo-stack, .retro-stack, .brutal-stack, .cyber-stack, .y2k-stack, .rg-stack) {
77
+ display: flex;
78
+ flex-direction: column;
79
+ gap: var(--ly-stack-gap);
80
+ }
81
+
82
+ :where(.saas-cluster, .bento-cluster, .max-cluster, .bau-cluster, .tactile-cluster, .neo-cluster, .retro-cluster, .brutal-cluster, .cyber-cluster, .y2k-cluster, .rg-cluster) {
83
+ display: flex;
84
+ flex-wrap: wrap;
85
+ align-items: center;
86
+ gap: var(--ly-cluster-gap);
87
+ }
88
+
89
+ :where(.saas-grid, .bento-grid, .max-grid, .bau-grid, .tactile-grid, .neo-grid, .retro-grid, .brutal-grid, .cyber-grid, .y2k-grid, .rg-grid) {
90
+ display: grid;
91
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
92
+ gap: var(--ly-grid-gap);
93
+ }
94
+
95
+ :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
96
+ display: grid;
97
+ grid-template-columns: 1fr;
98
+ gap: var(--ly-gap);
99
+ align-items: var(--ly-split-align, center);
100
+ }
101
+
102
+ :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) > * {
103
+ min-width: 0;
104
+ }
105
+
106
+ :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) {
107
+ display: flex;
108
+ flex-wrap: wrap;
109
+ align-items: center;
110
+ gap: var(--ly-cluster-gap);
111
+ }
112
+
113
+ :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) > * {
114
+ flex: 0 1 auto;
115
+ min-width: min(100%, var(--ly-button-min, 8rem));
116
+ }
117
+
118
+ :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) {
119
+ display: grid;
120
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
121
+ gap: var(--ly-grid-gap);
122
+ }
123
+
124
+ :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) > * {
125
+ min-width: 0;
126
+ }
127
+
128
+ :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) {
129
+ min-block-size: var(--ly-card-size-sm);
130
+ }
131
+
132
+ :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) {
133
+ min-block-size: var(--ly-card-size-md);
134
+ }
135
+
136
+ :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) {
137
+ min-block-size: var(--ly-card-size-lg);
138
+ }
139
+
140
+ :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) {
141
+ display: grid;
142
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
143
+ gap: var(--ly-grid-gap);
144
+ }
145
+
146
+ :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) > * {
147
+ min-width: 0;
148
+ }
149
+
150
+ :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) {
151
+ display: grid;
152
+ grid-auto-flow: column;
153
+ grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
154
+ gap: var(--ly-grid-gap);
155
+ overflow-x: auto;
156
+ overscroll-behavior-inline: contain;
157
+ scroll-snap-type: x proximity;
158
+ }
159
+
160
+ :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) > * {
161
+ min-width: 0;
162
+ scroll-snap-align: start;
163
+ }
164
+
165
+ @media (min-width: 48rem) {
166
+ :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
167
+ grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
168
+ }
169
+ }
55
170
  }
@@ -1,17 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" role="img" aria-labelledby="title desc">
2
- <title id="title">layout-style-css social card</title>
3
- <desc id="desc">A shell-first CSS layout card showing independent UI and layout tracks.</desc>
4
- <rect width="1200" height="630" fill="#111827"/>
5
- <rect x="72" y="72" width="210" height="486" rx="36" fill="#7dd3fc"/>
6
- <rect x="330" y="72" width="798" height="180" rx="36" fill="#fbbf24"/>
7
- <rect x="330" y="306" width="360" height="252" rx="36" fill="#f472b6"/>
8
- <rect x="750" y="306" width="378" height="252" rx="36" fill="#a7f3d0"/>
9
- <text x="116" y="154" fill="#111827" font-family="Arial, sans-serif" font-size="38" font-weight="700">Layout</text>
10
- <text x="116" y="204" fill="#111827" font-family="Arial, sans-serif" font-size="38" font-weight="700">Style</text>
11
- <text x="116" y="254" fill="#111827" font-family="Arial, sans-serif" font-size="38" font-weight="700">Library</text>
12
- <text x="378" y="162" fill="#111827" font-family="Arial, sans-serif" font-size="56" font-weight="700">Shells without visual ownership</text>
13
- <text x="378" y="414" fill="#111827" font-family="Arial, sans-serif" font-size="34">UI Style Kit controls</text>
14
- <text x="378" y="462" fill="#111827" font-family="Arial, sans-serif" font-size="34">color, type, borders</text>
15
- <text x="798" y="414" fill="#111827" font-family="Arial, sans-serif" font-size="34">Layout Library controls</text>
16
- <text x="798" y="462" fill="#111827" font-family="Arial, sans-serif" font-size="34">size, shape, position</text>
17
- </svg>