layout-style-css 2.1.1 → 3.0.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.
Files changed (81) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +127 -143
  3. package/dist/core.css +2 -1
  4. package/dist/foundation.css +194 -0
  5. package/dist/layout-style-css.css +527 -984
  6. package/dist/layout-style-css.min.css +1 -1
  7. package/dist/personalities/bauhaus.css +13 -42
  8. package/dist/personalities/bento.css +16 -40
  9. package/dist/personalities/brutalism.css +13 -33
  10. package/dist/personalities/cyberpunk.css +12 -32
  11. package/dist/personalities/f-pattern.css +16 -45
  12. package/dist/personalities/maximalist.css +16 -48
  13. package/dist/personalities/minimal-saas.css +7 -33
  14. package/dist/personalities/mondrian.css +12 -40
  15. package/dist/personalities/neumorphism.css +15 -39
  16. package/dist/personalities/retro-glass.css +14 -42
  17. package/dist/personalities/retrofuturism.css +12 -32
  18. package/dist/personalities/split-screen.css +24 -36
  19. package/dist/personalities/synthwave.css +13 -41
  20. package/dist/personalities/tactile.css +15 -32
  21. package/dist/personalities/y2k.css +13 -33
  22. package/dist/personalities/z-pattern.css +16 -46
  23. package/dist/personalities.css +1 -1
  24. package/dist/primitives.css +27 -63
  25. package/dist/recipes.css +92 -175
  26. package/dist/utilities.css +39 -104
  27. package/dist/wrappers.css +28 -108
  28. package/docs/wiki/Contributing.md +3 -1
  29. package/docs/wiki/Demo-And-GitHub-Pages.md +24 -33
  30. package/docs/wiki/Getting-Started.md +39 -27
  31. package/docs/wiki/Home.md +21 -27
  32. package/docs/wiki/Installation-And-CDN.md +47 -42
  33. package/docs/wiki/Layout-Primitives.md +48 -34
  34. package/docs/wiki/Layout-Recipes.md +42 -33
  35. package/docs/wiki/Layout-Styles.md +60 -26
  36. package/docs/wiki/Migrating-To-3.0.md +205 -0
  37. package/docs/wiki/Release-And-Publishing.md +36 -51
  38. package/docs/wiki/Security-And-Support.md +18 -22
  39. package/docs/wiki/UI-Style-Kit-Compatibility.md +21 -30
  40. package/docs/wiki/_Sidebar.md +12 -15
  41. package/manifest.json +98 -0
  42. package/package.json +33 -28
  43. package/personalities.json +147 -0
  44. package/CONTRIBUTING.md +0 -55
  45. package/SECURITY.md +0 -50
  46. package/demo/assets/apple-touch-icon.svg +0 -7
  47. package/demo/assets/favicon.svg +0 -7
  48. package/demo/assets/social-card.png +0 -0
  49. package/demo/browserconfig.xml +0 -9
  50. package/demo/demo.css +0 -523
  51. package/demo/demo.js +0 -605
  52. package/demo/index.html +0 -325
  53. package/demo/robots.txt +0 -4
  54. package/demo/site.webmanifest +0 -23
  55. package/demo/sitemap.xml +0 -9
  56. package/dist/integrations/ui-style-kit.css +0 -175
  57. package/dist/legacy.css +0 -822
  58. package/styles/core.css +0 -6
  59. package/styles/integrations/ui-style-kit.css +0 -175
  60. package/styles/legacy.css +0 -173
  61. package/styles/personalities/bauhaus.css +0 -49
  62. package/styles/personalities/bento.css +0 -46
  63. package/styles/personalities/brutalism.css +0 -39
  64. package/styles/personalities/cyberpunk.css +0 -39
  65. package/styles/personalities/f-pattern.css +0 -51
  66. package/styles/personalities/maximalist.css +0 -54
  67. package/styles/personalities/minimal-saas.css +0 -39
  68. package/styles/personalities/mondrian.css +0 -47
  69. package/styles/personalities/neumorphism.css +0 -46
  70. package/styles/personalities/retro-glass.css +0 -47
  71. package/styles/personalities/retrofuturism.css +0 -39
  72. package/styles/personalities/split-screen.css +0 -41
  73. package/styles/personalities/synthwave.css +0 -48
  74. package/styles/personalities/tactile.css +0 -39
  75. package/styles/personalities/y2k.css +0 -39
  76. package/styles/personalities/z-pattern.css +0 -52
  77. package/styles/personalities.css +0 -18
  78. package/styles/primitives.css +0 -219
  79. package/styles/recipes.css +0 -278
  80. package/styles/utilities.css +0 -162
  81. package/styles/wrappers.css +0 -174
@@ -1,49 +1,58 @@
1
1
  # Layout Recipes
2
2
 
