MediaWiki:Common.css: Difference between revisions

Content deleted Content added
No edit summary
No edit summary
(32 intermediate revisions by the same user not shown)
Line 3:
Applies read-only mode, branding, navigation, and AI assistant.
Logged-in overrides live in MediaWiki:Group-user.css
MANAGED WHOLESALE: replace the entire page from the canonical file
(temp/design/common_css_clean.css) — no incremental block pastes.
Color/typography authority: SECTION 12 owns all heading, link,
footer, table and AI-panel colors; earlier sections are structure.
================================================================= */
 
Line 108 ⟶ 112:
.mw-special-Book #coll-downloadbox { display: none; }
 
/* --- Infoboxes ---(structure *only — width/border/background/font owned
by section 12) --- */
.infobox {
border: 1px solid #a2a9b1; color: black; padding: 0.2em;
font-size: 88%; line-height: 1.5em; border-spacing: 3px;
}
@media screen(max-width: 640px) { .infobox .nowrap { backgroundwhite-colorspace: #f8f9fanormal; } }
@media (max-width: 640px) { .infobox { width: 100%; } .infobox .nowrap { white-space: normal; } }
@media (min-width: 640px) {
.infobox { margin: 0.5em 0 0.5em 1em; float: right; clear: right; width: 22em; }
}
.infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data,
Line 165 ⟶ 169:
}
 
/* --- Header reset (invisible fixed container for floating buttons) --- */
.header-container.header-chrome {
position: fixed !important;
Line 172 ⟶ 176:
z-index: 1000 !important;
pointer-events: none !important;
background: transparent !important;
border: none !important;
box-shadow: none !important;
}
 
/* Transparent header (Minerva) */
.header-container.header-chrome,
.minerva-header {
background: transparent !important;
background-color: transparent !important;
border: none !important;
box-shadow: none !important;
Line 647 ⟶ 650:
#p-vector-user-menu-preferences { display: none !important; }
.vector-main-menu-landmark { display: none !important; }
 
/* --- Color theme (anonymous only) --- */
body:not(.group-user) #skin-client-prefs-skin-theme { display: none !important; }
 
/* --- Mobile: history bar --- */
Line 678:
 
/* =================================================================
7. TYPOGRAPHYCHROME & LINKSEXTRAS
(Heading, link, and footer COLORS are owned by section 12 —
this section keeps only structural chrome fixes.)
================================================================= */
 
/* --- Heading colors --- */
.mw-heading1, h1,
.mw-heading2, h2,
h3, h4, h5, h6,
.firstHeading,
.mw-page-title-main,
.page-heading,
.section-heading,
.vector-sticky-header-context-bar-primary,
.mw-headline,
.vector-pinnable-header-label {
color: #202122 !important;
}
 
/* --- Heading borders --- */
.mw-heading1, h1,
.mw-heading2, h2,
.section-heading {
border-bottom: 1px solid #202122 !important;
margin-bottom: 0.6em;
}
 
.mw-first-heading {
border-bottom: 2px solid #202122 !important;
margin-bottom: 0.5em;
}
 
/* Remove Vector 2022 default title underline */
Line 713 ⟶ 688:
display: none !important;
height: 0 !important;
}
 
/* Contents sidebar heading (no border) */
h2.vector-pinnable-header-label { border-bottom: none !important; }
 
/* --- Link colors (legacy blue #1d70b8) --- */
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: #000099 !important;
}
 
/* Red links (missing pages) */
a.new,
a.new:visited { color: #d73333 !important; }
 
/* UI buttons stay white */
a.mw-ui-button,
a.mw-ui-button:visited { color: #fff !important; }
 
/* --- Edit section links --- */
.mw-editsection, .mw-editsection a {
color: #202122 !important;
opacity: 0.7;
}
 
/* --- Footer borders --- */
#footer,
.mw-footer,
.minerva-footer,
.printfooter {
border-top: 1px solid #202122 !important;
}
 
Line 806 ⟶ 745:
padding: 0 4px;
border-radius: 3px;
}
 
/* --- Minerva bullet indentation fix --- */
body.skin-minerva .mw-parser-output ul,
body.skin-minerva .collapsible-block ul {
padding-left: 1em;
margin-left: 0;
}
body.skin-minerva .mw-parser-output ul ul,
body.skin-minerva .collapsible-block ul ul {
padding-left: 1em;
}
 
 
/* =================================================================
8. AI ASSISTANT PANEL — STRUCTURE
(Panel colors — borders, bubbles, send button, citations — are
owned by section 12's theme block.)
================================================================= */
 
Line 830 ⟶ 760:
}
 
.ext-aiassistant-panel { box-shadow: none !important; }
/* --- Panel shell --- */
.ext-aiassistant-panel {
border: 1px solid #202122 !important;
box-shadow: none !important;
}
 
