Files
bal-docs/docs/stylesheets/extra.css
bitcoinafterlife f03a985ae5
All checks were successful
Build and deploy docs / deploy (push) Successful in 3s
Add Material icons to all pages, rewrite examples page as step-by-step guide
2026-07-30 14:20:59 +02:00

498 lines
18 KiB
CSS

/* ==========================================================================
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 <details>, 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: <span class="sw" style="--c:#8AFA6C"></span> 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);
}
}
/* -------- Compact table (wide comparison tables) -------------------------- */
/* Default table body is .78rem; 66% ≈ .515rem so a 4-column comparison fits
without horizontal scroll. Header cells scale down proportionally too. */
.md-typeset .compact-table table:not([class]) { font-size: .515rem; }
.md-typeset .compact-table table:not([class]) th { font-size: .46rem; }
.md-typeset .compact-table code { font-size: .9em; }
/* -------- Numbered step list (examples page) ------------------------------ */
.md-typeset .steps { counter-reset: step; margin: 1.3em 0; }
.md-typeset .steps .step {
position: relative;
padding: .15rem 0 .15rem 3rem;
margin: 0 0 1.2rem;
min-height: 2rem;
}
/* number badge */
.md-typeset .steps .step::before {
counter-increment: step;
content: counter(step);
position: absolute;
left: 0;
top: -.05rem;
width: 2rem;
height: 2rem;
border-radius: 50%;
background: var(--bal-accent);
color: #fff;
display: flex;
align-items: center;
justify-content: center;
font-weight: 700;
font-size: .9rem;
}
/* connector line between badges */
.md-typeset .steps .step:not(:last-child)::after {
content: "";
position: absolute;
left: .97rem;
top: 2.2rem;
bottom: -1.2rem;
width: 2px;
background: var(--bal-line);
}
.md-typeset .steps .step > :first-child { margin-top: 0; }
.md-typeset .steps .step > :last-child { margin-bottom: 0; }
/* the Material icon at the start of each step title, tinted accent */
.md-typeset .steps .step .twemoji {
color: var(--bal-accent);
margin-right: .15rem;
}
.md-typeset .steps .step .twemoji svg {
width: 1.1rem;
height: 1.1rem;
vertical-align: -.2rem;
}
/* admonitions nested inside a step sit tighter */
.md-typeset .steps .step .admonition { margin: .6rem 0 0; }
/* -------- Nav section icons (added by nav-section-icons.js) ---------------- */
.md-nav--primary .nav-sec-ico {
display: inline-flex;
vertical-align: -.15em;
margin-right: .4em;
}
.md-nav--primary .nav-sec-ico svg {
width: .95rem;
height: .95rem;
fill: var(--bal-accent);
}
/* -------- Homepage "Where to start" card icons ---------------------------- */
.md-typeset .grid.cards .card-ico {
color: var(--bal-accent);
margin-right: .35em;
}
.md-typeset .grid.cards .card-ico svg {
width: 1.1rem;
height: 1.1rem;
vertical-align: -.2rem;
}
/* -------- Page-title (H1) icons ------------------------------------------- */
/* A themed Material icon sits at the start of each page's H1 (added in the
Markdown as :material-...:). Make it larger than body icons and tint accent. */
.md-typeset h1 .twemoji {
color: var(--bal-accent);
margin-right: .5rem;
}
.md-typeset h1 .twemoji svg {
width: 1.6rem;
height: 1.6rem;
vertical-align: -.28rem;
}