Configuration Reference

Supa Maven Skin is configured inside the <custom><supaSkin>...</supaSkin></custom> element of your src/site/site.xml descriptor (legacy <furoSkin> is also supported). All settings are optional and have sensible defaults matching Sphinx Furo.

[!TIP] Accessible Color Schemes & Custom Brand Colors Choose from 6 built-in WCAG 2.2 AA & AAA accessible color schemes via <colorScheme>, and layer custom brand tokens on top of any scheme using <lightCssVariables> and <darkCssVariables>.

Interactive Accessible Color Scheme Preview

Click any color scheme card below (or use the palette selector in the top header bar) to live-preview this documentation site across all 6 built-in palettes and Light/Dark/Auto polarities:

Full site.xml Example

<custom>
  <supaSkin>
    <!-- Theme Polarity & Accessible Color Scheme -->
    <defaultTheme>auto</defaultTheme>
    <colorScheme>furo</colorScheme>
    <colorSchemeSelector>true</colorSchemeSelector>
    <sidebarHideName>false</sidebarHideName>
    <sidebarBrandAlign>center</sidebarBrandAlign>
    <lightLogo>images/logo-light.svg</lightLogo>
    <darkLogo>images/logo-dark.svg</darkLogo>
    <announcement>Version 1.0 is now available!</announcement>

    <!-- Source Repository Links -->
    <sourceRepository>https://github.com/mepcotterell/supa-maven-skin</sourceRepository>
    <sourceBranch>main</sourceBranch>
    <sourceDirectory>src/site</sourceDirectory>
    <sourceViewButton>true</sourceViewButton>
    <sourceEditButton>true</sourceEditButton>

    <!-- Layout, Drawers & Navigation -->
    <breadcrumb>true</breadcrumb>
    <stickyContentHeader>false</stickyContentHeader>
    <tocSidebar>true</tocSidebar>
    <tocTitle>On this page</tocTitle>
    <tocMaxDepth>4</tocMaxDepth>
    <prevNextButtons>true</prevNextButtons>
    <sidebarCollapseDepth>1</sidebarCollapseDepth>
    <drawerScroll>false</drawerScroll>
    <drawerBackdrop>true</drawerBackdrop>
    <sidebarDrawerScroll>false</sidebarDrawerScroll>
    <sidebarDrawerBackdrop>true</sidebarDrawerBackdrop>
    <tocDrawerScroll>false</tocDrawerScroll>
    <tocDrawerBackdrop>true</tocDrawerBackdrop>
    <footerTimestamp>true</footerTimestamp>
    <footerVersion>true</footerVersion>

    <!-- Language & Labels (see "Labels" below; a label left out stays English) -->
    <language>en</language>
    <labels>
      <searchPlaceholder>Search the guides...</searchPlaceholder>
    </labels>

    <!-- Footer Icon Links -->
    <navIcons>
      <icon>
        <href>https://github.com/mepcotterell/supa-maven-skin</href>
        <title>GitHub Repository</title>
        <html><![CDATA[<i class="bi bi-github" aria-hidden="true"></i>]]></html>
      </icon>
    </navIcons>

    <!-- Interactive Enhancements -->
    <copyCodeButton>true</copyCodeButton>
    <syntaxHighlighting>true</syntaxHighlighting>
    <headingPermalinks>true</headingPermalinks>
    <headingPermalinkSymbol>#</headingPermalinkSymbol>
    <search>true</search>
    <mermaid>auto</mermaid>
    <katex>auto</katex>
    <!-- Leave <mermaidCdnUrl>, <katexCssCdnUrl>, and <katexJsCdnUrl> unset to use the
         pinned, SRI-verified jsDelivr defaults (see "Self-Hosting Mermaid & KaTeX"
         in the Authoring Guide). -->

    <!-- Custom Light/Dark CSS Tokens (layered on top of <colorScheme>) -->
    <lightCssVariables>
      <color-brand-primary>#1d50d8</color-brand-primary>
      <color-brand-content>#1d50d8</color-brand-content>
    </lightCssVariables>
    <darkCssVariables>
      <color-brand-primary>#589bf7</color-brand-primary>
      <color-brand-content>#6ba6ff</color-brand-content>
    </darkCssVariables>
  </supaSkin>
</custom>

Configuration Options

All <supaSkin> options are grouped below by functional area.

Theme & Branding

Controls the initial Light/Dark polarity, accessible color scheme preset, and left-sidebar brand header (.supa-sidebar-brand).

