mote.css 0.10.3 → 0.10.5

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,69 @@ 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]
9
+
10
+ ## [0.10.5] - 2026-10-25
11
+
12
+ ### Fixed (docs — round-11 findings)
13
+
14
+ - **A lone `:root` brand override no longer looks like it works**: the theming
15
+ section now carries a complete brand recipe — base, explicit dark,
16
+ automatic dark, and print — because mote's own palette rules outrank a plain
17
+ `:root` declaration in automatic dark mode and on paper. Every state pairs
18
+ `--mote-accent` with `--mote-on-accent`.
19
+ - **The anchored-popover separation is now described as measured**: the popover
20
+ section states the 0.45rem margin and Chromium's own offset to the popover's
21
+ placement, instead of promising a gap the browser does not produce.
22
+ - The status reference is now one table: every status-consuming surface carries
23
+ an *Inheriting* or *Gated* mode, and the missing Cards row is in.
24
+ - The theme-toggle snippet now writes the current state into the button label.
25
+ - The own-row narrow-navigation recipe is labeled as page CSS, so it is no
26
+ longer read as a rule mote ships.
27
+ - The sticky-toolbar section now explains how to measure the header's real
28
+ bottom edge instead of copying a sample offset; the console expression lives
29
+ in a code block, so the documentation page keeps its width on narrow screens.
30
+ - Added the native `<progress>` width note and the native validity-timing note
31
+ for required selects.
32
+
33
+ ### Added (tests)
34
+
35
+ - Narrow-header containment coverage for both documented header shapes
36
+ (`body > header nav` and `.mote-header` + `.mote-nav`): the nav yields space,
37
+ stays inside its row and the viewport, and its pill row scrolls instead of
38
+ widening the page.
39
+ - Anchored-popover coverage: the 0.45rem separation margin, placement below
40
+ the trigger with horizontal centering, and the viewport-edge flip.
41
+
42
+ ### Evaluation
43
+
44
+ - Eleventh round: ten independent agents built ten new page types against
45
+ v0.10.4. All ten would use mote again; every final page kept page-level
46
+ horizontal overflow at zero at 1280px and 390px, and no library failure was
47
+ confirmed. The round surfaced the documentation gaps fixed here and left the
48
+ anchored-popover promise uncovered — the new fixture checks cover it now.
49
+
50
+ ## [0.10.4] - 2026-10-25
51
+
52
+ ### Fixed (docs — round-10 findings)
53
+
54
+ - **Status inheritance now matches badge gating in the documentation**: the
55
+ status section no longer claims that a badge inherits an ancestor's status,
56
+ and the `.mote-reset` example now uses an inheriting `.mote-note` surface.
57
+ The badge section links back to the gating rules.
58
+
59
+ ### Changed (docs — round-10 findings)
60
+
61
+ - Clarified that `.mote-table-scroll` guarantees the complete table is present
62
+ without artificial clipping on paper, not that every matrix fits narrow
63
+ paper. Added an opt-in, document-wide landscape recipe and guidance to check
64
+ generated PDFs for legibility.
65
+ - Expanded the responsive-toolbar recipe to cover label-wrapped controls and
66
+ documented a page-owned sticky-toolbar offset for one- and two-row headers.
67
+ - Documented the default anchored-popover gap, the `--mote-accent` /
68
+ `--mote-on-accent` override pair, own-row navigation for long narrow headers,
69
+ and the boundary between complementary representations and duplicated records.
70
+
8
71
  ## [0.10.3] - 2026-10-25
9
72
 
10
73
  ### Fixed
@@ -696,6 +759,9 @@ Components:
696
759
  - Opt-in helpers: `.mote-container`, `.mote-muted`, `.mote-note` surfaces.
697
760
  - Element gallery demo page (`demo.html`).
698
761
 
762
+ [Unreleased]: https://gitlab.com/abmach/mote/compare/v0.10.5...HEAD
763
+ [0.10.5]: https://gitlab.com/abmach/mote/compare/v0.10.4...v0.10.5
764
+ [0.10.4]: https://gitlab.com/abmach/mote/compare/v0.10.3...v0.10.4
699
765
  [0.3.0]: https://gitlab.com/abmach/mote/compare/v0.2.1...v0.3.0
700
766
  [0.8.0]: https://gitlab.com/abmach/mote/compare/v0.7.0...v0.8.0
701
767
  [0.9.0]: https://gitlab.com/abmach/mote/compare/v0.8.0...v0.9.0
