Skip to main content

Theming

Marginalia ships with defaults derived from Infima — Docusaurus's CSS variable system — so it picks up your site's accent color and dark-mode palette automatically.

Override hooks

Each surface is driven by a --marginalia-* variable. Override any of them on :root in src/css/custom.css:

:root {
--marginalia-accent: #4f46e5;
--marginalia-accent-soft: #eef2ff;
--marginalia-accent-strong: #3730a3;
--marginalia-danger: #dc2626;
--marginalia-surface: #ffffff;
--marginalia-border: #e5e7eb;
--marginalia-text: #1f2937;
--marginalia-heading: #111827;
--marginalia-muted: #6b7280;
--marginalia-font-mono: ui-monospace, monospace;
--marginalia-font-serif: 'Iowan Old Style', Georgia, serif;
--marginalia-navbar-offset: 60px;
}

Dark mode

Wrap overrides in [data-theme='dark']:

[data-theme='dark'] {
--marginalia-accent: #8b5cf6;
--marginalia-surface: #111827;
--marginalia-border: #374151;
--marginalia-text: #e5e7eb;
--marginalia-heading: #f9fafb;
--marginalia-muted: #9ca3af;
}

Variable reference

VariableMaps to (default)Purpose
--marginalia-accent--ifm-color-primaryAnchor underline, hot border
--marginalia-accent-soft--ifm-color-primary-lightestlink kind swatch
--marginalia-accent-strong--ifm-color-primary-darkercode swatch, PUT/PATCH chip
--marginalia-danger--ifm-color-dangerwarning / endpoint swatch
--marginalia-surface--ifm-card-background-colorCard + TOC background
--marginalia-border--ifm-color-emphasis-300Card border, dividers
--marginalia-text--ifm-font-color-baseBody text inside cards
--marginalia-heading--ifm-heading-colorCard titles
--marginalia-muted--ifm-color-emphasis-700Kind labels, muted copy
--marginalia-font-mono--ifm-font-family-monospaceKind labels, pills, endpoint
--marginalia-font-serif--ifm-font-family-baseCard titles
--marginalia-navbar-offset--ifm-navbar-heightSticky TOC offset

Swizzling

For structural changes beyond CSS variables, swizzleswizzle Docusaurus's mechanism for customizing theme components by ejecting or wrapping them in your project. any of the components:

npm run swizzle docusaurus-plugin-marginalia Marginalia/Aside -- --eject

Eject is the only supported mode — the components aren't built with a wrap seam today.