Replace depth-specific L1 rules (0.1lh/0 for active/inactive)
with single rule on .HyperMD-codeblock-begin: 0.4lh at all times.
No more cm-active reset — same trim whether cursor is in block or not.
- Rewrite content-line section with compound selectors on .cm-line
(no descendant whitespace before :not()/:has())
- Add Level 3 content rule
- Replace inset-block-start: 50% with 0.2lh for hidden opening fence
- Add cm-active variant keeping full background while editing
* fix: balanced padding below bullet lists and blockquotes (#45)
Lists and blockquotes had top spacing but no matching bottom
spacing in both reading and live preview modes.
- Reading mode: added margin-bottom to lists (0.8em) and
blockquotes (0.6em)
- Reading mode: added paragraph-before-list spacing (0.8em)
symmetric with existing heading-before-list rule
- Live preview: added padding-top on paragraph after list (0.8em)
- Live preview: added padding-top on paragraph after blockquote
(0.6em)
* fix: use margin-bottom on blockquote lines for external spacing
Live preview: margin-bottom on .HyperMD-quote creates external
space after the blockquote box (beyond the internal padding-bottom).
Reading mode: margin-bottom already on .markdown-rendered blockquote.
Removed the next-sibling padding-top approach — selector chain
may not match actual Obsidian DOM.
* fix: use ::after pseudo-element for blockquote bottom spacing
CM6 measures padding for layout but NOT margins. Previous
margin-bottom approach had no effect. ::after with display:block
and height:0.6em (plus background:--background-primary to mask the
blockquote bg) creates visible transparent gap after the last quote
line. Hidden on consecutive quotes.
* fix: add .cm-content to blockquote sibling selectors for correct specificity
Prior live preview blockquote→paragraph rule was missing
.cm-content in selector chain, giving specificity (0,2,2)
vs the working pattern (0,3,4). Added .cm-content and
restored padding-top approach (::after doesn't work in CM6).
Also added reading mode paragraph-after-blockquote rule for
safety (blockquote + div.el-p with padding-top).
* fix: use transparent border-bottom for blockquote external spacing
padding-bottom and margin-bottom failed. border-bottom uses same
box model as padding (measured by CM6) but with background-clip:
padding-box the background stops at padding edge, so the border
area is transparent — creating visible gap after blockquote bg.
Removed padding-top on next sibling approach entirely.
Reading mode margin-bottom + paragraph sibling rule kept.
* fix: use .mod-cm6 .cm-editor selector for blockquote padding-bottom
The heading padding-bottom rule at .mod-cm6 .cm-editor .HyperMD-header
works. Using IDENTICAL selector for .HyperMD-quote — same specificity,
same cascade position, same CM6 layout measurement.
Reading mode: blockquote gets margin-bottom + blockquote+div.el-p
with padding-top for paragraph-after-blockquote spacing.
* fix(blockquote): drop shadow accent + border-bottom gap
Replace border-left accent with box-shadow drop shadow to avoid W3C
corner artifact between different-width borders. Colored border-bottom
provides structural gap drawn on top of shadow — accent curves with
radius then gets cleanly covered at corner.
Also:
- swap heading font Syne→Orbitron
- add explicit heading font-family rules
* fix: code block border-radius — single-line bump, multi-line flat corners
Replace all-lines bottom-radius + + .HyperMD-codeblock reset
with :has(+ *:not(.HyperMD-codeblock)) for last-line only.
First line keeps :not(.HyperMD-codeblock) + .HyperMD-codeblock
for top-radius. Same pattern as blockquote fix.
* feat(font): custom heading font via local woff2 file
- headings-font.woff2 (Exo 2) replaces base64-embedded font
- @font-face points to local file, family='HeadingFont'
- delete orphaned DMSerifDisplay.woff2
- README: add swap instructions (replace file, keep name)
Closes#47
---------
Co-authored-by: nmn <punkyard@users.noreply.github.com>
* fix: kill native checkbox appearance on checked states; add cancelled styling
- Expand live preview base rule from :not(:checked) to all
input[type='checkbox'] so appearance: none applies to checked
states too — stops native checkmark leaking through behind
the pseudo-element mark on [x] and [v]
- Add [-] / [–] (cancelled/rejected) state: muted background,
accent ✕ mark, faint + strikethrough text
- Update section header
* fix: match Obsidian :checked specificity to kill native appearance
- Add explicit .HyperMD-list-line input:checked rule at (0,2,1)
specificity to beat Obsidian default :checked appearance:auto
- Also add .markdown-preview-view .task-list-item-checkbox:checked
for reading mode parity
* fix: kill Obsidian default ::after SVG checkmark causing dual-mark rendering
Obsidian's core CSS draws a checkmark on ALL :checked inputs via
::after with a -webkit-mask-image SVG. Our theme's ::after characters
(✕ / ✔) rendered on top, but the SVG mask checkmark showed through
behind — causing 'x behind v' / dual-mark appearance.
Fix: add .HyperMD-list-line input[type="checkbox"]:checked::after
and .markdown-preview-view .task-list-item-checkbox:checked::after
rules at (0,2,2) specificity to mask-image: none + background:
transparent, suppressing the default checkmark entirely.
* fix: all checkbox backgrounds use --background-primary, [x] shows check not X
- Remove colored backgrounds from all checkbox states — use
--background-primary so surface matches window color
- [x] done: show ✔ instead of ✕, accent border + accent mark
- [v] selected: show ✔ with transparent background (was accent fill)
- [-] cancelled: muted border + muted ✕ mark
- All marks visible on surface background
---------
Co-authored-by: nmn <punkyard@users.noreply.github.com>
- Drop body prefix from structural border selectors (was lowering specificity)
- Add back !important on all border-removal rules (required to override Obsidian defaults)
- Restore .workspace-split section that was accidentally removed
- Remove --list-marker-color override so bullets use default (text-faint)
- Keep modal backdrop fade at 10%/5% from 0.1.4
- rm unprefixed mask-* props (unsupported in O 1.4.5 Chromium)
- replace :has(+ .HyperMD-quote) with adjacent sibling selector
- drop !important on 45 rules using body prefix for specificity
- keep !important on heading spacing, code blocks, checkboxes (required to override Obsidian defaults)