/* --- Header --- */
.ext-aiassistant-header {
border-bottom: 1px solid #202122 !important;
margin-left: 0 !important;
margin-right: 0 !important;
Line 869 ⟶ 794:
 
.ext-aiassistant-message-user .ext-aiassistant-message__content {
background-color: #202122 !important;
color: white !important;
border-radius: 18px !important;
Line 881 ⟶ 805:
}
 
/* --- Assistant typography (matchesfamily/color articleset styleby section 12) --- */
.ext-aiassistant-message-assistant {
font-family: sans-serif !important;
font-size: 1em !important;
color: #202122 !important;
overflow-wrap: break-word !important;
white-space: normal !important;
Line 946 ⟶ 868:
}
 
/* --- Citations (color set by section 12) --- */
.ext-aiassistant-cite {
line-height: 1 !important;
Line 962 ⟶ 884:
}
 
/* --- "New Chat" label (color set by section 12) --- */
.ext-aiassistant-panel .cdx-button--weight-quiet:not(.cdx-button--icon-only) {
font-size: 0 !important;
Line 970 ⟶ 892:
font-size: 0.875rem !important;
font-weight: bold !important;
color: #202122 !important;
visibility: visible !important;
}
Line 976 ⟶ 897:
/* --- Footer + Composer --- */
.ext-aiassistant-footer {
border-top: 1px solid #202122 !important;
display: flex !important;
align-items: center !important;
Line 982 ⟶ 902:
padding: 0 !important;
box-sizing: border-box !important;
background-color: #f8f9fa !important;
}
 
Line 999 ⟶ 918:
}
 
/* --- ComposerSend focusbutton (shape; colors set by section 12) --- */
.ext-aiassistant-prompt-composer:focus-within .ext-aiassistant-prompt-composer__input,
.ext-aiassistant-prompt-composer__input:focus {
border-color: #202122 !important;
outline: none !important;
box-shadow: none !important;
}
 
/* --- Send button --- */
.ext-aiassistant-prompt-composer__send {
border-radius: 50% !important;
Line 1,018 ⟶ 929:
justify-content: center !important;
margin-left: 4px !important;
}
 
.ext-aiassistant-prompt-composer__send:not(:disabled) {
background-color: #202122 !important;
border-color: #202122 !important;
color: #ffffff !important;
}
 
.ext-aiassistant-prompt-composer__send:disabled {
background-color: #EAECF0 !important;
border-color: #EAECF0 !important;
}
 
Line 1,064 ⟶ 964:
.ext-aiassistant-footer {
padding-bottom: calc(70px + env(safe-area-inset-bottom)) !important;
}
 
/* Add a line to separate with the sticky buttons */
.ext-aiassistant-prompt-composer {
border-bottom: 1px solid #202122 !important;
border-radius: 0 !important;
padding-bottom: 10px !important;
}
 
Line 1,093 ⟶ 986:
/* --- Tablet (min-width: 768px) --- */
@media screen and (min-width: 768px) {
/* LockKeep homeToC button shapevisible above panel overlays */
.branding-box {
width: 44px !important;
min-width: 44px !important;
max-width: 44px !important;
flex: 0 0 44px !important;
margin-left: -86px !important;
}
 
/* Keep ToC centered */
#cps-open-toc {
display: flex !important;
visibility: visible !important;
opacity: 1 !important;
z-index: 9999 !important;
margin-left: -22px !important;
background-color: rgba(0, 0, 0, 0.2) !important;
width: 44px !important;
height: 44px !important;
border-radius: 50% !important;
}
}
Line 1,176 ⟶ 1,053:
 
 
/* ============================================================================
SECTION 11. WIKITABLES: table TYPES
- .wikitable = NEUTRAL default: themed (frame, caption, header
All table styling lives here: design knobs (:root), base look,
tint, hairlines, hover) but free-form — columns
structural rules, text hierarchy, column widths, the sticky first
flex, labels wrap, nothing frozen.
column, responsive borders, and print. Horizontal scroll is
- .wikitable.fintable = FINANCIAL bundle: frozen nowrap first column +
handled by the CopyTable gadget wrapper, NOT here (overflow on a
data-column width floors. The bot emits the class
<table> element is ignored).
automatically on numeric-dense tables; add it by
================================================================= */
hand to get the same behavior on a manual table.
 
- Future table types = one new class, one new bundle below.
/* ── Design knobs — tunable here, no re-publishing needed ── */
- .wt-freeze-2 = add-on modifier: freeze columns 1+2 (mark column 1
col-xs so column 2 knows where to stick).
============================================================================ */
:root {
/* column size scale — markers map to these; an UNMARKED column flexes */
--wt-col: 6em; /* data columns (class="col") */
--wt-xs: 3em;
--wt-col-wide: 9em; /* wide data columns (class="col-wide") */
--wt-s: 6em;
--wt-border: #eceef1; /* hairline grid — barely visible */
--wt-m: 9em;
--wt-rule: #72777d; /* structural rules: table top, header bottom, table bottom */
--wt-l: 15em;
--wt-edge: #dadde1; /* frozen-column right edge (one notch stronger than grid) */
--wt-xl: 24em;
--wt-th-bg: #f6f7f9; /* header tint (try #fff once the rules carry the structure) */
--wt-xxl: 39em;
--wt-th-text: #54595d; /* header text — muted vs. the near-black data */
/* palette (section 12 re-points these onto the warm ramp) */
--wt-pad-y: 0.5em; /* vertical cell padding = row height knob */
--wt-border: #eceef1;
--wt-rule: #72777d;
--wt-edge: #dadde1;
--wt-th-bg: #f6f7f9;
--wt-th-text: #54595d;
--wt-pad-y: 0.5em;
}
 
