mote.css 0.5.0 → 0.5.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,28 @@ 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.5.1] - 2026-10-20
9
+
10
+ ### Fixed
11
+
12
+ - Pagination: the current page (`aria-current`) kept its pill state on
13
+ hover — previously the generic link hover overrode the accent pill,
14
+ making "you are here" indistinguishable from hovering any other page.
15
+ The current page now deepens on hover (same accent-mix pattern as solid
16
+ buttons); non-current links keep the soft-tint hover. Docs recommend a
17
+ `<span>` for the current page (you are already there — not a link).
18
+
19
+ ### Added
20
+
21
+ - Logo: a cinematic photograph of a single dust mote floating in warm
22
+ golden sunbeams (docs/img/mote-logo.jpg), integrated into the docs hero.
23
+ - Repositioned from "classless" to "class-optional" throughout — more
24
+ honest now that the library ships ~25 opt-in classes for statuses,
25
+ components, helpers, and layout. The core promise is unchanged:
26
+ zero classes required, semantic elements are the default.
27
+ - Pagination documentation: code sample and live example in the Layout
28
+ section, alongside the breadcrumbs it mirrors.
29
+
8
30
  ## [0.5.0] - 2026-10-20
9
31
 
10
32
  ### Added
@@ -252,6 +274,7 @@ Components:
252
274
  - Element gallery demo page (`demo.html`).
253
275
 
254
276
  [0.3.0]: https://gitlab.com/abmach/mote/compare/v0.2.1...v0.3.0
277
+ [0.5.1]: https://gitlab.com/abmach/mote/compare/v0.5.0...v0.5.1
255
278
  [0.5.0]: https://gitlab.com/abmach/mote/compare/v0.4.0...v0.5.0
256
279
  [0.4.0]: https://gitlab.com/abmach/mote/compare/v0.3.0...v0.4.0
257
280
  [0.3.0]: https://gitlab.com/abmach/mote/compare/v0.2.1...v0.3.0
package/README.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # mote.css
2
2
 
3
- > The smallest thing that can carry style — a tiny, semantic, classless CSS layer for plain HTML.
3
+ > The smallest thing that can carry style — a tiny, semantic, class-optional CSS layer for plain HTML.
4
4
 
5
- A mote of styling for plain HTML: **zero dependencies, zero build step, zero classes required**. Write semantic HTML, drop in one file, and it looks like a place you'd want to stay a while — modern, warm, unobtrusive. Inspired by the quiet excellence of [oat](https://github.com/knadh/oat), with its own cozy voice.
5
+ A mote of styling for plain HTML: **zero dependencies, zero build step, zero classes required** — but opt-in classes exist for statuses, components, and layout when you want them. Write semantic HTML, drop in one file, and it looks like a place you'd want to stay a while — modern, warm, unobtrusive. Inspired by the quiet excellence of [oat](https://github.com/knadh/oat), with its own cozy voice.
6
6
 