3
- Recipes are inline-size containers with an authoritative single-column mobile fallback. At the `48rem` and `64rem` core thresholds, named grid areas rearrange without changing DOM, reading, or focus order. Layout personalities can layer personality-specific thresholds over those core recipes.
3
+ Recipes are attribute-only semantic layouts. The mobile DOM order is authoritative, and automatic container enhancement is the zero-configuration default.
4
4
 
5
- ## Public Hooks
5
+ ## Automatic Thresholds
6
6
 
7
- Use `data-ly-recipe` with one of:
7
+ | Recipe | Nearest `ly-scope` threshold |
8
+ | --- | --- |
9
+ | `data-ly-recipe="split-hero"` | `42rem` |
10
+ | `data-ly-recipe="list-detail"` | `44rem` |
11
+ | `data-ly-recipe="docs"` | `48rem` |
12
+ | `data-ly-recipe="app-shell"` | medium `52rem`, wide `72rem` |
13
+ | `data-ly-recipe="dashboard"` | medium `52rem`, wide `72rem` |
14
+ | `data-ly-recipe="gallery"` | intrinsic; no topology query |
15
+ | `data-ly-recipe="card-grid"` | intrinsic; no topology query |
8
16
 
9
- - `app-shell`
10
- - `dashboard`
11
- - `docs`
12
- - `list-detail`
13
- - `split-hero`
14
- - `gallery`
15
- - `card-grid`
17
+ Recipe roots also establish `ly-scope`, so child compositions can respond without extra setup.
16
18
 
17
- The attribute is the complete recipe API, not metadata for a class. A root with only `data-ly-recipe="docs"` receives the same mobile fallback, containment, named areas, and responsive geometry as `.ly-docs`; the class form remains available as an equivalent option.
19
+ ## Areas
18
20
 
19
- Use `data-ly-area` with `header`, `nav`, `main`, `aside`, `footer`, `content`, `media`, `actions`, `primary`, or `secondary`.
21
+ Canonical `data-ly-area` values are:
20
22
 
21
- ## Application Recipe
23
+ - App shell: `header`, `sidebar`, `main`, `aside`, `footer`
24
+ - Dashboard and Docs: `header`, `nav`, `main`, `aside`, `footer`
25
+ - List detail: `primary`, `secondary`, `actions`
26
+ - Split hero: `content`, `media`, `actions`
22
27
 
23
28
  ```html
24
- <div class="ly-wrapper ly-wrapper--wide">
25
- <section class="ly-app-shell" data-ly-recipe="app-shell">
26
- <header data-ly-area="header">Toolbar</header>
27
- <nav data-ly-area="nav" aria-label="Application">Navigation</nav>
28
- <main data-ly-area="main">Workspace</main>
29
- <aside data-ly-area="aside">Inspector</aside>
30
- <footer data-ly-area="footer">Status</footer>
31
- </section>
32
- </div>
29
+ <section data-ly-recipe="docs">
30
+ <header data-ly-area="header">Docs</header>
31
+ <nav data-ly-area="nav" aria-label="Documentation">Navigation</nav>
32
+ <main data-ly-area="main">Article</main>
33
+ <aside data-ly-area="aside">On this page</aside>
34
+ <footer data-ly-area="footer">Next</footer>
35
+ </section>
33
36
  ```
34
37
 
35
- Place regions in the order that makes sense on a narrow screen. The recipe uses named areas for wide-container placement and never uses CSS `order`.
36
-
37
- ## Content And Media Recipes
38
+ ## Manual Responsiveness
38
39
 
39
- `docs` creates a documentation shell. At `64rem`, its navigation spans the left column while `header`, `main`, `aside`, and `footer` remain in source order and stack in the right column; Dashboard retains its three-column wide shell. `list-detail` arranges primary, secondary, and action regions. `split-hero` arranges content, media, and actions. `gallery` and `card-grid` create responsive repeated-item grids.
40
+ `data-ly-responsive="manual"` disables automatic topology rules while retaining the stacked fallback.
40
41
 