/* ── Theme: EVERY wikitable, any type ── */
/* --- Full width (scroll lives on the gadget's .copy-table-scroll wrapper) --- */
.wikitable { width: 100% !important; }
 
/* --- Base look: hairline frame, roomy rows, aligned digits, air between
adjacent tables --- */
table.wikitable {
font-size: 0.85em;
background-color: #fff;
border: 1px solid var(--wt-border);
font-variant-numeric: tabular-nums; /* digits align vertically */
margin-top: 0.3em;
margin-bottom: 2em; /* separation between stacked tables */
}
table.wikitable td { background-color: #fff; }
Line 1,215 ⟶ 1,099:
font-weight: bold;
background-color: #fff;
padding-bottom: 0.45em; /* air between caption and table */
}
table.wikitable > tr > th,
Line 1,226 ⟶ 1,110:
table.wikitable > * > tr > th {
background-color: var(--wt-th-bg);
color: var(--wt-th-text); /* muted headers: caption > data > header */
}
.wikitable.plainrowheaders th[scope=row],
.wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal;
text-align: left;
}
 
/* --- Structural rules (booktabs): top, below the header block, bottom.
Painted on cells, not the table — with border-collapse a cell border
beats a table border, and an upper cell's bottom beats the next
cell's top, so these exact selectors are what makes the dark lines
win over the hairlines. --- */
table.wikitable > * > tr:first-child > th,
table.wikitable > * > tr:first-child > td { border-top: 1px solid var(--wt-rule); }
table.wikitable > * > tr:has(> th):has(+ tr > td) > th { border-topbottom: 1px solid var(--wt-rule); /* top rule, under the caption */}
}
table.wikitable > * > tr:has(> th):has(+ tr > td) > th {
border-bottom: 1px solid var(--wt-rule); /* rule under the LAST header row */
}
table.wikitable > * > tr:last-child > td,
table.wikitable > * > tr:last-child > th { border-bottom: 1px solid var(--wt-rule); }
border-bottom: 1px solid var(--wt-rule); /* bottom rule */
}
 
/* Optional refinements — uncomment to test:
table.wikitable th { font-weight: normal; }
table.wikitable > * > tr:has(> th) > th:first-child { font-weight: normal; }
*/
 
/* Row hover — readability across wide rows without permanent zebra weight */
table.wikitable > tbody > tr:hover > td { background-color: #f8f9fa; }
 
table.wikitable td p { font-size: inherit !important; }
/* ── House column widths: markers from the emitter, values here ── */
/* Floor for legacy pages published with inline widths (safe to keep wiki-wide) */
.wikitable th:not(:first-child),
.wikitable td:not(:first-child) { min-width: var(--wt-col); }
/* Marked data columns: pinned width + floor */
.wikitable th.col,
.wikitable td.col { width: var(--wt-col); min-width: var(--wt-col); }
.wikitable th.col-wide,
.wikitable td.col-wide { width: var(--wt-col-wide); min-width: var(--wt-col-wide); }
 
/* ── Column size scale: usable on ANY table type ── */
/* --- Cell content (Minerva fixes + alignment) --- */
.wikitable th.col-xs, .wikitable td.col-xs { width: var(--wt-xs); min-width: var(--wt-xs); }
table.wikitable td p { font-size: inherit !important; } /* respect table font size */
.wikitable th.col-s, .wikitable td.col-s { width: var(--wt-s); min-width: var(--wt-s); }
.wikitable td ul,
.wikitable th.col-m, .wikitable td.col-m { width: var(--wt-m); min-width: var(--wt-m); }
.wikitable td ol,
.wikitable th.col-l, .wikitable td.col-l dl { textwidth: var(-align-wt-l); min-width: leftvar(--wt-l); }
.wikitable th.col-xl, .wikitable td.col-xl { width: var(--wt-xl); min-width: var(--wt-xl); }
table.wikitable td ul {
.wikitable th.col-xxl, .wikitable td.col-xxl { width: var(--wt-xxl); min-width: var(--wt-xxl); }
list-style-position: outside !important; /* fix Minerva bullet position */
/* legacy marker names on published pages = aliases of s / m */
margin-left: 1.5em !important; /* push bullets off the border */
.wikitable th.col, .wikitable td.col { width: var(--wt-s); min-width: var(--wt-s); }
padding-left: 0 !important;
.wikitable th.col-wide, .wikitable td.col-wide { width: var(--wt-m); min-width: var(--wt-m); }
}
 
table.wikitable td > p:first-child,
/* ── FINTABLE bundle — THE definition of "financial table" on this wiki.
table.wikitable td > ul:first-child,
Applies to .fintable (emitter-typed numeric-dense tables) and, via
table.wikitable td > ol:first-child {
:has(), to every already-published bot table — they all carry the
margin-top: 0 !important; /* align first block with inline text */
legacy col/col-wide markers, so the back catalogue upgrades with NO
}
re-publishing. The bridge is scoped to the LEGACY marker names only:
col-s/col-m on a neutral hand table does NOT trigger financial
behavior. Repeat this selector group verbatim wherever fintable
scoping is needed (section 12 uses it too). ── */
 