7
7
  Source on [GitLab](https://gitlab.com/abmach/mote) · mirrored on [GitHub](https://github.com/abmach/mote).
8
8
 
@@ -23,7 +23,7 @@ Source on [GitLab](https://gitlab.com/abmach/mote) · mirrored on [GitHub](https
23
23
 
24
24
  ## Principles
25
25
 
26
- - **Semantic HTML is the API.** mote styles elements by what they *are* — headings, forms, `dialog`, `menu` — not by the classes they wear. Classes exist only where the platform has no semantic carrier (a "card" is not a semantic concept).
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
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.
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.
@@ -125,7 +125,7 @@ Or self-host with `npm install @fontsource-variable/inter @fontsource/commit-mon
125
125
 
126
126
  ## Opt-in helpers
127
127
 
128
- mote is classless by design; these are the only escape hatches, plus status classes that every status-consuming component reads:
128
+ mote is class-optional by design — elements are styled from tags alone; these classes are opt-in conveniences, never a required API:
129
129
 
130
130
  | Class | Purpose |
131
131
  |---|---|
@@ -141,13 +141,13 @@ mote is classless by design; these are the only escape hatches, plus status clas
141
141
  | Component | Hook |
142
142
  |---|---|
143
143
  | Document layout (landmark grid) | `.mote-doc` on `<body>` — `:has()` reads your `header`/`nav`/`main`/`aside`/`footer` |
144
- | Sticky site header / nav pills | `body > header` — classless; `.mote-header`/`.mote-nav` only for shells wrapped in a `<div>` |
144
+ | Sticky site header / nav pills | `body > header` — semantic; `.mote-header`/`.mote-nav` only for shells wrapped in a `<div>` |
145
145
  | Semantic buttons (gated) | `class="mote-success"` etc. on the button itself — themed sections never recolor actions |
146
146
  | Ghost buttons | `.mote-ghost` — transparent fill; status tints from the button's own class (gated like solids) |
147
147
  | Display text | `.mote-display` — opt-in hero/error-code scale via `--mote-display` |
148
148
  | Content rows | `.mote-row` + `.mote-push` — flex row, right-align helper |
149
149
  | Pagination | `nav[aria-label="pagination"]` — semantic, no class |
150
- | Footer baseline | `body > footer` — classless top-border + padding |
150
+ | Footer baseline | `body > footer` — semantic top-border + padding |
151
151
  | Screen-reader helper | `.mote-sr-only` (doubles as a skip link when focused) |
152
152
  | Status inheritance control | `.mote-default` (force accent) · `.mote-reset` (clear inherited status) |
153
153
  | Breadcrumbs | `nav[aria-label="breadcrumb"]` — semantic, no class |
@@ -1,6 +1,6 @@
1
1
  /*!
2
2
  * mote.components.css — opt-in components for mote.css.
3
- * v0.5.0 · MIT
3
+ * v0.5.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).
@@ -110,7 +110,7 @@
110
110
  /* ---------------------------------------------------------------------------
111
111
  * 6. Site header and nav
112
112
  *
113
- * The page shell is styled classlessly: a header that is a direct
113
+ * The page shell is styled semantically: a header that is a direct
114
114
  * child of <body> is the site bar, its nav the pill row. The classes
115
115
  * exist for the one case landmarks cannot express — a shell wrapped
116
116
  * in a <div> (common with frameworks), where body > header cannot
@@ -200,7 +200,7 @@ nav[aria-label="pagination"] a {
200
200
  transition: background var(--mote-transition), color var(--mote-transition);
201
201
  }
202
202
 
203
- nav[aria-label="pagination"] a:hover {
203
+ nav[aria-label="pagination"] a:hover:not([aria-current]) {
204
204
  background: var(--mote-accent-soft);
205
205
  color: var(--mote-accent-deep);
206
206
  }
@@ -210,6 +210,11 @@ nav[aria-label="pagination"] [aria-current="page"] {
210
210
  color: var(--mote-on-accent);
211
211
  }
212
212
 
213
+ nav[aria-label="pagination"] [aria-current="page"]:hover {
214
+ background: color-mix(in oklab, var(--mote-accent), var(--mote-fg) 14%);
215
+ color: var(--mote-on-accent);
216
+ }
217
+
213
218
  /* Page footer: the quiet sibling of the site header */
214
219
  :where(body > footer, .mote-footer) {
215
220
  margin-block-start: 3rem;
package/mote.css CHANGED
@@ -1,10 +1,10 @@
1
1
  /*!
2
2
  * mote.css — a mote of styling for plain HTML.
3
- * v0.5.0 · MIT
3
+ * v0.5.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:
7
- * framework-agnostic, semantic, classless, zero dependencies.
7
+ * framework-agnostic, semantic, class-optional, zero dependencies.
8
8
  *
9
9
  * MIT License. Fonts (Inter, Commit Mono) are NOT bundled.
10
10
  * See the README for one-line self-hosting instructions.
@@ -625,7 +625,8 @@ progress, meter {
625
625
  /* ---------------------------------------------------------------------------
626
626
  * 11. Opt-in helpers
627
627
  *
628
- * mote is classless by design; these are the only three escape hatches.
628
+ * mote is class-optional by design — elements are styled from tags
629
+ * alone; these classes are opt-in conveniences, never a required API.
629
630
  * ------------------------------------------------------------------------- */
630
631
 
631
632
  /* Centered page wrapper: <main class="mote-container"> */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mote.css",
3
- "version": "0.5.0",
4
- "description": "A mote of styling for plain HTML — tiny, semantic, classless CSS with zero dependencies and no build step.",
3
+ "version": "0.5.1",
4
+ "description": "A mote of styling for plain HTML — tiny, semantic, class-optional CSS with zero dependencies and no build step.",
5
5
  "style": "mote.css",
6
6
  "files": [
7
7
  "mote.css",
@@ -12,7 +12,7 @@
12
12
  ],
13
13
  "keywords": [
14
14
  "css",
15
- "classless",
15
+ "class-optional",
16
16
  "semantic",
17
17
  "framework-agnostic",
18
18
  "dark-mode",