layout-style-css 2.0.0 → 2.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.
@@ -1,70 +1,70 @@
1
1
  @layer ly.reset, ly.tokens, ly.wrappers, ly.primitives, ly.recipes, ly.utilities, ly.personalities, ly.integrations, ly.legacy;
2
2
 
3
3
  /*
4
- Compatibility bridge for ui-style-kit-css.
5
- This bridge intentionally does not map color, type, border, or shadow tokens.
4
+ Compatibility bridge for ui-style-kit-css.
5
+ This bridge intentionally does not map color, type, border, or shadow tokens.
6
6
  ui-style-kit-css owns those visuals; layout-style-css owns structure.
7
- */
8
-
7
+ */
8
+
9
9
  @layer ly.integrations.ui_style_kit {
10
- :where(.ly-root[data-ui][data-theme][data-mode], [data-ui][data-theme][data-mode] .ly-root) {
11
- --ly-ui-style-kit-bridge: 1;
12
-
13
- /*
14
- Normalize UI kit root background geometry without redefining its paint.
15
- Patterned theme layers should fill the viewport once instead of tiling.
16
- */
17
- min-block-size: 100svh;
18
- background-attachment: fixed;
19
- background-position: center;
20
- background-repeat: no-repeat;
21
- background-size: 100% 100%;
22
- }
23
-
24
- :where(.ly-root[data-ui="minimal-saas"], [data-ui="minimal-saas"] .ly-root) {
25
- --ly-ui-style-kit-bridge-style: minimal-saas;
26
- }
27
-
28
- :where(.ly-root[data-ui="bento"], [data-ui="bento"] .ly-root) {
29
- --ly-ui-style-kit-bridge-style: bento;
30
- }
31
-
32
- :where(.ly-root[data-ui="maximalist"], [data-ui="maximalist"] .ly-root) {
33
- --ly-ui-style-kit-bridge-style: maximalist;
34
- }
35
-
36
- :where(.ly-root[data-ui="bauhaus"], [data-ui="bauhaus"] .ly-root) {
37
- --ly-ui-style-kit-bridge-style: bauhaus;
38
- }
39
-
40
- :where(.ly-root[data-ui="tactile"], [data-ui="tactile"] .ly-root) {
41
- --ly-ui-style-kit-bridge-style: tactile;
42
- }
43
-
44
- :where(.ly-root[data-ui="neumorphism"], [data-ui="neumorphism"] .ly-root) {
45
- --ly-ui-style-kit-bridge-style: neumorphism;
46
- }
47
-
48
- :where(.ly-root[data-ui="retrofuturism"], [data-ui="retrofuturism"] .ly-root) {
49
- --ly-ui-style-kit-bridge-style: retrofuturism;
50
- }
51
-
52
- :where(.ly-root[data-ui="brutalism"], [data-ui="brutalism"] .ly-root) {
53
- --ly-ui-style-kit-bridge-style: brutalism;
54
- }
55
-
56
- :where(.ly-root[data-ui="cyberpunk"], [data-ui="cyberpunk"] .ly-root) {
57
- --ly-ui-style-kit-bridge-style: cyberpunk;
58
- }
59
-
60
- :where(.ly-root[data-ui="y2k"], [data-ui="y2k"] .ly-root) {
61
- --ly-ui-style-kit-bridge-style: y2k;
62
- }
63
-
64
- :where(.ly-root[data-ui="retro-glass"], [data-ui="retro-glass"] .ly-root) {
65
- --ly-ui-style-kit-bridge-style: retro-glass;
66
- }
67
-
10
+ :where(.ly-root[data-ui][data-theme][data-mode], [data-ui][data-theme][data-mode] .ly-root) {
11
+ --ly-ui-style-kit-bridge: 1;
12
+
13
+ /*
14
+ Normalize UI kit root background geometry without redefining its paint.
15
+ Patterned theme layers should fill the viewport once instead of tiling.
16
+ */
17
+ min-block-size: 100svh;
18
+ background-attachment: fixed;
19
+ background-position: center;
20
+ background-repeat: no-repeat;
21
+ background-size: 100% 100%;
22
+ }
23
+
24
+ :where(.ly-root[data-ui="minimal-saas"], [data-ui="minimal-saas"] .ly-root) {
25
+ --ly-ui-style-kit-bridge-style: minimal-saas;
26
+ }
27
+
28
+ :where(.ly-root[data-ui="bento"], [data-ui="bento"] .ly-root) {
29
+ --ly-ui-style-kit-bridge-style: bento;
30
+ }
31
+
32
+ :where(.ly-root[data-ui="maximalist"], [data-ui="maximalist"] .ly-root) {
33
+ --ly-ui-style-kit-bridge-style: maximalist;
34
+ }
35
+
36
+ :where(.ly-root[data-ui="bauhaus"], [data-ui="bauhaus"] .ly-root) {
37
+ --ly-ui-style-kit-bridge-style: bauhaus;
38
+ }
39
+
40
+ :where(.ly-root[data-ui="tactile"], [data-ui="tactile"] .ly-root) {
41
+ --ly-ui-style-kit-bridge-style: tactile;
42
+ }
43
+
44
+ :where(.ly-root[data-ui="neumorphism"], [data-ui="neumorphism"] .ly-root) {
45
+ --ly-ui-style-kit-bridge-style: neumorphism;
46
+ }
47
+
48
+ :where(.ly-root[data-ui="retrofuturism"], [data-ui="retrofuturism"] .ly-root) {
49
+ --ly-ui-style-kit-bridge-style: retrofuturism;
50
+ }
51
+
52
+ :where(.ly-root[data-ui="brutalism"], [data-ui="brutalism"] .ly-root) {
53
+ --ly-ui-style-kit-bridge-style: brutalism;
54
+ }
55
+
56
+ :where(.ly-root[data-ui="cyberpunk"], [data-ui="cyberpunk"] .ly-root) {
57
+ --ly-ui-style-kit-bridge-style: cyberpunk;
58
+ }
59
+
60
+ :where(.ly-root[data-ui="y2k"], [data-ui="y2k"] .ly-root) {
61
+ --ly-ui-style-kit-bridge-style: y2k;
62
+ }
63
+
64
+ :where(.ly-root[data-ui="retro-glass"], [data-ui="retro-glass"] .ly-root) {
65
+ --ly-ui-style-kit-bridge-style: retro-glass;
66
+ }
67
+
68
68
  :where(.saas-container, .bento-container, .max-container, .bau-container, .tactile-container, .neo-container, .retro-container, .brutal-container, .cyber-container, .y2k-container, .rg-container) {
69
69
  /* UI Style Kit naming can opt into layout sizing without taking over visual paint. */
70
70
  container-name: ly-wrapper;
@@ -72,104 +72,104 @@
72
72
  inline-size: min(100%, calc(var(--ly-wrapper-max) + (var(--ly-wrapper-gutter) * 2)));
73
73
  margin-inline: auto;
74
74
  padding-inline: var(--ly-wrapper-gutter);
75
- }
76
-
77
- :where(.saas-section, .bento-section, .max-section, .bau-section, .tactile-section, .neo-section, .retro-section, .brutal-section, .cyber-section, .y2k-section, .rg-section) {
78
- padding-block: var(--ly-section-padding-block);
79
- }
80
-
81
- :where(.saas-stack, .bento-stack, .max-stack, .bau-stack, .tactile-stack, .neo-stack, .retro-stack, .brutal-stack, .cyber-stack, .y2k-stack, .rg-stack) {
82
- display: flex;
83
- flex-direction: column;
84
- gap: var(--ly-stack-gap);
85
- }
86
-
87
- :where(.saas-cluster, .bento-cluster, .max-cluster, .bau-cluster, .tactile-cluster, .neo-cluster, .retro-cluster, .brutal-cluster, .cyber-cluster, .y2k-cluster, .rg-cluster) {
88
- display: flex;
89
- flex-wrap: wrap;
90
- align-items: center;
91
- gap: var(--ly-cluster-gap);
92
- }
93
-
94
- :where(.saas-grid, .bento-grid, .max-grid, .bau-grid, .tactile-grid, .neo-grid, .retro-grid, .brutal-grid, .cyber-grid, .y2k-grid, .rg-grid) {
95
- display: grid;
96
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
97
- gap: var(--ly-grid-gap);
98
- }
99
-
100
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
101
- display: grid;
102
- grid-template-columns: 1fr;
103
- gap: var(--ly-gap);
104
- align-items: var(--ly-split-align, center);
105
- }
106
-
107
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) > * {
108
- min-width: 0;
109
- }
110
-
111
- :where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) {
112
- display: flex;
113
- flex-wrap: wrap;
114
- align-items: center;
115
- gap: var(--ly-cluster-gap);
116
- }
117
-
118
- :where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) > * {
119
- flex: 0 1 auto;
120
- min-width: min(100%, var(--ly-button-min, 8rem));
121
- }
122
-
123
- :where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) {
124
- display: grid;
125
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
126
- gap: var(--ly-grid-gap);
127
- }
128
-
129
- :where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) > * {
130
- min-width: 0;
131
- }
132
-
133
- :where(.saas-card-sm, .bento-card-sm, .max-card-sm, .bau-card-sm, .tactile-card-sm, .neo-card-sm, .retro-card-sm, .brutal-card-sm, .cyber-card-sm, .y2k-card-sm, .rg-card-sm) {
134
- min-block-size: var(--ly-card-size-sm);
135
- }
136
-
137
- :where(.saas-card-md, .bento-card-md, .max-card-md, .bau-card-md, .tactile-card-md, .neo-card-md, .retro-card-md, .brutal-card-md, .cyber-card-md, .y2k-card-md, .rg-card-md) {
138
- min-block-size: var(--ly-card-size-md);
139
- }
140
-
141
- :where(.saas-card-lg, .bento-card-lg, .max-card-lg, .bau-card-lg, .tactile-card-lg, .neo-card-lg, .retro-card-lg, .brutal-card-lg, .cyber-card-lg, .y2k-card-lg, .rg-card-lg) {
142
- min-block-size: var(--ly-card-size-lg);
143
- }
144
-
145
- :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) {
146
- display: grid;
147
- grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
148
- gap: var(--ly-grid-gap);
149
- }
150
-
151
- :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) > * {
152
- min-width: 0;
153
- }
154
-
155
- :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) {
156
- display: grid;
157
- grid-auto-flow: column;
158
- grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
159
- gap: var(--ly-grid-gap);
160
- overflow-x: auto;
161
- overscroll-behavior-inline: contain;
162
- scroll-snap-type: x proximity;
163
- }
164
-
165
- :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) > * {
166
- min-width: 0;
167
- scroll-snap-align: start;
168
- }
169
-
75
+ }
76
+
77
+ :where(.saas-section, .bento-section, .max-section, .bau-section, .tactile-section, .neo-section, .retro-section, .brutal-section, .cyber-section, .y2k-section, .rg-section) {
78
+ padding-block: var(--ly-section-padding-block);
79
+ }
80
+
81
+ :where(.saas-stack, .bento-stack, .max-stack, .bau-stack, .tactile-stack, .neo-stack, .retro-stack, .brutal-stack, .cyber-stack, .y2k-stack, .rg-stack) {
82
+ display: flex;
83
+ flex-direction: column;
84
+ gap: var(--ly-stack-gap);
85
+ }
86
+
87
+ :where(.saas-cluster, .bento-cluster, .max-cluster, .bau-cluster, .tactile-cluster, .neo-cluster, .retro-cluster, .brutal-cluster, .cyber-cluster, .y2k-cluster, .rg-cluster) {
88
+ display: flex;
89
+ flex-wrap: wrap;
90
+ align-items: center;
91
+ gap: var(--ly-cluster-gap);
92
+ }
93
+
94
+ :where(.saas-grid, .bento-grid, .max-grid, .bau-grid, .tactile-grid, .neo-grid, .retro-grid, .brutal-grid, .cyber-grid, .y2k-grid, .rg-grid) {
95
+ display: grid;
96
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-grid-min)), 1fr));
97
+ gap: var(--ly-grid-gap);
98
+ }
99
+
100
+ :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
101
+ display: grid;
102
+ grid-template-columns: 1fr;
103
+ gap: var(--ly-gap);
104
+ align-items: var(--ly-split-align, center);
105
+ }
106
+
107
+ :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) > * {
108
+ min-width: 0;
109
+ }
110
+
111
+ :where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) {
112
+ display: flex;
113
+ flex-wrap: wrap;
114
+ align-items: center;
115
+ gap: var(--ly-cluster-gap);
116
+ }
117
+
118
+ :where(.saas-button-group, .bento-button-group, .max-button-group, .bau-button-group, .tactile-button-group, .neo-button-group, .retro-button-group, .brutal-button-group, .cyber-button-group, .y2k-button-group, .rg-button-group) > * {
119
+ flex: 0 1 auto;
120
+ min-width: min(100%, var(--ly-button-min, 8rem));
121
+ }
122
+
123
+ :where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) {
124
+ display: grid;
125
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-card-grid-min)), 1fr));
126
+ gap: var(--ly-grid-gap);
127
+ }
128
+
129
+ :where(.saas-card-grid, .bento-card-grid, .max-card-grid, .bau-card-grid, .tactile-card-grid, .neo-card-grid, .retro-card-grid, .brutal-card-grid, .cyber-card-grid, .y2k-card-grid, .rg-card-grid) > * {
130
+ min-width: 0;
131
+ }
132
+
133
+ :where(.saas-card-sm, .bento-card-sm, .max-card-sm, .bau-card-sm, .tactile-card-sm, .neo-card-sm, .retro-card-sm, .brutal-card-sm, .cyber-card-sm, .y2k-card-sm, .rg-card-sm) {
134
+ min-block-size: var(--ly-card-size-sm);
135
+ }
136
+
137
+ :where(.saas-card-md, .bento-card-md, .max-card-md, .bau-card-md, .tactile-card-md, .neo-card-md, .retro-card-md, .brutal-card-md, .cyber-card-md, .y2k-card-md, .rg-card-md) {
138
+ min-block-size: var(--ly-card-size-md);
139
+ }
140
+
141
+ :where(.saas-card-lg, .bento-card-lg, .max-card-lg, .bau-card-lg, .tactile-card-lg, .neo-card-lg, .retro-card-lg, .brutal-card-lg, .cyber-card-lg, .y2k-card-lg, .rg-card-lg) {
142
+ min-block-size: var(--ly-card-size-lg);
143
+ }
144
+
145
+ :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) {
146
+ display: grid;
147
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, var(--ly-gallery-min)), 1fr));
148
+ gap: var(--ly-grid-gap);
149
+ }
150
+
151
+ :where(.saas-gallery, .bento-gallery, .max-gallery, .bau-gallery, .tactile-gallery, .neo-gallery, .retro-gallery, .brutal-gallery, .cyber-gallery, .y2k-gallery, .rg-gallery) > * {
152
+ min-width: 0;
153
+ }
154
+
155
+ :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) {
156
+ display: grid;
157
+ grid-auto-flow: column;
158
+ grid-auto-columns: minmax(min(100%, var(--ly-carousel-item-min)), var(--ly-carousel-item-max));
159
+ gap: var(--ly-grid-gap);
160
+ overflow-x: auto;
161
+ overscroll-behavior-inline: contain;
162
+ scroll-snap-type: x proximity;
163
+ }
164
+
165
+ :where(.saas-carousel, .bento-carousel, .max-carousel, .bau-carousel, .tactile-carousel, .neo-carousel, .retro-carousel, .brutal-carousel, .cyber-carousel, .y2k-carousel, .rg-carousel) > * {
166
+ min-width: 0;
167
+ scroll-snap-align: start;
168
+ }
169
+
170
170
  @container (min-width: 48rem) {
171
- :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
172
- grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
173
- }
174
- }
175
- }
171
+ :where(.saas-split, .bento-split, .max-split, .bau-split, .tactile-split, .neo-split, .retro-split, .brutal-split, .cyber-split, .y2k-split, .rg-split) {
172
+ grid-template-columns: minmax(0, var(--ly-split-primary, 1fr)) minmax(0, var(--ly-split-secondary, 1fr));
173
+ }
174
+ }
175
+ }
@@ -37,7 +37,7 @@ The smoke suite verifies:
37
37
  - bounded scrolling