Option Default Description
<defaultTheme> auto Initial light/dark polarity before user selection (auto, light, or dark).
<colorScheme> furo Default accessible color scheme preset (furo, bootstrap, modus, modus-tinted, modus-deuteranopia, or modus-tritanopia).
<colorSchemeSelector> true Render the accessible color scheme selector: a menu in the content header utility bar (lg+) and the mobile header (768px–1023px), and a native <select> in the sidebar drawer's Appearance footer (below lg). The menu trigger shows the active scheme's name, such as Furo (AA) (the configured <colorScheme> until a reader picks another), and its accessible name and tooltip are Color scheme: Furo (AA), so voice-control users can say what they see (WCAG 2.5.3 Label in Name).
<sidebarBrandAlign> center Horizontal alignment of the sidebar brand logo, project title, and version badge (center, left / start, or right / end).
<sidebarHideName> false Hide the project name text under the logo in the left sidebar.
<lightLogo> (empty) Relative path or URL to the logo shown when the resolved theme is light.
<darkLogo> (empty) Relative path or URL to the logo shown when the resolved theme is dark.

Source Repository

Configures the “View page source” and “Edit this page” action buttons in the top content header bar.

Option Default Description
<sourceRepository> (empty) GitHub, GitLab, or Gitea repository URL used to build page source links.
<sourceBranch> main Git branch name used when constructing source view and edit URLs.
<sourceDirectory> src/site Relative path to the Maven site directory inside the repository.
<sourceViewButton> true Show the “View page source” icon button when <sourceRepository> is configured.
<sourceEditButton> true Show the “Edit this page” icon button when <sourceRepository> is configured.

Layout & Navigation

Configures the top announcement banner, breadcrumbs, left sidebar menu tree, right-hand ScrollSpy table of contents, and bottom page navigation cards.

