mote.css 0.9.1 → 0.10.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.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,89 @@ 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.10.1] - 2026-10-24
9
+
10
+ ### Fixed
11
+
12
+ - **Narrow `.mote-doc` layouts keep landmark order**: the collapsed shell no
13
+ longer places the footer before `main` when guide and context rails are
14
+ present.
15
+ - **`.mote-table-scroll` expands on paper**: the optional components file
16
+ now owns its print override, so loading it can no longer undo the core
17
+ print behavior.
18
+ - **`.mote-skip-link` reveals on any focus**: programmatic focus now gets
19
+ the same fixed skip-link pill as keyboard focus, removing a focus-modality
20
+ dependency from the accessibility helper and regression fixture.
21
+
22
+ ### Changed (tests — round-8 findings)
23
+
24
+ - The regression fixture now selects an active screen or print-specific
25
+ assertion suite, rebuilds its results on media changes, and self-checks both
26
+ paper helpers and printable table expansion.
27
+
28
+ ### Changed (docs — round-8 findings)
29
+
30
+ - Document-layout guidance now states that the collapsed shell preserves
31
+ source order, distinguishes `main` overflow from table-wrapper overflow,
32
+ and calls out the body-level gutter.
33
+ - Header guidance now includes a narrow-screen recipe that gives the nav its
34
+ own row when the brand and pushed controls leave too little room.
35
+ - The helper map now includes print helpers and a right-rail TOC recipe.
36
+
37
+ ### Evaluation
38
+
39
+ - Eighth round: ten independent agents built ten new page types against
40
+ v0.10.0. All ten would use mote again and kept page-level horizontal
41
+ overflow at zero; the round exposed the collapsed document-order and
42
+ cross-file print defects fixed in this release.
43
+
44
+ ## [0.10.0] - 2026-10-23
45
+
46
+ ### Fixed
47
+
48
+ - **`.mote-doc > header` was missing `min-width: 0`** (the shell gives it
49
+ to main, nav, and aside but not the header): a header carrying long nav
50
+ content pushed the *page* sideways at narrow viewports. Found by the
51
+ round-7 course builder; fixture-pinned.
52
+
53
+ ### Added
54
+
55
+ - `.mote-tabular`: tabular figures without the right-alignment — day
56
+ numbers, headline balances, meta lines. `.mote-num` keeps
57
+ alignment + figures for table columns (tables already render tabular
58
+ numerals on every cell, so alignment is the column class's real job).
59
+ Five round-7 builds hit the old coupling.
60
+ - `--mote-avatar-radius` (default 999px): square cover art and favicons
61
+ no longer fight the circular default — three round-7 builds overrode it
62
+ by hand.
63
+
64
+ ### Changed
65
+
66
+ - Header nav pills never break mid-label (`white-space: nowrap`): the
67
+ pill row scrolls instead — three round-7 builds added this rule by
68
+ hand; deferred from round 6 as a recipe, three recurrences made it a
69
+ default.
70
+
71
+ ### Fixed (docs — round-7 findings)
72
+
73
+ - Status classes are token carriers, not text colors — documented with
74
+ the tinted-text recipe (`color: var(--mote-success)`).
75
+ - `.mote-stack` on a `<fieldset>` flattens the legend notch — documented.
76
+ - Nav hints only exist while the pills overflow — documented.
77
+ - New recipes: small indicator dots (skeleton `min-height`), grouped
78
+ messages (`.mote-media` + `aria-hidden` spacer), weekend columns
79
+ (row-tint-safe column shading), quiet captions.
80
+ - `--mote-avatar-radius` and `.mote-tabular` in the token and class
81
+ tables.
82
+
83
+ ### Evaluation
84
+
85
+ - Seventh round: ten agents built ten NEW page types (chat, job board,
86
+ calendar, recipe, transactions, lesson, search results, team, hotel,
87
+ podcast) against v0.9.1 on a faster builder model. 10/10
88
+ would-use-again, zero final-state rendering failures; every v0.9.x
89
+ feature verified in the wild by every agent that touched it.
90
+
8
91
  ## [0.9.1] - 2026-10-23
9
92
 
10
93
  ### Fixed
@@ -572,6 +655,8 @@ Components:
572
655
  [0.8.0]: https://gitlab.com/abmach/mote/compare/v0.7.0...v0.8.0
573
656
  [0.9.0]: https://gitlab.com/abmach/mote/compare/v0.8.0...v0.9.0
574
657
  [0.9.1]: https://gitlab.com/abmach/mote/compare/v0.9.0...v0.9.1
658
+ [0.10.1]: https://gitlab.com/abmach/mote/compare/v0.10.0...v0.10.1
659
+ [0.10.0]: https://gitlab.com/abmach/mote/compare/v0.9.1...v0.10.0
575
660
  [0.7.0]: https://gitlab.com/abmach/mote/compare/v0.6.1...v0.7.0
576
661
  [0.6.1]: https://gitlab.com/abmach/mote/compare/v0.6.0...v0.6.1
577
662
  [0.6.0]: https://gitlab.com/abmach/mote/compare/v0.5.1...v0.6.0
package/README.md CHANGED
@@ -100,6 +100,7 @@ The consequence: theming is a handful of variable overrides, and an inline tweak
100
100
  | `--mote-display` | `clamp(2.75rem, 1.5rem + 4vw, 5rem)` | | Display text scale (opt-in) |
101
101
  | `--mote-grid-min` | `16rem` | | Card grid minimum track width |
102
102
  | `--mote-avatar` | `2.5rem` | | Avatar size |
103
+ | Avatar corners | `--mote-avatar-radius` (default 999px) — 0 for square covers and favicons |
103
104
  | `--mote-control-pad` | `0.5rem` | | Button/control vertical padding |
104
105
  | `--mote-cell-pad` | `0.6rem` | | Table cell vertical padding |
105
106
  | `--mote-shadow` / `--mote-shadow-sm` | warm diffuse | | Elevation |
@@ -159,15 +160,16 @@ mote is class-optional by design — elements are styled from tags alone; these
159
160
  | Display text | `.mote-display` — opt-in hero/error-code scale via `--mote-display` |
160
161
  | Content rows | `.mote-row` + `.mote-push` — flex row, right-align helper |
161
162
  | Stacks | `.mote-stack` — vertical rhythm with `--mote-stack-gap`; fields full width, checkboxes 1em, works on any content |
162
- | Scrollable tables | `.mote-table-scroll` — sticky `thead`, no page scroll, no margin jump |
163
+ | Scrollable tables | `.mote-table-scroll` — sticky `thead`, no page scroll, no margin jump; expands on paper |
163
164
  | Numeric columns | `.mote-num` — right-aligned tabular figures |
165
+ | Tabular figures | `.mote-tabular` — tabular numerals without the right-alignment (day numbers, meta lines) |
164
166
  | Sparse grids | `.mote-grid-sparse` — standalone auto-fit variant, collapses empty tracks |
165
167
  | Pagination | `nav[aria-label="pagination"]` — semantic, no class |
166
168
  | Table of contents | `nav[aria-label="toc"]` — semantic, no class |
167
169
  | Current table row | `tr[aria-current]` — accent-tinted row, reads over zebra |
168
170
  | Footer baseline | `body > footer` — semantic top-border + padding; its `nav` renders as a quiet wrapped row |
169
171
  | Screen-reader helper | `.mote-sr-only` — pure hiding, never appears |
170
- | Skip link | `.mote-skip-link` — sr-only until keyboard focus, then a fixed pill |
172
+ | Skip link | `.mote-skip-link` — sr-only until focused, then a fixed pill |
171
173
  | Print helpers | `.mote-no-print` / `.mote-print-only` |
172
174
  | Theme-switch guard | `.mote-theme-switch` — prevents Chromium stale-color bug on `data-theme` flips |
173
175
  | Status inheritance control | `.mote-default` (force accent) · `.mote-reset` (clear inherited status) |
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * mote.components.css — opt-in components for mote.css.
3
- * v0.9.1 · MIT
3
+ * v0.10.1 · 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).
@@ -96,7 +96,9 @@ a:where(.mote-badge):hover {
96
96
  .mote-avatar {
97
97
  width: var(--mote-avatar, 2.5rem);
98
98
  height: var(--mote-avatar, 2.5rem);
99
- border-radius: 999px;
99
+ /* Round by default (people); square cover art and favicons set
100
+ --mote-avatar-radius: 0 (or any corner value). */
101
+ border-radius: var(--mote-avatar-radius, 999px);
100
102
  object-fit: cover;
101
103
  border: var(--mote-border-width) solid var(--mote-border);
102
104
  box-shadow: var(--mote-shadow-sm);
@@ -263,6 +265,8 @@ a:where(.mote-badge):hover {
263
265
  display: inline-block;
264
266
  padding: 0.35rem 0.8rem;
265
267
  border-radius: 999px;
268
+ /* Pills never break mid-label; the row scrolls instead. */
269
+ white-space: nowrap;
266
270
  color: var(--mote-fg);
267
271
  text-decoration: none;
268
272
  transition: background var(--mote-transition), color var(--mote-transition);
@@ -386,6 +390,13 @@ nav[aria-label="toc"] a:hover {
386
390
  overflow-y: auto;
387
391
  }
388
392
 
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
+
389
400
  /* Chromium paints collapsed borders at the original flow position,
390
401
  not with the sticky cell — separate borders belong to the cell. */
391
402
  .mote-table-scroll table {
@@ -660,7 +671,7 @@ html:where(:has(body > header)) {
660
671
  --mote-rail-top: 4.75rem;
661
672
  }
662
673
 
663
- .mote-doc > header { grid-row: 1; grid-column: 1 / -1; }
674
+ .mote-doc > header { grid-row: 1; grid-column: 1 / -1; min-width: 0; }
664
675
  .mote-doc > footer { grid-row: 3; grid-column: 1 / -1; }
665
676
 
666
677
  .mote-doc > main { grid-row: 2; grid-column: 1; min-width: 0; }
@@ -761,15 +772,13 @@ nav[aria-label="toc"] :is(h2, h3) {
761
772
  }
762
773
 
763
774
  @media (width < 50rem) {
764
- .mote-doc:where(:has(> nav)),
765
- .mote-doc:where(:has(> aside)),
766
- .mote-doc:where(:has(> nav)):where(:has(> aside)) {
767
- grid-template-columns: 1fr;
775
+ .mote-doc {
776
+ display: flex;
777
+ flex-direction: column;
768
778
  }
769
779
 
770
- .mote-doc > :is(nav, aside, main) {
771
- grid-column: 1 / -1;
772
- grid-row: auto;
780
+ .mote-doc > main {
781
+ flex: 1 0 auto;
773
782
  }
774
783
 
775
784
  .mote-doc > aside {
package/mote.css CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * mote.css — a mote of styling for plain HTML.
3
- * v0.9.1 · MIT
3
+ * v0.10.1 · 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:
@@ -785,6 +785,14 @@ progress, meter {
785
785
  font-variant-numeric: tabular-nums;
786
786
  }
787
787
 
788
+ /* Tabular figures without the right-alignment — day numbers, headline
789
+ figures, meta lines. Tables already render tabular numerals on every
790
+ cell; this is for figures outside them (or cells that must not align
791
+ end). */
792
+ .mote-tabular {
793
+ font-variant-numeric: tabular-nums;
794
+ }
795
+
788
796
  .mote-sr-only,
789
797
  .mote-skip-link {
790
798
  position: absolute;
@@ -802,7 +810,7 @@ progress, meter {
802
810
  Use .mote-skip-link for the accessibility skip link;
803
811
  use plain .mote-sr-only to hide things that must never
804
812
  appear (radios driving CSS toggles, visually hidden labels). */
805
- .mote-skip-link:focus-visible {
813
+ .mote-skip-link:focus {
806
814
  position: fixed;
807
815
  top: 1rem;
808
816
  left: 1rem;
@@ -928,7 +936,6 @@ progress, meter {
928
936
  /* Opt-in print helpers */
929
937
  .mote-no-print { display: none !important; }
930
938
  .mote-print-only { display: block; }
931
- .mote-table-scroll { max-height: none; overflow: visible; }
932
939
  }
933
940
 
934
941
  @media not print {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mote.css",
3
- "version": "0.9.1",
4
- "description": "A mote of styling for plain HTML — tiny, semantic, class-optional CSS with zero dependencies and no build step.",
3
+ "version": "0.10.1",
4
+ "description": "A mote of styling for plain HTML \u2014 tiny, semantic, class-optional CSS with zero dependencies and no build step.",
5
5
  "style": "mote.css",
6
6
  "files": [
7
7
  "mote.css",