38
38
  - accessible mobile controls
39
39
  - layout-only, Layout plus UI, and all-three ecosystem modes
40
- - pinned `ui-style-kit-css@2.0.1` and `interactive-surface-css@1.4.0` fixture behavior
40
+ - pinned `ui-style-kit-css@2.1.0` visual, token bridge, and manifest behavior plus released `interactive-surface-css@1.5.0`
41
41
 
42
42
  The demo query parser uses explicit allowlists and writes generated imports and markup with `textContent`.
43
43
 
@@ -7,7 +7,7 @@ Layout Style CSS 2.0 provides structural layout without prescribing theme or com
7
7
  Node.js 20 or newer is required for development scripts.
8
8
 
9
9
  ```bash
10
- npm install layout-style-css@2.0.0
10
+ npm install layout-style-css@2.1.0
11
11
  ```
12
12
 
13
13
  ## Import
package/docs/wiki/Home.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Layout Style CSS Wiki
2
2
 
3
- Version 2.0.0 is a container-first, dependency-free layout library. It ships semantic wrappers, composition primitives, seven recipes, sixteen layout personalities, focused exports, and a v2-only compatibility bundle.
3
+ Version 2.1.0 is a container-first, dependency-free layout library. It ships semantic wrappers, composition primitives, seven recipes, sixteen layout personalities, focused exports, a v2-only compatibility bundle, and refreshed ecosystem fixtures for UI Style Kit CSS 2.1 and Interactive Surface CSS 1.5.
4
4
 
