mote.css 0.10.8 → 0.11.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.
- package/CHANGELOG.md +90 -1
- package/README.md +4 -2
- package/mote.components.css +46 -12
- package/mote.css +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,93 @@ 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
|
+
## [0.11.0] - 2026-10-29
|
|
9
|
+
|
|
10
|
+
### Added (components — round-15 findings)
|
|
11
|
+
|
|
12
|
+
- `.mote-card-media` now sizes a direct inline SVG cover while preserving the
|
|
13
|
+
SVG's own `viewBox` ratio. Nested SVG icons remain unaffected.
|
|
14
|
+
- `.mote-card-actions` bottom-aligns a card action row without owning the
|
|
15
|
+
row's display, gap, or wrapping.
|
|
16
|
+
- `.mote-row-status` paints a status row's direct cells with
|
|
17
|
+
`background-color`, preserving semantic row headers and background-image
|
|
18
|
+
layers. Status classes remain token carriers without the helper.
|
|
19
|
+
|
|
20
|
+
### Fixed (docs — round-15 findings)
|
|
21
|
+
|
|
22
|
+
- The phone-record recipe now requires a non-empty `data-label` on every
|
|
23
|
+
transformed data cell and warns that a missing label renders blank.
|
|
24
|
+
- The recipe states that its breakpoint is an example, that media-query
|
|
25
|
+
thresholds cannot be parameterized with CSS variables, and that the
|
|
26
|
+
transform and cap-release queries must use the same chosen threshold.
|
|
27
|
+
- Table documentation now distinguishes page and wrapper scrolling and
|
|
28
|
+
explains that the 60vh cap does not crop content.
|
|
29
|
+
- Print guidance now includes a practical paper checklist covering content,
|
|
30
|
+
tables, pagination, forms, and generated-PDF inspection.
|
|
31
|
+
- Card documentation now covers direct inline SVG covers and the
|
|
32
|
+
`.mote-card-actions` helper.
|
|
33
|
+
|
|
34
|
+
### Tests
|
|
35
|
+
|
|
36
|
+
- The regression fixture asserts direct SVG cover sizing and ratio, nested SVG
|
|
37
|
+
isolation, card-action bottom alignment, status-row painting, background
|
|
38
|
+
image preservation, and gated badge behavior.
|
|
39
|
+
- Documentation source checks cover the new guidance, reject leaked live
|
|
40
|
+
tags in copy-ready samples, and pin both the encoded and live SVG card-cover
|
|
41
|
+
structures, including their wrapper, SVG, rectangle, and circle elements.
|
|
42
|
+
- The fixture's screen-only status and card probes stay off paper through a
|
|
43
|
+
fixture-local print rule, so the print-emulation PDF remains a focused
|
|
44
|
+
four-page regression artifact without repurposing `.mote-no-print`.
|
|
45
|
+
|
|
46
|
+
### Evaluation
|
|
47
|
+
|
|
48
|
+
- Fifteenth round: ten independent agents built ten new page types against
|
|
49
|
+
v0.10.9. All ten would use mote again. The final pages had no confirmed
|
|
50
|
+
library failures; these changes address the recurring authoring friction
|
|
51
|
+
and documentation gaps surfaced by the round.
|
|
52
|
+
|
|
53
|
+
## [0.10.9] - 2026-10-29
|
|
54
|
+
|
|
55
|
+
### Fixed (components — round-14 findings)
|
|
56
|
+
|
|
57
|
+
- Scrollable-table header cells now become static on paper. The print
|
|
58
|
+
override follows the sticky-cell rule, so Chromium can repeat the semantic
|
|
59
|
+
`<thead>` at the top of continuation pages instead of painting it after the
|
|
60
|
+
rows.
|
|
61
|
+
|
|
62
|
+
### Fixed (docs — round-14 findings)
|
|
63
|
+
|
|
64
|
+
- The phone-record recipe now start-aligns numeric values in its label/value
|
|
65
|
+
branch, removes generated labels during narrow-viewport print emulation,
|
|
66
|
+
and resets sticky header cells while restoring the table.
|
|
67
|
+
- The row-status recipe now includes semantic row headers
|
|
68
|
+
(`th[scope="row"]`) and uses `background-color`, preserving background
|
|
69
|
+
image layers such as the documented weekend-column shading.
|
|
70
|
+
- The narrow-header recipe now states that it applies to mote's canonical
|
|
71
|
+
composition, where `.mote-row` owns the header row. Custom flex headers
|
|
72
|
+
need page-owned rules for their own structure.
|
|
73
|
+
- Print guidance no longer implies that restoring `position: sticky`
|
|
74
|
+
guarantees a repeated running head; repetition depends on the browser's
|
|
75
|
+
paged-media implementation and the generated PDF must be inspected.
|
|
76
|
+
- Clarified card flex behavior and bottom-aligned actions, inline SVG media
|
|
77
|
+
sizing, prose-heavy card-grid density, and badge scaling.
|
|
78
|
+
|
|
79
|
+
### Tests
|
|
80
|
+
|
|
81
|
+
- The regression fixture asserts that scrollable-table header cells are
|
|
82
|
+
static on paper.
|
|
83
|
+
- Docs-source checks pin the phone-record print and numeric-alignment rules,
|
|
84
|
+
the row-header and background-color contract, and the canonical narrow
|
|
85
|
+
header row owner.
|
|
86
|
+
|
|
87
|
+
### Evaluation
|
|
88
|
+
|
|
89
|
+
- Fourteenth round: ten independent agents built ten new page types against
|
|
90
|
+
v0.10.8. All ten would use mote again. The builders' final pages had no
|
|
91
|
+
confirmed failures; remediation confirmed one library-facing print defect in
|
|
92
|
+
the scrollable-table header, fixed here alongside the documentation gaps
|
|
93
|
+
surfaced by the round.
|
|
94
|
+
|
|
8
95
|
## [0.10.8] - 2026-10-28
|
|
9
96
|
|
|
10
97
|
### Fixed (components — round-13 findings)
|
|
@@ -843,7 +930,9 @@ Components:
|
|
|
843
930
|
- Opt-in helpers: `.mote-container`, `.mote-muted`, `.mote-note` surfaces.
|
|
844
931
|
- Element gallery demo page (`demo.html`).
|
|
845
932
|
|
|
846
|
-
[Unreleased]: https://gitlab.com/abmach/mote/compare/v0.
|
|
933
|
+
[Unreleased]: https://gitlab.com/abmach/mote/compare/v0.11.0...HEAD
|
|
934
|
+
[0.11.0]: https://gitlab.com/abmach/mote/compare/v0.10.9...v0.11.0
|
|
935
|
+
[0.10.9]: https://gitlab.com/abmach/mote/compare/v0.10.8...v0.10.9
|
|
847
936
|
[0.10.8]: https://gitlab.com/abmach/mote/compare/v0.10.7...v0.10.8
|
|
848
937
|
[0.10.7]: https://gitlab.com/abmach/mote/compare/v0.10.6...v0.10.7
|
|
849
938
|
[0.10.6]: https://gitlab.com/abmach/mote/compare/v0.10.5...v0.10.6
|
package/README.md
CHANGED
|
@@ -157,7 +157,7 @@ mote is class-optional by design — elements are styled from tags alone; these
|
|
|
157
157
|
| Solid button on any element | `.mote-btn` — the full solid recipe for anchors, spans; status classes gated |
|
|
158
158
|
| Hero centering | `.mote-hero` — vertically centers content for error/login/empty-state pages |
|
|
159
159
|
| CTA bands | `.mote-band` — full-bleed tinted section; opaque in both themes, reads `--mote-status` |
|
|
160
|
-
| Card cover media | `.mote-card-media` — flush-top cover images with matched radius |
|
|
160
|
+
| Card cover media | `.mote-card-media` — flush-top cover images, video, or direct inline SVG with matched radius |
|
|
161
161
|
| Brand/wordmark | `.mote-brand` — quiet non-nav link for site headers |
|
|
162
162
|
| Media objects | `.mote-media` — avatar/icon beside body (flex, last child grows) |
|
|
163
163
|
| Display text | `.mote-display` — opt-in hero/error-code scale via `--mote-display` |
|
|
@@ -170,6 +170,7 @@ mote is class-optional by design — elements are styled from tags alone; these
|
|
|
170
170
|
| Pagination | `nav[aria-label="pagination"]` — semantic, no class |
|
|
171
171
|
| Table of contents | `nav[aria-label="toc"]` — semantic, no class |
|
|
172
172
|
| Current table row | `tr[aria-current]` — accent-tinted row, reads over zebra |
|
|
173
|
+
| Status table row | `.mote-row-status` + a status class — paints direct cells while preserving background-image layers |
|
|
173
174
|
| Footer baseline | `body > footer` — semantic top-border + padding; its `nav` renders as a quiet wrapped row |
|
|
174
175
|
| Screen-reader helper | `.mote-sr-only` — pure hiding, never appears |
|
|
175
176
|
| Skip link | `.mote-skip-link` — sr-only until focused, then a fixed pill |
|
|
@@ -184,7 +185,8 @@ mote is class-optional by design — elements are styled from tags alone; these
|
|
|
184
185
|
| Breadcrumbs | `nav[aria-label="breadcrumb"]` — semantic, no class |
|
|
185
186
|
| Card grids | `.mote-grid` — auto-fill columns from the container, no breakpoints |
|
|
186
187
|
| Cards | `.mote-card` — normalizes content: alignment reads start even inside centered regions |
|
|
187
|
-
|
|
|
188
|
+
| Card actions | `.mote-card-actions` — bottom-aligns an action row inside a card without owning the row layout |
|
|
189
|
+
| Badges | `.mote-badge` — gated: status from the badge's own class, never inherited; scales with surrounding text but never enlarges with headings |
|
|
188
190
|
| Avatars | `.mote-avatar` |
|
|
189
191
|
| Skeleton / spinner | `.mote-skeleton`, `.mote-spinner` |
|
|
190
192
|
| Tooltips | `[popover].mote-tooltip` + `popovertarget` button |
|
package/mote.components.css
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/*!
|
|
2
2
|
* mote.components.css — opt-in components for mote.css.
|
|
3
|
-
* v0.
|
|
3
|
+
* v0.11.0 · 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).
|
|
@@ -36,6 +36,13 @@
|
|
|
36
36
|
margin-block-end: 0;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
+
/* Bottom-align a card's action row without owning the row's layout.
|
|
40
|
+
.mote-card is a vertical flex column, so the auto margin consumes the
|
|
41
|
+
space above the actions. Pair with .mote-row for the row itself. */
|
|
42
|
+
.mote-card-actions {
|
|
43
|
+
margin-block-start: auto;
|
|
44
|
+
}
|
|
45
|
+
|
|
39
46
|
/* Band: a full-bleed tinted section — CTA bands, section dividers,
|
|
40
47
|
announcement strips. An opaque mix (unlike --mote-accent-soft, which is
|
|
41
48
|
transparent and can vanish over dark backgrounds), so it reads as a
|
|
@@ -66,8 +73,8 @@
|
|
|
66
73
|
display: inline-block;
|
|
67
74
|
padding: 0.1rem 0.6rem;
|
|
68
75
|
border-radius: 999px;
|
|
69
|
-
/*
|
|
70
|
-
|
|
76
|
+
/* Scale with the surrounding text, but never enlarge with headings:
|
|
77
|
+
0.8em balloons inside a heading, so cap it at 0.8rem. */
|
|
71
78
|
font-size: min(0.8em, 0.8rem);
|
|
72
79
|
font-weight: 500;
|
|
73
80
|
line-height: 1.4;
|
|
@@ -169,8 +176,9 @@ a:where(.mote-badge):hover {
|
|
|
169
176
|
}
|
|
170
177
|
|
|
171
178
|
/* On paper the bar must not repeat over every sheet: a sticky header is
|
|
172
|
-
screen chrome
|
|
173
|
-
|
|
179
|
+
screen chrome. A print-specific layout may restore sticky positioning,
|
|
180
|
+
but repeated running heads depend on the browser's paged-media behavior
|
|
181
|
+
and are not guaranteed by this library. */
|
|
174
182
|
@media print {
|
|
175
183
|
:where(body > header, .mote-header) {
|
|
176
184
|
position: static;
|
|
@@ -392,6 +400,25 @@ nav[aria-label="toc"] a:hover {
|
|
|
392
400
|
border-radius: inherit;
|
|
393
401
|
}
|
|
394
402
|
|
|
403
|
+
/* A direct inline SVG is a card cover too. Keep this direct-child only:
|
|
404
|
+
nested icons must keep their own dimensions. No fixed aspect ratio —
|
|
405
|
+
the SVG's viewBox determines the rendered height. */
|
|
406
|
+
.mote-card-media > svg {
|
|
407
|
+
display: block;
|
|
408
|
+
width: 100%;
|
|
409
|
+
height: auto;
|
|
410
|
+
max-width: none;
|
|
411
|
+
border-radius: inherit;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
/* Paint a status row's direct cells when the row opts in. Status classes
|
|
415
|
+
remain token carriers; this helper is the visual step. background-color
|
|
416
|
+
deliberately preserves any existing background-image layer. */
|
|
417
|
+
tr.mote-row-status:is(.mote-success, .mote-warning, .mote-error, .mote-info)
|
|
418
|
+
> :is(td, th[scope="row"]) {
|
|
419
|
+
background-color: var(--mote-status-soft);
|
|
420
|
+
}
|
|
421
|
+
|
|
395
422
|
/* Scrollable table wrapper: sticky thead, no page scroll, no margin jump */
|
|
396
423
|
.mote-table-scroll {
|
|
397
424
|
overflow-x: auto;
|
|
@@ -399,13 +426,6 @@ nav[aria-label="toc"] a:hover {
|
|
|
399
426
|
overflow-y: auto;
|
|
400
427
|
}
|
|
401
428
|
|
|
402
|
-
/* The components file owns this component's print behavior. Keep the
|
|
403
|
-
override after the screen rule so loading the optional file cannot
|
|
404
|
-
undo the core print promise. */
|
|
405
|
-
@media print {
|
|
406
|
-
.mote-table-scroll { max-height: none; overflow: visible; }
|
|
407
|
-
}
|
|
408
|
-
|
|
409
429
|
/* Chromium paints collapsed borders at the original flow position,
|
|
410
430
|
not with the sticky cell — separate borders belong to the cell. */
|
|
411
431
|
.mote-table-scroll table {
|
|
@@ -420,6 +440,20 @@ nav[aria-label="toc"] a:hover {
|
|
|
420
440
|
background: var(--mote-bg);
|
|
421
441
|
}
|
|
422
442
|
|
|
443
|
+
/* The components file owns this component's print behavior. Keep the
|
|
444
|
+
override after the sticky-cell rule so paper restores a normal table:
|
|
445
|
+
Chromium can repeat the semantic thead without sticky positioning. */
|
|
446
|
+
@media print {
|
|
447
|
+
.mote-table-scroll {
|
|
448
|
+
max-height: none;
|
|
449
|
+
overflow: visible;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
.mote-table-scroll thead th {
|
|
453
|
+
position: static;
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
|
|
423
457
|
/* Page footer: the quiet sibling of the site header */
|
|
424
458
|
:where(body > footer, .mote-footer) {
|
|
425
459
|
margin-block-start: 3rem;
|
package/mote.css
CHANGED