41
- ```html
42
- <section class="ly-split-hero" data-ly-recipe="split-hero">
43
- <div data-ly-area="content">Primary message</div>
44
- <figure data-ly-area="media">Media</figure>
45
- <div data-ly-area="actions">Actions</div>
46
- </section>
42
+ ```css
43
+ @container ly-scope (min-width: 56rem) {
44
+ [data-ly-recipe="docs"][data-ly-responsive="manual"] {
45
+ /* Application-owned topology. */
46
+ }
47
+ }
47
48
  ```
48
49
 
49
- Built-in recipes never use an order utility. If application-specific visual order is unavoidable, review the warning in [Layout Primitives](Layout-Primitives.md) and test keyboard and assistive-technology behavior.
50
+ Use the nearest wrapper as the query boundary when a component needs a constrained local allocation. Use a recipe directly in `.ly-root` when no measure wrapper is needed.
51
+
52
+ ## Accessibility
53
+
54
+ Write the source in mobile reading order and keep actions beside the content they control. Named grid areas can change visual placement, but they do not alter DOM, reading, keyboard, or focus order. Visual-order utilities are not part of v3.
55
+
56
+ ## Vertical Responsiveness
57
+
58
+ Recipe gaps and scroll bounds tighten at `44rem` viewport height. At `30rem`, recipe-owned sticky positioning and forced shell height stop so navigation, main content, and actions remain reachable.
@@ -1,33 +1,67 @@
1
1
  # Layout Styles
2
2
 
3
- V2 calls spatial styles “personalities” and selects them with the canonical `data-ly-layout` hook on `.ly-root`.
3
+ The sixteen `data-ly-layout` values are focused token and topology profiles:
4
+
5
+ `minimal-saas`, `bauhaus`, `tactile`, `cyberpunk`, `f-pattern`, `brutalism`, `neumorphism`, `y2k`, `retro-glass`, `z-pattern`, `retrofuturism`, `mondrian`, `synthwave`, `bento`, `maximalist`, and `split-screen`.
4
6
 
5
7
  ```html