5
5
  ## Start Here
6
6
 
@@ -22,7 +22,7 @@ Version 2.0.0 is a container-first, dependency-free layout library. It ships sem
22
22
 
23
23
  Layout Style CSS owns spatial behavior: containment, wrappers, flow, grids, areas, spans, sizing, and responsive arrangement. UI Style Kit owns visual paint. Interactive Surface owns interaction-state styling.
24
24
 
25
- The package has no runtime or peer dependencies. `ui-style-kit-css@2.0.1` and `interactive-surface-css@1.4.0` are development fixtures used to prove optional integration.
25
+ The package has no runtime or peer dependencies. `ui-style-kit-css@2.1.0` and `interactive-surface-css@1.5.0` are released registry fixtures used to prove optional integration.
26
26
 
27
27
  ## Supported Baseline
28
28
 
@@ -30,4 +30,4 @@ The package has no runtime or peer dependencies. `ui-style-kit-css@2.0.1` and `i
30
30
  - Current evergreen Chromium, Firefox, and WebKit
31
31
  - Mobile-first DOM order with core thresholds at `48rem` and `64rem`, plus tested personality-specific overrides
32
32
 
33
- The UI Style Kit revision is a documented follow-up, not part of this 2.0 release.
33
+ The deprecated UI structural bridge remains available for existing UI-prefixed layout aliases, but canonical 2.1 examples use UI Style Kit visual CSS, the UI token bridge, Interactive Surface `state-core.css`, and Layout core.
@@ -5,7 +5,7 @@ Layout Style CSS 2.0 is dependency-free and has no peer dependency contract. Nod
5
5
  ## npm
6
6
 
7
7
  ```bash
