mote.css 0.10.7 → 0.10.9

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 CHANGED
@@ -5,7 +5,99 @@ All notable changes to this project are documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
- ## [Unreleased]
8
+ ## [0.10.9] - 2026-10-29
9
+
10
+ ### Fixed (components — round-14 findings)
11
+
12
+ - Scrollable-table header cells now become static on paper. The print
13
+ override follows the sticky-cell rule, so Chromium can repeat the semantic
14
+ `<thead>` at the top of continuation pages instead of painting it after the
15
+ rows.
16
+
17
+ ### Fixed (docs — round-14 findings)
18
+
19
+ - The phone-record recipe now start-aligns numeric values in its label/value
20
+ branch, removes generated labels during narrow-viewport print emulation,
21
+ and resets sticky header cells while restoring the table.
22
+ - The row-status recipe now includes semantic row headers
23
+ (`th[scope="row"]`) and uses `background-color`, preserving background
24
+ image layers such as the documented weekend-column shading.
25
+ - The narrow-header recipe now states that it applies to mote's canonical
26
+ composition, where `.mote-row` owns the header row. Custom flex headers
27
+ need page-owned rules for their own structure.
28
+ - Print guidance no longer implies that restoring `position: sticky`
29
+ guarantees a repeated running head; repetition depends on the browser's
30
+ paged-media implementation and the generated PDF must be inspected.
31
+ - Clarified card flex behavior and bottom-aligned actions, inline SVG media
32
+ sizing, prose-heavy card-grid density, and badge scaling.
33
+
34
+ ### Tests
35
+
36
+ - The regression fixture asserts that scrollable-table header cells are
37
+ static on paper.
38
+ - Docs-source checks pin the phone-record print and numeric-alignment rules,
39
+ the row-header and background-color contract, and the canonical narrow
40
+ header row owner.
41
+
42
+ ### Evaluation
43
+
44
+ - Fourteenth round: ten independent agents built ten new page types against
45
+ v0.10.8. All ten would use mote again. The builders' final pages had no
46
+ confirmed failures; remediation confirmed one library-facing print defect in
47
+ the scrollable-table header, fixed here alongside the documentation gaps
48
+ surfaced by the round.
49
+
50
+ ## [0.10.8] - 2026-10-28
51
+
52
+ ### Fixed (components — round-13 findings)
53
+
54
+ - The sticky site header goes static on paper, so it no longer repeats over
55
+ every printed page. A page that wants a running head re-applies
56
+ `position: sticky` in its own print CSS.
57
+
58
+ ### Fixed (docs — round-13 findings)
59
+
60
+ - The phone-record recipe keeps one label column for the whole table
61
+ (`--records-label`, 7rem by default) instead of a fixed 6rem track, so
62
+ longer labels no longer wrap and every record's labels line up. The label
63
+ keeps `text-align: start`, so a right-aligned numeric column no longer
64
+ drags the label away from its value.
65
+ - The phone-record recipe now covers `<caption>` and row headers
66
+ (`th[scope="row"]`), and its print guard restores the table, the hidden
67
+ header row and the caption: the phone layout hides the header, so a print
68
+ rule that only reverted `display` would have printed a table with no
69
+ columns.
70
+ - The phone-record recipe now states that the transform branch does not need
71
+ `.mote-table-scroll`, and that a table serving both branches must release
72
+ the panel cap in the narrow query (`--mote-table-max: none`) — the shipped
73
+ 60vh cap otherwise crops the records it contains.
74
+ - Status on a table row now has a documented page rule, and the status
75
+ reference states that progress and meter inherit a status while badges and
76
+ buttons are gated.
77
+ - Small clarifications: an exclusive `<details name>` group spans the whole
78
+ document; badge scale follows the surrounding font size, not the body;
79
+ definition lists need one column in a narrow rail; a left-rail contents
80
+ list is a `nav` before `main`; Chromium repeats `tfoot` totals across page
81
+ breaks; `.mote-card-media` sizes a direct `img` or `video` child.
82
+
83
+ ### Added (docs — round-13 findings)
84
+
85
+ - A reusable-dialog example: one `<dialog>` filled from the trigger before
86
+ `showModal()`. mote ships no JavaScript and the docs keep saying so.
87
+
88
+ ### Tests
89
+
90
+ - The published phone-record recipe is pinned by a docs-source check
91
+ (`tests/docs-recipes.cjs`), which also fails if a code sample leaks a live
92
+ tag into the page.
93
+ - The regression fixture asserts that mote's sticky header is sticky on
94
+ screen and static on paper.
95
+
96
+ ### Evaluation
97
+
98
+ - Thirteenth round: ten independent agents built ten new page types against
99
+ v0.10.7. All ten would use mote again; no library failure was confirmed.
100
+ The round surfaced the recipe, print and documentation gaps fixed here.
9
101
 
10
102
  ## [0.10.7] - 2026-10-26
11
103
 
@@ -793,7 +885,9 @@ Components:
793
885
  - Opt-in helpers: `.mote-container`, `.mote-muted`, `.mote-note` surfaces.
794
886
  - Element gallery demo page (`demo.html`).
795
887
 
796
- [Unreleased]: https://gitlab.com/abmach/mote/compare/v0.10.7...HEAD
888
+ [Unreleased]: https://gitlab.com/abmach/mote/compare/v0.10.9...HEAD
889
+ [0.10.9]: https://gitlab.com/abmach/mote/compare/v0.10.8...v0.10.9
890
+ [0.10.8]: https://gitlab.com/abmach/mote/compare/v0.10.7...v0.10.8
797
891
  [0.10.7]: https://gitlab.com/abmach/mote/compare/v0.10.6...v0.10.7
