mote.css 0.10.2 → 0.10.4
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 +61 -0
- package/README.md +10 -7
- package/mote.components.css +1 -1
- package/mote.css +9 -2
- package/package.json +4 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,64 @@ 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.4] - 2026-10-25
|
|
11
|
+
|
|
12
|
+
### Fixed (docs — round-10 findings)
|
|
13
|
+
|
|
14
|
+
- **Status inheritance now matches badge gating in the documentation**: the
|
|
15
|
+
status section no longer claims that a badge inherits an ancestor's status,
|
|
16
|
+
and the `.mote-reset` example now uses an inheriting `.mote-note` surface.
|
|
17
|
+
The badge section links back to the gating rules.
|
|
18
|
+
|
|
19
|
+
### Changed (docs — round-10 findings)
|
|
20
|
+
|
|
21
|
+
- Clarified that `.mote-table-scroll` guarantees the complete table is present
|
|
22
|
+
without artificial clipping on paper, not that every matrix fits narrow
|
|
23
|
+
paper. Added an opt-in, document-wide landscape recipe and guidance to check
|
|
24
|
+
generated PDFs for legibility.
|
|
25
|
+
- Expanded the responsive-toolbar recipe to cover label-wrapped controls and
|
|
26
|
+
documented a page-owned sticky-toolbar offset for one- and two-row headers.
|
|
27
|
+
- Documented the default anchored-popover gap, the `--mote-accent` /
|
|
28
|
+
`--mote-on-accent` override pair, own-row navigation for long narrow headers,
|
|
29
|
+
and the boundary between complementary representations and duplicated records.
|
|
30
|
+
|
|
31
|
+
## [0.10.3] - 2026-10-25
|
|
32
|
+
|
|
33
|
+
### Fixed
|
|
34
|
+
|
|
35
|
+
- **Definition lists keep grouped terms and descriptions aligned**: valid
|
|
36
|
+
grouped definition-list markup no longer turns each grouping wrapper into an
|
|
37
|
+
alternating grid cell. Terms and descriptions share aligned columns within
|
|
38
|
+
each list when direct children alternate one term and one description; grouped
|
|
39
|
+
wrappers support one term and one description per group; fixture-pinned.
|
|
40
|
+
- **Form fieldsets no longer force narrow pages sideways**: fieldsets may shrink
|
|
41
|
+
below their intrinsic content width, and file inputs stay within their
|
|
42
|
+
container; fixture-pinned.
|
|
43
|
+
|
|
44
|
+
### Changed (docs — round-9 findings)
|
|
45
|
+
|
|
46
|
+
- Added responsive-composition guidance for grids, toolbars, and narrow header
|
|
47
|
+
navigation, including a page-owned toolbar recipe; wide reference tables now
|
|
48
|
+
use contained scroll regions instead of widening the page.
|
|
49
|
+
- Documented the choice between a contained scrolling table and a semantic
|
|
50
|
+
record layout for narrow screens.
|
|
51
|
+
- Added a dedicated print-and-paper section covering screen/paper helpers,
|
|
52
|
+
table expansion, disclosures, and page-break rules.
|
|
53
|
+
- Added a long-form reading recipe with a companion table of contents and
|
|
54
|
+
numbered references with backlinks.
|
|
55
|
+
- Documented direct and grouped definition-list structures.
|
|
56
|
+
|
|
57
|
+
### Evaluation
|
|
58
|
+
|
|
59
|
+
- Ninth round: ten independent agents built ten new page types against
|
|
60
|
+
v0.10.2. All ten would use mote again, and every final page kept
|
|
61
|
+
page-level horizontal overflow at zero. The round exposed the grouped
|
|
62
|
+
definition-list defect and the documentation gaps fixed here. Narrow
|
|
63
|
+
documentation verification also exposed the fieldset/file-input overflow
|
|
64
|
+
fixed above.
|
|
65
|
+
|
|
8
66
|
## [0.10.2] - 2026-10-24
|
|
9
67
|
|
|
10
68
|
### Fixed
|
|
@@ -661,10 +719,13 @@ Components:
|
|
|
661
719
|
- Opt-in helpers: `.mote-container`, `.mote-muted`, `.mote-note` surfaces.
|
|
662
720
|
- Element gallery demo page (`demo.html`).
|
|
663
721
|
|
|
722
|
+
[Unreleased]: https://gitlab.com/abmach/mote/compare/v0.10.4...HEAD
|
|
723
|
+
[0.10.4]: https://gitlab.com/abmach/mote/compare/v0.10.3...v0.10.4
|
|
664
724
|
[0.3.0]: https://gitlab.com/abmach/mote/compare/v0.2.1...v0.3.0
|
|
665
725
|
[0.8.0]: https://gitlab.com/abmach/mote/compare/v0.7.0...v0.8.0
|
|
666
726
|
[0.9.0]: https://gitlab.com/abmach/mote/compare/v0.8.0...v0.9.0
|
|
667
727
|
[0.9.1]: https://gitlab.com/abmach/mote/compare/v0.9.0...v0.9.1
|
|
728
|
+
[0.10.3]: https://gitlab.com/abmach/mote/compare/v0.10.2...v0.10.3
|
|
668
729
|
[0.10.2]: https://gitlab.com/abmach/mote/compare/v0.10.1...v0.10.2
|
|
669
730
|
[0.10.1]: https://gitlab.com/abmach/mote/compare/v0.10.0...v0.10.1
|
|
670
731
|
[0.10.0]: https://gitlab.com/abmach/mote/compare/v0.9.1...v0.10.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
|
|
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;
|
|
64
|
-
--mote-
|
|
65
|
-
--mote-
|
|
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.
|
|
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
|
|
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` (
|
|
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 |
|
package/mote.components.css
CHANGED
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
|
+
* v0.10.4 · 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:
|
|
@@ -285,10 +285,13 @@ li::marker {
|
|
|
285
285
|
|
|
286
286
|
dl {
|
|
287
287
|
display: grid;
|
|
288
|
-
grid-template-columns: auto 1fr;
|
|
288
|
+
grid-template-columns: auto minmax(0, 1fr);
|
|
289
289
|
gap: 0.4rem 1.5rem;
|
|
290
290
|
}
|
|
291
291
|
|
|
292
|
+
/* Grouping wrappers are structural, not grid items. */
|
|
293
|
+
dl > div { display: contents; }
|
|
294
|
+
|
|
292
295
|
dt { font-weight: 600; }
|
|
293
296
|
|
|
294
297
|
dd {
|
|
@@ -418,7 +421,9 @@ label {
|
|
|
418
421
|
cursor: pointer;
|
|
419
422
|
}
|
|
420
423
|
|
|
424
|
+
/* Fieldsets default to min-content and can force a narrow page sideways. */
|
|
421
425
|
fieldset {
|
|
426
|
+
min-inline-size: 0;
|
|
422
427
|
padding: 1rem 1.2rem;
|
|
423
428
|
border: var(--mote-border-width) solid var(--mote-border);
|
|
424
429
|
border-radius: var(--mote-radius);
|
|
@@ -484,7 +489,9 @@ select[multiple] {
|
|
|
484
489
|
height: 2.4rem;
|
|
485
490
|
}
|
|
486
491
|
|
|
492
|
+
/* Native file controls have a wide intrinsic size; keep them inside their parent. */
|
|
487
493
|
[type="file"] {
|
|
494
|
+
max-width: 100%;
|
|
488
495
|
padding: var(--mote-control-pad, 0.5rem) var(--mote-control-pad-inline, 0.75rem);
|
|
489
496
|
background: none;
|
|
490
497
|
border-style: dashed;
|
package/package.json
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mote.css",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.4",
|
|
4
|
+
"bugs": {
|
|
5
|
+
"url": "https://gitlab.com/abmach/mote/-/issues"
|
|
6
|
+
},
|
|
4
7
|
"description": "A mote of styling for plain HTML \u2014 tiny, semantic, class-optional CSS with zero dependencies and no build step.",
|
|
5
8
|
"style": "mote.css",
|
|
6
9
|
"files": [
|