6
- <body class="ly-root" data-ly-layout="synthwave">...</body>
8
+ <body class="ly-root" data-ly-layout="bento">
9
+ <main data-ly-recipe="dashboard">...</main>
10
+ </body>
7
11
  ```
8
12
 
9
- ## Sixteen Personalities
10
-
11
- | Family | Personality | Spatial character |
12
- | --- | --- | --- |
13
- | Left rail | `minimal-saas` | Restrained application rail and measured workspace. |
14
- | Left rail | `bauhaus` | Modular columns and assertive structural rhythm. |
15
- | Left rail | `tactile` | Heavier instrument rail and chunky spacing. |
16
- | Left rail | `cyberpunk` | Narrow command rail and dense track rhythm. |
17
- | Left rail | `f-pattern` | Top-and-left scan emphasis. |
18
- | Right rail | `brutalism` | Raw workspace with a strong right support rail. |
19
- | Right rail | `neumorphism` | Roomy central workspace and detached right rail. |
20
- | Right rail | `y2k` | Centered hub with a dock-like support region. |
21
- | Right rail | `retro-glass` | Broad stage with a floating right utility zone. |
22
- | Right rail | `z-pattern` | Diagonal reading path into a right support rail. |
23
- | Three zone | `retrofuturism` | Panoramic bridge with symmetric support zones. |
24
- | Three zone | `mondrian` | Asymmetric block composition. |
25
- | Three zone | `synthwave` | Cinematic center stage with flanking zones. |
26
- | Mosaic | `bento` | Full-width modular tile rhythm. |
27
- | Mosaic | `maximalist` | Staggered editorial spans and broad measure. |
28
- | Equal split | `split-screen` | Two equally weighted primary regions. |
29
-
30
- Every personality changes at least two structural characteristics, such as area placement, shell direction, grid/span rhythm, wrapper measure, or responsive threshold. Enhancements query the nearest inline-size container: grid rhythms retain their authored thresholds, safe two-track application shells retain their authored thresholds, and three- or four-track application shells wait until the local allocation reaches `64rem`. Personalities never set UI paint or change DOM order.
31
-
32
- The v1 `data-layout`, `layout-style`, `.ly-layout-*`, and `.ly-style-*` hooks are available only through `layout-style-css/legacy.css`. New code must use `data-ly-layout`.
13
+ ## Shared Engine
14
+
15
+ Every profile feeds the same wrapper, primitive, and recipe engine. Profiles tune values such as:
16
+
17
+ - wrapper measure
18
+ - base and grid gaps
19
+ - rail, pane, and media preferences
20
+ - gallery and card minimums
21
+ - frame ratio
22
+ - shared recipe area and track templates
23
+
24
+ A profile must remain visibly distinct through at least two spatial characteristics. Personality files may not declare their own `@container`, viewport, or orientation breakpoint systems.
25
+
26
+ ## Ownership
27
+
28
+ Layout owns structure. UI Style Kit owns paint. Interactive Surface owns interaction styling.
29
+
30
+ The personality name does not promise colors, typography, borders, shadows, or interaction states. Pair the same name across libraries when desired, but import each library explicitly and let it own its layer.
31
+
32
+ ## Visual Pairing Guidance
33
+
34
+ [`layout-style-css/personalities.json`](../../personalities.json) is the public, machine-readable pairing source used by the demo. Its entries are recommendations, never dependencies: `data-ly-layout`, `data-ui`, `data-theme`, and `data-mode` are independently selectable on the same document.
35
+
36
+ | Layout personality | Visual pairing guidance |
37
+ | --- | --- |
38
+ | Minimal SaaS | Native match: `minimal-saas` |
39
+ | Bento | Native match: `bento` |
40
+ | Maximalist | Native match: `maximalist` |
41
+ | Bauhaus | Native match: `bauhaus` |
42
+ | Tactile | Native match: `tactile` |
43
+ | Neumorphism | Native match: `neumorphism` |
44
+ | Retrofuturism | Native match: `retrofuturism` |
45
+ | Brutalism | Native match: `brutalism` |
46
+ | Cyberpunk | Native match: `cyberpunk` |
47
+ | Y2K | Native match: `y2k` |
48
+ | Retro Glass | Native match: `retro-glass` |
49
+ | F-pattern | Any visual preset; this is structure only |
50
+ | Z-pattern | Any visual preset; this is structure only |
51
+ | Split Screen | Any visual preset; this is structure only |
52
+ | Mondrian | Any visual preset; this is structure only |
53
+ | Synthwave | Recommended: `cyberpunk` or `retrofuturism`; the browser contract verifies each preset's distinct rendered article shadow while retaining `data-ly-layout="synthwave"` |
54
+
55
+ ## Customization
56
+
57
+ Override public tokens at `.ly-root` or a narrower scope:
58
+
59
+ ```css
60
+ .product-shell {
61
+ --ly-profile-gap: 1.25rem;
62
+ --ly-recipe-rail: 17rem;
63
+ --ly-card-grid-min: 18rem;
64
+ }
65
+ ```
33
66
 
67
+ Use `data-ly-responsive="manual"` plus an application-owned `@container ly-scope` query when token tuning is not enough.
@@ -0,0 +1,205 @@
1
+ # Migrating To 3.0
2
+
3
+ `layout-style-css@3.0.0` is an intentional clean break from v2. There is no compatibility bundle. Migrate markup and imports before upgrading the package.
4
+
5
+ ## Package Imports
6
+
7
+ | Removed v2 surface | v3 replacement |
8
+ | --- | --- |
9
+ | `layout-style-css/legacy.css` | Canonical v3 hooks; `legacy.css` is not shipped |
10
+ | `layout-style-css/integrations/ui-style-kit.css` | Import UI Style Kit paint explicitly; `integrations/ui-style-kit.css` is not shipped |
11
+ | `layout-style-css/bridge.css` | Removed; compose UI Style Kit paint explicitly because `bridge.css` is not shipped |
12
+ | `layout-style-css/css` (`./css`) | `layout-style-css` |
13
+ | `layout-style-css/css.css` (`./css.css`) | `layout-style-css` |
14
+ | `layout-style-css/min` (`./min`) | `layout-style-css/min.css` |
15
+
16
+ Focused exports remain available for `foundation.css`, `wrappers.css`, `primitives.css`, `recipes.css`, `utilities.css`, `personalities.css`, and `personalities/*.css`.
17
+
18
+ ## Recipe Hooks
19
+
20
+ Recipe classes were aliases in v2 and are removed in v3. Replace them with the canonical attribute:
21
+
22
+ | Removed class | Canonical v3 hook |
23
+ | --- | --- |
24
+ | `.ly-app-shell` | `data-ly-recipe="app-shell"` |
25
+ | `.ly-dashboard` | `data-ly-recipe="dashboard"` |
26
+ | `.ly-docs` | `data-ly-recipe="docs"` |
27
+ | `.ly-list-detail` | `data-ly-recipe="list-detail"` |
28
+ | `.ly-split-hero` | `data-ly-recipe="split-hero"` |
29
+ | `.ly-gallery` | `data-ly-recipe="gallery"` |
30
+ | `.ly-card-grid` | `data-ly-recipe="card-grid"` |
31
+
32
+ Before:
33
+
34
+ ```html
35
+ <section class="ly-dashboard" data-ly-recipe="dashboard">...</section>
36
+ ```
37
+
38
+ After:
39
+
40
+ ```html
41
+ <section data-ly-recipe="dashboard">...</section>
42
+ ```
43
+
44
+ Keep canonical `data-ly-area` values on regions. App shell uses `sidebar`; Dashboard and Docs use `nav`.
45
+
46
+ ## Automatic And Manual Responsiveness
47
+
48
+ Missing `data-ly-responsive` means automatic enhancement. To own topology yourself, opt out:
49
+
50
+ ```html
51
+ <section data-ly-recipe="docs" data-ly-responsive="manual">...</section>
52
+ ```
53
+
54
+ ```css
55
+ @container ly-scope (min-width: 56rem) {
56
+ [data-ly-recipe="docs"][data-ly-responsive="manual"] {
57
+ /* Application-owned topology. */
58
+ }
59
+ }
60
+ ```
61
+
62
+ The manual form retains the safe single-column fallback until the application query applies.
63
+
64
+ ## Containers And Wrappers
65
+
66
+ `.ly-root`, every `.ly-wrapper`, and every recipe root now establishes the named `ly-scope` inline-size container. Recipes can be direct children of `.ly-root`; nested recipes respond to the nearest wrapper.
67
+
68
+ The v3 wrapper names remain:
69
+
70
+ - `.ly-wrapper--compact`
71
+ - `.ly-wrapper--prose`
72
+ - `.ly-wrapper--content`
73
+ - `.ly-wrapper--wide`
74
+ - `.ly-wrapper--full`
75
+ - `.ly-wrapper--breakout`
76
+
77
+ Breakout lanes remain `data-ly-lane="content"`, `data-ly-lane="feature"`, and `data-ly-lane="full"`.
78
+
79
+ ## Utilities And Source Order
80
+
81
+ Remove all v2 responsive utility families:
82
+
83
+ - `ly-md-*`
84
+ - `ly-lg-*`
85
+
86
+ Remove all visual-order utilities, including `.ly-order-first`, `.ly-order-normal`, `.ly-order-last`, and numbered order classes. There is no v3 replacement.
87
+
88
+ Fix the DOM instead. The mobile DOM order is the reading and keyboard order; named grid areas enhance presentation without moving focus. Built-in recipes never use Flexbox or Grid ordering.
89
+
90
+ The v3 utility module keeps only stable structural sizing, gap, padding, ratio, alignment, overflow, visibility, span, and column helpers.
91
+
92
+ Remove `.ly-bleed`. Its `100vw` technique could overflow documents with classic scrollbars. Use the clamped `data-ly-lane="feature"` or `data-ly-lane="full"` breakout lanes, or an application-owned technique that accounts for its actual containing block.
93
+
94
+ ## Complete V2 Selector Index
95
+
96
+ This index compares the `2.1.1` default bundle with v3. Selectors not named below remain available with their canonical v3 meaning.
97
+
98
+ ### Structural Aliases
99
+
100
+ Replace application-shell region classes with canonical areas:
101
+
102
+ | Removed classes | v3 replacement |
103
+ | --- | --- |
104
+ | `.ly-app-header`, `.ly-app-sidebar`, `.ly-app-main`, `.ly-app-aside`, `.ly-app-footer` | `data-ly-area="header"`, `data-ly-area="sidebar"`, `data-ly-area="main"`, `data-ly-area="aside"`, `data-ly-area="footer"` |
105
+
106
+ Replace every removed area class with its same-named attribute:
107
+
108
+ - `.ly-area--header` → `data-ly-area="header"`
109
+ - `.ly-area--nav` → `data-ly-area="nav"`
110
+ - `.ly-area--main` → `data-ly-area="main"`
111
+ - `.ly-area--aside` → `data-ly-area="aside"`
112
+ - `.ly-area--footer` → `data-ly-area="footer"`
113
+ - `.ly-area--content` → `data-ly-area="content"`
114
+ - `.ly-area--media` → `data-ly-area="media"`
115
+ - `.ly-area--actions` → `data-ly-area="actions"`
116
+ - `.ly-area--primary` → `data-ly-area="primary"`
117
+ - `.ly-area--secondary` → `data-ly-area="secondary"`
118
+
119
+ `.ly-grid--auto` becomes `.ly-grid`; intrinsic `auto-fit` tracks are now the default. Replace `.ly-panes--2` and `.ly-panes--3` with `.ly-panes`, then tune `--ly-pane-min`, `--ly-pane-size`, or application CSS if an exact fixed topology is required.
120
+
121
+ The removed `.ly-media__asset` and `.ly-media__content` aliases become correctly ordered children of `.ly-media`. Keep `.ly-media__actions` when its existing action sizing is useful; use application-owned hooks if asset and content children need additional semantics.
122
+
123
+ ### Columns And Spans
124
+
125
+ The stable column utilities retained by v3 are `.ly-cols-1`, `.ly-cols-2`, `.ly-cols-3`, `.ly-cols-4`, `.ly-cols-6`, and `.ly-cols-12`. Replace the removed `.ly-cols-5`, `.ly-cols-7`, `.ly-cols-8`, `.ly-cols-9`, `.ly-cols-10`, `.ly-cols-11`, and `.ly-cols-16` with a local `--ly-grid-columns` override:
126
+
127
+ ```css
128
+ .application-grid {
129
+ --ly-grid-columns: 8;
130
+ }
131
+ ```
132
+
133
+ All responsive column aliases are removed:
134
+
135
+ - `.ly-md-cols-1`, `.ly-md-cols-2`, `.ly-md-cols-3`, `.ly-md-cols-4`, `.ly-md-cols-6`, `.ly-md-cols-8`, `.ly-md-cols-12`, `.ly-md-cols-16`
136
+ - `.ly-lg-cols-1`, `.ly-lg-cols-2`, `.ly-lg-cols-3`, `.ly-lg-cols-4`, `.ly-lg-cols-6`, `.ly-lg-cols-8`, `.ly-lg-cols-12`, `.ly-lg-cols-16`
137
+
138
+ Put a retained base utility or `--ly-grid-columns` override inside an application-owned `@container ly-scope` query when a fixed responsive column count is genuinely required.
139
+
140
+ V3 retains `.ly-span-1` through `.ly-span-4` and `.ly-span-full`. Replace `.ly-span-5`, `.ly-span-6`, `.ly-span-7`, `.ly-span-8`, `.ly-span-9`, `.ly-span-10`, `.ly-span-11`, `.ly-span-12`, `.ly-span-13`, `.ly-span-14`, `.ly-span-15`, and `.ly-span-16` with application CSS such as `grid-column: span 8`.
141
+
142
+ ### Spacing And Ratio Utilities
143
+
144
+ V3 keeps the even spacing steps. Replace `.ly-gap-1`, `.ly-gap-3`, `.ly-gap-5`, `.ly-gap-7`, and `.ly-gap-9` with the closest retained utility or set `--ly-gap`, `--ly-grid-gap`, `--ly-stack-gap`, and `--ly-cluster-gap` together in application CSS.
145
+
146
+ Replace `.ly-pad-1`, `.ly-pad-3`, `.ly-pad-5`, `.ly-pad-7`, and `.ly-pad-9` with a retained even padding step or application padding. The directional `.ly-px-4`, `.ly-px-6`, `.ly-px-8`, `.ly-py-4`, `.ly-py-6`, and `.ly-py-8` aliases have no v3 utility; use logical `padding-inline` or `padding-block`.
147
+
148
+ Replace `.ly-frame-2x1` with an application token override:
149
+
150
+ ```css
151
+ .application-frame {
152
+ --ly-frame-ratio: 2 / 1;
153
+ }
154
+ ```
155
+
156
+ ### Responsive Visibility And Visual Order
157
+
158
+ `.ly-show-md-up` and `.ly-show-lg-up` are removed. Prefer content that remains available at every allocation; if conditional rendering is a product requirement, own it in application CSS and preserve an accessible reading experience.
159
+
160
+ All visual-order selectors are removed with no v3 replacement:
161
+
162
+ - `.ly-order-first`, `.ly-order-normal`, `.ly-order-last`, `.ly-order-1`, `.ly-order-2`, `.ly-order-3`, `.ly-order-4`, `.ly-order-5`, `.ly-order-6`
163
+ - `.ly-md-order-first`, `.ly-md-order-normal`, `.ly-md-order-last`, `.ly-md-order-1`, `.ly-md-order-2`, `.ly-md-order-3`, `.ly-md-order-4`, `.ly-md-order-5`, `.ly-md-order-6`
164
+ - `.ly-lg-order-first`, `.ly-lg-order-normal`, `.ly-lg-order-last`, `.ly-lg-order-1`, `.ly-lg-order-2`, `.ly-lg-order-3`, `.ly-lg-order-4`, `.ly-lg-order-5`, `.ly-lg-order-6`
165
+
166
+ ## Vertical Responsiveness
167
+
168
+ v3 adds height-aware defaults:
169
+
170
+ - At `44rem` high or less, spacing, header height, and scroll bounds tighten.
171
+ - At `30rem` high or less, recipe-owned sticky positioning and forced cover/shell heights are removed.
172
+ - `100vh` fallbacks are followed by `100dvh`.
173
+
174
+ Delete application orientation workarounds that existed only to make v2 shells usable in short landscape, then test actual available width and height.
175
+
176
+ ## Personalities
177
+
178
+ All sixteen `data-ly-layout` values remain. Personality files are now token/topology profiles consumed by one shared responsive engine. They do not own independent `@container` or viewport breakpoint systems.
179
+
180
+ If application CSS targeted personality-specific topology thresholds, move that topology to a manual recipe query against `ly-scope`.
181
+
182
+ ## Ecosystem Ownership
183
+
184
+ Layout owns structure. UI Style Kit owns paint. Interactive Surface owns interaction styling.
185
+
186
+ ```js
187
+ import "ui-style-kit-css/visual.css";
188
+ import "ui-style-kit-css/interactive-surface-theme.css";
189
+ import "interactive-surface-css/state-core.css";
190
+ import "layout-style-css";
191
+ ```
192
+
193
+ Do not recreate the removed structural bridge with UI-prefixed aliases. Put canonical Layout hooks in markup and let companion libraries style their own responsibilities.
194
+
195
+ ## Migration Checklist
196
+
197
+ 1. Replace removed package exports.
198
+ 2. Remove recipe class aliases.
199
+ 3. Remove responsive and order utilities.
200
+ 4. Confirm the mobile DOM, reading, keyboard, and focus order.
201
+ 5. Use automatic recipes by default.
202
+ 6. Add `data-ly-responsive="manual"` only where application topology is genuinely required.
203
+ 7. Test all recipes directly in `.ly-root` and inside their nearest wrapper.
204
+ 8. Test narrow, wide, tall, and short-landscape allocations.
205
+ 9. Run `npm run test:full` in Chromium, Firefox, and WebKit.
@@ -1,77 +1,62 @@
1
1
  # Release And Publishing
2
2
 
3
- This checklist prepares `layout-style-css@2.1.1`. Publishing, tagging, pushing, and creating a GitHub release require separate explicit approval.
3
+ This guide describes the release gate for `layout-style-css@3.0.1`. Running verification does not publish, tag, push, create a GitHub Release, or change the npm registry.
4
4
 
5
- ## Version Contract
6
-
7
- - `package.json` and `package-lock.json` identify `2.1.1`.
8
- - Node.js 20 and 22 pass standalone CI.
9
- - `CHANGELOG.md` contains the dated 2.1.1 release entry.
10
- - README, migration guide, wiki, demo, exports, and tarball describe the same v2 API.
11
- - No peer or runtime dependencies are present.
12
-
13
- ## Local Verification
14
-
15
- Install all Playwright engines once:
16
-
17
- ```bash
18
- npx playwright install chromium firefox webkit
19
- ```
20
-
21
- Then run:
5
+ ## Local Candidate Gate
22
6
 
23
7
  ```bash