8
- npm install layout-style-css@2.0.0
8
+ npm install layout-style-css@2.1.0
9
9
  ```
10
10
 
11
11
  ## Focused Exports
@@ -37,32 +37,31 @@ import "layout-style-css";
37
37
  Layout plus UI Style Kit:
38
38
 
39
39
  ```js
40
- import "ui-style-kit-css/with-bridge.css";
41
- import "layout-style-css/integrations/ui-style-kit.css";
40
+ import "ui-style-kit-css/visual.css";
42
41
  import "layout-style-css";
43
42
  ```
44
43
 
45
44
  All three libraries, in required order:
46
45
 
47
46
  ```js
48
- import "ui-style-kit-css/with-bridge.css";
47
+ import "ui-style-kit-css/visual.css";
48
+ import "ui-style-kit-css/interactive-surface-theme.css";
49
49
  import "interactive-surface-css/state-core.css";
50
- import "layout-style-css/integrations/ui-style-kit.css";
51
50
  import "layout-style-css";
52
51
  ```
53
52
 
54
- `ui-style-kit-css@2.0.1` and `interactive-surface-css@1.4.0` are tested integration fixtures, not runtime dependencies. The next UI Style Kit revision is a follow-up release.
53
+ The first import block is deprecated compatibility for legacy UI-prefixed structural aliases. Canonical 2.1 imports use the released `ui-style-kit-css@2.1.0` visual CSS, `ui-style-kit-css/interactive-surface-theme.css`, released `interactive-surface-css@1.5.0` state core, and Layout core.
55
54
 
56
55
  ## CDN
57
56
 
58
57
  Layout only:
59
58
 
60
59
  ```html
