/* ========================================================================== Bitcoin After Life — manual theme Palette taken from the bitcoin-after.life landing page ("Slate" system). Change a value here and it propagates through the whole manual. ========================================================================== */ :root { --bal-accent: #2d6cdf; --bal-accent-soft: #e6eefc; --bal-accent-line: #cfe0fb; --bal-accent-dark: #2559b8; --bal-ink: #1a2027; --bal-muted: #5b6672; --bal-bg: #eef1f4; --bal-panel: #ffffff; --bal-line: #dfe4ea; --bal-line-strong: #cbd2da; --bal-ok: #1f9d57; --bal-ok-soft: #e3f4ea; --bal-warn: #b5701b; --bal-warn-soft: #fbf0df; --bal-btc: #f7931a; --bal-mono: ui-monospace, "SF Mono", Menlo, Consolas, monospace; } /* -------- Light scheme ---------------------------------------------------- */ [data-md-color-scheme="default"] { --md-primary-fg-color: var(--bal-accent); --md-primary-fg-color--light: #4f85e6; --md-primary-fg-color--dark: var(--bal-accent-dark); --md-primary-bg-color: #ffffff; --md-primary-bg-color--light: rgba(255, 255, 255, .7); --md-accent-fg-color: var(--bal-accent-dark); --md-accent-fg-color--transparent: var(--bal-accent-soft); --md-accent-bg-color: #ffffff; --md-default-bg-color: var(--bal-bg); --md-default-fg-color: var(--bal-ink); --md-default-fg-color--light: var(--bal-muted); --md-default-fg-color--lighter: var(--bal-line-strong); --md-default-fg-color--lightest: var(--bal-line); --md-typeset-color: var(--bal-ink); --md-typeset-a-color: var(--bal-accent); --md-code-bg-color: #e4e9ef; --md-code-fg-color: var(--bal-ink); --md-footer-bg-color: var(--bal-ink); --md-footer-bg-color--dark: #12171c; } /* Content sits on white panels, like the cards on the website. */ [data-md-color-scheme="default"] .md-main__inner .md-content__inner { background: var(--bal-panel); border: 1px solid var(--bal-line); border-radius: 10px; padding: 8px 28px 40px; box-shadow: 0 1px 2px rgba(20, 30, 50, .05); } /* -------- Dark scheme ----------------------------------------------------- */ /* The website has no dark mode; this is a faithful dark counterpart built around the same accent blue. */ [data-md-color-scheme="slate"] { --md-hue: 215; --md-primary-fg-color: #5b8ce8; --md-primary-fg-color--light: #7ea6ee; --md-primary-fg-color--dark: var(--bal-accent); --md-primary-bg-color: #0f1419; --md-accent-fg-color: #7ea6ee; --md-accent-fg-color--transparent: rgba(45, 108, 223, .12); --md-default-bg-color: #12171c; --md-typeset-a-color: #7ea6ee; --md-code-bg-color: #1a2027; --md-footer-bg-color: #0f1419; } [data-md-color-scheme="slate"] .md-main__inner .md-content__inner { background: #171d24; border: 1px solid #262e37; border-radius: 10px; padding: 8px 28px 40px; } /* -------- Typography ------------------------------------------------------ */ .md-typeset h1, .md-typeset h2, .md-typeset h3 { font-weight: 600; letter-spacing: -.015em; } .md-typeset h1 { color: var(--md-default-fg-color); } .md-typeset h2 { border-bottom: 1px solid var(--md-default-fg-color--lightest); padding-bottom: .3em; } .md-typeset code, .md-typeset pre > code { font-family: var(--bal-mono); } /* Code blocks use the site's dark "ink" background in both schemes. */ [data-md-color-scheme="default"] .md-typeset pre > code { background: var(--bal-ink); color: #e8edf3; } /* -------- Tables ---------------------------------------------------------- */ .md-typeset table:not([class]) { border: 1px solid var(--md-default-fg-color--lightest); border-radius: 10px; overflow: hidden; box-shadow: none; font-size: .78rem; } .md-typeset table:not([class]) th { background: var(--md-default-bg-color); color: var(--md-default-fg-color--light); font-size: .68rem; font-weight: 600; letter-spacing: .08em; text-transform: uppercase; } /* -------- Admonitions mapped to the site's semantic colours --------------- */ .md-typeset .admonition, .md-typeset details { border-radius: 10px; font-size: .76rem; /* Material sets `overflow: visible` on
, so any child background (title bar, icon, chevron) that doesn't share the container's 10px radius shows through as a notch at the corners. Clipping here fixes the whole class of mismatch at once, regardless of which child causes it. */ overflow: hidden; } :root { --md-admonition-icon--note: var(--md-admonition-icon--abstract); } .md-typeset .admonition.info, .md-typeset .admonition.note, .md-typeset details.info, .md-typeset details.note { border-color: var(--bal-accent); } .md-typeset .info > .admonition-title, .md-typeset .note > .admonition-title, .md-typeset .info > summary, .md-typeset .note > summary { background: var(--bal-accent-soft); } .md-typeset .admonition.tip, .md-typeset details.tip { border-color: var(--bal-ok); } .md-typeset .tip > .admonition-title, .md-typeset .tip > summary { background: var(--bal-ok-soft); } .md-typeset .admonition.warning, .md-typeset details.warning { border-color: var(--bal-warn); } .md-typeset .warning > .admonition-title, .md-typeset .warning > summary { background: var(--bal-warn-soft); } [data-md-color-scheme="slate"] .md-typeset .info > .admonition-title, [data-md-color-scheme="slate"] .md-typeset .note > .admonition-title, [data-md-color-scheme="slate"] .md-typeset .info > summary, [data-md-color-scheme="slate"] .md-typeset .note > summary { background: rgba(45, 108, 223, .16); } [data-md-color-scheme="slate"] .md-typeset .tip > .admonition-title, [data-md-color-scheme="slate"] .md-typeset .tip > summary { background: rgba(31, 157, 87, .16); } [data-md-color-scheme="slate"] .md-typeset .warning > .admonition-title, [data-md-color-scheme="slate"] .md-typeset .warning > summary { background: rgba(181, 112, 27, .18); } /* Admonition bodies get dense fast — give the text room to breathe. */ .md-typeset .admonition > p, .md-typeset .admonition > ul, .md-typeset .admonition > ol { line-height: 1.65; } .md-typeset .admonition > p + p, .md-typeset .admonition > p + ul, .md-typeset .admonition > ul + p { margin-top: .7em; } .md-typeset .admonition > ul { padding-left: 1.1em; } .md-typeset .admonition > ul > li + li { margin-top: .35em; } /* Title: slightly larger than the body, so the box has a clear entry point. */ .md-typeset .admonition-title { font-size: .8rem; letter-spacing: .005em; } /* FAQ accordions read better with a little separation. */ .md-typeset details { margin-bottom: .5rem; } /* -------- Screenshots ----------------------------------------------------- */ img.screenshot { border: 1px solid var(--md-default-fg-color--lightest); border-radius: 8px; box-shadow: 0 6px 20px rgba(20, 30, 50, .08); max-width: 100%; } img.screenshot + em, p > img.screenshot + em { display: block; margin-top: .4rem; font-size: .72rem; font-style: normal; color: var(--md-default-fg-color--light); } /* -------- Misc ------------------------------------------------------------ */ .md-typeset .grid.cards > :is(ul, ol) > li, .md-typeset .grid > .card { border-radius: 10px; } .md-typeset a.btc, .md-typeset .btc { color: var(--bal-btc); font-weight: 700; } :focus-visible { outline: 2px solid var(--bal-accent); outline-offset: 2px; } /* -------- Brand ----------------------------------------------------------- */ /* Header sits on the accent blue, so it uses the white mark directly (docs/assets/logo.svg is a copy of logo-mark-white.svg). */ .md-header__button.md-logo img, .md-header__button.md-logo svg { height: 1.6rem; width: auto; } /* Homepage lockup: the mark plus the name set in Inter — the same construction the website uses in its top bar, and immune to the Optima dependency of the SVG wordmark. */ .bal-hero { display: flex; flex-direction: column; align-items: center; gap: .7rem; margin: 1.4rem 0 2.2rem; text-align: center; } .bal-hero img { width: 116px; height: auto; } .bal-hero .name { font-size: 1.35rem; font-weight: 600; letter-spacing: -.015em; line-height: 1.1; color: var(--md-default-fg-color); } .bal-hero .tagline { font-size: .68rem; letter-spacing: .14em; text-transform: uppercase; color: var(--md-default-fg-color--light); } /* Swap black / white mark with the colour scheme. */ .bal-hero .logo-dark { display: none; } [data-md-color-scheme="slate"] .bal-hero .logo-light { display: none; } [data-md-color-scheme="slate"] .bal-hero .logo-dark { display: inline; } /* -------- Diagrams -------------------------------------------------------- */ /* Wide technical diagrams: full content width, light frame, no drop shadow (they already have their own internal panels). */ img.diagram { display: block; width: 100%; height: auto; border: 1px solid var(--md-default-fg-color--lightest); border-radius: 8px; background: var(--bal-panel); padding: 4px; } [data-md-color-scheme="slate"] img.diagram { background: #f6f8fa; } img.diagram + em { display: block; margin-top: .4rem; font-size: .72rem; font-style: normal; color: var(--md-default-fg-color--light); } /* -------- Status colour swatches (WILL tab table) ------------------------- */ /* Usage in Markdown: Bright green */ .md-typeset .sw { display: inline-block; width: .78em; height: .78em; margin-right: .45em; vertical-align: -.06em; border-radius: 3px; background: var(--c); border: 1px solid rgba(0, 0, 0, .28); } /* -------- WILL-tab status table ------------------------------------------- */ /* Fixed layout with explicit column widths, so every row is one line high and the rhythm stays even. */ /* Material renders tables as `display: inline-block`, which makes the browser ignore `table-layout: fixed` and auto-distribute the spare width — that is what was inflating the "#" column. Force a real table box first. */ .md-typeset .status-table table:not([class]) { display: table; table-layout: fixed; width: 100%; } .md-typeset .status-table th:nth-child(1), .md-typeset .status-table td:nth-child(1) { width: 1.5em; text-align: left; padding-left: .5em; padding-right: .1em; color: var(--md-default-fg-color--light); } /* Stage sits right next to the number, not a column-width away. */ .md-typeset .status-table th:nth-child(2), .md-typeset .status-table td:nth-child(2) { width: 7.5em; padding-left: .35em; } /* Longest cell is "Azure-green #73F3C8" ≈ 12em of content. 14.5em with tight padding clears it without stealing space the Meaning column needs. */ .md-typeset .status-table th:nth-child(4), .md-typeset .status-table td:nth-child(4) { width: 14.5em; padding-left: .6em; padding-right: .5em; } .md-typeset .status-table td:nth-child(2), .md-typeset .status-table td:nth-child(4) { white-space: nowrap; } .md-typeset .status-table td { vertical-align: middle; } .md-typeset .status-table code { font-size: .8em; padding: .1em .3em; } .md-typeset .status-table .sw { margin-right: .35em; } /* Below ~55em the fixed widths stop fitting; let it scroll instead of wrap. */ @media screen and (max-width: 55em) { .md-typeset .status-table { overflow-x: auto; } .md-typeset .status-table table:not([class]) { min-width: 34em; } } /* -------- "question" admonition (end-of-page FAQ prompt, and the FAQ page itself) ---------------------------------------------------------------- */ /* Material ships a lime green (#64dd17) for this type — border, background tint, the "?" icon, AND the expand/collapse chevron all use it. Realign every one of those with the brand accent blue. */ .md-typeset .admonition.question, .md-typeset details.question { border-color: var(--bal-accent); } .md-typeset .question > .admonition-title, .md-typeset .question > summary { background: var(--bal-accent-soft); } .md-typeset .question > .admonition-title::before, .md-typeset .question > summary::before { background-color: var(--bal-accent); } .md-typeset .question > .admonition-title::after, .md-typeset .question > summary::after { color: var(--bal-accent); } [data-md-color-scheme="slate"] .md-typeset .question > .admonition-title, [data-md-color-scheme="slate"] .md-typeset .question > summary { background: rgba(45, 108, 223, .16); } /* -------- Wider navigation sidebar ---------------------------------------- */ /* Material defaults: .md-sidebar = 12.1rem, .md-grid = 61rem. The nav labels in this manual are long ("Wallet recovery use case (or wallet backup)") and wrapped onto three lines. Widening the sidebar by 4rem (+33%) and the grid by the same 4rem keeps the centre column at its original 36.8rem — the extra space comes from the unused margin on the right. Only applies where the primary sidebar is actually shown. */ @media screen and (min-width: 76.25em) { .md-sidebar--primary { width: 16.1rem; } /* Same treatment for the table of contents: its longest heading ("The building block: absolute time-locks") needs ~232px against the 158px Material allows, so it wrapped onto two lines. */ .md-sidebar--secondary { width: 16.7rem; } /* 61rem default + 4rem (primary) + 4.6rem (secondary) — the centre column keeps its original 36.8rem. */ .md-grid { max-width: 69.6rem; } } /* -------- Sidebar left indent ---------------------------------------------- */ /* Material's nav text sits almost flush against the browser edge (~.4rem). Give the whole left sidebar some breathing room, so section titles and links read as a column with a margin, not text stuck to the window edge. */ .md-sidebar--primary .md-sidebar__inner { padding-left: 1rem; } /* -------- Sidebar hierarchy: section titles vs. their pages ---------------- */ /* On desktop Material gives every .md-nav__link inside the primary sidebar the same left padding (.6rem .8rem), regardless of nesting — its per-level indent rules only exist for the mobile/merged nav. That makes section titles ("User guide") and the pages under them ("Heirs and shares") sit at the same x position, with no visual hierarchy. Nudge just the pages right. */ .md-nav--primary .md-nav__item--nested > .md-nav .md-nav__link { padding-left: 1.175rem; /* Material's default .8rem + 6px */ } /* -------- Let the widened sidebar actually be used ------------------------ */ /* Material pins the nav's text column to 11.5rem via `padding-right: calc(100% - 11.5rem)` (inside an @supports block for webkit scrollbars), leaving the rest as dead padding. Because we widened .md-sidebar--primary to 16.1rem, all 4 extra rem went into that padding — the labels kept wrapping next to visibly empty space. Re-derive it from the new width, keeping Material's ~.6rem scrollbar gutter. */ @media screen and (min-width: 76.25em) { [dir="ltr"] .md-sidebar--primary .md-sidebar__inner { padding-right: calc(100% - 15.5rem); } /* The clamp applies to both sidebars, so the table of contents needs the same treatment against its own 16.7rem width. */ [dir="ltr"] .md-sidebar--secondary .md-sidebar__inner { padding-right: calc(100% - 16.1rem); } }