8
+ npm ci
24
9
  npm run build
25
10
  npm run lint
26
- npm run check:demo-js
27
- npm run test:static
28
- npm run test:demo:quick
29
- npm run test:demo:all
30
- npm run test:pages
31
- npm run pack:dry-run
11
+ npm run test:full
32
12
  npm run release:verify
33
13
  git diff --check
34
14
  ```
35
15
 
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
-
38
- `prepublishOnly` runs `npm run release:verify`, so a direct `npm publish` still has the full release verification gate.
16
+ `npm run release:verify` includes `npm audit --audit-level=moderate`, the cross-engine browser matrix, Pages verification, tarball dry-run, publish dry-run, and `npm run release:preflight`. It does not publish.
39
17
 
40
- ## Tag And Version Validation
18
+ The read-only ecosystem preflight uses the immutable UI fixture in `ecosystem-release-fixture.json`, overrides Layout Style with the candidate tarball, queries npm for every exact documented minimum/current version, resolves all packed exports (including personality modules), validates maintained documentation, and runs the reviewed clean-install matrices. Pull requests execute this same gate without enabling publish, tag, release, or deployment mutations.
41
19
 
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.1`.
20
+ The package's `prepublishOnly` script runs `npm run release:verify`, so a direct npm publish uses the same full gate.
43
21
 