798
892
  [0.10.6]: https://gitlab.com/abmach/mote/compare/v0.10.5...v0.10.6
799
893
  [0.10.5]: https://gitlab.com/abmach/mote/compare/v0.10.4...v0.10.5
package/README.md CHANGED
@@ -151,7 +151,7 @@ mote is class-optional by design — elements are styled from tags alone; these
151
151
  | Component | Hook |
152
152
  |---|---|
153
153
  | Document layout (landmark grid) | `.mote-doc` on `<body>` — `:has()` reads your `header`/`nav`/`main`/`aside`/`footer` |
154
- | Sticky site header / nav pills | `body > header` — semantic; `.mote-header`/`.mote-nav` only for shells wrapped in a `<div>` |
154
+ | Sticky site header / nav pills | `body > header` — semantic; `.mote-header`/`.mote-nav` only for shells wrapped in a `<div>`; goes static on paper |
155
155
  | Semantic buttons (gated) | `class="mote-success"` etc. on the button itself — themed sections never recolor actions |
156
156
  | Ghost buttons | `.mote-ghost` — transparent fill; status tints from the button's own class (gated like solids) |
157
157
  | Solid button on any element | `.mote-btn` — the full solid recipe for anchors, spans; status classes gated |
@@ -184,7 +184,7 @@ mote is class-optional by design — elements are styled from tags alone; these
184
184
  | Breadcrumbs | `nav[aria-label="breadcrumb"]` — semantic, no class |
185
185
  | Card grids | `.mote-grid` — auto-fill columns from the container, no breakpoints |
186
186
  | Cards | `.mote-card` — normalizes content: alignment reads start even inside centered regions |
187
- | Badges | `.mote-badge` — gated: status from the badge's own class, never inherited; never grows past body scale |
187
+ | Badges | `.mote-badge` — gated: status from the badge's own class, never inherited; scales with surrounding text but never enlarges with headings |
188
188
  | Avatars | `.mote-avatar` |
189
189
  | Skeleton / spinner | `.mote-skeleton`, `.mote-spinner` |
190
190
  | Tooltips | `[popover].mote-tooltip` + `popovertarget` button |
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * mote.components.css — opt-in components for mote.css.
3
- * v0.10.7 · MIT
3
+ * v0.10.9 · MIT
4
4
  * https://gitlab.com/abmach/mote · mirror: https://github.com/abmach/mote
5
5
  *
6
6
  * Requires mote.css loaded first (provides the --mote-* tokens).
@@ -66,8 +66,8 @@
66
66
  display: inline-block;
67
67
  padding: 0.1rem 0.6rem;
68
68
  border-radius: 999px;
69
- /* Never past body scale: 0.8em inside a heading balloons,
70
- so clamp it — small contexts still scale down. */
69
+ /* Scale with the surrounding text, but never enlarge with headings:
70
+ 0.8em balloons inside a heading, so cap it at 0.8rem. */
71
71
  font-size: min(0.8em, 0.8rem);
72
72
  font-weight: 500;
73
73
  line-height: 1.4;
@@ -168,6 +168,16 @@ a:where(.mote-badge):hover {
168
168
  padding-block: 0.7rem;
169
169
  }
170
170
 
171
+ /* On paper the bar must not repeat over every sheet: a sticky header is
172
+ screen chrome. A print-specific layout may restore sticky positioning,
173
+ but repeated running heads depend on the browser's paged-media behavior
174
+ and are not guaranteed by this library. */
175
+ @media print {
176
+ :where(body > header, .mote-header) {
177
+ position: static;
178
+ }
179
+ }
180
+
171
181
  /* Long navs scroll inside the bar — they never wrap to a second line
172
182
  or push the rest of the row (brand, toggle) off it. min-width lets
173
183
  the nav yield space before the surrounding row needs to. */
@@ -390,13 +400,6 @@ nav[aria-label="toc"] a:hover {
390
400
  overflow-y: auto;
391
401
  }
392
402
 
393
- /* The components file owns this component's print behavior. Keep the
394
- override after the screen rule so loading the optional file cannot
395
- undo the core print promise. */
396
- @media print {
397
- .mote-table-scroll { max-height: none; overflow: visible; }
398
- }
399
-
400
403
  /* Chromium paints collapsed borders at the original flow position,
401
404
  not with the sticky cell — separate borders belong to the cell. */
402
405
  .mote-table-scroll table {
@@ -411,6 +414,20 @@ nav[aria-label="toc"] a:hover {
411
414
  background: var(--mote-bg);
412
415
  }
413
416
 
417
+ /* The components file owns this component's print behavior. Keep the
418
+ override after the sticky-cell rule so paper restores a normal table:
419
+ Chromium can repeat the semantic thead without sticky positioning. */
420
+ @media print {
421
+ .mote-table-scroll {
422
+ max-height: none;
423
+ overflow: visible;
424
+ }
425
+
426
+ .mote-table-scroll thead th {
427
+ position: static;
428
+ }
429
+ }
430
+
414
431
  /* Page footer: the quiet sibling of the site header */
415
432
  :where(body > footer, .mote-footer) {
416
433
  margin-block-start: 3rem;
package/mote.css CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * mote.css — a mote of styling for plain HTML.
3
- * v0.10.7 · MIT
3
+ * v0.10.9 · MIT
4
4
  * https://gitlab.com/abmach/mote · mirror: https://github.com/abmach/mote
5
5
  *
6
6
  * The smallest thing that can carry style:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mote.css",
3
- "version": "0.10.7",
3
+ "version": "0.10.9",
4
4
  "bugs": {
5
5
  "url": "https://gitlab.com/abmach/mote/-/issues"
6
6
  },