package/README.md CHANGED
@@ -25,7 +25,7 @@ Source on [GitLab](https://gitlab.com/abmach/mote) · mirrored on [GitHub](https
25
25
 
26
26
  - **Semantic HTML is the API.** mote styles elements by what they *are* — headings, forms, `dialog`, `menu` — not by the classes they wear. Zero classes are required; optional classes exist as opt-in conveniences for statuses, components, and helpers.
27
27
  - **The platform before the library.** Interactive components ride on native features: `popover`, `dialog`, `<details name>`, `:user-invalid`. Where the browser can do it, mote never ships JavaScript to do it worse.
28
- - **Tokens all the way down.** Every color, radius, shadow, font and status is a `--mote-*` custom property, and derived tones are computed with `color-mix()`. Status classes set tokens and nothing else — one override re-skins every note, badge and toast. Re-theme by overriding variables, never by fighting selectors.
28
+ - **Tokens all the way down.** Every color, radius, shadow, font and status is a `--mote-*` custom property, and derived tones are computed with `color-mix()`. Status classes set tokens and nothing else — one override re-skins inheriting content surfaces, while gated actions and badges declare their own status. Re-theme by overriding variables, never by fighting selectors.
29
29
  - **Weightless by default.** `mote.css` styles your elements; `mote.components.css` is opt-in and CSS-only. You ship zero bytes of library JavaScript, ever.
30
30
  - **Framework-agnostic.** It's just CSS — plain HTML, Svelte, Vue, React, HTMX, PHP, your CMS, anything.
31
31
  - **Cozy, and unobtrusive about it.** Warm neutrals, soft edges, generous rhythm — styling that never shouts. Automatic light/dark, AA+ contrast, visible focus, reduced-motion respected.
@@ -60,19 +60,22 @@ Everything is a variable. Override the ones you care about:
60
60
 
61
61
  ```css
62
62
  :root {
63
- --mote-accent: #4a7a5b; /* your brand color */
64
- --mote-bg: #fffdf5; /* your paper */
65
- --mote-radius: 6px; /* your edges */
63
+ --mote-accent: #4a7a5b; /* your brand color */
64
+ --mote-on-accent: #ffffff; /* readable text on accent fills */
65
+ --mote-bg: #fffdf5; /* your paper */
66
+ --mote-radius: 6px; /* your edges */
66
67
  }
67
68
  ```
68
69
 
70
+ When replacing `--mote-accent`, replace `--mote-on-accent` too. mote cannot infer whether white or dark text has enough contrast on an arbitrary brand color; a separate dark-theme accent may need its own foreground token.
71
+
69
72
  ### The token cascade
70
73
 
71
74
  Values flow in layers, each computed from the last — retune a base token and everything downstream re-derives automatically:
72
75
 
73
76
  1. **Base palette** — the raw tokens: `--mote-bg`, `--mote-fg`, `--mote-accent`, the four semantics, fonts, radii, shadows. Light values live in `:root`; dark values swap in via `prefers-color-scheme` or `data-theme`.
74
77
  2. **Derived tones** — computed from the base with `color-mix()`: `--mote-accent-deep` (hover deepening), `--mote-accent-soft`, the four `--mote-*-soft` tints, `--mote-focus-ring`, `--mote-border-strong`. They can never go stale — change `--mote-accent` and every tint, ring and hover shade follows.
75
- 3. **Status indirection** — status classes assign `--mote-status` / `--mote-status-soft` and nothing else. Components read them with accent fallbacks: `color: var(--mote-status, var(--mote-accent-deep))`.
78
+ 3. **Status indirection** — status classes assign `--mote-status` / `--mote-status-soft` and nothing else. Inheriting surfaces read them with accent fallbacks: `color: var(--mote-status, var(--mote-accent-deep))`; gated buttons and badges declare their own status.
76
79
 
77
80
  The consequence: theming is a handful of variable overrides, and an inline tweak (`style="--mote-status: …"`) slots into the same chain at any level.
78
81
 
@@ -139,7 +142,7 @@ mote is class-optional by design — elements are styled from tags alone; these
139
142
  | `.mote-container` | Centered page wrapper: `width: min(100% - 3rem, 70rem)` |
140
143
  | `.mote-muted` | Dimmed secondary text (also a neutral status) |
141
144
  | `.mote-note` + status class | Tinted message surfaces |
142
- | `.mote-success` · `.mote-warning` · `.mote-error` · `.mote-info` | Pure status tokens: they only set `--mote-status` / `--mote-status-soft`, so one override re-skins every note, badge and toast |
145
+ | `.mote-success` · `.mote-warning` · `.mote-error` · `.mote-info` | Pure status tokens: they only set `--mote-status` / `--mote-status-soft`, so one override re-skins inheriting content surfaces; gated actions and badges use their own status |
143
146
 
144
147
  ## Components
145
148
 
@@ -172,7 +175,7 @@ mote is class-optional by design — elements are styled from tags alone; these
172
175
  | Skip link | `.mote-skip-link` — sr-only until focused, then a fixed pill |
173
176
  | Print helpers | `.mote-no-print` / `.mote-print-only` |
174
177
  | Theme-switch guard | `.mote-theme-switch` — prevents Chromium stale-color bug on `data-theme` flips |
175
- | Status inheritance control | `.mote-default` (force accent) · `.mote-reset` (clear inherited status) |
178
+ | Status inheritance control | `.mote-default` (set inherited accent status tokens for inheriting surfaces) · `.mote-reset` (clear inherited status) |
176
179
  | Hero offset | `--mote-hero-offset` (default 12rem) — space for header/footer in `.mote-hero` |
177
180
  | Table max height | `--mote-table-max` (default 60vh) — `.mote-table-scroll` panel cap |
178
181
  | Stack gap | `--mote-stack-gap` (default 1.25rem) — `.mote-stack` vertical rhythm |
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * mote.components.css — opt-in components for mote.css.
3
- * v0.10.3 · MIT
3
+ * v0.10.5 · 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).
package/mote.css CHANGED
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * mote.css — a mote of styling for plain HTML.
3
- * v0.10.3 · MIT
3
+ * v0.10.5 · 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.3",
3
+ "version": "0.10.5",
4
4
  "bugs": {
5
5
  "url": "https://gitlab.com/abmach/mote/-/issues"
6
6
  },