44
- After separate approval, an operator may check registry availability:
22
+ ## Coordinated Bootstrap Sequence
45
23
 
46
- ```bash
47
- npm view layout-style-css@2.1.1 version --json
48
- ```
24
+ The immutable cross-repository pins require this exact remote sequence:
49
25
 
50
- The eventual release sequence is:
26
+ 1. Push a stable UI bootstrap ref containing `bdbb6a7e432f30b92de206cac6a00fe85394190c`.
27
+ 2. Push and merge Interactive Surface CSS and Layout Style CSS with merge commits so their reviewed commit SHAs remain reachable.
28
+ 3. Update and verify the final UI companion pins against those merged companion commits.
29
+ 4. Push the final UI branch, rerun its ecosystem preflight, and merge UI with a merge commit.
30
+ 5. Do not squash, rebase, or delete the only remote refs until every pinned commit is reachable through merged ancestry.
51
31
 
52
- ```bash
53
- git tag v2.1.1
54
- git push origin v2.1.1
55
- ```
32
+ The bootstrap SHA is deliberately stable: companion workflows use it to load the reviewed preflight implementation before the final UI commit can reference the companion heads.
56
33
 
57
- Publishing the `v2.1.1` GitHub release triggers the npm workflow. A separately approved recovery run may use `release_tag` set to `v2.1.1`.
34
+ ## Candidate Inspection
58
35
 
