Skip to content
This repository was archived by the owner on Aug 22, 2026. It is now read-only.

Fix three override-layer regressions and add an opt-in Style Settings section - #2

Open
RoversX wants to merge 6 commits into
linuz90:mainfrom
RoversX:feat/tab-divider-option
Open

Fix three override-layer regressions and add an opt-in Style Settings section#2
RoversX wants to merge 6 commits into
linuz90:mainfrom
RoversX:feat/tab-divider-option

Conversation

@RoversX

@RoversX RoversX commented Aug 20, 2026

Copy link
Copy Markdown

Thank you for making this. I finally have a sufficiently simple theme. Three fixes where mnml's override layer was fighting Minimal or itself, plus three opt-in refinements.

Frame 1 (3)

Fixes

  • e440a78 — mnml's tab block has the same specificity as Minimal's tabs-modern rule and lands after it, so it re-drew the divider Modern deliberately removes. Now scoped to body.tabs-modern.
  • db5dcd6.inline-title restated font and size instead of reading the --inline-title-* variables, so Minimal's Style Settings controls for the title did nothing. Also drops opacity: 0.72, which washed out any colour set through them.
  • 7c33997 — the properties heading kept its default size and --text-normal, so it outranked the muted note title directly above it.

Additions

  • 49a10a3 — mnml's first @settings block: hide the tab bar divider, prominent note title, fade sidebar scroll edges, fade the note scroll edge.
  • 55f84de — a fifth option: round modal buttons.
  • f6604b2 — a hairline under the note header, using the divider width and colour already in the theme. It stands down when the note fade is on, so the two treatments never stack.

Every Style Settings option is off by default.

Default appearance changes

Two, each droppable on its own:

  1. db5dcd6 — the inline title is slightly brighter.
  2. f6604b2 — the new hairline. This is the opinionated one.

Tested on macOS with translucency, toggling each option, and checking the note fade against the editor caret, [[ autocomplete, and hover previews.

Happy to split this up or drop anything you don't want.

Minimal turns the tab strip divider off for its Modern tab style so the
tabs read as detached chips. mnml's own tab variable block has identical
specificity (0,4,0) and is concatenated after the upstream base, so it
silently won and drew the hairline back, re-attaching the tabs to the
note.

Scope an override to body.tabs-modern so the chosen tab style wins. The
selector sits a specificity band above the base rule, which keeps it
correct regardless of how normalize-theme.mjs orders the output.
The body block already defines --inline-title-font, --inline-title-size,
and --inline-title-color, but the .inline-title rule hardcoded the font
and size again from the --mnml-note-identity-* pair. The hardcoded
declarations won, so Minimal's Style Settings controls for inline title
font, size, and color had no effect at all.

Point the rule at the variables it is meant to read. The rendered
defaults are unchanged because those variables already resolve to the
same values.

Also drop the extra opacity: 0.72. Stacking 28% transparency on top of
--text-muted washed out any color chosen through Style Settings, which
defeated the control this commit restores. The title is a touch brighter
as a result; the muted color still carries the quiet treatment.
mnml deliberately mutes the inline title so the filename reads as
context rather than as the loudest heading on the page. The properties
heading directly beneath it was left at its default size, weight, and
--text-normal color, so it became the most prominent text in the note
and inverted the hierarchy the muted title exists to create.

Quieting one element only works if its neighbours are quiet too. Bring
the heading down to the same note-identity register.
mnml had no @settings block of its own, so every choice it made was
fixed. Minimal already ships three such blocks, so a fourth is a natural
fit rather than a new dependency.

All four options are off by default, which keeps the rendered appearance
unchanged for anyone who does not open Style Settings:

- Hide the tab bar divider, for a seamless strip under tab styles that
  do not already drop it.
- Prominent note title, for readers who want the filename to carry the
  page. It sets colour only, so it never overwrites a size or weight
  picked through Minimal's own inline title controls.
- Fade sidebar scroll edges. The file list is a scroll container whose
  overflow boundary slices rows in half against the toolbar above and
  the vault profile below.
- Fade the note scroll edge, for the same seam where a note passes under
  its header.

The fades use mask-image rather than an overlay: a mask removes pixels
instead of painting over them, so macOS vibrancy survives behind the
sidebar. Their gradient distance is shared through --mnml-scroll-fade.

Each toggle selector carries a body class, placing it a specificity band
above the rule it overrides, so the ordering normalize-theme.mjs applies
to the generated file cannot change the outcome.
Minimal leaves the root view header without a bottom border, so a
scrolling note runs ragged straight into the breadcrumb bar with nothing
marking the boundary.

Draw it deliberately with the divider width and colour already used for
the tab strip and backlinks, so no new hardcoded value enters the theme.

A drawn edge and a faded one are alternative answers to the same seam,
so this hairline stands down when the Fade the note scroll edge option
is switched on, and the two treatments never stack.
@RoversX RoversX closed this Aug 20, 2026
The modal close and header buttons are the one piece of dialog chrome
neither Minimal nor mnml had an opinion about, so they kept Obsidian's
default treatment while the rest of the theme moved to softer shapes.

Add a fifth Style Settings toggle, off by default like the others, that
draws both as circular targets. Their background appears only on hover
or keyboard focus, matching how mnml already treats the status bar, tab
close buttons, and backlink controls: quiet at rest, responsive on
contact.

Two details the implementation has to handle:

- Obsidian declares corner-shape from --corner-shape to give its
  controls a squircle, which renders a 50% radius as a superellipse
  rather than a circle. The rule retargets that variable rather than the
  property, because corner-shape is too new for the pinned Stylelint and
  normalize-theme.mjs treats an unknown property as a build error.
- The box is squared explicitly, with matching min and max bounds, no
  padding or border, and align-self: center, so the circle survives
  whatever sizing the core stylesheet gives these elements now or later.

Also fix the Style Settings table intro, which still said mnml adds one
option of its own while listing four.
@RoversX RoversX reopened this Aug 20, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant