Skip to content

Refactor typography and settings with new token structure - #66

Merged
minimaldesign merged 25 commits into
mainfrom
element-interface-tokens
Aug 14, 2026
Merged

Refactor typography and settings with new token structure#66
minimaldesign merged 25 commits into
mainfrom
element-interface-tokens

Conversation

@minimaldesign

Copy link
Copy Markdown
Owner

No description provided.

minimaldesign and others added 25 commits August 13, 2026 20:20
Formatting only, no rule changes: selector lists split one per line,
quote style, and light-dark() wrapping, so the token commits that follow
stay reviewable.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New interface tokens --heading-spacing (h1-h3), --heading-spacing-sm
(h4, and the condensed margin when a subheading follows directly), and
--heading-spacing-xs (h5-h6). Same defaults as before; a theme can now
retune heading rhythm from :root instead of overriding element rules.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Completes the link token family (--link-color and --link-color-hover
already existed); same --semi-bold default.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New tokens: --blockquote-padding-block, --blockquote-padding-inline,
--blockquote-background-color, --blockquote-border-radius,
--blockquote-accent-width, --blockquote-accent-color. Same defaults.
The accent bar now uses the background shorthand so a theme can set
either a flat color or a gradient, and the bar's start radii follow
--blockquote-border-radius.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The base code/var/kbd color (what shows inside headings and pre, where
the --text-code-color chip styling doesn't apply) was a hardcoded
light-dark(). Same default.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Raw 0.9rem value, kept as-is: it sits between --text-sm and --text-md
and no scale token matches (same precedent as --toggle-width).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The old --content was declared on the element, so a theme's :root
override could never reach it; only an hr { } rule could. Renamed to
grammar and moved to settings.ui.css. Also swaps the hardcoded 1px
border width for --border-sm.

BREAKING: hr { --content: ... } overrides no longer apply; set
--hr-content instead (at :root or on hr).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New --ins-color and --ins-background-color (the background now goes
through --success-200 instead of the raw --yes-200 scale, per the
semantic-alias convention). del's strikethrough color swaps --no-500
for --danger-500; same computed values everywhere.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The hardcoded 1.5 is exactly --leading-lg, so the token routes through
the existing scale. Joins --body-background-color as a body knob.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Completes the input family (height, padding, radius, invalid color
already existed): the 1px solid --ui-border-color repeated on input,
select, and textarea now goes through tokens. textarea also consumes
--input-padding instead of hardcoding the same --xs3 value.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The gap between a label and the control that follows it was a raw
--xs1. Same default.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New --fieldset-padding, --fieldset-border-width, --fieldset-border-color,
and --fieldset-border-radius; same defaults. The legend-replacement
internals (margin, font size) stay hardcoded as structural details.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The knobs were declared on the element, where a theme's :root override
can never win. They move to settings.ui.css and get grammar-correct
names, with the state colors routed through the semantic aliases:

  --meter-radius      -> --meter-border-radius
  --meter-color-track -> --meter-track-color
  --meter-color-low   -> --meter-low-color    (--no-400 -> --danger-400)
  --meter-color-med   -> --meter-medium-color (--maybe-400 -> --warning-400)
  --meter-color-high  -> --meter-high-color   (--yes-400 -> --success-400)

Same computed values. BREAKING: meter { } overrides of the old names no
longer apply; override the new names (at :root or on meter).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Same reason as meter: element-level declarations blocked :root theme
overrides. --progress-height, --progress-color, and
--progress-track-color keep their names; --progress-radius becomes
--progress-border-radius per grammar. Same defaults.

BREAKING: progress { } overrides of --progress-radius no longer apply;
use --progress-border-radius.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The raw 24px equals --sm3, so the token references the scale. The
derived --split calc stays local to the element. BREAKING: select { }
overrides of the old --icon-size no longer apply; use
--select-icon-size.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New --dialog-min-width, --dialog-max-width, --dialog-padding,
--dialog-border-width, --dialog-border-color,
--dialog-background-color, and --dialog-border-radius join the two
existing backdrop tokens. Same defaults.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New --details-padding, --details-spacing (gap between an open summary
and its content), --details-border-width, --details-border-color,
--details-background-color, --details-border-radius, and
--details-icon-size (24px equals --sm3). Border and background defaults
match dialog on purpose but stay independently overridable; the
padding shorthand collapses the duplicated var(--sm1) var(--sm1).
Same computed values.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
One token covers both caption positions (top or bottom). Also swaps
iframe's hardcoded 1px border width for --border-sm; same values.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The 1px next to the existing --table-border-color was hardcoded in four
places; caption's gap was a raw --xs3. Same defaults.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
--heading-spacing/-sm/-xs leaked which raw step each tier used and
required memorizing the level-to-tier mapping. Now each level has its
own token (--heading-spacing-h1 through -h6), matching the per-level
--heading-1..6 size tokens, and the subheading-follows rule gets an
honest name, --heading-spacing-condensed. The margin-bottom moved into
the existing per-level font-size rules, replacing the three grouped
margin rules; the condensed rule sits after them because it ties them
on specificity and must win by source order. Same defaults as before.

Note: the condensed value keeps its longstanding --sm2 (20px), which is
larger than the 16px h1-h3 default despite the old comment saying
smaller; flagged separately for a design decision.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
New --details-icon token holding the chevron data URL; a theme can
swap it for any url(), data URL or file. The icon is now applied as a
mask painted with currentColor instead of a background image: SVG in
background-image can't resolve currentColor and always rendered black,
which was near-invisible on the dark surface. Also scopes the marker
transition to transform instead of the implicit all.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Same chevron as --details-icon by default but independently
overridable, matching the dialog/details surface-token decision. The
first layer of the mask composite consumes the token; the gradient
layers that carve out the icon zone stay inline.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Heading typography:
- Per-level line-height tokens with a size ramp: h1-h3 follow the
  --heading-line-height master (1.15), h4-h6 get --leading-md
- Spacing defaults switch to em (0.4em, 0.3em consecutive) so the gap
  tracks each heading's own fluid size instead of drifting with it
- --heading-spacing-condensed renamed --heading-spacing-consecutive
- New --heading-letter-spacing (normal), consumed by the display-font
  rule; resolves the display-tracking TODO, whose dead placeholder
  tokens (--tracking-display-md/lg) are deleted
- --heading-1..6 move from settings.tokens.css to settings.ui.css as
  --heading-font-size-h1..h6: they are role-named decisions consuming
  the display scale, not scale steps

Division rules (settings.tokens.css vs settings.ui.css):
- Placement is by name: named for what it IS (scales) in tokens.css,
  named for what it's FOR (decisions) in ui.css; value preference and
  the three legitimate raw-value cases documented in the ui.css header
- Docs updated to match (tokens, themes, ai); the heading-size table
  moves from the tokens page to the elements page headings section
- --toc-icon-size now var(--sm1); shadow-scale upward reference and
  deliberate raw values annotated; --baseline moves into its only
  consumer (help.devtools.css)

Also: wrap widths drop the 200px minmax floor for 0 (blowout guard is
the min's only job; caps are the decision), grid gap responsive values
nest inside :root like the header block, and the figcaption/table
caption comments follow their tokens.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The aspectRatio prop defaulted to golden and always rendered an inline
style, which beat the :root token and any theme override, so
--card-aspect-ratio was dead for Astro-rendered cards. The prop no
longer has a default; unset, the token (and a theme) decides. Docs
updated: prop default is now undefined with the token as fallback, and
the plain-HTML example drops the inline style.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@netlify

netlify Bot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

Name Link
🔨 Latest commit 55bb07e
🔍 Latest deploy log https://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Preview https://deploy-preview-66--mcssdev.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 100
Accessibility: 98
Best Practices: 100
SEO: 97
PWA: 70
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@minimaldesign
minimaldesign merged commit bc7947d into main Aug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant