MediaWiki:Common.css: Difference between revisions
Content deleted Content added
No edit summary |
No edit summary |
||
| (28 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
loaded as glyph fallback. @font-face is safe anywhere in
ResourceLoader output — never use @import here (gadget CSS is
concatenated BEFORE Common.css and breaks it, per T165040).
the woff2 files on the S3 bucket. ── */
@font-face {
font-family: "PT Serif";
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";
Line 1,280 ⟶ 1,328:
}
/* ── 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
--ed-accent = coral, INTERACTION ONLY: link-underline hover,
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
the old values). ── */
: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-body: 1.0625rem; /* body size — 17px,
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,335 ⟶ 1,383:
resolve against each marker's own font-size. */
/* table header fill —
--wt-th-bg: #fff;
}
/* ── Canvas:
paints white on its own, the TOC column, and the TOC's
scroll-fade overlay ── */
Line 1,371 ⟶ 1,418:
}
::-webkit-scrollbar-thumb {
background: var(--
border-radius: 0 !important; /* square, like the buttons */
}
::-webkit-scrollbar-corner { background: transparent !important; }
/* Minerva (mobile skin) paints its own white wrappers over body */
Line 1,393 ⟶ 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 axis. Measured on the live DOM (1120px viewport):
Line 1,422 ⟶ 1,461:
.mw-body-content,
.skin-minerva #bodyContent.content {
font-family: var(--ed-
font-size: var(--ed-body);
line-height: 1.6;
Line 1,428 ⟶ 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,455 ⟶ 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,466 ⟶ 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 {
Line 1,488 ⟶ 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,527 ⟶ 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,546 ⟶ 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: var(--ed-
font-weight:
color: var(--text-dark);
text-align: left;
padding-bottom: 0.
was 0.2em = too tight per user) */
}
Line 1,602 ⟶ 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;
Line 1,613 ⟶ 1,638:
font-size: 68%;
line-height: 0;
font-family: var(--ed-
color: var(--text-
}
Line 1,620 ⟶ 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,626 ⟶ 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,633 ⟶ 1,658:
/* breadcrumb under the title rule — the shared eyebrow treatment */
#contentSub .subpages {
font-family: var(--ed-
font-size: var(--ed-small);
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) */
Line 1,662 ⟶ 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;
Line 1,677 ⟶ 1,703:
.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;
Line 1,685 ⟶ 1,712:
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-weight: 700;
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,746 ⟶ 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,762 ⟶ 1,804:
.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.
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
Line 1,778 ⟶ 1,817:
tagline or its font ever changes. */
#p-search #searchform { margin-left: -30px; }
.cdx-search-input
/* 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,
Line 1,804 ⟶ 1,834:
box-shadow: none !important;
border-radius: 0 !important; /* square corners */
font-family: var(--ed-
}
/* ── ALL Codex form inputs (Special:UserLogin etc.) follow the search-bar
Line 1,824 ⟶ 1,854:
.cdx-text-input__input:enabled {
border-color: var(--text-dark) !important;
font-family: var(--ed-
}
.cdx-text-input__input:hover,
Line 1,863 ⟶ 1,893:
color: #fff !important;
border-radius: 0 !important;
font-family: var(--ed-
}
/* the TOC "hide" / "move to sidebar" pill (pin/unpin) joins the same flat
Line 1,876 ⟶ 1,906:
box-shadow: none !important;
border-radius: 0 !important; /* square corners */
font-family: var(--ed-
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
an inline en-dash marker generated per Vector level class: top level
bare, children "–", grandchildren "––" — flowing straight into the
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
.vector-toc {
font-family: var(--ed-
--toc-header-inset: 0; /* CONTENTS label sits on the
}
Line 1,907 ⟶ 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:
Line 1,921 ⟶ 1,942:
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);
}
.vector-toc .vector-toc-text > span:not(.vector-toc-numb) {
text-decoration: underline;
text-decoration-color: var(--ed-underline);
Line 1,943 ⟶ 1,962:
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,977 ⟶ 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,984 ⟶ 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 2,002 ⟶ 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 2,072 ⟶ 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 2,088 ⟶ 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 2,099 ⟶ 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: var(--ed-small); /* the shared eyebrow size */
Line 2,105 ⟶ 2,124:
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
Line 2,132 ⟶ 2,151:
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 {
Line 2,146 ⟶ 2,170:
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,
Line 2,155 ⟶ 2,185:
}
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
font-weight: 600;
color: var(--text-
margin-bottom: 0.15em;
}
}
Line 2,176 ⟶ 2,204:
margin: 1.2em 0;
margin-left: calc(-1 * var(--ed-list-indent)) !important;
color: var(--text-
font-style: italic;
}
Line 2,201 ⟶ 2,229:
.thumbcaption {
background-color: #fff;
color: var(--text-
font-family: var(--ed-
font-size: var(--ed-small);
border: none !important; /* MW core frames the caption in gray #c8ccd1 —
Line 2,216 ⟶ 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) */
Line 2,238 ⟶ 2,266:
/* ── 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,244 ⟶ 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;
}
Line 2,311 ⟶ 2,339:
}
.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,331 ⟶ 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-decoration: underline;
Line 2,367 ⟶ 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,404 ⟶ 2,432:
.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,425 ⟶ 2,448:
border-radius: 0;
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,437 ⟶ 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) */
Line 2,456 ⟶ 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,469 ⟶ 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,497 ⟶ 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,505 ⟶ 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,517 ⟶ 2,542:
.key-figures .key-figures-above { /* = .infobox-above eyebrow — an INSIDE cell now */
text-align: left;
color: var(--text-
font-size: var(--ed-small);
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: 600; /* semibold labels — tracks .infobox-label */
padding: var(--wt-pad-y) 0.8em var(--wt-pad-y) 0.2em; /* = .infobox-label (wikitable rhythm) */
Line 2,534 ⟶ 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;
}
| |||