59
- ## Workflow Safety
36
+ Confirm:
60
37
 
61
- Create a GitHub Environment named `npm` and configure required reviewers before enabling the publish job. Environment approval is the final human authorization boundary for npm releases.
38
+ - package version is `3.0.1`
39
+ - intended tag would be `v3.0.1`
40
+ - runtime and peer dependencies are empty
41
+ - exact exports and tarball files match the v3 contract
42
+ - generated CSS matches authored sources
43
+ - Chromium, Firefox, and WebKit are green
44
+ - `desktop.ini` and other local-only files are absent from the tarball
62
45
 
63
- Before `npm ci` can execute package lifecycle code, the workflow:
46
+ ## Separately Approved Publication
64
47
 
65
- 1. rejects release inputs that are not strict `v`-prefixed semantic-version tags;
66
- 2. checks out the exact `refs/tags/<release_tag>` namespace without persisted credentials;
67
- 3. verifies `HEAD` equals the tag's peeled commit;
68
- 4. fetches `origin/main` and requires the tag commit to be reachable from protected main; and
69
- 5. requires the package version to equal the tag.
48
+ Only after explicit approval:
70
49
 
71
- The workflow installs Chromium, Firefox, and WebKit, runs full release verification, and publishes with npm provenance. `NODE_AUTH_TOKEN` exists only on the final publish step. Migrating to npm trusted publishing should remove that long-lived secret in a follow-up.
50
+ 1. Commit the verified candidate.
51
+ 2. Push the intended branch.
52
+ 3. Merge through the repository's normal review policy.
53
+ 4. Create the exact `v3.0.1` tag from the protected release commit.
54
+ 5. Publish the GitHub Release.
55
+ 6. Let the protected npm workflow verify the tag and publish with provenance.
56
+ 7. Confirm the GitHub Release, tag, and npm registry state independently.
72
57
 
