MediaWiki:Common.css: Difference between revisions
Content deleted Content added
No edit summary |
No edit summary |
||
| (79 intermediate revisions by the same user not shown) | |||
Line 4:
Logged-in overrides live in MediaWiki:Group-user.css
MANAGED WHOLESALE: replace the entire page from the canonical file
(
block pastes.
Color/typography authority: SECTION 12 owns all heading, link,
footer, table and AI-panel colors; earlier sections are structure.
Line 115 ⟶ 116:
by section 12) --- */
.infobox {
line-height: 1.5em; border-spacing: 3px;
}
Line 243 ⟶ 244:
font-weight: 700;
line-height: 1.4;
color:
text-decoration: none !important;
cursor: pointer;
Line 1,077 ⟶ 1,078:
(not baked inline), so a change applies to every class-based page, no re-render */
--wt-indent-step: 1.5em;
/*
accent, --wt-th-bg) lives in section 12's :root, the single color
--wt-pad-y: 0.5em;
}
Line 1,090 ⟶ 1,087:
/* ── Theme: EVERY wikitable, any type ── */
.wikitable { width: 100% !important; }
/* ── Chunk Info (summary Phase 3): per-chunk tags + data-items box.
Infobox geometry — narrow right float in the data voice — as the
ONE exception to the full-width wikitable clamp above (higher
specificity carries the !important override). Emitted by the
summary renderer as class-only markup. ── */
.mw-parser-output table.chunkinfo {
width: var(--ed-infobox-w) !important;
min-width: 0 !important;
/* the list-geometry rule positions every li (for the ::before markers),
and positioned boxes paint ABOVE floats — bullets flowing beside the
box were swallowing its clicks. Lift the box one stacking level. */
position: relative;
z-index: 1;
}
@media (min-width: 640px) {
.mw-parser-output table.chunkinfo {
float: right; clear: right;
margin: 0.5em 0 0.5em 1em;
}
}
table.wikitable {
font-size: 0.85em;
border: 1px solid var(--text-dark);
font-variant-numeric: tabular-nums;
margin-top: 0.3em;
margin-bottom: 2em;
}
/* (td/caption backgrounds + caption typography are owned by §12) */
table.wikitable > tr > th,
table.wikitable > tr > td,
Line 1,121 ⟶ 1,132:
}
table.wikitable > * > tr:first-child > th,
table.wikitable > * > tr:first-child > td { border-top: 1px solid var(--
/* the ONE header divider — PURE header rows only (`:not(:has(> td))`).
Transcript tables carry the printed row LABELS as <th> inside data rows;
without the guard every label cell drew its own dark underline (broken
segments down the first column). Interior all-<th> band rows (one framed
table with repeated section headers) still get the divider, as printed. */
table.wikitable > * > tr:has(> th):not(:has(> td)):has(+ tr > td) > th { border-bottom: 1px solid var(--text-dark); }
table.wikitable > * > tr:last-child > td,
table.wikitable > * > tr:last-child > th { border-bottom: 1px solid var(--
/* a top rule ABOVE emphasized (strong/bold) rows — they are sums or section
headers, so a hairline above them improves readability. :has() gives it a
higher specificity than the base border:0, so it wins on the interior; the
first-row frame (
keeps the medium frame rather than a doubled line. Collapses cleanly with the
header divider (
Every pipeline now marks a bold row the same way — '''bold''' -> <b>/<strong>
(wikitable.py wraps total rows; the SEC path no longer emits inline
Line 1,136 ⟶ 1,152:
table.wikitable > * > tr:has(b, strong) > th,
table.wikitable > * > tr:has(b, strong) > td {
border-top: 1px solid var(--
}
Line 1,186 ⟶ 1,202:
left: 0;
z-index: 1;
box-shadow: 1px 0 0 var(--
}
table.wikitable.fintable td:first-child,
Line 1,209 ⟶ 1,225:
left: var(--wt-xs);
z-index: 1;
box-shadow: 1px 0 0 var(--
background-color: #fff;
}
Line 1,244 ⟶ 1,260:
/* =================================================================
12. EDITORIAL DESIGN SYSTEM
Appended LAST deliberately: later rules of equal specificity win,
so this section restyles typography / color / spacing WITHOUT
editing sections 1-11.
every color
v12: ONE font (STIX Two Text), ONE ink (#0d0d0d for all text AND
lines), coral for interaction only, square corners, flat controls.
2026-07 — see git history for the old system.
================================================================= */
/* ──
deliberately NO 600: semibold requests snap to true 700, giving
headers/totals/labels their firm contrast). STIX Two Text stays
ResourceLoader output — never use @import here (gadget CSS is
concatenated BEFORE Common.css and breaks it, per T165040).
Georgia is the offline fallback. Production hardening: self-host
the woff2 files on the S3 bucket. ── */
@font-face {
font-family: "
font-style: normal;
font-weight: 400
font-display: swap;
src: url(https://fonts.gstatic.com/s/ptserif/v19/EJRVQgYoZZY2vCFuvAFWzr8.woff2) format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "PT Serif";
font-style: normal;
font-weight: 700;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ptserif/v19/EJRSQgYoZZY2vCFuvAnt66qSVys.woff2) format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "PT Serif";
font-style: italic;
font-weight: 400;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ptserif/v19/EJRTQgYoZZY2vCFuvAFT_r21cg.woff2) format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "PT Serif";
font-style: italic;
font-weight: 700;
font-display: swap;
src: url(https://fonts.gstatic.com/s/ptserif/v19/EJRQQgYoZZY2vCFuvAFT9gaQZynfoA.woff2) format("woff2");
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "STIX Two Text";
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(https://fonts.gstatic.com/s/
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
font-family: "
font-style: italic;
font-weight: 400
font-display: swap;
src: url(https://fonts.gstatic.com/s/
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
/* ── Design knobs
accent:
chrome). There is no serif/sans split anymore.
--text-dark = THE ink: all text AND all lines/borders/frames.
Hierarchy is carried by size, weight, and space —
never by gray
focus rings, control hover
--ed-underline = the one non-ink gray: resting link underlines,
quiet by design so the coral hover reads as a
ONE body size, ONE small size. h3+ have NO rules (h1 carries the one
ramp and a serif/sans split — collapsed 2026-07 (see git history for
:root {
--ed-
--text-dark: #0d0d0d; /* THE ink: all text + all lines */
--ed-underline: #ccc1b7; /* resting link underline tint */
--ed-accent: #f07662; /* house coral —
--ed-paper: #fff; /* page canvas
--ed-infobox-w: 18.5rem; /* infobox total width (border-box).
is FULL WIDTH (default MediaWiki flow around
the
--ed-
(inherited from the STIX x-height compensation;
kept deliberately: "renders fine") */
--ed-small: 0.875rem; /* THE small size: tables, infobox, TOC, footer — 14px */
--ed-h-ratio: 1.15; /* HEADING LADDER — GEOMETRIC: each level is the
one below × this ratio (h6 = body ×1, h5 ×r,
h4 ×r², h3 ×r³, h2 ×r⁴ ≈ 17/19.6/22.5/25.9/
29.7px). A constant RATIO, not a constant
increment: size perception is ratio-based, so
an arithmetic ladder (+0.2 each) compresses at
the top — h2/h3 would sit only 12% apart while
h5/h6 sat 20% apart. h6 is anchored AT body
size (it is the chunk/unit heading, and table
captions twin it); h1 stays off the ladder at
2.4rem — page identity, with the one dark rule
(leaves h1/h2 ≈ 1.29 of separation).
Expressed as repeated multiplication of
--ed-body, NOT em: an em resolves against a
parent's size and would silently scale inside
tables/divs. */
--ed-title-gap: 2.1rem; /* CALIBRATION: moves the title rule DOWN */
--ed-heading-gap: 4rem; /* space BEFORE h2 AND h3 — the SAME for both (rem, not em,
Line 1,323 ⟶ 1,383:
resolve against each marker's own font-size. */
/* table header fill
+ semibold text do the work. NB: row-hover does NOT read this token
(white would kill the highlight) — hover uses a literal neutral gray. */
--wt-th-bg: #fff;
}
/* ── Canvas:
paints white on its own, the TOC column, and the TOC's
scroll-fade overlay ── */
Line 1,341 ⟶ 1,400:
background-color: transparent !important;
}
/* Scrollbars:
track. Deliberately NO standard scrollbar-width/color in this sheet:
modern Chrome ignores every ::-webkit-scrollbar-* rule on an element that
also has a standard scrollbar property set, so the two systems cannot mix
pins a standard scrollbar prop on it directly, locking it to the
uncontrollable standard path (no square corners, no button removal
possible there) — so its bar is HIDDEN outright instead; wheel/trackpad
scrolling is unaffected. Firefox gets UA-default scrollbars. */
#vector-toc, .vector-toc {
::-webkit-scrollbar { width: 5px !important; height: 5px !important; } /* discreet but still draggable */
::-webkit-scrollbar-track { background: transparent !important; }
::-webkit-scrollbar-button { /* no arrow buttons */
display: none !important;
width: 0 !important;
height: 0 !important;
}
::-webkit-scrollbar-thumb {
background: var(--
border-radius:
}
::-webkit-scrollbar-corner { background: transparent !important; }
/* Minerva (mobile skin) paints its own white wrappers over body */
Line 1,395 ⟶ 1,439:
.vector-column-end { display: none !important; }
/* ──
--ed-font (form controls don't inherit it — they get it explicitly
/* ── Tagline ("Unleashing intelligence", the .mw-logo::after): NO underline
and NO hover effect — it reads as branding, not a link (resting ink is
/* ── Logo on the
TOC label x=48, header-start x=44, Vector's default .mw-logo
Empirical at this breakpoint — re-measure if Vector's grid padding
ever changes. (The old title-axis push is removed.) ── */
.vector-header-start .mw-logo,
.mw-logo { margin-left: 4px !important; } /* !important: Vector pins its own
20px on a more specific selector */
/* ── Prose voice: serif, warm ink (Minerva has no .mw-body-content —
Line 1,416 ⟶ 1,461:
.mw-body-content,
.skin-minerva #bodyContent.content {
font-family: var(--ed-
font-size: var(--ed-body);
line-height: 1.6;
Line 1,422 ⟶ 1,467:
font-variant-numeric: lining-nums;
}
/* prose runs FULL WIDTH (default MediaWiki flow, wrapping around the
floated infobox) — the old --ed-measure cap is retired */
/* guards: the data voice stays sans at the ONE small size — otherwise the
serif body size would silently scale section 11's 0.85em tables (and
every em-based column width) */
table.wikitable, .infobox {
font-family: var(--ed-
font-size: var(--ed-small);
color: var(--text-
}
/* lighter bold in tables: the browser default 700 (header th + the <b>/<strong>
Line 1,449 ⟶ 1,488:
in a FINTABLE only the sticky first column stays opaque (it
must cover scrolling content) in the paper color; hover warms.
2. Full frame in
border on the last-column cells. On a NEUTRAL table the LEFT
rail is a plain table border (nothing is sticky); on a
Line 1,460 ⟶ 1,499:
of "financial table", repeated verbatim.
3. The table's outer margins move to the scroll WRAPPER so the
horizontal scrollbar hugs the bottom rule
table.wikitable,
table.wikitable td,
table.wikitable caption { background-color: transparent; }
/* row hover comes from §11 (#f8f9fa); the frozen first column carries its
table.wikitable.fintable > tbody > tr:hover > td:first-child,
table.wikitable:has(.col, .col-wide) > tbody > tr:hover > td:first-child {
background-color:
}
Line 1,482 ⟶ 1,520:
table.wikitable:has(.col, .col-wide) td:first-child {
border-left: none;
box-shadow: inset 1px 0 0 var(--
1px 0 0 var(--
}
/* LEFT + RIGHT frame edges drawn on the CELLS
Fintable overrides first-child border-left → none + box-shadow rail
(higher specificity, above). NB: in the v11 multi-shade system these
collapse ties could pick the WRONG (lighter) line — with one ink every
tie resolves to the same color, so the old !important right-edge
enforcement rule is gone. */
.wikitable th:first-child,
.wikitable td:first-child { border-left: 1px solid var(--
.wikitable th:last-child,
.wikitable td:last-child { border-right: 1px solid var(--
/* row labels MEET the bullets: the first column's text starts at the SAME indent
Line 1,521 ⟶ 1,554:
table.wikitable td.wt-indent-4 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step) * 4); }
table.wikitable { margin: 0; border-left: 1px solid var(--
table.wikitable.fintable,
table.wikitable:has(.col, .col-wide) { border-left: none; }
Line 1,532 ⟶ 1,565:
.copy-table-scroll {
margin: 1em 0 2em; /* reduced top gap before tables (was 1.8em) */
/* no standard scrollbar props here — they would knock these wrappers off
the webkit path (see the scrollbar block) */
}
/* the copy-table gadget nests .copy-table-scroll INSIDE the emitter's overflow-x
Line 1,540 ⟶ 1,573:
.mw-parser-output div[style*="overflow-x"] > .copy-table-scroll { margin-top: 0 !important; }
/* caption = the table's TITLE
uppercase/letter-spacing — the old eyebrow treatment is retired here). */
table.wikitable caption {
font-family: var(--ed-
font-size:
font-weight:
color: var(--text-dark);
text-align: left;
padding-bottom: 0.
was 0.2em = too tight per user) */
}
Line 1,584 ⟶ 1,615:
.mw-parser-output li > ul { margin-top: 0.3em; }
/*
ONE glyph (the round bullet) at EVERY level — depth is carried by
.mw-parser-output ul { list-style: none !important; }
.mw-parser-output ul > li { position: relative; }
Line 1,597 ⟶ 1,627:
left: calc(-1 * var(--ed-list-indent));
color: var(--text-dark); /* markers match the body text */
font-family: var(--ed-
font-size: 0.95em;
line-height: 1.68;
}
/* page-reference superscripts — present everywhere, must whisper.
Line 1,610 ⟶ 1,638:
font-size: 68%;
line-height: 0;
font-family: var(--ed-
color: var(--text-
}
Line 1,617 ⟶ 1,645:
knob lands its rule on the CONTENTS rule's line ── */
h1#firstHeading, .mw-first-heading {
font-family: var(--ed-
font-size: 2.4rem;
line-height: 1.15;
Line 1,623 ⟶ 1,651:
letter-spacing: -0.01em;
color: var(--text-dark) !important;
border-bottom: 2px solid var(--
margin-top: var(--ed-title-gap) !important;
padding-bottom: 0.3em;
Line 1,630 ⟶ 1,658:
/* breadcrumb under the title rule — the shared eyebrow treatment */
#contentSub .subpages {
font-family: var(--ed-
font-size:
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-
margin-bottom: 1.4em;
}
#contentSub .subpages a,
#contentSub .subpages a:visited { color: var(--text-
/* breadcrumb links join the house link convention (it sits among plain
text, so it must look clickable like body links do) */
#contentSub .subpages a {
text-decoration: underline;
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
}
#contentSub .subpages a:hover {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
/* ── Section headings: sans semibold on the house rules. Scoped to
Line 1,647 ⟶ 1,687:
.mw-body-content h2, .mw-body-content .mw-heading2, .section-heading,
.skin-minerva .content h2 {
font-family: var(--ed-
font-size:
* var(--ed-h-ratio) * var(--ed-h-ratio)); /* r⁴ ≈ 30px */
line-height: 1.25;
font-weight: 600;
letter-spacing: -0.005em;
color: var(--text-dark) !important;
border-bottom:
`none` must stay explicit or the skin's default
gray h2 border resurfaces. The h1 rule is now the
page's ONE dark heading rule. */
margin-top: var(--ed-heading-gap); /* same space before h2 and h3 */
margin-bottom: 0.7em;
}
.mw-body-content h3,
.skin-minerva .content h3 {
font-family: var(--ed-
font-size:
* var(--ed-h-ratio)); /* r³ ≈ 26px */
font-weight: 600;
color: var(--text-dark) !important;
/* NO underline — h3 is bold sans text only (the ONE dark heading
margin-top: var(--ed-heading-gap); /* doubled vs the old 1.8em; same as h2 */
margin-bottom: 0.6em;
}
/* h4/h5: their own rungs on the ladder — at body size they were
indistinguishable from bold prose (and from h6) once the one-font
consolidation erased the old serif/sans distinction. Shared 2rem gap
above = half the h2/h3 gap (same shared-gap logic). */
.mw-body-content h4, .mw-body-content h5 {
font-family: var(--ed-
font-
color: var(--text-dark) !important;
margin-top: 2rem;
margin-bottom: 0.4em;
}
.mw-body-content h4 {
font-size: calc(var(--ed-body) * var(--ed-h-ratio) * var(--ed-h-ratio)); /* r² ≈ 22px */
}
.mw-body-content h5 {
font-size: calc(var(--ed-body) * var(--ed-h-ratio)); /* r ≈ 20px */
}
/* h6 = bold BODY text (serif, body size), not a sans heading */
.mw-body-content h6 {
font-family: var(--ed-
font-size: var(--ed-body);
font-weight: 700;
color: var(--text-dark) !important;
}
/* h6 spacing:
default), LESS after. The old "MORE before" (1.8em) predates the
chunk-page marker: the marker line now precedes every h6 and carries
the visual separation itself, so a wide h6 top margin double-spaced
the sections (user rule 2026-07-20). This wiki wraps headings in a
.mw-heading<N> div that owns the layout margin (cf. the .mw-heading2
rule above), so the margin MUST sit on the wrapper — also on the
bare h6 as a fallback for un-wrapped DOM. */
.mw-body-content h6,
.mw-body-content .mw-heading6 {
margin:
}
/* pull the block right after an h6 up close, so "less space after" holds even
Line 1,706 ⟶ 1,765:
.mw-headline, .mw-page-title-main { color: inherit !important; }
/* ── Links:
hover) ── */
a, a:visited,
.mw-parser-output a, .mw-parser-output a:visited,
.mw-body-content a.external, .mw-body-content a.external:visited,
.mw-collapsible-toggle-default .mw-collapsible-text {
color: var(--
}
.mw-parser-output a {
Line 1,728 ⟶ 1,788:
a.mw-ui-button, a.mw-ui-button:visited { color: #fff !important; }
.mw-editsection, .mw-editsection a, .mw-editsection a:visited {
color: var(--text-
text-decoration: none;
opacity: 0.7;
Line 1,739 ⟶ 1,799:
.cdx-text-input__input:focus,
.cdx-text-input__input:enabled:focus {
border-color: var(--ed-
box-shadow: inset 0 0 0 1px var(--ed-
}
.cdx-button:enabled:focus,
.cdx-button--fake-button:focus {
box-shadow: inset 0 0 0 2px var(--ed-
}
:focus-visible { outline-color: var(--ed-
/* ── Header search. Resting border / font / radius come from the GENERIC
Codex input rules below — only the search-specific pieces live here. ── */
/* search bar on the BODY-TEXT axis. Measured on the live DOM (1120px
viewport): form x=294, title/body axis x=264 → pull 30px left (24px is
Codex's typeahead inset inside #p-search + 6px container offset). The
typeahead dropdown lives inside the form, so suggestions move with it.
Calibrated against the rendered logo+tagline width — re-measure if the
tagline or its font ever changes. */
#p-search #searchform { margin-left: -30px; }
.cdx-search-input { border-radius: 0 !important; } /* the outer assembly layer */
/* the bar hovers as ONE unit — pointing at the attached Search button warms
the input border too. !important is required: the generic input rules pin
border-color with !important, and only equal importance + higher
specificity beats them. */
.cdx-search-input:hover .cdx-text-input__input {
border-color: var(--ed-accent) !important;
}
.cdx-search-input .cdx-search-input__end-button,
.cdx-search-input .cdx-search-input__end-button:hover,
.cdx-search-input .cdx-search-input__end-button:active,
.cdx-search-input .cdx-search-input__end-button:focus {
background-color: var(--text-dark) !important;
border-color: var(--text-dark) !important;
color: #fff !important;
box-shadow: none !important;
border-radius: 0 !important; /* square corners */
font-family: var(--ed-font); /* buttons don't inherit the page font */
}
/* ── ALL Codex form inputs (Special:UserLogin etc.) follow the search-bar
design: square, ink resting border, coral on hover; the generic
:focus rule above already paints the thick coral focus. The AI
composer's borderless-input exemption later in this section still
wins via !important. ── */
/* Codex pins input colors on :enabled state selectors — restate at that
specificity with !important or the gray/rounded defaults win the tie.
The AI composer exemption still outranks all of these (higher
specificity + !important). */
.cdx-text-input, /* the WRAPPER carries its own 2px
radius — measured on #wpName1 */
.cdx-text-input__input,
.cdx-text-input__input:enabled {
border-radius: 0 !important;
}
.cdx-text-input__input,
.cdx-text-input__input:enabled {
border-color: var(--text-dark) !important;
font-family: var(--ed-font);
}
.cdx-text-input__input:hover,
.cdx-text-input__input:enabled:hover { border-color: var(--ed-accent) !important; }
/* Codex checkboxes ("Keep me logged in"): ink border, square; checked fill
goes ink too — Codex's progressive blue would break the mono theme */
.cdx-checkbox__icon {
border-color: var(--text-dark) !important;
border-radius: 0 !important;
}
.cdx-checkbox__input:checked + .cdx-checkbox__icon {
background-color: var(--text-dark) !important;
border-color: var(--text-dark) !important;
}
/* form links ("Help with logging in", "Forgot your password?") follow the
house link convention — special-page forms sit outside .mw-parser-output */
.mw-htmlform a {
text-decoration: underline;
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
}
.mw-htmlform a:hover {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
/* primary action buttons (e.g. the "Log in" submit) = the Search button:
flat ink, white label, square, every state pinned so Codex's progressive
blue never flashes through */
.cdx-button--weight-primary.cdx-button--action-progressive,
.cdx-button--weight-primary.cdx-button--action-progressive:hover,
.cdx-button--weight-primary.cdx-button--action-progressive:active,
.cdx-button--weight-primary.cdx-button--action-progressive:focus,
.cdx-button--weight-primary.cdx-button--action-progressive:enabled:hover,
.cdx-button--weight-primary.cdx-button--action-progressive:enabled:active {
background-color: var(--text-dark) !important;
border-color: var(--text-dark) !important;
color: #fff !important;
border-radius: 0 !important;
font-family: var(--ed-font);
}
/* the TOC "hide" / "move to sidebar" pill (pin/unpin) joins the same flat
treatment — one class covers both buttons */
.vector-pinnable-header-toggle-button,
.vector-pinnable-header-toggle-button:hover,
.vector-pinnable-header-toggle-button:active,
.vector-pinnable-header-toggle-button:focus {
background-color: var(--text-dark) !important;
border-color: var(--text-dark) !important;
color: #fff !important;
box-shadow: none !important;
border-radius: 0 !important; /* square corners */
font-family: var(--ed-font); /* buttons don't inherit the page font */
font-size: var(--ed-small); /* joins the ONE small size */
}
/* ── TOC sidebar — flat left-aligned design, NO section numbers.
Every entry, ANY level, starts on ONE left axis. Depth is carried by
an inline en-dash marker generated per Vector level class: top level
bare, children "–", grandchildren "––" — flowing straight into the
title as one text run. NO indentation, NO gutter, NO absolute
positioning. Titles wrap under themselves (the marker is its own
flex item, so wrapped lines align after it). Expand/collapse is the
house triangle ▸/▾ INLINE after the heading. The CONTENTS header
left-aligns with the same axis. ── */
.vector-toc {
font-family: var(--ed-
--toc-header-inset: 0; /* CONTENTS label sits on the
}
Line 1,775 ⟶ 1,928:
rule only), inset onto the number axis */
.vector-toc .vector-pinnable-header {
border-bottom: 1px solid var(--
padding-top: 0.35rem;
padding-bottom: calc(0.95rem - 3px); /* calibrated against the title rule:
-2px measured (157 vs 159), then -1px
user fine-tune */
margin-bottom: 0.9rem;
padding-left: 0 !important;
Line 1,783 ⟶ 1,938:
}
.vector-toc .vector-pinnable-header-label { /* the shared uppercase eyebrow */
font-size:
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-
margin-left: 0;
}
/* entries:
feedback = the house link convention (grey underline → coral); the
current section = the one bold row. */
.vector-toc .vector-toc-link,
.vector-toc .vector-toc-link:visited {
color: var(--text-
font-size: var(--ed-small);
text-decoration: none; /* the underline lives on the TITLE SPAN below,
so the depth dash marker stays bare */
}
.vector-toc .vector-toc-text > span:not(.vector-toc-numb) {
text-decoration: underline;
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
}
.vector-toc .vector-toc-link:hover .vector-toc-text > span:not(.vector-toc-numb) {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
.vector-toc .vector-toc-list-item-active > .vector-toc-link {
font-weight: 500 !important; /* the "current" cue (one bold row) */
}
/* NB: hiding h6 from the TOC is done in Common.js (pruneTocH6) — MediaWiki's
Line 1,834 ⟶ 1,994:
line-height: 1.5; /* = the infobox / wikitable line-height */
}
/* level-2+ sits flush under level-1 (
100% drops the sublist onto its own row below the parent's title + chevron */
.vector-toc .vector-toc-list-item > .vector-toc-list {
Line 1,841 ⟶ 2,001:
}
/* HANG-UNDER-TITLE: the
a wrapping block whose 2nd+ lines align under the TITLE (after the number).
Because the
(
of the row; grow:0 so a short title doesn't stretch (the chevron stays right
after it), shrink:1 + min-width:0 so a long title wraps. */
Line 1,859 ⟶ 2,019:
Zeroed so the li's 2×--wt-pad-y is the ONE rhythm. */
}
longer re-show it. Depth is carried by TREE markers instead, generated as
a CSS BORDER-DRAWN squared elbow (└ shape) — vertical stub into a
horizontal arm, ONE continuous 1px ink stroke by construction. Glyph
attempts ("|–" pipes, U+2514 └ from a fallback font) were rejected: two
fonts never join their strokes. Depth = the ARM LENGTH (child short,
grandchild longer). Top-level entries carry no marker. */
.vector-toc .vector-toc-level-2 > .vector-toc-link .vector-toc-text::before,
.vector-toc .vector-toc-level-3 > .vector-toc-link .vector-toc-text::before,
.vector-toc .vector-toc-level-4 > .vector-toc-link .vector-toc-text::before {
content: "";
flex: 0 0 auto;
height: 0.55em; /* vertical stub height */
border-left: 1px solid currentColor;
border-bottom: 1px solid currentColor;
position: relative;
bottom: 0.28em; /* CALIBRATION: lifts the arm off the text
baseline onto the dash axis (an empty flex
item baseline-aligns its bottom edge) */
margin-right: 0.4em;
}
.vector-toc .vector-toc-
.vector-toc .vector-toc-level-3 > .vector-toc-link .vector-toc-text::before { width: 1.05em; }
.vector-toc .vector-toc-level-4 > .vector-toc-link .vector-toc-text::before { width: 1.5em; }
/* the title span is unclassed in Vector's DOM; it is the wrapping block */
.vector-toc .vector-toc-text > span:not(.vector-toc-numb) {
flex: 1 1 auto;
min-width: 0; /* allow the title to wrap inside the row */
}
Line 1,929 ⟶ 2,092:
content: "▸"; /* collapsed — the house triangle */
font-size: 0.65rem;
color: var(--text-
}
.vector-toc .vector-toc-list-item-expanded > .vector-toc-toggle::before {
content: "▾"; /* expanded */
}
/* ── Infobox: the page's ONE white card, in the data voice;
ENFORCED with !important so inline widths cannot break it — and
pinned class-generically so ANY infobox markup (table or div)
.mw-parser-output .infobox { /* class-generic: any infobox markup */
width: var(--ed-infobox-w) !important;
Line 1,945 ⟶ 2,107:
}
.mw-parser-output table.infobox {
font-family: var(--ed-
font-size: var(--ed-small);
background-color: #fff !important;
border: 1px solid var(--
border-spacing: 0; /* kill §1's 3px so the row rhythm is EXACTLY the
cell padding — shared with the wikitable below */
Line 1,956 ⟶ 2,118:
.infobox .infobox-above { /* the shared uppercase eyebrow */
background-color: #fff !important; /* beats the template's inline #cee0f2 */
color: var(--text-
text-align: left !important;
font-size:
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
border-bottom: 1px solid var(--
padding: 0.2em 0.2em 0.55em;
}
.infobox .infobox-label {
color: var(--text-
font-weight: 600; /* semibold labels, like the band variant and table headers */
padding: var(--wt-pad-y) 0.8em var(--wt-pad-y) 0.2em; /* row rhythm = the wikitable's */
}
.infobox .infobox-data { color: var(--text-
/* ── Infobox BAND variant — Template:Infobox doc archive `wide=yes` wraps
the card in .ed-infobox-band. Same card language, re-flowed as a
full-width horizontal "dateline" strip for TABLE-FIRST pages
(financial supplements): no float, label-OVER-value pairs in a
responsive grid, content resumes full-width right below.
DESKTOP-ONLY enhancement: below 769px — and on Minerva, excluded via
body:not(.skin-minerva) because the host pins a 1120px viewport meta
on phones so width queries alone can't target them — every band rule
goes inert and the infobox falls back to the DEFAULT design (which
the existing mobile rules already render full-width). ── */
@media (min-width: 769px) {
body:not(.skin-minerva) .ed-infobox-band .infobox,
body:not(.skin-minerva) .ed-infobox-band table.infobox {
float: none !important;
clear: none !important;
width: 100% !important;
margin: 0.8em 0 1.8em !important;
/* inner text on the BULLET-TEXT axis (= the wikitable row-label axis):
1px frame + this padding = --ed-list-indent, so "Organization" starts
exactly where list text and table labels start */
padding-left: calc(var(--ed-list-indent) - 1px);
padding-right: calc(var(--ed-list-indent) - 1px);
}
body:not(.skin-minerva) .ed-infobox-band .infobox > tbody {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(12rem, 1fr));
gap: 0.7em 1.6em;
}
body:not(.skin-minerva) .ed-infobox-band .infobox > tbody > tr {
display: block;
min-width: 0;
}
/* the DOCUMENT INFO eyebrow row spans the full band */
body:not(.skin-minerva) .ed-infobox-band .infobox > tbody > tr:has(.infobox-above) {
grid-column: 1 / -1;
}
body:not(.skin-minerva) .ed-infobox-band .infobox .infobox-above {
display: block;
padding-left: 0; /* the card variant insets the eyebrow 0.2em — in the
band the field cells have zero padding, so the
eyebrow must drop its inset to share their axis */
padding-right: 0;
}
/* each field = its two table cells stacked: small muted label over value */
body:not(.skin-minerva) .ed-infobox-band .infobox > tbody > tr > th.infobox-label,
body:not(.skin-minerva) .ed-infobox-band .infobox > tbody > tr > td.infobox-data {
display: block;
padding: 0;
overflow-wrap: anywhere;
}
body:not(.skin-minerva) .ed-infobox-band .infobox > tbody > tr > th.infobox-label {
font-size: var(--ed-small); /* the ONE small size — semibold weight alone
distinguishes labels from values */
font-weight: 600;
color: var(--text-dark);
margin-bottom: 0.15em;
}
}
/* ── Blockquotes: ink bar, serif italic. The quote TEXT sits on the body-
text axis (x=0); the bar HANGS LEFT of it like the list markers do —
the negative margin pulls the whole box left by exactly the inset
(border 3px + padding), so bar and bullets share the hanging gutter
and the text aligns with paragraphs. The !important overrides
MediaWiki/Parsoid core styles that otherwise indent the blockquote. ── */
.mw-parser-output blockquote {
border-left: 3px solid var(--
padding: 0.2em 0 0.2em
margin: 1.2em 0;
margin-left:
color: var(--text-dark);
font-style: italic;
}
/* the attribution line ("(Name, title)") ships in <small> — §1 shrinks it
to 85%; keep the whole quote ONE size */
.mw-parser-output blockquote small { font-size: 100%; }
/* ── Thumbnails/framed images on the theme: ONE ink hairline frame on a
white ground (replaces MediaWiki's gray border + #f8f9fa fill); the
image itself loses its inner border (the figure frame is the line).
Caption in the data voice. Covers Parsoid figures + legacy .thumb. ── */
.mw-parser-output figure[typeof~="mw:File/Thumb"],
.mw-parser-output figure[typeof~="mw:File/Frame"],
.thumbinner {
border: 1px solid var(--text-dark) !important;
border-radius: 0 !important;
background-color: #fff !important;
}
.mw-parser-output figure[typeof~="mw:File/Thumb"] img.mw-file-element,
.mw-parser-output figure[typeof~="mw:File/Frame"] img.mw-file-element,
.thumbinner img { border: none !important; background-color: #fff; }
.mw-parser-output figure[typeof~="mw:File/Thumb"] > figcaption,
.mw-parser-output figure[typeof~="mw:File/Frame"] > figcaption,
.thumbcaption {
background-color: #fff;
color: var(--text-dark);
font-family: var(--ed-font);
font-size: var(--ed-small);
border: none !important; /* MW core frames the caption in gray #c8ccd1 —
the figure's ink frame is the only line */
}
Line 1,997 ⟶ 2,244:
}
#footer, .mw-footer, .minerva-footer {
font-family: var(--ed-
color: var(--text-
border-top: 1px solid var(--
}
#footer li, .mw-footer li { font-size: var(--ed-small); }
#footer a, #footer a:visited,
.mw-footer a, .mw-footer a:visited { color: var(--text-
/* footer links follow the house link convention: grey resting underline
warming to coral on hover (the .mw-parser-output rule doesn't reach here) */
#footer a, .mw-footer a {
text-decoration: underline;
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
}
#footer a:hover, .mw-footer a:hover {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
/* ── AI assistant panel on the theme: warm card, serif answers,
teal send button (later !important wins the ties vs section 8) ── */
.ext-aiassistant-panel { border: 1px solid var(--
/* ONE sans for the whole panel UI (the extension ships its own stack);
the assistant-message serif rule below this still wins for answers */
Line 2,013 ⟶ 2,272:
.ext-aiassistant-panel input,
.ext-aiassistant-panel textarea,
.ext-aiassistant-panel button { font-family: var(--ed-
.ext-aiassistant-header { border-bottom: 1px solid var(--
.ext-aiassistant-message-user .ext-aiassistant-message__content {
background-color: var(--text-dark) !important;
}
.ext-aiassistant-message-assistant {
font-family: var(--ed-
color: var(--text-dark) !important;
}
/* whole panel on white — header and body included (the extension tints them) */
.ext-aiassistant-panel,
.ext-aiassistant-header,
.ext-aiassistant-body { background-color: #fff !important; }
.ext-aiassistant-footer {
border-top:
a footer border doubles it into a fake 2px */
background-color: #fff !important;
/* inset the composer from the panel edges — flush, its 1px frame sits
against the panel's 1px border and reads as 2px on left/right/bottom */
padding: 12px !important;
}
/* the composer is the "search bar" of the panel — same mechanism: resting
ink border, coral on hover, coral + inner ring (reads as 2px) on focus.
The inner text field stays borderless; the frame lives on the composer. */
.ext-aiassistant-panel .cdx-text-input__input,
.ext-aiassistant-panel .cdx-text-input__input:focus,
Line 2,037 ⟶ 2,304:
outline: none !important;
}
.ext-aiassistant-prompt-composer {
border: 1px solid var(--text-dark) !important;
box-shadow: none !important;
outline: none !important;
}
.ext-aiassistant-prompt-
}
.ext-aiassistant-prompt-composer:focus-within {
border-color: var(--ed-accent) !important;
box-shadow: inset 0 0 0 1px var(--ed-accent) !important; /* = search focus */
outline: none !important;
}
/* the composer pads 20px on the sides but 10px at the bottom (section 8) —
pull the send button 10px right so its gap to the right line equals its
gap to the bottom line */
.ext-aiassistant-prompt-composer__send { margin-right: -10px !important; }
/* send button: flat ink, white arrow, SAME in every state — disabled
included — like the Search button. The :disabled selectors must be
restated at equal specificity to beat section 8's grey disabled icon. */
.ext-aiassistant-prompt-composer__send,
.ext-aiassistant-prompt-composer__send:hover,
.ext-aiassistant-prompt-composer__send:focus,
.ext-aiassistant-prompt-composer__send:disabled {
background-color: var(--
border-color: var(--
}
.ext-aiassistant-prompt-composer__send .cdx-icon,
.ext-aiassistant-prompt-composer__send .cdx-icon svg,
.ext-aiassistant-prompt-composer__send:disabled .cdx-icon svg {
color: #fff !important;
fill: #fff !important;
}
.ext-aiassistant-panel .cdx-button--weight-quiet:not(.cdx-button--icon-only)::before {
color: var(--
}
/* citation chips in
.ext-aiassistant-cite,
.ext-aiassistant-cite a { color: var(--
/* ── Inline footnotes ({{footnote}} → <span class="ed-fn" title="…">).
Line 2,072 ⟶ 2,359:
.ed-fn-chip::after {
content: "note";
font-family: var(--ed-
font-size: 0.7em;
vertical-align: super;
color: var(--text-
/* the house link convention: grey resting underline → coral on hover */
text-
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
white-space: nowrap;
}
.ed-fn:hover .ed-fn-chip::after {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
/* in the DOM for the bot; never shown to readers as inline text */
Line 2,102 ⟶ 2,395:
background: rgba(20, 18, 16, 0.92); /* near-black, slightly transparent */
color: #fff;
font-family: var(--ed-
font-size: 0.95rem;
line-height: 1.5;
Line 2,110 ⟶ 2,403:
white-space: pre-line;
}
/* ── Reference-preview bubble (Popups extension; .rt-* = the Reference
Tooltips gadget variant, covered in case it's the active one) on the
theme: ink frame, square corners. The extension draws its gray outline
as a 1px ring INSIDE box-shadow (not a border) — so the shadow is
re-declared with only its soft depth layer, and a real ink border is
added. The pointer triangle is a border-drawn pseudo-element, recolored
per direction class. ── */
.mwe-popups {
border: none !important; /* the frame lives on the CONTAINER — unclipped,
it overpaints the root's bottom border */
border-radius: 0 !important;
box-shadow: 0 30px 90px -20px rgba(0, 0, 0, 0.3) !important;
}
.mwe-popups .mwe-popups-container {
border: 1px solid var(--text-dark) !important;
border-radius: 0 !important;
background: #fff !important;
box-sizing: border-box !important;
}
/* NO pointer triangle — a 1px diagonal outline anti-aliases to a washed-out
gray no matter its color, so the tail is dropped for a clean square
bubble (matches the footnote popover, which has no pointer either).
TWO mechanisms to kill: the legacy :before/:after border-triangles AND
the clip-path polygon this Popups version carves the tail (and fake
rounded corners) into the container with. */
.mwe-popups:before,
.mwe-popups:after { display: none !important; }
.mwe-popups .mwe-popups-container { clip-path: none !important; }
/* The desktop hover popover (also created in Common.js, appended to <body>).
Line 2,122 ⟶ 2,444:
background: #fff;
color: var(--text-dark);
border: 1px solid var(--
coral spine, square corners */
border-radius:
box-shadow: 0 4px 16px rgba(43, 41, 38, 0.18);
font-family: var(--ed-
font-size: 0.9rem;
line-height: 1.45;
Line 2,138 ⟶ 2,460:
/* ── Mobile ── */
@media screen and (max-width: 768px) {
h1#firstHeading, .mw-first-heading { font-size: 1.7rem; }
/* the WHOLE ladder tightens on narrow screens via one ratio override.
(Was an h2-only 1.22rem override, which INVERTED the hierarchy: h3
kept its desktop size and rendered bigger than h2.) */
:root { --ed-h-ratio: 1.08; }
.ext-aiassistant-prompt-composer { border-bottom: 1px solid var(--text-dark) !important; }
/* restate the mobile keyboard clearance — the desktop 12px inset above
would otherwise override section 9's padding-bottom (later source wins) */
.ext-aiassistant-footer {
padding-bottom: calc(70px + env(safe-area-inset-bottom)) !important;
}
}
Line 2,152 ⟶ 2,481:
padding: 1px 9px;
border-radius: 999px;
font-family: var(--ed-
font-size: 0.82em;
white-space: nowrap;
background: var(--wt-th-bg);
color: var(--text-
}
.rt-status-confirmed { background: #e6f3ea; color: #137333; }
Line 2,165 ⟶ 2,494:
.rt-btn {
font-family: var(--ed-
font-size: 0.95em;
line-height: 1;
padding: 5px 12px;
border: 1px solid var(--
border-radius: 5px;
background: #fff;
color: var(--text-
cursor: pointer;
}
.rt-btn:hover { background: var(--wt-th-bg); border-color: var(--text-
.rt-btn:active { transform: translateY(0.5px); }
.rt-btn.is-active.rt-btn--confirm { background: #137333; border-color: #137333; color: #fff; }
Line 2,193 ⟶ 2,522:
box-sizing: border-box;
width: var(--ed-infobox-w);
border: 1px solid var(--
border-collapse: separate; /* the INFOBOX box model: separate + table
padding (collapse ignores table padding) —
Line 2,201 ⟶ 2,530:
padding: 0.55em 0.9em 0.75em; /* = table.infobox padding */
background: #fff;
font-family: var(--ed-
font-size: var(--ed-small);
line-height: 1.5;
Line 2,213 ⟶ 2,542:
.key-figures .key-figures-above { /* = .infobox-above eyebrow — an INSIDE cell now */
text-align: left;
color: var(--text-
font-size:
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
border-bottom: 1px solid var(--
padding: 0.2em 0.2em 0.55em; /* = .infobox-above padding */
}
.key-figures th { /* = .infobox-label */
text-align: left;
color: var(--text-
font-weight:
padding: var(--wt-pad-y) 0.8em var(--wt-pad-y) 0.2em; /* = .infobox-label (wikitable rhythm) */
vertical-align: top;
Line 2,230 ⟶ 2,559:
.key-figures td { /* = .infobox-data (left-aligned value) */
text-align: left;
color: var(--text-
padding: var(--wt-pad-y) 0.2em; /* = .infobox-data (wikitable rhythm) */
vertical-align: top;
}
/* ── Proofread loop — Original-transcript page furniture (Template:Pdf page,
Template:Fn ref, Template:Fn note, chart-description blocks). The page
IS the source of truth; these mark machine-emitted structure the
deriver maps back to the Original .md. One ink, hairlines, coral on
interaction only. ── */
/* PDF page marker: a quiet LEFT-aligned "[p. N]" folio deep-linking the
source PDF at that page (#page=N) — no rule; the link's resting-grey /
coral-on-hover underline is the only ornament (house link convention).
Left, not right: right-side placement collided with the infobox and
other right floats; on the left the marker is always alone on its
line (user rule 2026-07-20). */
.ed-pdfpage {
/* same true-center trick as .ed-chunk: shrink-wrap + auto margins
center on the full body width even beside the infobox float */
display: block;
width: max-content;
margin: 1.4em auto 0.9em;
font-size: var(--ed-small);
line-height: 1.7;
}
.ed-pdfpage a,
.mw-parser-output .ed-pdfpage a.external {
color: var(--text-dark);
background-image: none; /* no external-link arrow on the folio */
padding-right: 0;
text-decoration: underline;
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
}
/* hover must carry the SAME strengthened selector as the resting rule
above — a bare `.ed-pdfpage a:hover` (0,2,1) loses to the resting
`.mw-parser-output .ed-pdfpage a.external` (0,3,1) and the coral
never shows */
.ed-pdfpage a:hover,
.mw-parser-output .ed-pdfpage a.external:hover {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
/* Chunk/page provenance marker on SUMMARY pages (Template:Chunk):
"[c. 20; p. 3]" LEFT-aligned on its own line above the chunk heading,
p. 3 linking the Document: transcript's page anchor — same quiet
folio treatment as .ed-pdfpage. Left, not floated right: floats
collided with the infobox / {{Indexing}} key-figures boxes (user
rule 2026-07-20). The link is INTERNAL (no a.external specificity
war), but the strengthened selector is kept for symmetry/safety. */
.ed-chunk {
/* center on the FULL body width, floats ignored: text-align centers
within the float-narrowed line box (drifted left beside the
infobox / key-figures boxes); a shrink-wrapped block with auto
margins centers against the containing block itself. */
display: block;
width: max-content;
margin: 0 auto;
font-size: var(--ed-small);
line-height: 1.7;
}
.ed-chunk a,
.mw-parser-output .ed-chunk a {
color: var(--text-dark);
background-image: none;
padding-right: 0;
text-decoration: underline;
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
}
.ed-chunk a:hover,
.mw-parser-output .ed-chunk a:hover {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
/* Footnote reference: the PRINTED marker as the superscript cue (vs the
generic "note" chip of Template:Footnote) — same hover machinery. */
sup.ed-fn-ref {
font-size: 0.75em;
color: var(--text-dark);
text-decoration: underline;
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
white-space: nowrap;
}
.ed-fn:hover sup.ed-fn-ref {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
/* Footnote definition line ({{fn note}}): small, hanging indent on the
(N) marker — a printed footnote block, not body prose. */
.ed-fn-note {
font-size: var(--ed-small);
line-height: 1.55;
margin: 0.15em 0;
padding-left: 1.7em;
text-indent: -1.7em;
}
.ed-fn-note-marker { font-weight: 600; }
/* Chart/image description block: the transcript's verbatim record of a
figure — set off by a left rail, small size, never mistaken for prose. */
.ed-chart-desc {
border-left: 1px solid var(--text-dark);
padding-left: 0.9em;
margin: 1em 0;
font-size: var(--ed-small);
line-height: 1.55;
}
| |||