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.

minimaldesignand 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

netlifyBot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

NameLink
🔨 Latest commit55bb07e
🔍 Latest deploy loghttps://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Previewhttps://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 mainAug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for freeto 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

@minimaldesign
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Refactor typography and settings with new token structure by minimaldesign · Pull Request #66 · minimaldesign/mCSS · GitHub
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.

minimaldesignand 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

netlifyBot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

NameLink
🔨 Latest commit55bb07e
🔍 Latest deploy loghttps://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Previewhttps://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 mainAug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for freeto 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

@minimaldesign
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Refactor typography and settings with new token structure by minimaldesign · Pull Request #66 · minimaldesign/mCSS · GitHub
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.

minimaldesignand 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

netlifyBot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

NameLink
🔨 Latest commit55bb07e
🔍 Latest deploy loghttps://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Previewhttps://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 mainAug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for freeto 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

@minimaldesign
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Refactor typography and settings with new token structure by minimaldesign · Pull Request #66 · minimaldesign/mCSS · GitHub
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.

minimaldesignand 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

netlifyBot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

NameLink
🔨 Latest commit55bb07e
🔍 Latest deploy loghttps://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Previewhttps://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 mainAug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for freeto 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

@minimaldesign
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Refactor typography and settings with new token structure by minimaldesign · Pull Request #66 · minimaldesign/mCSS · GitHub
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.

minimaldesignand 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

netlifyBot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

NameLink
🔨 Latest commit55bb07e
🔍 Latest deploy loghttps://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Previewhttps://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 mainAug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for freeto 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

@minimaldesign
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Refactor typography and settings with new token structure by minimaldesign · Pull Request #66 · minimaldesign/mCSS · GitHub
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.

minimaldesignand 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

netlifyBot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

NameLink
🔨 Latest commit55bb07e
🔍 Latest deploy loghttps://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Previewhttps://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 mainAug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for freeto 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

@minimaldesign
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Refactor typography and settings with new token structure by minimaldesign · Pull Request #66 · minimaldesign/mCSS · GitHub
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.

minimaldesignand 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

netlifyBot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

NameLink
🔨 Latest commit55bb07e
🔍 Latest deploy loghttps://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Previewhttps://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 mainAug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for freeto 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

@minimaldesign
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Refactor typography and settings with new token structure by minimaldesign · Pull Request #66 · minimaldesign/mCSS · GitHub
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.

minimaldesignand 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

netlifyBot commented Aug 14, 2026

Copy link
Copy Markdown

Deploy Preview for mcssdev ready!

NameLink
🔨 Latest commit55bb07e
🔍 Latest deploy loghttps://app.netlify.com/projects/mcssdev/deploys/6a7fa7b2963eb000089b0239
😎 Deploy Previewhttps://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 mainAug 14, 2026
4 of 5 checks passed
@minimaldesign
minimaldesign deleted the element-interface-tokens branch August 14, 2026 23:42
Sign up for freeto 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

@minimaldesign