73
- The workflow actions remain major-version references. Pinning every third-party action to an immutable commit SHA is a documented security follow-up and should be performed with an automated update process. Do not bypass a failed trust, version, browser, audit, tarball, or documentation contract.
58
+ The npm job uses the protected `npm` environment, required reviewers, least-privilege permissions, strict tag validation, exact tag checkout, main-ancestry verification, and an immutable commit sha. Prefer npm trusted publishing when the registry setup supports it.
74
59
 
75
- ## Wiki Mirror
60
+ ## Recovery
76
61
 
77
- The versioned `docs/wiki/` source is authoritative. If GitHub Wiki is enabled, mirror these Markdown files only after the release documentation has passed the local contract suite.
62
+ If verification fails, fix the candidate and rerun the complete gate. Do not move or overwrite an existing release tag. Use a new semantic version when a published artifact must be corrected.
@@ -1,36 +1,32 @@
1
1
  # Security And Support
2
2
 
3
- `layout-style-css` is dependency-free runtime CSS. It executes no consumer JavaScript, calls no services, reads no secrets, and processes no user input. The demo JavaScript uses allowlisted query values and `textContent` for generated snippets.
4
-
5
- ## Supported Versions
3
+ ## Supported Lines
6
4
 
7
5
  | Version | Supported |
8
6
  | --- | --- |
9
- | `2.x` | Yes |
10
- | `1.1.x` | Migration support only |
11
- | `1.0.x` | No |
12
-
13
- The v2 `legacy.css` compatibility bundle is scheduled for removal in v3.
14
-
15
- ## Browser Baseline
7
+ | `3.x` | Yes |
8
+ | `2.x` | Security fixes only during the v3 transition |
9
+ | `1.x` | No |
16
10
 
17
- Current evergreen Chromium, Firefox, and WebKit are supported. The mobile DOM-order fallback remains usable when container queries are unavailable, but current browser engines are the tested contract.
11
+ v3 is dependency-free at runtime. Development dependencies and release automation remain subject to the repository security policy.
18
12
 
19
- ## Report A Security Issue
13
+ ## Reporting
20
14
 
21
- Use GitHub security advisories when available. Otherwise, open a minimal issue requesting a private coordination path without publishing exploit details.
15
+ Use the private process in the repository [SECURITY.md](../../SECURITY.md). Do not publish exploit details in a public issue before maintainers can assess them.
22
16
 
23
- Include the affected version, export or selector, reproduction, expected impact, and whether the issue affects package consumers, the demo, or GitHub Pages.
17
+ ## Release Trust
24
18
 
25
- ## Release Checks
19
+ The npm workflow uses:
26
20
 
27
- ```bash
28
- npm audit --audit-level=moderate
29
- npm run release:verify
30
- ```
21
+ - a protected npm environment with required reviewers
22
+ - exact `refs/tags/v*` checkout
23
+ - main-branch ancestry verification
24
+ - least-privilege workflow permissions
25
+ - registry provenance
26
+ - an immutable commit sha
31
27
 
32
- The release gate checks authored/generated parity, structural ownership, documentation, tarball contents, Pages output, and the Chromium, Firefox, and WebKit rendered matrices.
28
+ Use npm trusted publishing when configured. A local green `release:verify` is evidence for a candidate, not authority to publish.
33
29
 
34
- The npm publish workflow also enforces a strict tag namespace, exact tag/HEAD identity, protected-main ancestry, package-version alignment, an `npm` GitHub Environment with required reviewers, and npm provenance. The registry token is scoped to the final publish step. Replacing it with npm trusted publishing and pinning GitHub Actions to an immutable commit SHA remain explicit hardening follow-ups.
30
+ ## Structural Security Boundary
35
31
 
36
- The demo protects its two exact-version companion CDN fixtures with SHA-384 subresource integrity and anonymous CORS; rendered tests recompute those hashes from the pinned local fixtures.
32
+ Layout CSS has no network calls, script execution, runtime dependencies, secrets, or user data processing. Security-sensitive application behavior remains outside this package.