61
- <link rel="stylesheet" href="https://unpkg.com/layout-style-css@2.0.0/dist/layout-style-css.min.css">
62
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layout-style-css@2.0.0/dist/layout-style-css.min.css">
60
+ <link rel="stylesheet" href="https://unpkg.com/layout-style-css@2.1.0/dist/layout-style-css.min.css">
61
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/layout-style-css@2.1.0/dist/layout-style-css.min.css">
63
62
  ```
64
63
 
65
- For optional companions, preserve the same order as the package imports: UI Style Kit bridge, Interactive Surface 1.4.0 `state-core.css`, Layout integration bridge, then Layout core.
64
+ For optional companions, preserve the same order as the package imports: UI Style Kit visual CSS, UI Style Kit `interactive-surface-theme.css`, Interactive Surface 1.5.0 `state-core.css`, then Layout core. Load `layout-style-css/integrations/ui-style-kit.css` only for deprecated structural aliases.
66
65
 
67
66
  ## Browser Baseline
68
67
 
@@ -6,18 +6,18 @@ Version 2.0 rebuilds Layout Style CSS as a container-first, dependency-free stru
6
6
 
7
7
  - Development and release scripts require Node.js 20 or newer.
8
8
  - The package has no runtime dependencies and no peer dependencies.
9
- - `ui-style-kit-css@2.0.1` and `interactive-surface-css@1.4.0` are exact development and integration fixtures, not consumer dependencies.
9
+ - `ui-style-kit-css@2.1.0` and `interactive-surface-css@1.5.0` are released registry fixtures; neither is a consumer dependency.
10
10
  - Current evergreen Chromium, Firefox, and WebKit are supported.
11
11
  - Responsive recipes use core thresholds at `48rem` and `64rem`; personalities may add personality-specific thresholds.
12
12
 
13
13
  Install companions explicitly only when the application uses them:
14
14
 
15
15
  ```bash
