From dbfd05c6ee3be98f97c6c6f8bd3c1d274c39165b Mon Sep 17 00:00:00 2001 From: Erlend Ellefsen Date: Fri, 8 May 2026 16:52:19 +0200 Subject: [PATCH] refactor(css): drop extra.css, layer Bifrost framework, strip important --- README.md | 6 +- pyproject.toml | 1 - .../fonts/satoshi-variable-italic.woff2 | Bin 43844 -> 0 bytes .../assets/fonts/satoshi-variable.woff2 | Bin 42588 -> 0 bytes .../overrides/assets/stylesheets/bifrost.css | 421 ++---- .../overrides/assets/stylesheets/extra.css | 1230 ----------------- src/intility_bifrost_mkdocs/plugin.py | 5 - tests/test_plugin.py | 34 +- 8 files changed, 135 insertions(+), 1562 deletions(-) delete mode 100644 src/intility_bifrost_mkdocs/overrides/assets/fonts/satoshi-variable-italic.woff2 delete mode 100644 src/intility_bifrost_mkdocs/overrides/assets/fonts/satoshi-variable.woff2 delete mode 100644 src/intility_bifrost_mkdocs/overrides/assets/stylesheets/extra.css diff --git a/README.md b/README.md index 777f320..7b41193 100644 --- a/README.md +++ b/README.md @@ -36,12 +36,12 @@ Add `intility-bifrost` to your `mkdocs.yml` plugins: theme: name: material palette: - - scheme: light - primary: teal # Options: teal, purple, pink, yellow + - scheme: default # or 'light' — both map to Bifrost light mode + primary: teal # Options: teal, purple, pink, yellow toggle: icon: material/brightness-7 name: Switch to dark mode - - scheme: dark + - scheme: slate # or 'dark' — both map to Bifrost dark mode primary: teal toggle: icon: material/brightness-4 diff --git a/pyproject.toml b/pyproject.toml index 8115784..89be42d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -63,7 +63,6 @@ where = ["src"] intility_bifrost_mkdocs = [ "overrides/**/*.html", "overrides/**/*.css", - "overrides/**/*.woff2", "overrides/**/*.js", ] diff --git a/src/intility_bifrost_mkdocs/overrides/assets/fonts/satoshi-variable-italic.woff2 b/src/intility_bifrost_mkdocs/overrides/assets/fonts/satoshi-variable-italic.woff2 deleted file mode 100644 index e7ab3a09accb9b74c786d15ae6da9ab5ffcfc565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43844 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ˍBtdqZY63+qWu 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 diff --git a/src/intility_bifrost_mkdocs/overrides/assets/stylesheets/bifrost.css b/src/intility_bifrost_mkdocs/overrides/assets/stylesheets/bifrost.css index dbebce0..f83a559 100644 --- a/src/intility_bifrost_mkdocs/overrides/assets/stylesheets/bifrost.css +++ b/src/intility_bifrost_mkdocs/overrides/assets/stylesheets/bifrost.css @@ -1,43 +1,20 @@ -/** - * Bifrost MkDocs Theme Stylesheet - * - * A custom theme implementation using Intility's Bifrost design system. - * This theme extends Material for MkDocs while fully implementing Bifrost design principles. - * - * @see https://bifrost.intility.com - */ - -/* Use cascade layers to ensure our CSS takes precedence */ -@layer material-overrides; - -/* ============================================================================ - 1. IMPORT BIFROST CSS FRAMEWORK (for fonts and utilities) - ============================================================================ */ - -@import url("https://unpkg.com/@intility/bifrost-css@6.7.0/dist/bifrost-all.css"); - -/* ============================================================================ - 2. BIFROST COLOR VARIABLES - ============================================================================ */ - -/* - * Note: All Bifrost color variables (--bfc-*) are defined by the Bifrost CSS - * framework loaded from CDN. They automatically switch between light and dark - * mode based on the .bf-lightmode and .bf-darkmode classes applied to . - * The theme colors change based on .bf-theme-* classes (teal, purple, pink, yellow). - * - * We don't need to redefine them here - just use them directly! - */ - -/* ============================================================================ - 3. MATERIAL THEME VARIABLE MAPPING - ============================================================================ */ +/* Bifrost MkDocs theme overrides. See https://bifrost.intility.com */ +/* Bifrost CSS framework, scoped into the `bifrost` cascade layer. + Unpkg-hosted so version bumps are a one-line change. */ +@layer bifrost; +@import url("https://unpkg.com/@intility/bifrost-css@6.7.0/dist/bifrost-all.css") layer(bifrost); + +/* Bifrost color variables (--bfc-*) come from the framework above and switch + automatically with .bf-lightmode / .bf-darkmode and .bf-theme-* on . */ + +/* Material theme variable mapping */ + +/* Local font-size scale (Bifrost only ships --bf-font-size-m by default). */ :root { - /* Bifrost Font Size Variables - Define if not present from CDN */ --bf-font-size-xs: 12px; --bf-font-size-s: 13px; - --bf-font-size-m: 14px; /* Base size */ + --bf-font-size-m: 14px; --bf-font-size-l: 16px; --bf-font-size-xl: 18px; --bf-font-size-h5: 18px; @@ -45,44 +22,25 @@ --bf-font-size-h3: 24px; --bf-font-size-h2: 29px; --bf-font-size-h1: 35px; - - /* Bifrost success colors */ - --bifrost-success-light: #007a4b; - --bifrost-success-dark: #00f597; - --bifrost-success: var(--bifrost-success-light); /* Default to light */ -} - -/* Override success color for dark mode */ -[data-md-color-scheme="dark"] { - --bifrost-success: var(--bifrost-success-dark); -} - -[data-md-color-scheme="slate"] { - --bifrost-success: var(--bifrost-success-dark); } +/* Point Material's CSS variables at Bifrost tokens so Material's default + blue accent is replaced everywhere it's used internally. */ :root { - /* Background colors */ --md-default-bg-color: var(--bfc-base); --md-default-fg-color: var(--bfc-base-c); - - /* Primary color (header, links) */ --md-primary-fg-color: var(--bfc-theme); --md-primary-bg-color: var(--bfc-base); - - /* Accent color (buttons, highlights) */ --md-accent-fg-color: var(--bfc-theme); --md-accent-bg-color: var(--bfc-theme-fade); - - /* Override Material's default blue for various components */ + --md-typeset-a-color: var(--bfc-theme); --md-typeset-mark-color: var(--bfc-theme-fade); --md-typeset-kbd-color: var(--bfc-base-c); --md-typeset-kbd-accent-color: var(--bfc-theme); --md-typeset-kbd-border-color: var(--bfc-base-dimmed); --md-typeset-table-color: var(--bfc-base-c); - - /* Override Material's internal CSS variables that cause blue colors */ + --md-default-fg-color--accent: var(--bfc-theme); --md-typeset-color: var(--bfc-base-c); --md-typeset-del-color: var(--bfc-alert); @@ -91,49 +49,38 @@ --md-focus-color: var(--bfc-theme); --md-selection-color: var(--bfc-theme-fade); - /* Code blocks */ --md-code-bg-color: var(--bfc-base-2); --md-code-fg-color: var(--bfc-base-c); - /* Links */ - --md-typeset-a-color: var(--bfc-theme); - - /* Borders and dividers */ --md-default-fg-color--light: var(--bfc-base-c-2); --md-default-fg-color--lighter: var(--bfc-base-dimmed); --md-default-fg-color--lightest: var(--bfc-base-dimmed-2); - /* Footer */ --md-footer-bg-color: var(--bfc-base-2); --md-footer-fg-color: var(--bfc-base-c); - /* Shadows */ --md-shadow-z1: var(--bf-shadow); --md-shadow-z2: 0 0 12px var(--bfc-shadow); --md-shadow-z3: 0 0 16px var(--bfc-shadow); } -/* ============================================================================ - 4. BIFROST TYPOGRAPHY - ============================================================================ */ +/* Typography */ body { font-family: "Open Sans", sans-serif; - font-size: var(--bf-font-size-m); /* 14px - Bifrost default */ + font-size: var(--bf-font-size-m); color: var(--bfc-base-c); background-color: var(--bfc-base); line-height: 1.6; } -/* Override Material's default font sizes with higher specificity */ .md-container .md-main .md-content .md-typeset, .md-container .md-typeset, .md-typeset { - font-size: var(--bf-font-size-m); /* 14px */ + font-size: var(--bf-font-size-m); line-height: 1.6; } -/* Headings use Satoshi font */ h1, h2, h3, @@ -147,17 +94,17 @@ h6, .md-typeset h5, .md-typeset h6 { font-family: "Satoshi", sans-serif; - font-weight: 700; /* Bifrost uses 700 for headings */ + font-weight: 700; color: var(--bfc-base-c); margin-top: 1.5em; margin-bottom: 0.5em; } -/* Use higher specificity instead of !important */ +/* Higher-specificity heading selectors used in place of !important. */ .md-container .md-main .md-content .md-typeset h1, .md-content .md-typeset h1, .md-typeset h1 { - font-size: var(--bf-font-size-h2); /* 29px - using h2 size for h1 */ + font-size: var(--bf-font-size-h2); line-height: 1.2; margin-top: 0; } @@ -165,35 +112,35 @@ h6, .md-container .md-main .md-content .md-typeset h2, .md-content .md-typeset h2, .md-typeset h2 { - font-size: var(--bf-font-size-h3); /* 24px - using h3 size for h2 */ + font-size: var(--bf-font-size-h3); line-height: 1.3; } .md-container .md-main .md-content .md-typeset h3, .md-content .md-typeset h3, .md-typeset h3 { - font-size: var(--bf-font-size-h4); /* 20px - using h4 size for h3 */ + font-size: var(--bf-font-size-h4); line-height: 1.4; } .md-container .md-main .md-content .md-typeset h4, .md-content .md-typeset h4, .md-typeset h4 { - font-size: var(--bf-font-size-h5); /* 18px - using h5 size for h4 */ + font-size: var(--bf-font-size-h5); line-height: 1.4; } .md-container .md-main .md-content .md-typeset h5, .md-content .md-typeset h5, .md-typeset h5 { - font-size: var(--bf-font-size-l); /* 16px */ + font-size: var(--bf-font-size-l); line-height: 1.5; } .md-container .md-main .md-content .md-typeset h6, .md-content .md-typeset h6, .md-typeset h6 { - font-size: var(--bf-font-size-m); /* 14px - same as body */ + font-size: var(--bf-font-size-m); line-height: 1.5; } @@ -209,14 +156,12 @@ h6, .md-typeset ul, .md-typeset ol, .md-typeset li { - font-size: var(--bf-font-size-m); /* 14px */ + font-size: var(--bf-font-size-m); line-height: 1.6; color: var(--bfc-base-c); } -/* ============================================================================ - 5. HEADER - ============================================================================ */ +/* Header */ .md-header { background-color: var(--bfc-base-2); @@ -242,9 +187,7 @@ h6, color: var(--bfc-base-c); } -/* ============================================================================ - 6. NAVIGATION TABS - ============================================================================ */ +/* Navigation tabs */ .md-tabs { background-color: var(--bfc-base-2); @@ -269,9 +212,7 @@ h6, outline-offset: 2px; } -/* ============================================================================ - 7. SIDEBAR NAVIGATION - ============================================================================ */ +/* Sidebar navigation */ .md-sidebar { background-color: var(--bfc-base); @@ -290,112 +231,103 @@ h6, } .md-nav { - font-size: var(--bf-font-size-m); /* 14px */ + font-size: var(--bf-font-size-m); color: var(--bfc-base-c); } .md-nav__title { - color: var(--bfc-base-c) !important; + color: var(--bfc-base-c); font-weight: 700; - font-size: var(--bf-font-size-m); /* 14px */ + font-size: var(--bf-font-size-m); } -/* Remove background and shadow from all navigation titles */ .md-nav__title, .md-nav--primary .md-nav__title, .md-nav--secondary .md-nav__title, .md-nav__title[for] { - background: none !important; - background-color: transparent !important; - box-shadow: none !important; - position: relative !important; + background: none; + background-color: transparent; + box-shadow: none; + position: relative; } -/* Remove pseudo-element shadows/fades */ .md-nav__title::before, .md-nav__title::after, .md-nav--secondary .md-nav__title::before, .md-nav--secondary .md-nav__title::after, .md-nav--primary .md-nav__title::before, .md-nav--primary .md-nav__title::after { - display: none !important; - content: none !important; - background: none !important; - box-shadow: none !important; + display: none; + content: none; + background: none; + box-shadow: none; } -/* Remove fade from lifted navigation active links */ .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link { - background: none !important; - background-color: transparent !important; - box-shadow: none !important; + background: none; + background-color: transparent; + box-shadow: none; } -/* Ensure labels in active nav items use default text color */ .md-nav--lifted > .md-nav__list > .md-nav__item--active > .md-nav__link[for] { - color: var(--bfc-base-c) !important; + color: var(--bfc-base-c); } .md-nav__link { - color: var(--bfc-base-c) !important; - font-size: var(--bf-font-size-m); /* 14px */ + color: var(--bfc-base-c); + font-size: var(--bf-font-size-m); } .md-nav__link--active { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); font-weight: 600; } .md-nav__link:hover, .md-nav__link:focus { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); } -/* Primary navigation (left sidebar) */ .md-nav--primary .md-nav__title { - color: var(--bfc-base-c) !important; + color: var(--bfc-base-c); } .md-nav--primary .md-nav__link { - color: var(--bfc-base-c) !important; - font-size: var(--bf-font-size-m); /* 14px */ + color: var(--bfc-base-c); + font-size: var(--bf-font-size-m); } .md-nav--primary .md-nav__link--active { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); } .md-nav--primary .md-nav__link:hover { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); } -/* Table of Contents (right sidebar) */ .md-nav--secondary .md-nav__link { - color: var(--bfc-base-c) !important; - font-size: var(--bf-font-size-m); /* 14px */ + color: var(--bfc-base-c); + font-size: var(--bf-font-size-m); } .md-nav--secondary .md-nav__link:hover { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); } .md-nav--secondary .md-nav__link--active { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); font-weight: 600; } -/* Navigation items */ .md-nav__item { color: var(--bfc-base-c); } .md-nav__item--active > .md-nav__link { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); } -/* ============================================================================ - 8. MAIN CONTENT - ============================================================================ */ +/* Main content */ .md-content { background-color: var(--bfc-base); @@ -409,7 +341,6 @@ h6, color: var(--bfc-base-c); } -/* Links */ .md-typeset a { color: var(--bfc-theme); text-decoration: none; @@ -421,9 +352,8 @@ h6, color: var(--bfc-theme); } -/* Permalink icons (¶ after headings) */ .md-typeset .headerlink { - color: var(--bfc-base-dimmed) !important; + color: var(--bfc-base-dimmed); } .md-typeset .headerlink:hover, @@ -435,12 +365,10 @@ h6, .md-typeset h4:target .headerlink, .md-typeset h5:target .headerlink, .md-typeset h6:target .headerlink { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); } -/* ============================================================================ - 9. CODE BLOCKS - ============================================================================ */ +/* Code blocks */ .md-typeset pre, .md-typeset code { @@ -450,9 +378,8 @@ h6, .md-typeset code { padding: 0.1em 0.4em; - border-radius: 3px; + border-radius: var(--bf-radius-xs); font-size: 0.9em; - font-family: "Monaco", "Courier New", Consolas, monospace; } .md-typeset pre > code { @@ -468,7 +395,8 @@ h6, color: var(--bfc-base-c); } -/* Code copy button - target all possible selectors */ +/* Code copy button — Material applies styles via JS, so several selector + variants are listed to make sure we catch every rendered form. */ .md-clipboard, button[data-clipboard-text], .md-icon[data-clipboard-text], @@ -498,7 +426,8 @@ button[data-clipboard-text]:active, background-color: var(--bfc-theme-fade); } -/* Universal override for all interactive elements - no blue anywhere */ +/* Blanket no-blue rule for interactive elements — Material's default accent + leaks blue into focus/hover states; force the Bifrost theme color instead. */ button, .md-button, input, @@ -533,7 +462,6 @@ a:active, outline-offset: 2px; } -/* Override blue selection and active states universally */ *:focus, *:active, *:hover.md-button, @@ -542,12 +470,11 @@ a:active, border-color: var(--bfc-theme); } -/* Override browser default focus styles */ *:focus-visible { outline: 2px solid var(--bfc-theme); } -/* Force override Material's JavaScript-applied styles */ +/* Material applies these button styles via JS after page load. */ .highlight button, .codehilite button, pre button, @@ -573,28 +500,23 @@ code button:active { background-color: var(--bfc-theme-fade); } -/* Code copy confirmation message */ .md-clipboard__message { background-color: var(--bfc-base-3); color: var(--bfc-base-c); border: 1px solid var(--bfc-base-dimmed); } -/* Ensure the message text has proper contrast */ .md-clipboard__message::after { background-color: var(--bfc-base-3); color: var(--bfc-base-c); } -/* ============================================================================ - 10. ADMONITIONS - ============================================================================ */ +/* Admonitions */ -/* Base admonition styling with full border */ .md-typeset .admonition, .md-typeset details { border: 1px solid; - border-radius: 8px; + border-radius: var(--bf-radius-s); background-color: var(--bfc-base); color: var(--bfc-base-c); margin: 1.5625em 0; @@ -609,13 +531,13 @@ code button:active { font-weight: 600; font-family: "Satoshi", sans-serif; margin: 0; - padding: 12px 16px 12px 44px; + /* 44px left padding makes room for the absolutely-positioned icon. */ + padding: var(--bfs12) var(--bfs16) var(--bfs12) 44px; border: none; border-radius: 0; position: relative; } -/* Keep Material's default icon but allow coloring */ .md-typeset .admonition-title::before, .md-typeset summary::before { position: absolute; @@ -626,29 +548,22 @@ code button:active { height: 16px; } -/* Admonition content padding */ .md-typeset .admonition > *:not(.admonition-title), .md-typeset details > *:not(summary) { - padding: 0 16px; - margin: 16px 0; + padding: 0 var(--bfs16); + margin: var(--bfs16) 0; } .md-typeset .admonition > *:last-child, .md-typeset details > *:last-child { - margin-bottom: 16px; + margin-bottom: var(--bfs16); } -/* Style the expand/collapse arrow for better contrast */ -.md-typeset summary::after { - color: var(--bfc-base-c); -} - -/* Ensure the arrow icon in collapsible admonitions has proper contrast */ +.md-typeset summary::after, .md-typeset details[open] > summary::after { color: var(--bfc-base-c); } -/* Note - Theme color */ .md-typeset .admonition.note, .md-typeset details.note { border-color: var(--bfc-theme); @@ -667,7 +582,6 @@ code button:active { -webkit-mask-size: contain; } -/* Info - Theme color (same as note) */ .md-typeset .admonition.info, .md-typeset details.info { border-color: var(--bfc-theme); @@ -686,7 +600,6 @@ code button:active { -webkit-mask-size: contain; } -/* Abstract - Chill (purple) */ .md-typeset .admonition.abstract, .md-typeset details.abstract { border-color: var(--bfc-chill); @@ -705,17 +618,16 @@ code button:active { -webkit-mask-size: contain; } -/* Tip - Success (green) */ .md-typeset .admonition.tip, .md-typeset details.tip { - border-color: var(--bifrost-success); + border-color: var(--bfc-success); } .md-container .md-typeset .tip > .admonition-title::before, .md-container .md-typeset .tip > summary::before, .md-typeset .tip > .admonition-title::before, .md-typeset .tip > summary::before { - background-color: var(--bifrost-success); + background-color: var(--bfc-success); mask-image: var(--md-admonition-icon--tip); -webkit-mask-image: var(--md-admonition-icon--tip); mask-repeat: no-repeat; @@ -724,17 +636,16 @@ code button:active { -webkit-mask-size: contain; } -/* Success - Success (green) */ .md-typeset .admonition.success, .md-typeset details.success { - border-color: var(--bifrost-success); + border-color: var(--bfc-success); } .md-container .md-typeset .success > .admonition-title::before, .md-container .md-typeset .success > summary::before, .md-typeset .success > .admonition-title::before, .md-typeset .success > summary::before { - background-color: var(--bifrost-success); + background-color: var(--bfc-success); mask-image: var(--md-admonition-icon--success); -webkit-mask-image: var(--md-admonition-icon--success); mask-repeat: no-repeat; @@ -743,7 +654,6 @@ code button:active { -webkit-mask-size: contain; } -/* Warning/Attention/Caution - Warning (orange) */ .md-typeset .admonition.warning, .md-typeset .admonition.attention, .md-typeset .admonition.caution, @@ -766,7 +676,6 @@ code button:active { -webkit-mask-size: contain; } -/* Failure/Danger/Error - Alert (red) */ .md-typeset .admonition.failure, .md-typeset .admonition.danger, .md-typeset .admonition.error, @@ -789,7 +698,6 @@ code button:active { -webkit-mask-size: contain; } -/* Example - Chill (purple) for better visibility */ .md-typeset .admonition.example, .md-typeset details.example { border-color: var(--bfc-chill); @@ -808,7 +716,6 @@ code button:active { -webkit-mask-size: contain; } -/* Question - Chill (purple) */ .md-typeset .admonition.question, .md-typeset details.question { border-color: var(--bfc-chill); @@ -827,7 +734,6 @@ code button:active { -webkit-mask-size: contain; } -/* Bug - Alert (red) */ .md-typeset .admonition.bug, .md-typeset details.bug { border-color: var(--bfc-alert); @@ -846,7 +752,6 @@ code button:active { -webkit-mask-size: contain; } -/* Quote - Base dimmed */ .md-typeset .admonition.quote, .md-typeset details.quote { border-color: var(--bfc-base-dimmed); @@ -865,14 +770,12 @@ code button:active { -webkit-mask-size: contain; } -/* ============================================================================ - 11. TABLES - ============================================================================ */ +/* Tables */ .md-typeset table:not([class]) { border: 1px solid var(--bfc-base-dimmed); background-color: var(--bfc-base-3); - border-radius: 4px; + border-radius: var(--bf-radius-xs); overflow: hidden; } @@ -893,16 +796,14 @@ code button:active { background-color: var(--bfc-base-2); } -/* ============================================================================ - 12. BUTTONS - ============================================================================ */ +/* Buttons */ .md-button { background-color: var(--bfc-theme); color: var(--bfc-theme-c); border: none; padding: 0.625em 1.25em; - border-radius: 4px; + border-radius: var(--bf-radius-xs); font-family: "Open Sans", sans-serif; font-weight: 500; transition: @@ -922,11 +823,10 @@ code button:active { color: var(--bfc-theme-c); } -/* ============================================================================ - 13. FOOTER - ============================================================================ */ +/* Footer */ -/* Sticky footer - ensure footer stays at bottom even with minimal content */ +/* Sticky footer: flex column on body keeps the footer at the bottom even + when content is short. */ body { display: flex; flex-direction: column; @@ -971,14 +871,13 @@ body { background-color: var(--bfc-base-3); } -/* Override Material's default footer link color with more specific selector */ html .md-footer-meta.md-typeset a { - color: var(--bfc-theme) !important; + color: var(--bfc-theme); } html .md-footer-meta.md-typeset a:hover, html .md-footer-meta.md-typeset a:focus { - color: var(--bfc-theme-2) !important; + color: var(--bfc-theme-2); text-decoration: underline; } @@ -999,9 +898,7 @@ html .md-footer-meta.md-typeset a:focus { color: var(--bfc-base-c); } -/* ============================================================================ - 14. SEARCH - ============================================================================ */ +/* Search */ .md-search__form { background-color: var(--bfc-base-3); @@ -1011,12 +908,11 @@ html .md-footer-meta.md-typeset a:focus { background-color: var(--bfc-base-3); color: var(--bfc-base-c); border: 1px solid var(--bfc-base-dimmed); - border-radius: 4px; + border-radius: var(--bf-radius-xs); } -/* Search icon */ .md-search__icon { - color: var(--bfc-base-c) !important; + color: var(--bfc-base-c); } .md-search__input::placeholder { @@ -1029,7 +925,7 @@ html .md-footer-meta.md-typeset a:focus { .md-search__output { background-color: var(--bfc-base); - border-radius: 4px; + border-radius: var(--bf-radius-xs); box-shadow: var(--bf-shadow); } @@ -1055,24 +951,19 @@ html .md-footer-meta.md-typeset a:focus { color: var(--bfc-theme); } -/* ============================================================================ - 15. TABS AND TABBED CONTENT - ============================================================================ */ +/* Tabs and tabbed content */ -/* Inactive tab labels */ .md-typeset .tabbed-set > label { color: var(--bfc-base-c-2); font-weight: 500; border-bottom: 2px solid transparent; } -/* Hover state */ .md-typeset .tabbed-set > label:hover { color: var(--bfc-theme); border-bottom-color: var(--bfc-theme-fade); } -/* Active/checked tab - use theme color, not blue */ .md-typeset .tabbed-set > input:checked + label, .md-typeset .tabbed-set > input:focus + label, .md-typeset .tabbed-set > label.active { @@ -1081,18 +972,16 @@ html .md-footer-meta.md-typeset a:focus { border-bottom-color: var(--bfc-theme); } -/* Override Material's default blue active indicator */ .md-typeset .tabbed-set > input:checked + label::after { background-color: var(--bfc-theme); } -/* Focus state */ .md-typeset .tabbed-set > label:focus { outline: 2px solid var(--bfc-theme); outline-offset: 2px; } -/* Ultra-specific targeting to override Material's blue tabs */ +/* Material wins on specificity for tabs unless we match its 5+ class chain. */ html body .md-container .md-main .md-content .md-typeset .tabbed-set > input:checked + label, html body .md-container .md-typeset .tabbed-set > input:checked + label, html body .md-typeset .tabbed-set > input:checked + label, @@ -1104,7 +993,6 @@ html .md-typeset .tabbed-set > input:checked + label, border-bottom: 2px solid var(--bfc-theme); } -/* Target the pseudo-elements with maximum specificity */ html body .md-container .md-main .md-content .md-typeset .tabbed-set > input:checked + label::after, html body .md-container .md-typeset .tabbed-set > input:checked + label::after, html body .md-typeset .tabbed-set > input:checked + label::after, @@ -1114,7 +1002,6 @@ html .md-typeset .tabbed-set > input:checked + label::after, border-color: var(--bfc-theme); } -/* Target focus states */ html body .md-container .md-main .md-content .md-typeset .tabbed-set > input:focus + label, html body .md-container .md-typeset .tabbed-set > input:focus + label, html body .md-typeset .tabbed-set > input:focus + label, @@ -1125,14 +1012,11 @@ html .md-typeset .tabbed-set > input:focus + label, border-bottom-color: var(--bfc-theme); } -/* Ensure the tab content area uses theme colors */ .md-typeset .tabbed-content { border-color: var(--bfc-base-dimmed); } -/* ============================================================================ - 16. PAGINATION - ============================================================================ */ +/* Pagination */ .md-footer__link { transition: background-color 0.2s ease; @@ -1142,21 +1026,16 @@ html .md-typeset .tabbed-set > input:focus + label, background-color: var(--bfc-base-2); } -/* ============================================================================ - 17. ANNOUNCEMENT BAR - ============================================================================ */ +/* Announcement bar */ .md-announce { background-color: var(--bfc-theme-fade); color: var(--bfc-theme-fade-c); } -/* ============================================================================ - 18. RESPONSIVE DESIGN - ============================================================================ */ +/* Responsive design */ @media screen and (max-width: 76.1875em) { - /* Mobile adjustments */ .md-nav--primary .md-nav__title { background-color: var(--bfc-base-2); color: var(--bfc-base-c); @@ -1167,9 +1046,7 @@ html .md-typeset .tabbed-set > input:focus + label, } } -/* ============================================================================ - 19. ACCESSIBILITY - ============================================================================ */ +/* Accessibility */ a:focus, button:focus, @@ -1183,16 +1060,13 @@ input:focus { color: var(--bfc-theme-c); } -/* Focus visible (keyboard navigation) */ a:focus-visible, button:focus-visible { outline: 2px solid var(--bfc-theme); outline-offset: 2px; } -/* ============================================================================ - 20. SCROLLBAR STYLING - ============================================================================ */ +/* Scrollbar */ ::-webkit-scrollbar { width: 8px; @@ -1205,18 +1079,15 @@ button:focus-visible { ::-webkit-scrollbar-thumb { background: var(--bfc-base-dimmed); - border-radius: 4px; + border-radius: var(--bf-radius-xs); } ::-webkit-scrollbar-thumb:hover { background: var(--bfc-base-c-2); } -/* ============================================================================ - 21. VERSION BADGE - ============================================================================ */ +/* Version badge */ -/* Positioning for version badge in the header */ .bf-header-version { align-self: center; flex-shrink: 0; @@ -1225,38 +1096,31 @@ button:focus-visible { font-family: "Open Sans", sans-serif; } -/* ============================================================================ - 22. MISCELLANEOUS - ============================================================================ */ +/* Miscellaneous */ -/* Horizontal rules */ .md-typeset hr { border-bottom: 1px solid var(--bfc-base-dimmed); } -/* Blockquotes */ .md-typeset blockquote { border-left: 4px solid var(--bfc-base-dimmed); color: var(--bfc-base-c-2); } -/* Keyboard keys */ .md-typeset kbd { background-color: var(--bfc-base-2); color: var(--bfc-base-c); border: 1px solid var(--bfc-base-dimmed); - border-radius: 3px; + border-radius: var(--bf-radius-xs); box-shadow: 0 1px 0 var(--bfc-base-dimmed); } -/* Tags/badges */ .md-tag { background-color: var(--bfc-theme-fade); color: var(--bfc-theme-fade-c); - border-radius: 3px; + border-radius: var(--bf-radius-xs); } -/* Print styles */ @media print { body { background-color: white; @@ -1264,11 +1128,8 @@ button:focus-visible { } } -/* ============================================================================ - FINAL OVERRIDES - Use cascade layer for higher specificity than Material - ============================================================================ */ - -/* Override Material's generated styles after they load */ +/* Late overrides — these target Material styles applied after page load. + They sit at the end of the file so source order beats earlier rules. */ .md-typeset a:focus, .md-typeset a:hover { color: var(--bfc-theme); @@ -1280,7 +1141,6 @@ button:focus-visible { color: var(--bfc-theme); } -/* Tab navigation active states */ .md-tabs__item--active .md-tabs__link { color: var(--bfc-theme); } @@ -1290,7 +1150,6 @@ button:focus-visible { color: var(--bfc-theme); } -/* Tabbed content active states */ .tabbed-set > input:checked + label { color: var(--bfc-theme); border-color: transparent; @@ -1311,7 +1170,6 @@ button:focus-visible { background: transparent; } -/* Button and clipboard active states */ .md-clipboard, .md-clipboard:focus, .md-clipboard:hover { @@ -1338,17 +1196,11 @@ button:focus-visible { color: var(--bfc-theme); } -/* Remove background from code navigation container */ .md-code__nav { background: transparent; } -/* ============================================================================ - 15. SYNTAX HIGHLIGHTING - ============================================================================ */ - -/* Pygments syntax highlighting with Bifrost colors */ -/* Use high specificity selectors to override Material defaults */ +/* Syntax highlighting (Pygments tokens mapped to Bifrost colors) */ html body .md-typeset .highlight .hll, html body .md-typeset div[class*="language-"].highlight .hll { background-color: var(--bfc-theme-fade); @@ -1579,9 +1431,7 @@ html body .md-typeset div[class*="language-"].highlight .l-Scalar-Plain { color: html body .md-typeset .highlight .p-Indicator, html body .md-typeset div[class*="language-"].highlight .p-Indicator { color: var(--bfc-base-c-2); } /* YAML Indicators */ -/* Diverse color scheme using different Bifrost colors */ - -/* Keywords (def, return, etc.) - Theme color, bold */ +/* Higher-specificity Pygments overrides — keep below the simple rules above. */ html body .md-typeset .highlight .k, html body .md-typeset .highlight .kd, html body .md-typeset .highlight .kn, @@ -1596,7 +1446,6 @@ html body .md-typeset div[class*="language-"].highlight .kr { font-weight: bold; } -/* Built-in constants (True, False, None) - Alert color */ html body .md-typeset .highlight .kc, html body .md-typeset .highlight .kt, html body .md-typeset div[class*="language-"].highlight .kc, @@ -1605,7 +1454,6 @@ html body .md-typeset div[class*="language-"].highlight .kt { font-weight: bold; } -/* Strings - Bifrost success color with light/dark adaptation */ html body .md-typeset .highlight .s, html body .md-typeset .highlight .s1, html body .md-typeset .highlight .s2, @@ -1624,11 +1472,10 @@ html body .md-typeset div[class*="language-"].highlight .sh, html body .md-typeset div[class*="language-"].highlight .sx, html body .md-typeset div[class*="language-"].highlight .sr, html body .md-typeset div[class*="language-"].highlight .ss { - color: var(--bifrost-success); + color: var(--bfc-success); font-weight: normal; } -/* Functions and built-ins (print, hello_world) - Base color */ html body .md-typeset .highlight .nb, html body .md-typeset .highlight .nf, html body .md-typeset div[class*="language-"].highlight .nb, @@ -1637,7 +1484,6 @@ html body .md-typeset div[class*="language-"].highlight .nf { font-weight: normal; } -/* Comments - Dimmed, italic */ html body .md-typeset .highlight .c, html body .md-typeset .highlight .c1, html body .md-typeset .highlight .cm, @@ -1655,7 +1501,6 @@ html body .md-typeset div[class*="language-"].highlight .sd { font-weight: normal; } -/* Punctuation and operators - Base color */ html body .md-typeset .highlight .p, html body .md-typeset .highlight .o, html body .md-typeset div[class*="language-"].highlight .p, @@ -1664,38 +1509,33 @@ html body .md-typeset div[class*="language-"].highlight .o { font-weight: normal; } -/* YAML-specific syntax highlighting */ -/* YAML keys and tags - Theme color */ +/* YAML-specific token colors */ html body .md-typeset .highlight .nt, html body .md-typeset div[class*="language-"].highlight .nt { color: var(--bfc-theme); font-weight: bold; } -/* YAML anchors and labels - Base text color for better contrast */ html body .md-typeset .highlight .nl, html body .md-typeset div[class*="language-"].highlight .nl { color: var(--bfc-base-c); font-weight: normal; } -/* YAML scalar values - Bifrost success color with light/dark adaptation */ html body .md-typeset .highlight .l-Scalar, html body .md-typeset .highlight .l-Scalar-Plain, html body .md-typeset div[class*="language-"].highlight .l-Scalar, html body .md-typeset div[class*="language-"].highlight .l-Scalar-Plain { - color: var(--bifrost-success); + color: var(--bfc-success); font-weight: normal; } -/* YAML indicators (-, :, etc.) - Base color */ html body .md-typeset .highlight .p-Indicator, html body .md-typeset div[class*="language-"].highlight .p-Indicator { color: var(--bfc-base-c); font-weight: normal; } -/* Remove borders from all Material buttons */ html body .md-button, html body .md-button:focus, html body .md-button:hover, @@ -1714,7 +1554,6 @@ html body button:hover { box-shadow: none; } -/* Force override tab button styling with high specificity */ html body .md-typeset .tabbed-set > label, html body .md-typeset .tabbed-set > label:focus, html body .md-typeset .tabbed-set > label:hover { @@ -1738,7 +1577,6 @@ html body .md-typeset .tabbed-set > input:checked + label { box-shadow: none; } -/* Target the actual tabbed labels structure from the HTML */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label, html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label:focus, html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label:hover, @@ -1762,7 +1600,6 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab color: var(--bfc-base-c); } -/* Target active tab using CSS :has() selector or fallback to specific IDs */ html body .md-container .md-main .md-content .md-typeset .tabbed-set:has(input#__tabbed_1_1:checked) .tabbed-labels label[for="__tabbed_1_1"], html body .md-container .md-main .md-content .md-typeset .tabbed-set:has(input#__tabbed_1_2:checked) .tabbed-labels label[for="__tabbed_1_2"], html body .md-container .md-main .md-content .md-typeset .tabbed-set:has(input#__tabbed_1_3:checked) .tabbed-labels label[for="__tabbed_1_3"], @@ -1782,7 +1619,6 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set:has(input#_ box-shadow: none; } -/* Remove all unwanted lines and borders from tabbed elements */ html body .md-container .md-main .md-content .md-typeset .tabbed-set, html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels, html body .md-container .md-main .md-content .md-typeset .tabbed-set::before, @@ -1795,14 +1631,12 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab box-shadow: none; } -/* Force override Material's theme color variables specifically for tabbed elements */ html body .md-container .md-main .md-content .md-typeset .tabbed-set, html body .md-container .md-main .md-content .md-typeset .tabbed-set.tabbed-alternate { --md-primary-fg-color: var(--bfc-base-dimmed); --md-accent-fg-color: var(--bfc-base-dimmed); } -/* Target the tabbed-alternate variant specifically */ html body .md-container .md-main .md-content .md-typeset .tabbed-set.tabbed-alternate .tabbed-labels label::before, html body .md-container .md-main .md-content .md-typeset .tabbed-set.tabbed-alternate .tabbed-labels label::after { background: var(--bfc-base-dimmed); @@ -1812,7 +1646,6 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set.tabbed-alte fill: var(--bfc-base-dimmed); } -/* Change vertical lines to dimmed color with maximum specificity */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label::before, html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label::after, html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels::before { @@ -1823,7 +1656,6 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab fill: var(--bfc-base-dimmed); } -/* Allow the horizontal line ::after but remove any other styling */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels::after { border: 0; box-shadow: none; @@ -1831,7 +1663,6 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab visibility: visible; } -/* Force override all possible border properties on tab labels only */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label { position: relative; border-left: 0; @@ -1840,14 +1671,12 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab background-image: none; } -/* Target specific label positions to remove separators */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label + label { border-left: 0; margin-left: 0; padding-left: inherit; } -/* Remove any inset shadows or borders from tab container only */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels { box-shadow: none; background-image: none; @@ -1855,7 +1684,7 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab position: relative; } -/* Add the horizontal line under all tabs */ +/* Single horizontal divider under the tab row, drawn via the labels' ::after. */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels::after { content: ""; display: block; @@ -1868,7 +1697,6 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab z-index: 0; } -/* Force remove vertical borders with extreme specificity */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label[for] { position: relative; z-index: 1; @@ -1885,7 +1713,6 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab border-right: 1px solid var(--bfc-base-dimmed); } -/* Direct override of Material's CSS variables within tabbed context */ html body .md-container .md-main .md-content .md-typeset .tabbed-set { --md-primary-fg-color: var(--bfc-base-dimmed); --md-primary-fg-color--light: var(--bfc-base-dimmed); @@ -1894,20 +1721,17 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set { --md-accent-fg-color--transparent: var(--bfc-base-dimmed); } -/* Override any border styles on the labels themselves */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label { border-left-color: var(--bfc-base-dimmed); border-right-color: var(--bfc-base-dimmed); } -/* Force Material's default border properties to use dimmed color */ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-labels label + label:before { background: var(--bfc-base-dimmed); border-left: 1px solid var(--bfc-base-dimmed); } -/* Completely remove vertical lines from tabs by hiding pseudo-elements */ .md-typeset .tabbed-set > input + label:before, .md-typeset .tabbed-set > input + label:after, .md-typeset .tabbed-labels > label:before, @@ -1926,7 +1750,6 @@ html body .md-container .md-main .md-content .md-typeset .tabbed-set .tabbed-lab visibility: hidden; } -/* Force override of any Material theme color usage in tabbed context */ html body .md-typeset .tabbed-set, html body .md-typeset .tabbed-alternate, html body .md-content .tabbed-set, @@ -1938,7 +1761,6 @@ html body .md-content .tabbed-alternate { --md-typeset-color: var(--bfc-base-c); } -/* Search and form elements */ .md-search__input:focus { border-color: var(--bfc-theme); } @@ -1947,7 +1769,6 @@ html body .md-content .tabbed-alternate { background-color: var(--bfc-base); } -/* Navigation elements */ .md-nav__link--active { color: var(--bfc-theme); } @@ -1957,7 +1778,6 @@ html body .md-content .tabbed-alternate { color: var(--bfc-theme); } -/* Remove borders from navigation links */ .md-nav__link, .md-nav__link:focus, .md-nav__link:hover, @@ -1966,17 +1786,10 @@ html body .md-content .tabbed-alternate { outline: none; } -/* Remove borders and outlines from all links on hover/focus */ a, a:hover, a:focus, -a:active { - border: none; - outline: none; - box-shadow: none; -} - -/* Specifically target Material's content links */ +a:active, .md-typeset a, .md-typeset a:hover, .md-typeset a:focus, diff --git a/src/intility_bifrost_mkdocs/overrides/assets/stylesheets/extra.css b/src/intility_bifrost_mkdocs/overrides/assets/stylesheets/extra.css deleted file mode 100644 index fde519f..0000000 --- a/src/intility_bifrost_mkdocs/overrides/assets/stylesheets/extra.css +++ /dev/null @@ -1,1230 +0,0 @@ -/* Custom styles for Developer Platform Docs */ - -/* Font imports */ -@import url("https://fonts.googleapis.com/css?family=Open+Sans:400,400i,600,700&display=swap"); -@import url("https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&display=swap"); - -/* Base font size for better readability */ -html { - font-size: 18px; -} - -body { - font-size: 18px; -} - -/* Satoshi Variable - Self-hosted from Fontshare */ -@font-face { - font-family: 'Satoshi'; - src: url('../fonts/satoshi-variable.woff2') format('woff2-variations'); - font-weight: 300 900; - font-style: normal; - font-display: swap; -} - -@font-face { - font-family: 'Satoshi'; - src: url('../fonts/satoshi-variable-italic.woff2') format('woff2-variations'); - font-weight: 300 900; - font-style: italic; - font-display: swap; -} - -/* Fonts - Bifrost standard: Satoshi Variable for headings, Open Sans for everything else */ - -/* Headings use Satoshi Variable with OpenType features */ -h1, h2, h3, h4, h5, h6 { - font-family: 'Satoshi', 'Open Sans', Arial, sans-serif; - font-feature-settings: "ss02", "ss03", "ss04", "liga" 0; -} - -/* H1 uses base-c color and Bifrost h1 font size */ -.md-typeset h1 { - color: var(--md-base-c); - font-size: 32px; - font-weight: 600; -} - -/* Header uses Satoshi Variable */ -.md-header, .md-header__title { - font-family: 'Satoshi', 'Open Sans', Arial, sans-serif; - font-feature-settings: "ss02", "ss03", "ss04", "liga" 0; -} - -/* Body content uses Open Sans */ -.md-content { - font-family: 'Open Sans', Arial, sans-serif; -} - -/* Code uses JetBrains Mono */ -.md-code { - font-family: 'JetBrains Mono', monospace; -} - -/* Content width constraints */ -.md-content { - max-width: 1200px; - margin: 0 auto; -} - -.md-content__inner { - margin: 0 1.5rem; - padding: 1rem 0; -} - -/* Main content area */ -.md-main__inner { - max-width: 1200px; - margin: 0 auto; - padding-top: 40px; -} - -/* Grid layout adjustments */ -.md-grid { - max-width: 1200px; - margin: 0 auto; -} - -/* Work with Material theme - keep default footer behavior */ -/* Just adjust the footer styling, not the layout */ - -.md-footer-meta__inner { - padding: 20px 24px; - display: flex; - flex-direction: column; - justify-content: center; - min-height: 77.9px; -} - -/* Typeset content width */ -.md-typeset { - max-width: 1200px; -} - -/* Colors */ -/* Light mode overrides */ -[data-md-color-scheme="light"] { - /* Bifrost semantic color names */ - --md-base-c: #071627; - --md-base-c-theme: #071627; - --md-base-3: #F9F9FA; - --md-chill: #631CCF; - --md-base-c-dimmed: #565776; - --md-success: #007A4B; - --md-base-1: #F3F3F6; - --md-base-3-bg: #FFFFFF; - - /* Material theme compatibility - use theme color for primary and accent */ - --md-primary-fg-color: var(--md-brand); - --md-accent-fg-color: var(--md-brand); - --md-accent2-fg-color: var(--md-brand); - --md-accent3-fg-color: var(--md-base-3); - --md-accent4-fg-color: var(--md-chill); - --md-accent5-fg-color: var(--md-brand); - --md-dimmed-fg-color: var(--md-base-c-dimmed); - --md-success-fg-color: var(--md-success); - --md-scheme-fg-color: var(--md-base-1); - --md-default-bg-color: var(--md-base-1); - --md-secondary-bg-color: var(--md-base-3-bg); - - /* Override Material theme's code block background to match header */ - --md-code-bg-color: var(--md-base-3-bg); - --md-code-hl-color: var(--md-base-3-bg); - --md-code-bg: var(--md-base-3-bg); - /* Override Material theme's code block border radius */ - --md-code-border-radius: 0.5rem; -} - -/* Dark mode overrides */ -[data-md-color-scheme="dark"] { - /* Bifrost semantic color names */ - --md-base-c: #F3F3F6; - --md-base-c-theme: #F3F3F6; - --md-attn: #0DF2D7; - --md-brand: #0DF2D7; - --md-base-3: #0A1C2E; - --md-chill: #AD8AFF; - --md-theme-fade: #0DF2D7; - --md-base-c-dimmed: #8A98A8; - --md-success: #00F597; - --md-base-1: #071627; - --md-base-2: #0F2133; - - /* Material theme compatibility - use theme color for primary and accent */ - --md-primary-fg-color: var(--md-brand); - --md-accent-fg-color: var(--md-brand); - --md-accent2-fg-color: var(--md-brand); - --md-accent3-fg-color: var(--md-base-3); - --md-accent4-fg-color: var(--md-chill); - --md-accent5-fg-color: var(--md-brand); - --md-dimmed-fg-color: var(--md-base-c-dimmed); - --md-success-fg-color: var(--md-success); - --md-scheme-fg-color: var(--md-base-1); - --md-default-bg-color: var(--md-base-1); - --md-secondary-bg-color: var(--md-base-2); - - /* Override Material theme's code block background to match header */ - --md-code-bg-color: var(--md-base-2); - --md-code-hl-color: var(--md-base-2); - --md-code-bg: var(--md-base-2); - /* Override Material theme's code block border radius */ - --md-code-border-radius: 0.5rem; -} - -/* Grid cards for homepage */ -.md-typeset .grid.cards { - display: grid; - grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); - gap: 1rem; - margin: 2rem 0; -} - -.md-typeset .grid.cards > * { - background: var(--md-code-bg-color); - border: 1px solid var(--md-default-fg-color--lightest); - border-radius: 16px; - padding: 1.5rem; - transition: all 0.3s ease; - position: relative; -} - -.md-typeset .grid.cards > *:hover { - transform: translateY(-2px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); - border-color: var(--md-primary-fg-color); -} - -/* Card header styling - Bifrost h5 */ -.md-typeset .grid.cards strong { - font-family: 'Satoshi', 'Open Sans', Arial, sans-serif; - font-feature-settings: "ss02", "ss03", "ss04", "liga" 0; - font-size: 18px; - font-weight: 600; - color: var(--md-base-c); -} - -/* Card paragraph text - base-c color and Bifrost large size */ -.md-typeset .grid.cards p { - color: var(--md-base-c); - font-size: 16px; -} - -/* Arrow link in top right corner - CSS arrow */ -.md-typeset .grid.cards .card-arrow-link { - position: absolute; - top: 1.25rem; - right: 1.25rem; - text-decoration: none; - transition: all 0.2s ease; - z-index: 10; - display: inline-block; - width: 20px; - height: 20px; -} - -/* Create arrow using CSS borders */ -.md-typeset .grid.cards .card-arrow-link::before { - content: ""; - display: block; - width: 10px; - height: 10px; - border-top: 2px solid var(--md-base-c-dimmed); - border-right: 2px solid var(--md-base-c-dimmed); - transform: rotate(45deg); - transition: border-color 0.2s ease; -} - -.md-typeset .grid.cards .card-arrow-link:hover { - transform: translateX(4px); -} - -.md-typeset .grid.cards .card-arrow-link:hover::before, -.md-typeset .grid.cards li:hover .card-arrow-link::before { - border-top-color: var(--md-base-c); - border-right-color: var(--md-base-c); -} - -/* Custom admonition styling */ - -/* Tip */ -.md-typeset .admonition.tip, -.md-typeset details.tip, .md-typeset .admonition-title::before { - border-color: var(--md-brand); -} - -.md-typeset .tip > .admonition-title::before, .md-typeset .tip > summary::before { - background-color: var(--md-brand); -} - -.md-typeset .tip > .admonition-title::before, .md-typeset .tip > summary::after { - background-color: var(--md-brand); -} - -.md-typeset .tip > .admonition-title, .md-typeset .tip > summary { - background-color: var(--md-base-3); -} - -/* Info */ -.md-typeset .admonition.info, -.md-typeset details.info { - border-color: var(--md-attn); - -} - -.md-typeset .info > .admonition-title::before, .md-typeset .info > summary::before { - background-color: var(--md-attn); -} - -.md-typeset .info > .admonition-title::before, .md-typeset .info > summary::after { - background-color: var(--md-attn); -} - -.md-typeset .info > .admonition-title, .md-typeset .info > summary { - background-color: var(--md-base-3); -} - -/* Abstract */ -.md-typeset .admonition.abstract, -.md-typeset details.abstract { - border-color: var(--md-chill); -} - -.md-typeset .abstract > .admonition-title::before, .md-typeset .abstract > summary::before { - background-color: var(--md-chill); -} - -.md-typeset .abstract > .admonition-title::before, .md-typeset .abstract > summary::after { - background-color: var(--md-chill); -} - -.md-typeset .abstract > .admonition-title, .md-typeset .abstract > summary { - background-color: var(--md-base-3); -} - -/* Note */ -.md-typeset .admonition.note, -.md-typeset details.note { - border-color: var(--md-theme-fade); -} - -.md-typeset .note > .admonition-title::before, .md-typeset .note > summary::before { - background-color: var(--md-theme-fade); -} - -.md-typeset .note > .admonition-title::before, .md-typeset .note > summary::after { - background-color: var(--md-theme-fade); -} - -.md-typeset .note > .admonition-title, .md-typeset .note > summary { - background-color: var(--md-base-3); -} - -/* Example */ -.md-typeset .admonition.example, -.md-typeset details.example { - border-color: var(--md-base-c-dimmed); -} - -.md-typeset .example > .admonition-title::before, .md-typeset .example > summary::before { - background-color: var(--md-base-c-dimmed); -} - -.md-typeset .example > .admonition-title::before, .md-typeset .example > summary::after { - background-color: var(--md-base-c-dimmed); -} - -.md-typeset .example > .admonition-title, .md-typeset .example > summary { - background-color: var(--md-base-3); -} - -/* Success */ -.md-typeset .admonition.success, -.md-typeset details.success { - border-color: var(--md-success); -} - -.md-typeset .success > .admonition-title::before, .md-typeset .success > summary::before { - background-color: var(--md-success); -} - -.md-typeset .success > .admonition-title::before, .md-typeset .success > summary::after { - background-color: var(--md-success); -} - -.md-typeset .success > .admonition-title, .md-typeset .success > summary { - background-color: var(--md-base-3); -} - -/* Header styling */ -.md-header { - color: var(--md-base-c-theme) !important; -} - -/* Light mode header background */ -[data-md-color-scheme="light"] .md-header { - background-color: var(--md-base-3-bg) !important; -} - -/* Dark mode header background */ -[data-md-color-scheme="slate"] .md-header { - background-color: var(--md-base-2) !important; -} - -[data-md-component="tabs"] { - font-family: 'Satoshi', 'Open Sans', Arial, sans-serif; - font-feature-settings: "ss02", "ss03", "ss04", "liga" 0; - color: var(--md-base-c-theme) !important; -} - -/* Tab labels - set font size to 16px with higher specificity */ -.md-header .md-tabs .md-tabs__list .md-tabs__item .md-tabs__link { - font-size: 16px; - font-family: 'Open Sans', Arial, sans-serif; - color: var(--md-base-c-theme); -} - -/* Tab content within tabbed sections - high specificity selector */ -.md-content .md-typeset .tabbed-set > .tabbed-content { - font-size: 16px; - font-family: 'Open Sans', Arial, sans-serif; -} - -/* Tab button labels in pymdownx.tabbed content - high specificity */ -.md-content .md-typeset .tabbed-set .tabbed-labels > label { - font-size: 16px; - font-family: 'Open Sans', Arial, sans-serif; - color: var(--md-base-c); -} - -/* Active tab button styling */ -.md-content .md-typeset .tabbed-set .tabbed-labels > label:hover, -.md-content .md-typeset .tabbed-set .tabbed-labels > label[for]:hover { - color: var(--md-attn); -} - -/* Content inside tabbed panels - very specific selectors */ -.md-content .md-typeset .tabbed-set .tabbed-content p, -.md-content .md-typeset .tabbed-set .tabbed-content li, -.md-content .md-typeset .tabbed-set .tabbed-content ul, -.md-content .md-typeset .tabbed-set .tabbed-content ol { - font-size: 16px; - font-family: 'Open Sans', Arial, sans-serif; -} - -.md-content .md-typeset .tabbed-set .tabbed-content h1, -.md-content .md-typeset .tabbed-set .tabbed-content h2, -.md-content .md-typeset .tabbed-set .tabbed-content h3, -.md-content .md-typeset .tabbed-set .tabbed-content h4, -.md-content .md-typeset .tabbed-set .tabbed-content h5, -.md-content .md-typeset .tabbed-set .tabbed-content h6 { - font-size: inherit; - font-family: 'Satoshi', 'Open Sans', Arial, sans-serif; -} - -/* Light mode tabs background */ -[data-md-color-scheme="light"] [data-md-component="tabs"] { - background-color: var(--md-base-3-bg) !important; -} - -/* Dark mode tabs background */ -[data-md-color-scheme="slate"] [data-md-component="tabs"] { - background-color: var(--md-base-2) !important; -} - -.md-header__title { - color: var(--md-base-c-theme); - font-weight: 640; - font-size: 16px; -} - -.md-header__topic:first-child { - font-weight: 740; -} - -.md-header__topic { - font-weight: 740; -} - -/* Header navigation items */ -.md-header__option { - color: var(--md-base-c-theme) !important; -} - -.md-header__button { - color: var(--md-base-c-theme) !important; -} - -.md-header__button:hover { - color: var(--md-brand) !important; -} - -/* Hamburger menu (mobile navigation toggle) styling */ -.md-header__button.md-icon { - color: var(--md-base-c-theme) !important; -} - -.md-header__button.md-icon:hover { - color: var(--md-attn) !important; -} - -/* Theme toggle button positioning */ -.md-header__option[data-md-component="palette"] { - order: 999; - margin-left: auto; -} - -/* Ensure header has flex layout */ -.md-header__inner { - display: flex; - align-items: center; -} - -/* Search and other header elements */ -.md-search__input { - color: var(--md-base-c-theme) !important; -} - -.md-search__input::placeholder { - color: var(--md-base-c-dimmed) !important; -} - -/* Navigation styling */ -.md-nav__item--active > .md-nav__link { - color: var(--md-attn); -} - -/* Table of contents header */ -.md-nav--secondary .md-nav__title { - color: var(--md-base-c); -} - -/* Highlight active ToC link*/ -.md-nav__link--active, -.md-nav__item--active > .md-nav__link { - color: var(--md-attn) !important; -} - -/* Make navigation section titles more prominent */ -.md-nav--primary .md-nav__item--section > .md-nav__link, -.md-nav--secondary .md-nav__item--section > .md-nav__link { - font-weight: 740; - letter-spacing: 0.01em; -} - -/* Light mode section titles - use base-c color */ -[data-md-color-scheme="light"] .md-nav--primary .md-nav__item--section > .md-nav__link, -[data-md-color-scheme="light"] .md-nav--secondary .md-nav__item--section > .md-nav__link { - color: var(--md-base-c); -} - -/* Dark mode section titles - use base-c color */ -[data-md-color-scheme="slate"] .md-nav--primary .md-nav__item--section > .md-nav__link, -[data-md-color-scheme="slate"] .md-nav--secondary .md-nav__item--section > .md-nav__link { - color: var(--md-base-c); -} - -/*Custom link styling */ -.md-typeset a { - color: var(--md-attn); - font-weight: normal; -} - -.md-typeset a:hover { - color: var(--md-attn); - text-decoration: underline; -} - -/* Code block styling */ -.md-typeset pre > code { - font-size: 0.85rem; -} - -/* Code syntax highlighting using Bifrost colors */ -/* Light mode code highlighting */ -[data-md-color-scheme="light"] { - /* Keywords - use strong theme color for high contrast */ - .highlight .k, - .highlight .kn, - .highlight .kp, - .highlight .kr, - .highlight .kt { - color: var(--bfc-theme-3, var(--md-base-c-theme)); /* Fallback to existing color */ - } - - /* Strings - use brand color */ - .highlight .s, - .highlight .s1, - .highlight .s2, - .highlight .sb, - .highlight .sc, - .highlight .sd, - .highlight .se, - .highlight .sh, - .highlight .si, - .highlight .sx, - .highlight .sr, - .highlight .ss { - color: var(--bfc-brand, var(--md-brand)); /* Fallback to existing brand color */ - } - - /* Comments - use base-2 for subtle but readable text */ - .highlight .c, - .highlight .c1, - .highlight .cm, - .highlight .cp, - .highlight .cs { - color: var(--bfc-base-2, var(--md-base-c-dimmed)); /* Fallback to existing dimmed */ - font-style: italic; - } - - /* Numbers - use success color */ - .highlight .m, - .highlight .mf, - .highlight .mh, - .highlight .mi, - .highlight .mo { - color: var(--bfc-success, var(--md-success)); /* Fallback to existing success */ - } - - /* Functions - use attention color */ - .highlight .nf, - .highlight .fm { - color: var(--bfc-attn, var(--md-attn)); /* Fallback to existing attention */ - } - - /* Classes - use chill color */ - .highlight .nc { - color: var(--bfc-chill, var(--md-chill)); /* Fallback to existing chill */ - } - - /* Variables - use theme-2 */ - .highlight .na, - .highlight .nv, - .highlight .vc, - .highlight .vg, - .highlight .vi { - color: var(--bfc-theme-2, var(--md-base-c-theme)); /* Fallback to theme color */ - } - - /* Operators - use theme-1 */ - .highlight .o, - .highlight .ow { - color: var(--bfc-theme-1, var(--md-brand)); /* Fallback to brand */ - } - - /* Built-ins and exceptions - use warning color */ - .highlight .nb, - .highlight .ne { - color: var(--bfc-warning, var(--md-attn)); /* Fallback to attention */ - } - - /* Decorators and annotations - use alert */ - .highlight .nd, - .highlight .ni { - color: var(--bfc-alert, var(--md-theme-fade)); /* Fallback to theme-fade */ - } -} - -/* Dark mode code highlighting */ -[data-md-color-scheme="dark"] { - /* Keywords */ - .highlight .k, - .highlight .kn, - .highlight .kp, - .highlight .kr, - .highlight .kt { - color: var(--bfc-theme, var(--md-base-c-theme)); /* Fallback to existing theme */ - } - - /* Strings */ - .highlight .s, - .highlight .s1, - .highlight .s2, - .highlight .sb, - .highlight .sc, - .highlight .sd, - .highlight .se, - .highlight .sh, - .highlight .si, - .highlight .sx, - .highlight .sr, - .highlight .ss { - color: var(--bfc-brand, var(--md-brand)); /* Fallback to existing brand */ - } - - /* Comments */ - .highlight .c, - .highlight .c1, - .highlight .cm, - .highlight .cp, - .highlight .cs { - color: var(--bfc-base-2, var(--md-base-c-dimmed)); /* Fallback to existing dimmed */ - font-style: italic; - } - - /* Numbers */ - .highlight .m, - .highlight .mf, - .highlight .mh, - .highlight .mi, - .highlight .mo { - color: var(--bfc-success, var(--md-success)); /* Fallback to existing success */ - } - - /* Functions */ - .highlight .nf, - .highlight .fm { - color: var(--bfc-attn, var(--md-attn)); /* Fallback to existing attention */ - } - - /* Classes */ - .highlight .nc { - color: var(--bfc-chill, var(--md-chill)); /* Fallback to existing chill */ - } - - /* Variables */ - .highlight .na, - .highlight .nv, - .highlight .vc, - .highlight .vg, - .highlight .vi { - color: var(--bfc-theme-2, var(--md-base-c-theme)); /* Fallback to theme color */ - } - - /* Operators */ - .highlight .o, - .highlight .ow { - color: var(--bfc-theme-1, var(--md-brand)); /* Fallback to brand */ - } - - /* Built-ins and exceptions */ - .highlight .nb, - .highlight .ne { - color: var(--bfc-warning, var(--md-attn)); /* Fallback to attention */ - } - - /* Decorators and annotations */ - .highlight .nd, - .highlight .ni { - color: var(--bfc-alert, var(--md-theme-fade)); /* Fallback to theme-fade */ - } -} - -/* Enhanced inline code styling with Bifrost colors */ -.md-typeset code { - color: var(--bfc-brand, var(--md-brand)); - background-color: var(--bfc-base-3-bg, var(--md-code-bg-color)); - border-radius: 0.25rem; - padding: 0.125rem 0.25rem; - border: 1px solid var(--bfc-base-2, var(--md-default-fg-color--lightest)); -} - -/* Remove all borders and backgrounds from code block containers */ -.md-typeset .highlight, -.md-typeset .codehilite, -.md-typeset pre { - background-color: transparent; - border: none; - border-radius: 0; - box-shadow: none; - padding: 0; - margin: 0; -} - -/* Apply background and styling only to the code element itself */ -.md-typeset .highlight pre code, -.md-typeset .codehilite pre code, -.md-typeset pre code { - background-color: var(--md-code-bg-color); - border-radius: 0.5rem; - padding: 1rem; - display: block; - margin: 0; -} - -/* Table styling */ -.md-typeset table { - margin: 1.5rem 0; -} - -.md-typeset table th { - background-color: var(--md-default-fg-color--lightest); - font-weight: 600; -} - -/* Grid cards styling */ -.md-typeset .grid.cards > ol > li, -.md-typeset .grid.cards > ul > li, -.md-typeset .grid > .card { - border-radius: 16px; - position: relative; - overflow: hidden; -} - -.md-typeset .grid.cards > ol > li:focus-within, -.md-typeset .grid.cards > ol > li:hover, -.md-typeset .grid.cards > ul > li:focus-within, -.md-typeset .grid.cards > ul > li:hover, -.md-typeset .grid > .card:focus-within, -.md-typeset .grid > .card:hover { - border: .05rem solid var(--md-default-fg-color--lightest); - box-shadow: none; - } - -/* Footer styling with Bifrost colors */ -.md-footer { - margin-top: 4rem; - background-color: var(--bfc-base-1, var(--md-base-1)) !important; - color: var(--bfc-base, var(--md-base-c-theme)) !important; -} - -.md-footer__inner { - background-color: var(--bfc-base-3, var(--md-base-3)) !important; -} - -/* Footer navigation links */ -.md-footer__link { - color: var(--bfc-base, var(--md-base-c-theme)) !important; - transition: color 0.2s ease; -} - -.md-footer__link:hover { - color: var(--bfc-attn, var(--md-attn)) !important; -} - -/* Footer navigation titles */ -.md-footer__title { - color: var(--bfc-base-2, var(--md-base-c-dimmed)) !important; - font-weight: 500; -} - -/* Footer direction text (Previous/Next) */ -.md-footer__direction { - color: var(--bfc-base-2, var(--md-base-c-dimmed)) !important; - font-size: 0.8rem; - text-transform: uppercase; - letter-spacing: 0.5px; -} - -/* Style social links in footer - position on the right */ -.md-footer__social { - display: flex; - justify-content: flex-end; - align-items: center; - margin-top: 0.5rem; -} - -.md-footer__social a { - color: var(--md-base-c-theme); - font-size: 18px; - margin-left: 12px; -} - -.md-footer__social a:hover { - color: var(--md-attn); -} - -/* Footer meta section - show but hide generator text */ -.md-footer-meta { - background-color: var(--md-base-3) !important; - color: var(--md-base-c-theme) !important; -} - -.md-footer-meta__inner { - background-color: var(--md-base-3) !important; - color: var(--md-base-c-theme) !important; -} - -/* Hide "Made with Material for MkDocs" generator text */ -.md-footer-meta .md-footer-copyright__highlight { - display: none !important; -} - -/* Footer copyright text - more specific selectors */ -.md-footer-meta .md-footer-copyright { - color: var(--md-base-c-theme) !important; -} - -.md-footer-meta .md-footer-copyright__highlight { - color: var(--md-base-c-theme) !important; -} - -.md-footer-meta .md-footer-copyright a { - color: var(--md-attn) !important; -} - -.md-footer-meta .md-footer-copyright a:hover { - color: var(--md-attn) !important; -} - -/* Override all text in footer meta */ -.md-footer-meta * { - color: var(--md-base-c-theme) !important; -} - -.md-footer-meta a { - color: var(--md-attn) !important; -} - -.md-footer-meta a:hover { - color: var(--md-attn) !important; -} - -/* Coming soon tags */ -.md-typeset em:contains("coming soon") { - background: var(--md-code-bg-color); - border-radius: 0.2rem; - padding: 0.1rem 0.3rem; - font-size: 0.85em; - font-style: normal; - color: var(--md-default-fg-color--light); -} - -/* Reduce spacing between heading and metadata */ -.md-typeset h1 + .article-meta { - margin-top: -0.7rem; -} - -/* Article metadata styling */ -.article-meta { - background-color: transparent; - border-top: 1px solid var(--md-default-fg-color--lightest); - border-bottom: 1px solid var(--md-default-fg-color--lightest); - border-left: none; - border-right: none; - border-radius: 0; - padding: 0.5rem 0; - margin: 0 0 1.5rem 0; - font-size: 0.75rem; - color: var(--md-default-fg-color--light); - line-height: 1.4; -} - -.article-meta .meta-item { - display: inline-block; - margin-right: 1rem; -} - -.article-meta .meta-item:last-child { - margin-right: 0; -} - -.article-meta .meta-label { - font-weight: 700; - color: var(--md-default-fg-color--light); -} - -.article-meta .meta-value { - color: var(--md-default-fg-color--light); -} - -.article-meta .meta-author { - color: var(--md-default-fg-color--light); - font-weight: normal; -} - -.article-meta .meta-date { - color: var(--md-default-fg-color--light); -} - -/* Responsive metadata */ -@media screen and (max-width: 768px) { - .article-meta .meta-item { - display: block; - margin-right: 0; - margin-bottom: 0.5rem; - } - - .article-meta .meta-item:last-child { - margin-bottom: 0; - } -} - -/* Responsive adjustments */ -@media screen and (max-width: 768px) { - .md-typeset .grid.cards { - grid-template-columns: 1fr; - } -} - -@media screen and (max-width: 76.2344em) { - .md-nav--primary .md-nav__title[for="__drawer"] { - background-color: var(--md-base-3-bg); - color: var(--md-base-c-theme); - } - - /* Show and style site title in mobile navigation drawer */ - .md-nav--primary .md-nav__title--site { - display: block !important; - background-color: var(--md-base-1); - padding: 1.5rem 1rem; - margin: 0; - border-bottom: 1px solid var(--md-default-fg-color--lightest); - text-align: center; - } - - /* Style the site title link and add logo */ - .md-nav--primary .md-nav__title--site .md-nav__button { - display: flex; - flex-direction: column; - align-items: center; - gap: 0.5rem; - text-decoration: none; - color: var(--md-base-c-theme); - font-family: 'Satoshi', 'Open Sans', Arial, sans-serif; - font-feature-settings: "ss02", "ss03", "ss04", "liga" 0; - font-weight: 640; - font-size: 1.1rem; - } - - /* Add logo before site title in mobile nav */ - .md-nav--primary .md-nav__title--site .md-nav__button::before { - content: ""; - display: block; - width: 48px; - height: 48px; - background-image: url("../img/developer-platform-logo.svg"); - background-size: contain; - background-repeat: no-repeat; - background-position: center; - margin-bottom: 0.25rem; - } -} - -/* Hide site name from desktop navigation and regular mobile title */ -.md-nav__title--site { - display: none; -} - -/* Hide the "Developer Platform Docs" section title above Home in navigation */ -.md-nav--primary .md-nav__title { - display: none !important; -} - -/* Keep the drawer toggle title visible */ -.md-nav--primary .md-nav__title[for="__drawer"]:not(.md-nav__title--site) { - display: block; -} - -/* Hide back buttons on desktop - they should only appear in mobile hamburger menu */ -@media screen and (min-width: 76.25em) { - .md-nav--primary .md-nav__back-button, - .md-nav--primary .md-nav__section-title { - display: none !important; - } -} - -/* Mobile navigation back button and section header styling */ -@media screen and (max-width: 76.2344em) { - /* Back button styling - clean and minimal */ - .md-nav--primary .md-nav__back-button { - margin: 0 !important; - padding: 0 !important; - background-color: var(--md-base-2) !important; - border-bottom: none !important; - } - - .md-nav--primary .md-nav__back-button .md-nav__link { - color: var(--md-base-c-theme) !important; - font-weight: 400 !important; - font-family: 'Open Sans', Arial, sans-serif !important; - background-color: transparent !important; - border-radius: 0 !important; - margin: 0 !important; - padding: 0.75rem 1.2rem !important; - transition: color 0.2s ease, background-color 0.2s ease; - text-decoration: none !important; - display: flex !important; - align-items: center !important; - justify-content: flex-start !important; - font-size: 0.75rem !important; - } - - .md-nav--primary .md-nav__back-button .md-nav__link:hover { - background-color: var(--md-default-fg-color--lightest) !important; - color: var(--md-base-c-theme) !important; - } - - .md-nav--primary .md-nav__back-button .md-nav__link:focus { - outline: 2px solid var(--md-chill); - outline-offset: -2px; - background-color: var(--md-default-fg-color--lightest) !important; - } - - /* Style the back arrow icon - smaller to match text */ - .md-nav--primary .md-nav__back-button svg { - width: 18px !important; - height: 18px !important; - margin-right: 0 !important; - opacity: 1; - transition: opacity 0.2s ease; - } - - .md-nav--primary .md-nav__back-button:hover svg { - opacity: 0.8; - } - - /* Section title styling - same size as navigation text */ - .md-nav--primary .md-nav__section-title { - margin: 0 !important; - padding: 0 !important; - background-color: var(--md-base-2) !important; - border-bottom: none !important; - border-top: none !important; - border: none !important; - } - - .md-nav--primary .md-nav__section-title-text { - color: var(--md-base-c-theme) !important; - font-weight: 500 !important; - font-size: 0.75rem !important; - padding: 0 1.2rem 0.75rem 1.2rem !important; - margin: 0 !important; - font-family: 'Open Sans', Arial, sans-serif !important; - text-transform: none !important; - letter-spacing: normal !important; - } - - /* Remove spacing adjustments */ - .md-nav--primary .md-nav__back-button + .md-nav__item, - .md-nav--primary .md-nav__section-title + .md-nav__item { - margin-top: 0 !important; - } - - /* Ensure proper background color for header area - no gap */ - .md-nav--primary .md-nav__back-button + .md-nav__section-title { - margin-top: 0 !important; - } - - /* Remove any borders from the header area completely */ - .md-nav--primary .md-nav__back-button *, - .md-nav--primary .md-nav__section-title *, - .md-nav--primary .md-nav__back-button::before, - .md-nav--primary .md-nav__back-button::after, - .md-nav--primary .md-nav__section-title::before, - .md-nav--primary .md-nav__section-title::after { - border: none !important; - border-bottom: none !important; - border-top: none !important; - } -} - -/* Breadcrumb styling */ -.breadcrumb-nav { - margin-bottom: 1.5rem; - font-size: 0.8rem; - color: var(--md-default-fg-color--light); -} - -.breadcrumb-home { - color: var(--md-attn) !important; - text-decoration: none; -} - -.breadcrumb-home:hover { - color: var(--md-attn) !important; - text-decoration: underline; -} - -/* Footer sizing and spacing - simple full width approach */ -.md-footer { - margin-top: 60px; - width: 100%; - max-width: none; -} - -/* Override Material theme's main container to not constrain footer */ -.md-main .md-footer { - width: 100vw; - position: relative; - left: 50%; - right: 50%; - margin-left: -50vw; - margin-right: -50vw; -} - -/* Footer navigation styling */ -.md-footer-nav { - background-color: var(--md-base-3); - width: 100%; - max-width: none; -} - -.md-footer-nav__inner { - padding: 40px 24px; - max-width: 1200px; - margin: 0 auto; - box-sizing: border-box; -} - -.md-footer-nav__link { - padding: 20px 16px; - min-height: 60px; -} - -/* Footer text sizes */ -.md-footer__link { - font-size: 24px; -} - -.md-footer__title { - font-size: 28px; - font-weight: 600; -} - -.md-footer__direction { - font-size: 18px; -} - -/* Footer meta section - full width background */ -.md-footer-meta { - background-color: var(--md-base-2); - width: 100%; - max-width: none; -} - -.md-footer-meta__inner { - padding: 20px 24px; - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - min-height: 77.9px; - max-width: 1200px; - margin: 0 auto; - box-sizing: border-box; -} - -.md-footer-meta__inner .md-footer-copyright { - flex: 1; -} - -.md-footer-meta__inner .md-footer__social { - margin-top: 0; -} - -/* Footer copyright text */ -.md-footer-meta, -.md-footer-meta .md-footer-copyright, -.md-footer-meta .md-footer-copyright__highlight, -.md-footer-copyright, -.md-footer-copyright__highlight, -.md-copyright, -.md-copyright__highlight { - font-size: 14px; - line-height: 1.4; - margin: 2px 0; -} - -.md-footer-meta * { - font-size: 14px; -} - -.md-footer-meta a { - color: var(--md-attn); - font-size: 14px; -} - -.md-footer-meta.md-typeset { - font-size: 14px; -} diff --git a/src/intility_bifrost_mkdocs/plugin.py b/src/intility_bifrost_mkdocs/plugin.py index 1c5814a..8591e52 100644 --- a/src/intility_bifrost_mkdocs/plugin.py +++ b/src/intility_bifrost_mkdocs/plugin.py @@ -212,11 +212,6 @@ def on_config(self, config: MkDocsConfig) -> MkDocsConfig: # Insert our overrides as the highest-priority theme directory. config.theme.dirs.insert(0, str(overrides_dir.resolve())) - # Inject extra.css so it gets a tag in every page. - config["extra_css"] = [ - "assets/stylesheets/extra.css", - ] + config["extra_css"] - # Inject sensible defaults (never overwrites user-provided config). _inject_markdown_extensions(config) _inject_theme_features(config) diff --git a/tests/test_plugin.py b/tests/test_plugin.py index d2c890f..8b19a16 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -29,9 +29,9 @@ def _minimal_config() -> MkDocsConfig: ) # Validation populates defaults (theme.dirs, extra_css, etc.) - errors, warnings = cfg.validate() + errors, _warnings = cfg.validate() assert not errors, errors - return cfg + return cfg # type: ignore # --------------------------------------------------------------------------- @@ -39,36 +39,36 @@ def _minimal_config() -> MkDocsConfig: # --------------------------------------------------------------------------- -def test_plugin_injects_overrides_and_css(): - """The plugin should prepend its overrides dir and extra.css into the config.""" +def test_plugin_injects_overrides_dir(): + """The plugin should prepend its overrides dir into the config.""" plugin = IntilityBifrostPlugin() config = _minimal_config() original_dirs_len = len(config.theme.dirs) - original_css = list(config["extra_css"]) result = plugin.on_config(config) - # Overrides dir is prepended (first entry = highest priority). overrides_dir = str(OVERRIDES_DIR.resolve()) assert result.theme.dirs[0] == overrides_dir assert len(result.theme.dirs) == original_dirs_len + 1 - # extra.css is prepended to extra_css. - assert result["extra_css"][0] == "assets/stylesheets/extra.css" - assert result["extra_css"][1:] == original_css - def test_overrides_directory_exists(): """The overrides directory should contain the expected theme files.""" assert OVERRIDES_DIR.is_dir() assert (OVERRIDES_DIR / "main.html").is_file() - assert (OVERRIDES_DIR / "assets" / "stylesheets" / "extra.css").is_file() assert (OVERRIDES_DIR / "assets" / "stylesheets" / "bifrost.css").is_file() - assert (OVERRIDES_DIR / "assets" / "fonts" / "satoshi-variable.woff2").is_file() - assert ( - OVERRIDES_DIR / "assets" / "fonts" / "satoshi-variable-italic.woff2" - ).is_file() + + +def test_plugin_does_not_inject_extra_css(): + """extra.css used to be auto-injected; ensure it no longer is.""" + plugin = IntilityBifrostPlugin() + config = _minimal_config() + + result = plugin.on_config(config) + + paths = [str(entry) for entry in result["extra_css"]] + assert "assets/stylesheets/extra.css" not in paths def test_plugin_preserves_existing_extra_css(): @@ -81,12 +81,8 @@ def test_plugin_preserves_existing_extra_css(): result = plugin.on_config(config) - assert result["extra_css"][0] == "assets/stylesheets/extra.css" assert "custom/user.css" in result["extra_css"] assert "custom/other.css" in result["extra_css"] - assert result["extra_css"].index("assets/stylesheets/extra.css") < result[ - "extra_css" - ].index("custom/user.css") # ---------------------------------------------------------------------------