/* data-column floor (legacy pages can have unmarked data columns) */
table.wikitable.fintable th:not(:first-child),
table.wikitable.fintable td:not(:first-child),
table.wikitable:has(.col, .col-wide) th:not(:first-child),
table.wikitable:has(.col, .col-wide) td:not(:first-child) { min-width: var(--wt-s); }
 
/* ---frozen Rowrow-label (first) column: single-line, readable minimum, frozen while*/
table.wikitable.fintable th:first-child,
scrolling, opaque background. border-collapse drops a sticky cell's
table.wikitable.fintable td:first-child,
own borders, so the right edge is painted with box-shadow — it stays
table.wikitable:has(.col, .col-wide) th:first-child,
put with the sticky cell. --- */
table.wikitable:has(.col, th.col-wide) td:first-child, {
.wikitable td:first-child {
white-space: nowrap;
min-width: 16em;
Line 1,296 ⟶ 1,158:
left: 0;
z-index: 1;
box-shadow: 1px 0 0 var(--wt-edge); /* right edge only — marks the frozen column */
}
table.wikitable.fintable td:first-child { background-color: #fff; } /* body cells */,
table.wikitable:has(.col, th.col-wide) td:first-child { background-color: var(--wt-th-bg)#fff; } /* header cell */
table.wikitable.fintable th:first-child,
table.wikitable:has(.col, .col-wide) th:first-child { background-color: var(--wt-th-bg); }
 
/* ── wt-freeze-2 add-on: freeze columns 1+2. Mark column 1 col-xs — column
2 sticks exactly one xs step in. Comes AFTER the fintable bundle so
its column-1 width exception wins the tie. ── */
table.wikitable.wt-freeze-2 th:first-child,
table.wikitable.wt-freeze-2 td:first-child {
min-width: var(--wt-xs); /* overrides the fintable 16em label column */
white-space: normal;
position: sticky;
left: 0;
z-index: 1;
}
table.wikitable.wt-freeze-2 th:nth-child(2),
table.wikitable.wt-freeze-2 td:nth-child(2) {
position: sticky;
left: var(--wt-xs);
z-index: 1;
box-shadow: 1px 0 0 var(--wt-edge);
background-color: #fff;
}
table.wikitable.wt-freeze-2 th:nth-child(2) { background-color: var(--wt-th-bg); }
table.wikitable.wt-freeze-2 td:first-child { background-color: #fff; }
table.wikitable.wt-freeze-2 th:first-child { background-color: var(--wt-th-bg); }
 
/* --- Mobile borders (<= 719px): table border dropped, redrawn per cell --- */
@media screen and (max-width: 719px) {
table.wikitable { border: none !important; }
Line 1,309 ⟶ 1,195:
table.wikitable > tbody > tr > td {
border: 1px solid var(--wt-border);
}
}
 
/* --- Print --- */
@media print {
table.wikitable p {
font-size: inherit !important;
text-align: inherit !important; /* no justification on print */
margin-top: 0.25em !important;
margin-bottom: 0.25em !important;
}
table.wikitable a.external.text::after {
content: none !important; /* hide expanded URLs */
}
}
 
/* =================================================================
12. EDITORIAL DESIGN SYSTEM v7v11 ("paper & ink")
Appended LAST deliberately: later rules of equal specificity win,
so this section restyles typography / color / spacing WITHOUT
Line 1,332 ⟶ 1,205:
color variables from here — a later :root wins). Delete the whole
section to revert.
v11: full-sheet cleanup — sections 7/8 stripped to structure (this
v7: visitors see no Appearance UI; Minerva (mobile) tables use one
section is the single color authority); TOC block consolidated
light line tone; the AI panel shares the site sans + teal citations.
(numbers in a fixed right-aligned gutter, "0." on Beginning,
inline chevron, no rails).
================================================================= */
 
Line 1,371 ⟶ 1,246:
--ed-faint: #807973; /* page refs, list markers, footer body */
--ed-hairline: #e7e2db; /* light warm line (infobox frame) */
--ed-hairline-strong: #d6d0c8; /* stronger warm line (panel frame, edges) */
--ed-link: #0d7680; /* interactive teal: (FT'slinks, linkfocus, color)send */
--ed-underline: #ccc1b7; /* resting link underline tint */
--ed-accent: #f07662; /* house coral — hover underline, sparing */
Line 1,381 ⟶ 1,256:
--ed-small: 0.8125rem; /* THE small size: tables, infobox, TOC, footer */
--ed-title-gap: 2.1rem; /* CALIBRATION: moves the title rule DOWN */
--ed-list-indent: 1.2rem; /* per-level indent = the marker-to-text step
(rem, NOT em — an em offset would resolve
against each marker's own font-size) */
 
/* section 11's table palette, warmed onto the same ramp.
Line 1,410 ⟶ 1,288:
@media print { body, .mw-page-container { background-color: #fff !important; } }
 
/* ── Visitor chrome: anonymousAppearance usersUI gethidden nofor AppearanceEVERYONE UIhere, (samere-shown
.groupfor logged-userin conventionusers as section 6;in MediaWiki:Group-user.css re-shows) ──(the */wiki's
read-only-mode architecture — Group-user.css only loads when
body:not(.group-user) .vector-appearance-landmark,
logged in, so no body-class dependency) ── */
body:not(.group-user) #vector-appearance-dropdown,
body:not(.group-user) #vector-appearance-pinned-containerlandmark,
body:not(.group-user) #vector-appearance-dropdown,
#vector-appearance-pinned-container,
body:not(.group-user) .vector-column-end { display: none !important; }
#vector-appearance,
.vector-column-end { display: none !important; }
 
/* ── Mobile (Minerva) keeps ONE light line tone in tables — every
Line 1,463 ⟶ 1,343:
/* ── The table BLOCK ──
1. Printed ON the paper (not white cards): surfaces transparent;
in a FINTABLE only the sticky first column stays opaque (it must cover
must cover scrolling content) in the paper color; hover warms.
2. Full frame in --wt-rule. Sides: the RIGHT rail is a plain
border on the last-column cells;. theOn LEFTa railNEUTRAL musttable bethe aLEFT
rail is a plain table border (nothing is sticky); on a
box-shadow on the sticky first-column cells — with
FINTABLE it must be a box-shadow on the sticky first-column
border-collapse, borders on sticky cells do not move when the
cellcells sticks (theywith vanishborder-collapse, borders on horizontalsticky scroll),cells butdo shadowsnot
travelmove withwhen the cell. Thesticks table's(they ownvanish lefton borderhorizontal is disabledscroll),
sobut shadows travel with the railcell — isand the onlytable's lineown there.left
border is disabled so the rail is the only line there.
The fintable selector group below is section 11's definition
of "financial table", repeated verbatim.
3. The table's outer margins move to the scroll WRAPPER so the
horizontal scrollbar hugs the bottom rule;, and the scrollbar is
thin,itself ingoes thethin header+ tintwarm. ── */
table.wikitable,
table.wikitable td,
table.wikitable caption { background-color: transparent; }
.wikitable td:first-child { background-color: var(--ed-paper); }
table.wikitable > tbody > tr:hover > td { background-color: #f2ede5; }
/* the frozen first column carries its own paper bg (below) at higher
specificity, so it needs its OWN hover rule to warm with the row */
table.wikitable.fintable > tbody > tr:hover > td:first-child,
table.wikitable:has(.col, .col-wide) > tbody > tr:hover > td:first-child {
background-color: #f2ede5;
}
 
table.wikitable.fintable thtd:first-child,
table.wikitable:has(.col, .col-wide) td:first-child {
background-color: var(--ed-paper);
}
table.wikitable.fintable th:first-child,
table.wikitable.fintable td:first-child,
table.wikitable:has(.col, .col-wide) th:first-child,
table.wikitable:has(.col, .col-wide) td:first-child {
border-left: none;
box-shadow: inset 1px 0 0 var(--wt-rule), /* left rail — sticks with the cell */
Line 1,490 ⟶ 1,384:
.wikitable td:last-child { border-right: 1px solid var(--wt-rule); }
 
table.wikitable { margin: 0; border-left: none1px solid var(--wt-rule); }
table.wikitable.fintable,
table.wikitable:has(.col, .col-wide) { border-left: none; }
 
/* the table's outer margins live on the scroll WRAPPER (the emitter wraps
every table in <div style="overflow-x:auto">): top margin gives air
before the eyebrow caption + separates consecutive tables; the scrollbar
goes thin and quiet in the header-row tint */
.mw-parser-output div[style*="overflow-x"],
.copy-table-scroll {
margin: 01.3em8em 0 2em;
scrollbar-width: thin;
scrollbar-color: var(--wt-th-bg) transparent; /* scrollbar = header tint */
}
 
/* caption = the table's TITLE: oneas sizea stepquiet aboveEYEBROW (the 13pxshared cells, withkicker
treatment — breadcrumb / infobox header): uppercase sans, letter-spaced,
a systematic data glyph (swap the emoji here to change it everywhere) */
secondary ink, with air below before the grid. No glyph. */
table.wikitable caption {
colorfont-family: var(--ed-inksans);
font-size: 0.875rem75rem;
font-weight: 600;
letter-spacing: 0.08em;
}
text-transform: uppercase;
table.wikitable caption::before {
color: var(--ed-secondary);
content: "📊";
margintext-rightalign: 0.45emleft;
fontpadding-sizebottom: 0.9em7em;
}
 
Line 1,521 ⟶ 1,423:
color: var(--ed-secondary);
}
 
/* ── List geometry — ONE definition for both skins: text hangs at
--ed-list-indent per level; the markers are positioned EXACTLY
below (see the ::before block). !important + the Minerva-qualified
selectors beat section 7's mobile rules and the skin defaults;
table-cell lists keep section 11's own rule (higher specificity). ── */
.mw-parser-output ul,
.mw-parser-output ol,
body.skin-minerva .mw-parser-output ul,
body.skin-minerva .collapsible-block ul {
margin-left: 0 !important;
padding-left: var(--ed-list-indent) !important;
}
.mw-parser-output ol { padding-left: 1.4em !important; } /* numbers need more room */
 
/* list rhythm: air between points, predictable nesting */
Line 1,527 ⟶ 1,443:
.mw-parser-output li li { margin-top: 0.3em; margin-bottom: 0.3em; }
.mw-parser-output li > ul { margin-top: 0.3em; }
 
.mw-parser-output li::marker { color: var(--ed-faint); }
/* per-level markers drawn as ::before at EXACT positions: each marker's
LEFT edge sits on its parent's text axis (level 1 on the heading
axis), because left: -indent lands on the container edge, which IS
the parent text x. Shapes: bullet / house triangle (drivers, echoes
the TOC prefix) / hairline en dash; per-level font-size +
line-height keep the three optically equal and vertically centered */
.mw-parser-output ul { list-style: none !important; }
.mw-parser-output ul > li { position: relative; }
.mw-parser-output ul > li::before {
content: "\2022";
position: absolute;
left: calc(-1 * var(--ed-list-indent));
color: var(--ed-faint);
font-family: var(--ed-sans);
font-size: 0.95em;
line-height: 1.68;
}
.mw-parser-output ul ul > li::before { content: "\25B8"; font-size: 0.7em; line-height: 2.29; }
.mw-parser-output ul ul ul > li::before { content: "\2013"; font-size: 0.95em; line-height: 1.68; }
 
/* page-reference superscripts — present everywhere, must whisper.
Line 1,598 ⟶ 1,533:
color: var(--ed-ink) !important;
}
/* the inner spans are pinned #202122 !important by sectionold 7skin CSS — make them
them follow their heading's ink instead */
.mw-headline, .mw-page-title-main { color: inherit !important; }
 
Line 1,626 ⟶ 1,561:
color: var(--ed-secondary) !important;
text-decoration: none;
opacity: 0.7;
}
 
/* ── TOCFocus/active sidebar:states quiet sans atjoin the ONEinteractive smallteal size; "CONTENTS"Codex labelpaints atthem
in its own progressive blue (#36c) otherwise. The generic
the title's text level, its 1px ink rule on the title rule's line.
padding.cdx-toptext-input movesrule covers the LABELheader andsearch box; the ruleAI together; padding-bottomchat
movesinput theis RULEexempted onlyfurther below fine-tune(its inring 0.05remsits on the stepscomposer). ── */
.cdx-text-input__input:focus,
.vector-toc { font-family: var(--ed-sans); }
.cdx-text-input__input:enabled:focus {
border-color: var(--ed-link) !important;
box-shadow: inset 0 0 0 1px var(--ed-link) !important;
}
.cdx-button:enabled:focus,
.cdx-button--fake-button:focus {
box-shadow: inset 0 0 0 2px var(--ed-link) !important;
}
:focus-visible { outline-color: var(--ed-link); }
 
/* ── TOC sidebar — consolidated final design.
Geometry: every list item reserves a number GUTTER via padding;
MediaWiki's own section numbers (Vector ships them display:none)
are re-shown ABSOLUTELY into the gutter, right-aligned so the
dots form one column ("9." pads left, "10." fills the box); the
::after adds the dot. Entry text — first line AND wrapped lines —
starts at the padding edge by construction. "Beginning" (the one
entry MediaWiki leaves unnumbered) gets a generated "0." in the
same geometry. Nested lists sit FLUSH in the parent's padding box:
level-2 numbers start at the level-1 text axis (the numbers carry
the hierarchy — no rails). The expand/collapse control is the
house triangle ▸/▾ INLINE after the heading text. The CONTENTS
header is inset onto the single-digit axis via MARGIN (a border
travels with margins, not paddings).
CALIBRATION knobs: --toc-numb-gutter (text column start; the box
gutter−0.35rem must fit "22." or the dot wraps), level-2's wider
token, --toc-header-inset, and the 0.22rem row rhythm. ── */
.vector-toc {
font-family: var(--ed-sans);
--toc-numb-gutter: 1.6rem;
--toc-header-inset: 0.6rem;
}
.vector-toc .vector-toc-list-item.vector-toc-level-2 { --toc-numb-gutter: 2.8rem; }
/* ^ the level-2 box (gutter - 0.35rem gap) must fit "12.1." (~39px @13px
tabular) — at 2.2rem a two-digit parent's number overflowed its box and
butted against the text */
 
/* CONTENTS header: label + 1px ink rule on the title rule's line
(padding-top moves the label and rule together; padding-bottom the
rule only), inset onto the number axis */
.vector-toc .vector-pinnable-header {
border-bottom: 1px solid var(--ed-ink) !important;
padding-top: 0.35rem; /* CALIBRATION: moves the LABEL and the rule together */
padding-bottom: 0.95rem; /* CALIBRATION: moves the RULE only */
margin-bottom: 0.9rem;
padding-left: 0 !important;
margin-left: var(--toc-header-inset) !important;
}
.vector-toc .vector-pinnable-header-label {
Line 1,645 ⟶ 1,623:
text-transform: uppercase;
color: var(--ed-secondary) !important;
margin-left: 0;
}
 
/* entries: quiet sans at the ONE small size; ink on hover/active */
.vector-toc .vector-toc-link,
.vector-toc .vector-toc-link:visited {
Line 1,654 ⟶ 1,635:
.vector-toc .vector-toc-link:hover { color: var(--ed-ink) !important; }
.vector-toc .vector-toc-list-item-active > .vector-toc-link { color: var(--ed-ink) !important; }
 
/* lists flush on the component edge; rhythm + number gutter on the li */
.vector-toc .vector-toc-contents,
.vector-toc .vector-toc-list {
margin: 0;
padding: 0;
list-style: none;
}
.vector-toc .vector-toc-list-item {
position: relative; /* the number's anchor */
padding: 0.22rem 0 0.22rem var(--toc-numb-gutter) !important;
font-size: var(--ed-small); /* li, link text and the abspos number must
share ONE font size: the number's static
position is computed from the LI's line
metrics — a larger li strut seats the
number ~1px above the 13px text */
}
.vector-toc .vector-toc-list-item > .vector-toc-list { margin-top: 0.1rem; }
 
/* the numbers */
.vector-toc .vector-toc-numb {
display: block; /* defeat Vector's display:none */
position: absolute;
left: 0;
width: calc(var(--toc-numb-gutter) - 0.35rem); /* 0.35rem = number→text gap */
text-align: right;
white-space: nowrap; /* the dot must never wrap inside the box */
font-variant-numeric: tabular-nums;
}
.vector-toc .vector-toc-numb::after { content: "."; }
 
/* "0." for Beginning — styled like a number INSIDE the link (the li is
body-size and bolds when active; pin size/weight, re-bold on active) */
.vector-toc #toc-mw-content-text::before {
content: "0.";
position: absolute;
left: 0;
width: calc(var(--toc-numb-gutter) - 0.35rem);
text-align: right;
white-space: nowrap;
font-variant-numeric: tabular-nums;
color: var(--ed-secondary);
font-size: var(--ed-small);
font-weight: 400;
}
.vector-toc #toc-mw-content-text.vector-toc-list-item-active::before {
color: var(--ed-ink);
font-weight: 700;
}
 
/* chevron: the entry text goes inline so the sibling toggle button
flows right after the label ("Outlook 3 ▾"). The Codex icon is
replaced by a ::before glyph switched on the li's expanded state;
font-size:0 on the button hides its screen-reader span visually
without removing it for assistive tech. */
.vector-toc .vector-toc-link,
.vector-toc .vector-toc-text { display: inline; }
.vector-toc .vector-toc-toggle {
position: static !important;
display: inline !important;
min-width: 0 !important;
min-height: 0 !important;
width: auto !important;
height: auto !important;
margin: 0 0 0 0.3em !important;
padding: 0 0.2em !important;
border: none !important;
background: none !important;
font-size: 0;
}
.vector-toc .vector-toc-toggle .vector-icon { display: none; }
.vector-toc .vector-toc-toggle::before {
content: "▸"; /* collapsed — the house triangle */
font-size: 0.65rem;
color: var(--ed-faint);
}
.vector-toc .vector-toc-list-item-expanded > .vector-toc-toggle::before {
content: "▾"; /* expanded */
}
.vector-toc .vector-toc-toggle:hover::before { color: var(--ed-ink); }
 
/* ── Infobox: the page's ONE white card, in the data voice; its width
Line 1,706 ⟶ 1,767:
.printfooter { display: none; } /* "Retrieved from ..." clutter; stays in print */
}
#footer, .mw-footer, .minerva-footer {
font-family: var(--ed-sans);
color: var(--ed-faint);
Line 1,736 ⟶ 1,797:
background-color: var(--ed-paper) !important;
}
/* ONE focus ring around the whole composer (input + send button); the
.ext-aiassistant-prompt-composer:focus-within .ext-aiassistant-prompt-composer__input,
text field itself stays borderless — the panel's input is exempted
.ext-aiassistant-prompt-composer__input:focus { border-color: var(--ed-ink) !important; }
from the generic Codex focus rule above */
.ext-aiassistant-panel .cdx-text-input__input,
.ext-aiassistant-panel .cdx-text-input__input:focus,
.ext-aiassistant-prompt-composer__input,
.ext-aiassistant-prompt-composer__input:focus {
border-color: transparent !important;
box-shadow: none !important;
outline: none !important;
}
.ext-aiassistant-prompt-composer { box-shadow: none !important; }
.ext-aiassistant-prompt-composer:focus-within {
outline: 1px solid var(--ed-link) !important;
outline-offset: -1px;
box-shadow: none !important;
}
.ext-aiassistant-prompt-composer__send:not(:disabled) {
background-color: var(--ed-link) !important;
Line 1,752 ⟶ 1,828:
.ext-aiassistant-cite,
.ext-aiassistant-cite a { color: var(--ed-link) !important; }
 
/* ── Collapsible inline footnotes ({{footnote}} → <span class="ed-fn">).
MW 1.43's sanitizer REJECTS <details>/<summary> in wikitext
(verified live: tags render as literal text), so this is spans +
the Common.js toggle (adds/removes .ed-fn-open on chip click).
Readers see a small dotted-underline "note" chip; clicking opens
the note as a POPOVER card that floats ABOVE the text (no reflow —
the paragraph never shifts). The chip label is CSS content and the
literal "(footnote: " / ")" wrappers live in always-hidden spans,
so the bot's HTML retrieval reads the full note regardless of CSS
(Docling parses the DOM, not the rendered layout) — readers and
RAG see different things from one markup.
Common.js adds .ed-fn-flip near the right edge (card opens leftward)
and keeps only one card open at a time. ── */
.ed-fn { position: relative; } /* the popover's anchor */
.ed-fn-chip { cursor: pointer; white-space: nowrap; }
.ed-fn-chip::after {
content: "note";
font-family: var(--ed-sans);
font-size: 0.7em;
vertical-align: super;
color: var(--ed-faint);
text-decoration: underline dotted;
text-underline-offset: 2px;
}
.ed-fn-chip:hover::after,
.ed-fn.ed-fn-open > .ed-fn-chip::after { color: var(--ed-link); }
 
/* always in the DOM for the bot; never shown to readers as inline text */
.ed-fn-pre, .ed-fn-close { display: none; }
.ed-fn-body { display: none; }
 
/* the popover card */
.ed-fn.ed-fn-open > .ed-fn-body {
display: block;
position: absolute;
top: 1.6em; /* just below the chip's line */
left: 0;
z-index: 30;
width: max-content;
max-width: min(24rem, 90vw); /* never overflow the viewport */
padding: 0.7em 0.9em;
background: #fff;
border: 1px solid var(--ed-hairline-strong);
border-left: 3px solid var(--ed-accent); /* house coral spine */
border-radius: 2px;
box-shadow: 0 6px 22px rgba(43, 41, 38, 0.14);
font-family: var(--ed-serif);
font-size: 0.9rem;
font-weight: 400;
font-style: normal;
line-height: 1.5;
letter-spacing: 0;
text-align: left;
text-transform: none;
white-space: normal;
color: var(--ed-ink);
}
/* a card needs no inline parens */
.ed-fn.ed-fn-open > .ed-fn-body::before,
.ed-fn.ed-fn-open > .ed-fn-body::after { content: none; }
/* near the right edge, open the card leftward (JS sets .ed-fn-flip) */
.ed-fn.ed-fn-open.ed-fn-flip > .ed-fn-body { left: auto; right: 0; }
 
/* no-JS safety net: if site JS ever fails to load, notes stay readable */
.client-nojs .ed-fn-body { display: inline; color: var(--ed-secondary); }
.client-nojs .ed-fn-chip { display: none; }
 
/* ── Mobile ── */
Line 1,759 ⟶ 1,902:
h1#firstHeading, .mw-first-heading { font-size: 1.7rem; }
.mw-body-content h2, .mw-body-content .mw-heading2 { font-size: 1.22rem; }
/* footnote card → fixed bottom sheet so it can never clip off-screen */
.ed-fn.ed-fn-open > .ed-fn-body {
position: fixed;
left: 1rem; right: 1rem; bottom: 1rem;
top: auto; width: auto; max-width: none;
box-shadow: 0 -4px 22px rgba(43, 41, 38, 0.18);
}
.ext-aiassistant-prompt-composer { border-bottom: 1px solid var(--ed-hairline) !important; }
}