16
- npm install layout-style-css@2.0.0
17
- npm install ui-style-kit-css@2.0.1 interactive-surface-css@1.4.0
16
+ npm install layout-style-css@2.1.0
17
+ npm install ui-style-kit-css@2.1.0 interactive-surface-css@1.5.0
18
18
  ```
19
19
 
20
- The upcoming UI Style Kit revision is a separate follow-up, not part of the Layout Style CSS 2.0 release.
20
+ Layout Style CSS 2.1 keeps the v2 layout contract and updates the optional companion fixture path to UI Style Kit visual CSS, its Interactive Surface token bridge, and Interactive Surface 1.5 state core.
21
21
 
22
22
  ## Export Changes
23
23
 
@@ -60,7 +60,7 @@ import "layout-style-css";
60
60
  Layout plus UI Style Kit:
61
61
 
62
62
  ```js
63
- import "ui-style-kit-css/with-bridge.css";
63
+ import "ui-style-kit-css/visual.css";
64
64
  import "layout-style-css/integrations/ui-style-kit.css";
65
65
  import "layout-style-css";
66
66
  ```
@@ -68,9 +68,9 @@ import "layout-style-css";
68
68
  All three libraries must be imported in this exact order:
69
69
 
70
70
  ```js
71
- import "ui-style-kit-css/with-bridge.css";
71
+ import "ui-style-kit-css/visual.css";
72
+ import "ui-style-kit-css/interactive-surface-theme.css";
72
73
  import "interactive-surface-css/state-core.css";
73
- import "layout-style-css/integrations/ui-style-kit.css";
74
74
  import "layout-style-css";
75
75
  ```
76
76
 
@@ -1,12 +1,12 @@
1
1
  # Release And Publishing
2
2
 
3
- This checklist prepares `layout-style-css@2.0.0`. Publishing, tagging, pushing, and creating a GitHub release require separate explicit approval.
3
+ This checklist prepares `layout-style-css@2.1.0`. Publishing, tagging, pushing, and creating a GitHub release require separate explicit approval.
4
4
 
5
5
  ## Version Contract
6
6
 
7
- - `package.json` and `package-lock.json` identify `2.0.0`.
7
+ - `package.json` and `package-lock.json` identify `2.1.0`.
8
8
  - Node.js 20 and 22 pass standalone CI.
9
- - `CHANGELOG.md` contains the dated breaking-release entry.
9
+ - `CHANGELOG.md` contains the dated 2.1.0 release entry.
10
10
  - README, migration guide, wiki, demo, exports, and tarball describe the same v2 API.
11
11
  - No peer or runtime dependencies are present.
12
12
 
@@ -35,24 +35,26 @@ git diff --check
35
35
 
36
36
  `release:verify` runs build, lint, JavaScript syntax, static contracts, the Pages artifact, Chromium, Firefox, WebKit, the intentional tarball listing, `npm audit --audit-level=moderate`, and an npm publish dry run. It does not publish.
37
37
 
38
+ `prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the full release verification gate.
39
+
38
40
  ## Tag And Version Validation