Option Default Description
<announcement> (empty) Top announcement banner HTML rendered above the page header.
<breadcrumb> true Render the breadcrumb navigation trail in the top content utility bar.
<stickyContentHeader> false Pin the top content utility bar (breadcrumbs, source links, palette picker, theme toggle) to the top of the viewport on lg+ (1024px) screens. Adds .supa-sticky-content-header to <body>; heading anchors and ScrollSpy offset by --supa-content-header-height. Below lg, the mobile header is already sticky.
<sidebarCollapseDepth> 1 Menu nesting depth expanded by default in the left sidebar (<details open>).
<tocSidebar> true Enable the right-hand “On this page” table of contents column and right drawer (#supaTocDrawer).
<tocTitle> On this page Heading label for the right-hand table of contents. Also names the TOC landmark (<aside>) and its <nav> for screen readers. A shorthand for the tocTitle label: when both are set, <labels><tocTitle> wins. The TOC drawer buttons are named by the separate tocToggle label, so a translated site sets that too.
<tocMaxDepth> 4 Maximum heading level (2–6) included in the right-hand TOC.
<prevNextButtons> true Render Furo-styled Previous / Next page navigation cards at the bottom of articles.

Language & Labels

Sets the page language and replaces the English text of the skin's own interface. Supa Maven Skin ships no translations: a site supplies its own text for any label it wants to change, and every other label stays English.

Option Default Description
<language> (empty) Language of the site's pages as a BCP 47 tag (de, pt-BR; the Java form pt_BR is accepted and written as pt-BR), written to <html lang>. It applies only to pages Maven renders without a locale: when <locales> lists a language (<locales>default,fr</locales> renders French under /fr/), that locale names the language of its pages and <language> is ignored. With neither, lang is en. A value that is not shaped like a language tag (a 2- or 3-letter language, then --separated subtags of up to 8 letters or digits; de DE is not) is ignored, and lang is en.
<labels> (empty) One child element per label to override, named by its key: <labels><search>Suche</search></labels>. Values are plain text, always HTML-escaped: an escaped character such as &lt; or text in a CDATA section shows as typed. An element inside a label, such as <b>, makes the skin ignore that label: it keeps the English text and the browser console names the key. An empty element keeps the English label too. A key the skin does not know, such as a misspelled <serchPlaceholder>, changes nothing and is reported in one browser-console warning.

Labels

Each key below is a <labels> child element. {name} placeholders are filled in by the skin, and a translation can move them anywhere in its sentence: the links in the footer and the date stay the skin's own, so a site translates only the words around them. The color-scheme names never carry their WCAG level: the skin always appends (AA) or (AAA), which a site cannot change because the build audits it. Each control has one label, used for both its tooltip and its accessible name, so the name always contains the text a reader sees (WCAG 2.5.3 Label in Name).

The Set by column tells where a label is written: template labels are in the HTML Maven renders; script labels are added in the browser, where an overridden value reaches the scripts as a data-supa-label-<key> attribute on <body>, with the key in kebab case (searchNoResults becomes data-supa-label-search-no-results); both labels are rendered first and then rewritten by the scripts.

Page Chrome & Navigation

Key English default Placeholders Where it shows Set by
skipToContent Skip to content Skip link, the first stop of the keyboard tab order. template
announcementRegion Announcement Accessible name of the <announcement> banner region. template
brandFallback Documentation Sidebar and mobile-header brand text when neither site.xml nor pom.xml names the site. template
logoAlt Logo Alternative text of a single <lightLogo>, and of a <bannerLeft> image without a name. template
logoLightAlt Light Logo Alternative text of <lightLogo> when <darkLogo> is also set. template
logoDarkAlt Dark Logo Alternative text of <darkLogo>. template
navSidebarToggle Toggle navigation sidebar Mobile-header button that opens the navigation drawer (tooltip and name). template
navDrawerTitle Navigation Title of the navigation drawer below lg. template
navDrawerClose Close navigation Close button of the navigation drawer. template
navPrimary Primary navigation Accessible name of the left sidebar landmark. template
navSite Site navigation Accessible name of the sidebar menu tree. template
navSectionToggle {name} section {name}: the menu item's name Expand/collapse toggle of a linked sidebar menu item with children. template
navAppearance Appearance Heading of the theme and color-scheme controls in the navigation drawer. template
breadcrumb Breadcrumb Accessible name of the breadcrumb trail. template
breadcrumbHome Home First breadcrumb when neither site.xml nor pom.xml names the site. template
pageNav Page navigation Accessible name of the Previous / Next cards. template
pagePrevious Previous Previous page card. template
pageNext Next Next page card. template
sourceView View page source Source button in the content header (tooltip and name). template
sourceEdit Edit this page Edit button in the content header (tooltip and name). template
backToTop Back to top Floating back-to-top button (visible text, tooltip, and name). script

Table of Contents & Permalinks

Key English default Placeholders Where it shows Set by
tocTitle On this page TOC heading, drawer title, and the names of the TOC landmark and its <nav>. Also settable with <tocTitle>. template
tocToggle Toggle table of contents Buttons that open the TOC drawer below xl (tooltip and name). template
tocDrawerClose Close table of contents Close button of the TOC drawer. template
permalink Permalink to {heading} {heading}: the heading's text Heading permalink anchors (tooltip and name). script

Search

Key English default Placeholders Where it shows Set by
search Search Sidebar search box (visible text, which is also its name). template
searchButton Search documentation Mobile-header search button (tooltip and name) and the name of the search field. template
searchPlaceholder Search documentation... Placeholder of the search field. template
searchClose Close search Close button of the search dialog. template
searchResults Search results Accessible name of the result list. template
searchHint Type to search navigation, headings, and site pages. Search status before anything is typed. both
searchResultCount Results: {count} {count}: the number of results Search status when results are found. script
searchNoResults No results for “{query}” {query}: the search text Search status when nothing matches. script
searchKeysNavigate {keys} to navigate {keys}: the arrow keys Keyboard hint in the search dialog footer. template
searchKeysSelect {keys} to select {keys}: the Enter key Keyboard hint in the search dialog footer. template
searchKeysClose {keys} to close {keys}: the Esc key Keyboard hint in the search dialog footer. template
searchBadgePage Page Badge of a result that is a whole page. script
searchBadgeNav Nav Badge of a result from the sidebar menu. script
searchBadgeSection Section Badge of a result that is a heading. script
searchSectionPage Site Page Section name of a page result the site does not name. script
searchSectionCurrent Current Page Section name of a heading on a page without a title. script
searchSectionNav Navigation Section name of a menu result outside a named menu. script

Theme & Color Scheme

Key English default Placeholders Where it shows Set by
themeTrigger Color theme: {mode} {mode}: themeLight, themeDark, or themeAuto; in the browser, Auto is followed by the theme in effect, as in Auto (Dark) Theme menu button (tooltip and name). both
themeMenu Color theme Accessible name of the theme menu. template
themeLight Light Theme menu item, and {mode} of themeTrigger. both
themeDark Dark Theme menu item, and {mode} of themeTrigger. both
themeAuto Auto Theme menu item, and {mode} of themeTrigger. both
colorScheme Color scheme Accessible name of the color-scheme menu and of the drawer's color-scheme <select>. template
colorSchemeTrigger Color scheme: {name} {name}: the active scheme's name with its WCAG level, such as Furo (AA) Color-scheme menu button (tooltip and name; the button shows {name}). both
colorSchemeStandard WCAG 2.2 AA Standard Group heading of the AA schemes in the menu and the <select>. template
colorSchemeHighContrast WCAG 2.2 AAA High Contrast Group heading of the AAA schemes in the menu and the <select>. template
colorSchemeFuro Furo Name of the furo scheme ((AA) is appended). both
colorSchemeBootstrap Bootstrap 6 Name of the bootstrap scheme ((AA) is appended). both
colorSchemeModus Modus Name of the modus scheme ((AAA) is appended). both
colorSchemeModusTinted Modus Tinted Name of the modus-tinted scheme ((AAA) is appended). both
colorSchemeModusDeuteranopia Modus Deuteranopia Name of the modus-deuteranopia scheme ((AAA) is appended). both
colorSchemeModusTritanopia Modus Tritanopia Name of the modus-tritanopia scheme ((AAA) is appended). both

Footer

Key English default Placeholders Where it shows Set by
footerCopyright Copyright © {years} {organization}. {years}: <inceptionYear>–build year, or one year when they match or <inceptionYear> is unset; {organization}: the pom.xml organization, linked when it has a URL Copyright line, unless site.xml has its own <footer>. An empty placeholder is removed with the space before it. template
footerBuiltWith Built with {maven} and {skin} (Bootstrap 6). {maven}: a link to Maven Site; {skin}: a link to Supa Maven Skin Credit line. template
footerLastUpdated Last updated on {date}. {date}: the build date as yyyy-MM-dd Date line, shown with <footerTimestamp>. template

Code, Copy & Content

These labels are the defaults authors see in their own content: they apply only where the content does not set its own text, such as an admonition without a custom title.

Key English default Placeholders Where it shows Set by
copyCode Copy code Copy button on code blocks (tooltip and name). script
copyCopied Copied! Copy button and heading permalink after a successful copy. script
copyFailed Copy failed Copy button after a failed copy. script
codeShow Show code Code toggle of a .supa-component-preview example while its code is hidden. script
codeHide Hide code Code toggle of a .supa-component-preview example while its code is shown. script
alertDismiss Close Dismiss button of a > [!ALERT:theme dismissible] alert and of #bsAlert. both
tabFallback Tab {n} {n}: the tab's position, from 1 Tab of a .supa-tabs panel without data-tab, title, or a recognized code fence. script
accordionFallback Section {n} {n}: the item's position, from 1 Header of a .supa-accordion item without data-accordion or title. script
admonition Admonition Default title of > [!ADMONITION]. script
admonitionAttention Attention Default title of > [!ATTENTION]. script
admonitionCaution Caution Default title of > [!CAUTION]. script
admonitionDanger Danger Default title of > [!DANGER]. script
admonitionError Error Default title of > [!ERROR]. script
admonitionHint Hint Default title of > [!HINT]. script
admonitionImportant Important Default title of > [!IMPORTANT]. script
admonitionNote Note Default title of > [!NOTE]. script
admonitionSeeAlso See also Default title of > [!SEEALSO]. script
admonitionTip Tip Default title of > [!TIP]. script
admonitionTodo Todo Default title of > [!TODO]. script
admonitionWarning Warning Default title of > [!WARNING]. script

Text that stays English: the text Bootstrap's own widgets write (a chip's “Remove” button, a Combobox's “{n} selected”, and the Datepicker's buttons; the Datepicker's month and day names follow <html lang> unless the widget sets its own data-bs-locale, and widgets with text options, such as a strength meter's messages or a nav overflow's moreText, take them in their own markup), the language names on code blocks, browser-console messages, and the menus and pages of Maven's own reports.

Responsive Drawers

Controls Bootstrap 6 off-canvas <dialog class="drawer"> behavior on tablet and mobile viewports (#supaSidebarDrawer below lg and #supaTocDrawer below xl).

Option Default Description
<drawerScroll> false Default data-bs-scroll (true or false) for both drawers, controlling whether <body> scrolling is enabled while a drawer is open (legacy alias: <drawerBodyScroll>).
<drawerBackdrop> true Default data-bs-backdrop (true, false, or static) for both drawers, controlling whether a backdrop is rendered while a drawer is open.
<sidebarDrawerScroll> $drawerScroll Override data-bs-scroll (true or false) specifically for the left navigation drawer (#supaSidebarDrawer; legacy alias: <sidebarDrawerBodyScroll>).
<sidebarDrawerBackdrop> $drawerBackdrop Override data-bs-backdrop (true, false, or static) specifically for the left navigation drawer (#supaSidebarDrawer).
<tocDrawerScroll> $drawerScroll Override data-bs-scroll (true or false) specifically for the right table of contents drawer (#supaTocDrawer; legacy alias: <tocDrawerBodyScroll>).
<tocDrawerBackdrop> $drawerBackdrop Override data-bs-backdrop (true, false, or static) specifically for the right table of contents drawer (#supaTocDrawer).

Footer & Links

Controls metadata and icon links in the page footer (.supa-footer) and version badge visibility.

Option Default Description
<footerTimestamp> true Display the build/publish date (Last updated on YYYY-MM-DD) in the page footer.
<footerVersion> true Display the project version badge next to the project title in the sidebar.
<navIcons> (empty) List of <icon> elements (<href>, <title>, <html>) rendered as tooltip-enabled icon links on the right side of the page footer (.supa-footer-icons). Write a relative <href> from the site root (faq.html); the skin rewrites it for pages in subdirectories. URLs with a scheme and paths starting with / are used unchanged.

Code, Search, Diagrams & Math

Configures client-side code block enhancements, heading permalinks, offline search, and lazy-loaded Mermaid / KaTeX rendering.

Option Default Description
<copyCodeButton> true Add a Copy-to-Clipboard button to all <pre> code blocks.
<syntaxHighlighting> true Highlight <pre><code> blocks offline using bundled highlight.js.
<headingPermalinks> true Append # permalink anchors to article headings (h2–h6).
<headingPermalinkSymbol> # Symbol rendered inside heading permalink anchors.
<search> true Enable the sidebar search box and / (⌘K / Ctrl+K) search dialog.
<mermaid> auto Lazy-load Mermaid when .mermaid or code.language-mermaid is present (auto, true, or false).
<mermaidCdnUrl> (pinned jsDelivr + SRI) Custom or self-hosted Mermaid URL. Unset, the skin loads https://cdn.jsdelivr.net/npm/mermaid@11.17.2/dist/mermaid.min.js via <script integrity crossorigin="anonymous">. An ES module URL (ending in .mjs or /+esm, or on esm.sh) loads with import(); any other URL loads as a classic <script> that should define window.mermaid (see the note below for ES modules with other names).
<katex> auto Lazy-load KaTeX when $...$ or $$...$$ math expressions are present (auto, true, or false).
<katexCssCdnUrl> (pinned jsDelivr + SRI) Custom or self-hosted KaTeX stylesheet URL. Unset, the skin loads https://cdn.jsdelivr.net/npm/katex@0.16.47/dist/katex.min.css with integrity and crossorigin="anonymous".
<katexJsCdnUrl> (pinned jsDelivr + SRI) Custom or self-hosted KaTeX auto-render URL. Unset, the skin loads katex.min.js then contrib/auto-render.min.js from https://cdn.jsdelivr.net/npm/katex@0.16.47/dist/, each with integrity. An ES module URL (such as auto-render.mjs) loads with import(); a classic auto-render(.min).js URL loads ../katex.min.js from its parent directory first (unless window.katex is already the KaTeX API).

Integrity hashes apply only to the built-in defaults (or to an override that repeats a default URL exactly). Custom URLs load without integrity or crossorigin, so keeping them trustworthy is the consumer site's responsibility.

If a custom URL is an ES module under another name (for example a self-hosted mermaid.esm.js), the skin first runs it as a classic <script>, sees that no window.mermaid or window.renderMathInElement appeared, and then loads it again with import(). Rendering still works, but the browser logs a SyntaxError from the first attempt; rename the file to .mjs to load it as a module directly. The built-in defaults never take this fallback, so they only ever run with SRI.

Once the Mermaid and KaTeX loaders have settled, whether or not they succeeded, the skin sets data-supa-ready="true" on <html>. It also waits for the on-demand scripts of the Bootstrap 6 widgets on the page (such as a Datepicker or Combobox) to load and initialize. Scripts that post-process diagrams or math can wait for it; see Running Scripts After the Skin Initializes.

Self-Hosted URLs

To serve Mermaid and KaTeX from your own site, follow Self-Hosting Mermaid & KaTeX in the Authoring Guide. Give every override a root-relative path (such as /my-project/vendor/mermaid/mermaid.min.js) or an absolute https:// URL. Classic <script src> and <link href> URLs resolve against the current page, and .mjs URLs loaded with import() resolve against js/supa-maven-skin.min.js, so a document-relative value such as vendor/mermaid/mermaid.min.js breaks on pages in subdirectories. A self-hosted classic contrib/auto-render.min.js also loads ../katex.min.js, so keep KaTeX's dist/ layout.

Content Security Policy

Supa Maven Skin emits a static inline <script> in <head> to apply the reader's theme and color scheme before first paint. Allow it by adding this hash to your script-src directive alongside the site's own bundled scripts and widget chunks:

script-src 'self' 'sha256-bFi2dl1DG0ER3uQVQ+giyr3tAmby9eSQ/l78rYKMNRk=';

This is the script allowance, not a complete policy for every page's content. If your policy also declares script-src-elem, include the same allowances there because that directive takes precedence for <script> elements. The hash covers the exact script body, including leading and trailing whitespace, without the <script> tags. It is identical across pages and site configurations: <defaultTheme> and <colorScheme> are read from HTML attributes, not interpolated into the script. For unmodified generated HTML, the hash can change only when the skin version changes; check this reference when upgrading. HTML minification or other deployment processing that changes the script's whitespace also requires a new hash. If the script is blocked, the page can flash the wrong theme or palette before the bundled script initializes it.

The optional css/site.css stylesheet link also has an inline onerror="this.remove()" handler. It removes that link element if the stylesheet fails to load, for example when the consumer site supplies no site.css. The script hash above does not authorize this event handler. A strict policy that blocks inline handlers can leave it blocked: the failed link remains in the DOM and the browser may report a CSP violation, but the skin's main stylesheet still renders the page. Only the failed-link cleanup is lost.

With the default URLs, allow https://cdn.jsdelivr.net in script-src (Mermaid and KaTeX), style-src (katex.min.css), and font-src (KaTeX fonts, which katex.min.css loads relative to itself; fonts are not executable and are not covered by SRI). None of the pinned files fetch further code at runtime, so connect-src needs nothing extra. Self-hosting removes the jsDelivr origin entirely. Mermaid's rendered SVGs carry inline <style> and style attributes, so a style-src without 'unsafe-inline' will leave diagrams unstyled.

Built-In Accessible Color Schemes

Every built-in color scheme is verified at build time by scripts/lint-scss.ts against WCAG 2.2 relative luminance and contrast rules across both Light and Dark polarities: text and accent tokens on the primary (--color-background-primary) and secondary (--color-background-secondary) surfaces, the text, link, and icon colors on admonition title bars and bodies and on .alert.theme-* callouts, the sidebar, TOC, and search-result states, Bootstrap control boundaries (unchecked checkboxes and radios, switch edges, and form-control and chip-input borders) on page and secondary surfaces, unchecked switch knobs on their tracks, focus rings on page, secondary, item, and hover surfaces, and Bootstrap 6 components in every theme and without one, at rest, hovered, and toggled on (see Architecture for the full list):

Scheme ID Inspiration Contrast Notes
furo Sphinx Furo WCAG 2.2 AA
≥ 4.5:1 text / 3.0:1 UI
Default crisp documentation palette; automatically escalates to modus when prefers-contrast: more is active.
bootstrap Bootstrap 6 OKLCH WCAG 2.2 AA
≥ 4.5:1 text / 3.0:1 UI
Native Bootstrap 6 perceptually uniform OKLCH colors inside Furo's 3-column layout.
modus Emacs Modus WCAG 2.2 AAA
≥ 7.0:1 text / 4.5:1 UI
Protesilaos Stavrou's strict AAA high-contrast themes (21:1 primary text, ≥ 7:1 muted text and semantic accents).
modus-tinted Emacs Modus Tinted WCAG 2.2 AAA
≥ 7.0:1 text / 4.5:1 UI
Warm cream paper (#fbf7f0) in Light mode and deep night-sky (#0d0e1c) in Dark mode to prevent halation/glare.
modus-deuteranopia Emacs Modus
Deuteranopia
WCAG 2.2 AAA
≥ 7.0:1 text / 4.5:1 UI
Red-green colorblind-safe semantic palette using royal/sky blue, gold, and warm burnt amber.
modus-tritanopia Emacs Modus
Tritanopia
WCAG 2.2 AAA
≥ 7.0:1 text / 4.5:1 UI
Blue-yellow colorblind-safe semantic palette using deep teal/aqua, plum/magenta, and crimson.

Extending Palettes via <lightCssVariables> & <darkCssVariables>

Just like Sphinx Furo's light_css_variables and dark_css_variables, any child element inside <lightCssVariables> or <darkCssVariables> is emitted as --<tag-name>: <value>; and automatically feeds into Bootstrap 6's component tokens (--primary-*, --success-*, --warning-*, --danger-*, --info-*, --accent-*) via color-mix(in oklch, ...). The four modus* schemes also override some of those tokens and some of the supa-* state tokens below, so that every state stays at 7:1 or better. See Modus Palette Overrides for what they change and why.

Defaults shown below are for the furo scheme; other schemes can override them. In light-dark(...), the first value is for light polarity and the second is for dark polarity. Variable names omit the leading -- because they are also the XML child element names.

Variable Name Purpose
color-brand-primary Primary brand accent color (active sidebar links, active TOC border, skin-owned focus rings, .btn-primary).
color-brand-content Content hyperlink color inside .prose articles and Bootstrap component focus rings (--primary-focus-ring). Text and links on solid themed card headers and footers use --theme-contrast on their theme fill; subtle and translucent caps retain their own text colors.
color-background-primary Main article and page background surface (--bg-body).
color-background-secondary Left sidebar, code block header, and card secondary surface (--bg-1).
color-background-item Sidebar version badge, code language badge, and search-result badge background, and Bootstrap's --bg-2 (default light-dark(#f1f3f5, #212529)).
color-background-hover Hover state surface for navigation items, icon buttons, search results, and channel links. It also fills the palette picker and palette select while hovered or open, and the theme button while its menu is open. Bootstrap's --bg-2 does not read it; that is color-background-item.
color-background-border Subtle hairline border color across sidebars, tables, and headers (--border-color), and Bootstrap's --bg-3, which fills switch and range tracks and disabled controls. A hovered, pressed, or toggled-on button or chip without a theme takes supa-bg-active instead, which defaults to this color.
color-code-background Background of code blocks (default light-dark(#f6f8fa, #1c1f24)).
color-inline-code-background Background of inline code (default light-dark(rgba(175, 184, 193, 0.22), rgba(110, 118, 129, 0.35))). Translucent in furo and bootstrap, so it tints the surface beneath, such as an admonition or alert. On a solid fill (the .card-header or .card-footer of a themed card that is not .card-subtle or .card-translucent, an active .list-group-item) it is laid over color-background-primary instead.
color-inline-code-text Inline code text color (default var(--color-foreground-primary)).
color-foreground-primary Primary body text and heading color (--fg-body), and the knob of an enabled, unchecked Bootstrap switch, with or without a theme. Enabled range thumbs (including active thumbs) and progress fills use this color against the unfilled track, including themed ranges except .theme-inverse, which retains its theme fill.
color-foreground-secondary Secondary metadata, caption, and inactive TOC link color (--fg-2).
color-foreground-muted Muted text, permalink # indicators, subtle labels, and the Datepicker's weekday names and days outside the shown month (--fg-3).
supa-control-border Bootstrap checkbox, radio, switch, enabled range track, form-control, chip-input, and OTP slot normal-state boundary color (default var(--color-foreground-muted)) to meet each palette's non-text target on page and secondary surfaces; Bootstrap validation states retain their semantic borders. Range tracks use an inset boundary and keep their --bg-3 interior; disabled ranges retain Bootstrap paint.
color-foreground-border Border color of blockquotes, <kbd>, the sidebar search button, the palette swatches, the open or hovered palette select and picker, and a hovered playground pill (WCAG 1.4.11 non-text contrast ≥ 3:1 on the page). Form controls use supa-control-border.
supa-admonition-note-accent note and seealso admonition and .theme-info accent color.
supa-admonition-note-bg note and seealso admonition title background; also the Bootstrap .theme-info subtle background (default light-dark(#ddf4ff, rgba(56, 139, 253, 0.14))).
supa-admonition-tip-accent tip and hint admonition and .theme-success accent color.
supa-admonition-tip-bg tip and hint admonition title background; also the Bootstrap .theme-success subtle background and highlighted diff additions (default light-dark(#dafbe1, rgba(46, 160, 67, 0.14))).
supa-admonition-important-accent important and admonition callout and .theme-accent accent color.
supa-admonition-important-bg important and admonition callout title background; also the Bootstrap .theme-accent subtle background (default light-dark(#fbefff, rgba(163, 113, 247, 0.14))).
supa-admonition-warning-accent warning and caution admonition and .theme-warning accent color.
supa-admonition-warning-bg warning and caution admonition title background; also the Bootstrap .theme-warning subtle background (default light-dark(#fff8c5, rgba(187, 128, 9, 0.14))).
supa-admonition-caution-accent danger, attention, and error admonition and .theme-danger accent color.
supa-admonition-caution-bg danger, attention, and error admonition title background; also the Bootstrap .theme-danger subtle background and highlighted diff deletions (default light-dark(#ffebe9, rgba(248, 81, 73, 0.14))).
supa-admonition-todo-accent todo admonition neutral accent color.
supa-admonition-todo-bg todo admonition title background (default light-dark(#f1f3f5, rgba(139, 148, 158, 0.16))).
supa-nav-hover-fg Text color of a hovered sidebar link and of the active search result's title, on color-background-hover (default var(--color-brand-primary)).
supa-nav-active-fg Text color of the current page's sidebar link (default var(--color-brand-primary)).
supa-nav-active-bg Background of the current page's sidebar link (default color-mix(in srgb, var(--color-brand-primary) 12%, transparent), laid over the sidebar).
supa-search-mark-fg Text color of a highlighted search match, in result titles and snippets (default var(--color-foreground-primary)).
supa-search-mark-bg Background of a highlighted search match (default color-mix(in srgb, var(--color-brand-primary) 22%, transparent), laid over the result).
supa-bg-active Fill of a hovered, pressed, or toggled-on .btn or .chip without a Bootstrap theme; Bootstrap's --bg-3 on those components only, so switch and range tracks keep the border color (default var(--color-background-border)).
supa-chip-selected-hover-opacity Opacity of a hovered selected chip, .chip.active:hover (default 0.9, Bootstrap's fade; 1 in the modus* schemes).
supa-sidebar-brand-items-align Flex cross-axis alignment (center, flex-start, or flex-end) for .supa-sidebar-brand children.
supa-sidebar-brand-justify Flex main-axis alignment (center, flex-start, or flex-end) for .supa-sidebar-brand-text title and version badge.
supa-sidebar-brand-text-align Text alignment (center, left, or right) inside .supa-sidebar-brand.

<darkCssVariables> apply on screen only: a printed page uses the light polarity, whose values come from the built-in scheme and <lightCssVariables> (see Adjusting the Printed Page).

Velocity Helper Macros Reference (site-macros.vm)

When authoring Velocity-preprocessed pages (.md.vm, .apt.vm, .xhtml.vm), Supa Maven Skin globally registers the following helper macros from META-INF/maven/site-macros.vm:

Macro Signature Parameters Description
#bi( $name $extraClasses $ariaLabel ) $name: Icon slug ("rocket-takeoff")
$extraClasses: Optional utilities ("text-primary fs-5")
$ariaLabel: Optional accessible label
Renders <i class="bi bi-$name ..."></i> with aria-hidden="true" when $ariaLabel is omitted, or role="img" aria-label="..." when $ariaLabel is provided.
#bsAlert( $theme $title $body $dismissible ) $theme: Semantic theme ("primary", "success", etc.)
$title: Optional heading string
$body: Alert HTML/text body
$dismissible: true or false
Renders an isolated .alert.theme-$theme.not-prose banner with an optional .btn-close dismiss button.
#bsBadge( $theme $variant $text ) $theme: Semantic theme ("primary", "info", etc.)
$variant: "" (solid), "subtle", or "outline"
$text: Badge label text
Renders an inline <span class="badge ... theme-$theme not-prose">.
#bsCard( $title $subtitle $body $footer ) $title: Card heading
$subtitle: Optional subtitle
$body: Card body HTML/text
$footer: Optional card footer HTML/text
Renders a Bootstrap 6 .card.not-prose container.
#bsCardGridStart( $extraClasses ) $extraClasses: Optional grid utility classes ("") Opens a <div class="row g-3 not-prose my-3 ..."> card grid container without trailing blank lines so Doxia's CommonMark parser keeps the HTML block contiguous.
#bsCardGridEnd() (none) Closes the </div> opened by #bsCardGridStart.
#bsGuideCard( $colClass $icon $theme $href $title $badge $description ) $colClass: Column classes ("col-12 md:col-6" default)
$icon: Bootstrap Icon slug ("rocket-takeoff")
$theme: Semantic theme ("primary", "success", "info", "warning")
$href: Link target ("getting-started.html")
$title: Card link title
$badge: Optional right-aligned subtle badge label
$description: Card description HTML/text
Renders a responsive navigation/guide card column inside a #bsCardGridStart / #bsCardGridEnd block.

Documentation channel classes

Class Contract
.supa-documentation-channels Named navigation container for consumer-provided links and a version disclosure.
.documentation-channels Equivalent compatibility alias for existing markup.
.documentation-version-picker Native details inside the container, containing a summary and a ul of version links.

All palettes and polarities are supported. Use aria-current="page" for the current destination. Labels and URLs belong to the consumer. No script or configuration option is required. See the authoring recipe.