39
41
 
40
- The publish workflow checks out the selected tag and fails unless it equals `v${package.version}`. For this release the only valid tag is `v2.0.0`.
42
+ The publish workflow checks out the selected tag and fails unless it equals `v${package.version}`. For this release the only valid tag is `v2.1.0`.
41
43
 
42
44
  After separate approval, an operator may check registry availability:
43
45
 
44
46
  ```bash
45
- npm view layout-style-css@2.0.0 version --json
47
+ npm view layout-style-css@2.1.0 version --json
46
48
  ```
47
49
 
48
50
  The eventual release sequence is:
49
51
 
50
52
  ```bash
51
- git tag v2.0.0
52
- git push origin v2.0.0
53
+ git tag v2.1.0
54
+ git push origin v2.1.0
53
55
  ```
54
56
 
55
- Publishing the `v2.0.0` GitHub release triggers the npm workflow. A separately approved recovery run may use `release_tag` set to `v2.0.0`.
57
+ Publishing the `v2.1.0` GitHub release triggers the npm workflow. A separately approved recovery run may use `release_tag` set to `v2.1.0`.
56
58
 
57
59
  ## Workflow Safety
58
60
 
@@ -1,6 +1,6 @@
1
1
  # UI Style Kit Compatibility
2
2
 
3
- Layout Style CSS is dependency-free. `ui-style-kit-css@2.0.1` is an exact development fixture used to verify the optional bridge; it is not a runtime or peer dependency. The UI Style Kit revision is a follow-up, not part of this release.
3
+ Layout Style CSS is dependency-free. `ui-style-kit-css@2.1.0` is the released visual fixture for 2.1 ecosystem verification and is not a runtime or peer dependency.
4
4
 
5
5
  ## Ownership Boundary
6
6
 
@@ -15,21 +15,20 @@ Layout Style CSS is dependency-free. `ui-style-kit-css@2.0.1` is an exact develo
15
15
  Layout plus UI:
16
16
 
17
17
  ```js
18
- import "ui-style-kit-css/with-bridge.css";
19
- import "layout-style-css/integrations/ui-style-kit.css";
18
+ import "ui-style-kit-css/visual.css";
20
19
  import "layout-style-css";
21
20
  ```
22
21
 
23
22
  All three libraries:
24
23
 
25
24
  ```js
26
- import "ui-style-kit-css/with-bridge.css";
25
+ import "ui-style-kit-css/visual.css";
26
+ import "ui-style-kit-css/interactive-surface-theme.css";
27
27
  import "interactive-surface-css/state-core.css";
28
- import "layout-style-css/integrations/ui-style-kit.css";
29
28
  import "layout-style-css";
30
29
  ```
31
30
 
32
- The Layout integration bridge contains structural mappings but no package imports. The removed `all-with-ui-kit*` aggregates have no v2 replacement because dependency ownership stays with the application.
31
+ The Layout integration bridge contains structural mappings but no package imports. It remains available as deprecated compatibility for legacy UI-prefixed structural aliases. The removed `all-with-ui-kit*` aggregates have no v2 replacement because dependency ownership stays with the application.
33
32
 
34
33
  ## Structural Aliases
35
34
 
@@ -43,8 +42,8 @@ The removed v1 `.ly-surface--raised` selector is not restored by `legacy.css`; i
43
42
 
44
43
  | Library | Verified fixture | Consumer requirement |
45
44
  | --- | --- | --- |
46
- | Layout Style CSS | `2.0.0` | Required for this API |
47
- | UI Style Kit CSS | `2.0.1` | Optional |
48
- | Interactive Surface CSS | `1.4.0` `state-core.css` | Optional |
45
+ | Layout Style CSS | `2.1.0` | Required for this API |
46
+ | UI Style Kit CSS | `2.1.0` visual CSS and manifest | Optional released fixture |
47
+ | Interactive Surface CSS | `1.5.0` `state-core.css` | Optional released fixture |
49
48
 
50
49
  Current evergreen Chromium, Firefox, and WebKit are covered by the release gate.