Jump to content

MediaWiki:Common.css: Difference between revisions

From Insurer Brain
Content deleted Content added
No edit summary
No edit summary
 
(384 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* =================================================================
/* CSS placed here will be applied to all skins. This version makes the log-in disappear*/
Common.css — Global styles for all skins
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
(tools/wiki/pages/MediaWiki-Common.css in the repo) — no incremental
block pastes.
Color/typography authority: SECTION 12 owns all heading, link,
footer, table and AI-panel colors; earlier sections are structure.
================================================================= */


/* =================================================================
1. BASE MEDIAWIKI OVERRIDES (Fonts, Quotes, Math, References)
================================================================= */


/* ======================================================= */
/* 1. STANDARD MEDIAWIKI STYLING (Fonts, Quotes, etc.) */
/* ======================================================= */
cite, dfn { font-style: inherit; }
cite, dfn { font-style: inherit; }
q { quotes: '"' '"' "'" "'"; }
q { quotes: '"' '"' "'" "'"; }
Line 17: Line 28:
.ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; }
.ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; }


/* Collapsible elements logic */
/* --- Collapsible elements --- */
.client-js .collapsible:not( .mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
.client-js .collapsible:not(.mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) tr:not( :first-child ),
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) tr:not(:first-child),
.client-js .outercollapse .innercollapse.mw-collapsible:not( .mw-made-collapsible ) .mw-collapsible-content,
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) .mw-collapsible-content,
#editpage-specialchars {
#editpage-specialchars {
display: none;
display: none;
Line 30: Line 41:
.references { margin-bottom: 0.5em; }
.references { margin-bottom: 0.5em; }


/* Cite Link Styling */
/* --- Cite link styling --- */
span[ rel="mw:referencedBy" ] { counter-reset: mw-ref-linkback 0; }
span[rel="mw:referencedBy"] { counter-reset: mw-ref-linkback 0; }
span[ rel='mw:referencedBy' ] > a::before {
span[rel="mw:referencedBy"] > a::before {
content: counter( mw-ref-linkback, lower-alpha );
content: counter(mw-ref-linkback, lower-alpha);
font-size: 80%; font-weight: bold; font-style: italic;
font-size: 80%; font-weight: bold; font-style: italic;
}
}
a[ rel="mw:referencedBy" ]::before { font-weight: bold; content: "^"; }
a[rel="mw:referencedBy"]::before { font-weight: bold; content: "^"; }
span[ rel="mw:referencedBy" ]::before { content: "^ "; }
span[rel="mw:referencedBy"]::before { content: "^ "; }


.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
Line 43: Line 54:
}
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle { float: left; }
.mw-collapsible-leftside-toggle .mw-collapsible-toggle { float: left; }
.wikitable td ul, .wikitable td ol, .wikitable td dl { text-align: left; }


/* PDF Icons */
/* --- PDF icons --- */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf?"].external,
Line 56: Line 66:
}
}


/* Warnings and Notices */
/* --- Warnings and notices --- */
.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt,
.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt,
div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon {
div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon {
Line 68: Line 78:


@media (min-width: 640px) {
@media (min-width: 640px) {
figure[typeof~='mw:File/Thumb'], figure[typeof~='mw:File/Frame'], .thumbinner { min-width: 100px; }
figure[typeof~="mw:File/Thumb"], figure[typeof~="mw:File/Frame"], .thumbinner { min-width: 100px; }
}
}


#mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; }
#mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; }


/* Hide Permission Groups */
/* --- Permission groups (hidden by default) --- */
.checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show,
.checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show,
.patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show,
.patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show,
Line 84: Line 94:
ul.permissions-errors { margin: 0; }
ul.permissions-errors { margin: 0; }
ul.permissions-errors > li { list-style: none; }
ul.permissions-errors > li { list-style: none; }

/* --- Math rendering --- */
span.mwe-math-mathml-inline { font-size: 118%; }
span.mwe-math-mathml-inline { font-size: 118%; }
.mwe-math-fallback-image-display, .mwe-math-mathml-display {
.mwe-math-fallback-image-display, .mwe-math-mathml-display {
Line 101: Line 113:
.mw-special-Book #coll-downloadbox { display: none; }
.mw-special-Book #coll-downloadbox { display: none; }


/* --- Infoboxes (structure only — width/border/background/font owned
/* Infoboxes */
by section 12) --- */
.infobox {
.infobox {
border: 1px solid #a2a9b1; color: black; padding: 0.2em;
padding: 0.2em;
font-size: 88%; line-height: 1.5em; border-spacing: 3px;
line-height: 1.5em; border-spacing: 3px;
}
}
@media screen { .infobox { background-color: #f8f9fa; } }
@media (max-width: 640px) { .infobox .nowrap { white-space: normal; } }
@media (max-width: 640px) { .infobox { width: 100%; } .infobox .nowrap { white-space: normal; } }
@media (min-width: 640px) {
@media (min-width: 640px) {
.infobox { margin: 0.5em 0 0.5em 1em; float: right; clear: right; width: 22em; }
.infobox { margin: 0.5em 0 0.5em 1em; float: right; clear: right; }
}
}
.infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data,
.infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data,
Line 122: Line 134:
.infobox .infobox-navbar { text-align: right; }
.infobox .infobox-navbar { text-align: right; }


/* --- Text utilities --- */
.wikitable.plainrowheaders th[scope=row], .wikitable.plainrowheaders th[scope=rowgroup] {
font-weight: normal; text-align: left;
}
.nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; }
.nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; }
.nowrap, .nowraplinks a { white-space: nowrap; }
.nowrap, .nowraplinks a { white-space: nowrap; }
Line 141: Line 151:
@media screen { .nochecker .gallerybox .thumb img { background-image: none; } }
@media screen { .nochecker .gallerybox .thumb img { background-image: none; } }


/* YouTube Embeds */
/* --- YouTube embeds --- */
.mw-parser-output iframe[src*="youtube.com"],
.mw-parser-output iframe[src*="youtube.com"],
.mw-parser-output iframe[src*="youtube-nocookie.com"] {
.mw-parser-output iframe[src*="youtube-nocookie.com"] {
Line 148: Line 158:
}
}


/* ======================================================= */
/* RESTORED CAPSACH TOC (Fixed: No "X", Clear Title) */
/* ======================================================= */


/* =================================================================
/* CapSach — Mobile TOC overlay (all skins) */
2. LAYOUT & SPACING
#cps-open-toc {
================================================================= */
position: fixed;

display: none;
/* --- Content width & readability --- */
#content {
max-width: 900px;
margin: 0 auto;
line-height: 1.6;
}
}


/* --- Header reset (invisible fixed container for floating buttons) --- */
/* Full-screen scrim (Click outside to close) */
.header-container.header-chrome {
#cps-toc-overlay {
position: fixed; inset: 0;
position: fixed !important;
top: 0 !important; left: 0 !important; right: 0 !important;
background: rgba(0,0,0,0.4);
height: 60px !important;
display: none;
z-index: 1004;
z-index: 1000 !important;
pointer-events: none !important;
background: transparent !important;
border: none !important;
box-shadow: none !important;
}
.minerva-header {
background: transparent !important;
border: none !important;
box-shadow: none !important;
}
}
#cps-toc-overlay.is-open { display: block; }


.header-container .navigation-drawer { display: none !important; }
/* --- THE DROPDOWN PANEL --- */
#cps-toc-panel {
position: fixed;
/* CHANGED: Set to 0 to start exactly at the top */
top: 0 !important;
/* HORIZONTAL CENTERING */
left: 0 !important;
right: 0 !important;
margin: 0 auto !important;
bottom: auto !important;
/* WIDTH CONSTRAINT */
width: 100% !important;
max-width: 900px !important;
/* CHANGED: Increased height since we gained the top space back */
/* Was (100vh - 150px), now allowing it to go further down */
max-height: calc(100vh - 60px) !important;


/* --- Top margin resets (remove white gap) --- */
/* APPEARANCE */
border-radius: 0 !important;
body.skin-minerva { padding-top: 0 !important; }
background: #ffffff !important;
color: #202122 !important;
box-shadow: 0 10px 30px rgba(0,0,0,0.15) !important;
padding: 15px !important;
box-sizing: border-box !important;
/* SCROLLING */
overflow-y: auto !important;
-webkit-overflow-scrolling: touch;
/* VISIBILITY */
z-index: 1005 !important;
display: none;
}


#content,
/* Logic to show panel */
#content.mw-body,
.is-open #cps-toc-panel,
.mw-body {
#cps-toc-overlay.is-open + #cps-toc-panel,
margin-top: 0 !important;
#cps-toc-panel[style*="display: block"] {
display: block !important;
padding-top: 0 !important;
}
}


.banner-container,
/* --- 1. RESET THE CONTAINER (Fixes the "part above" issue) --- */
#siteNotice {
/* We remove all spacing/color from the wrapper so it disappears */
#cps-toc-header {
background: transparent !important;
padding: 0 !important;
padding: 0 !important;
margin: 0 !important;
margin: 0 !important;
border: none !important;
min-height: 0 !important; /* Ensures it takes no space if empty */
}
}


.pre-content,
/* --- 2. STYLE THE TITLE TEXT AS THE GREY BLOCK --- */
.page-heading,
/* We target the h2 directly so the color sticks to the text */
.firstHeading {
#cps-toc-panel > h2,
margin-top: 0 !important;
#cps-toc-title {
padding-top: 0 !important;
/* THE BACKGROUND COLOR */
background-color: #F8F9FA !important;
/* FULL WIDTH TRICK */
/* We pull the text element OUT of the padding to touch the edges */
margin-left: -15px !important;
margin-right: -15px !important;
margin-top: -15px !important; /* Pulls it to the very top */
/* HEIGHT & SPACING */
padding-top: 20px !important;
padding-bottom: 20px !important;
/* Pushes the link list down so it doesn't overlap */
margin-bottom: 15px !important;
/* BORDER SEPARATOR */
border-bottom: 1px solid #eaecf0 !important;
/* TEXT STYLING */
display: block !important;
width: auto !important; /* Let margins control width */
text-align: center !important;
color: #202122 !important;
font-size: 18px !important;
font-family: sans-serif !important;
font-weight: bold !important; /* Tries to force bold */
}
}


/* Push title down so it clears the invisible header */
/* HIDE THE CLOSE BUTTON ("X") */
.pre-content.heading-holder {
#cps-toc-close {
display: none !important;
padding-top: 70px !important; /* 60px header + 10px visual space */
display: block !important;
}
}


@media (prefers-reduced-motion: reduce) {
/* --- LIST STYLING --- */
html { scroll-behavior: auto; }
#cps-toc-list {
list-style: none; margin: 0; padding: 0;
}
}
#cps-toc-list li { margin: 0; }


/* Default Link Styling */
#cps-toc-list a {
display: block; padding: 12px 10px;
border-bottom: 1px solid #f8f8f8;
text-decoration: none;
color: #202122;
font-size: 15px;
line-height: 1.4;
}


/* =================================================================
#cps-toc-list a:active {
3. BRANDING (Logo, Tagline — Desktop Header & Mobile Footer)
background: #f0f0f0;
================================================================= */
color: #3366cc;

/* --- Desktop: hide logo wordmark, inject tagline --- */
.mw-logo-container { display: none !important; }
.mw-logo-wordmark {
display: none !important;
visibility: hidden !important;
width: 0 !important;
}
}


.mw-logo:hover,
/* Indentation */
.mw-logo:active,
#cps-toc-list li[data-level="3"] { padding-left: 15px; }
.mw-logo:focus { text-decoration: none !important; }
#cps-toc-list li[data-level="4"] { padding-left: 30px; }
#cps-toc-list li[data-level="5"] { padding-left: 45px; }


.mw-logo::after {
/* --- CUSTOM TOC HEADER & ARROWS --- */
content: "Unleashing \A intelligence";
font-size: 0.875em;
font-weight: 700;
line-height: 1.4;
color: var(--text-dark) !important;
text-decoration: none !important;
cursor: pointer;
display: block;
white-space: pre;
margin-left: 3px;
text-align: left;
position: relative;
top: 3px;
}


@media screen and (max-width: 900px) {
/* 1. Target "Contents" Header Link (Bold, Orange, Dark Border) */
.mw-logo::after { display: none !important; }
#cps-toc-list a[href="#mw-toc-heading"] {
font-weight: bold !important;
color: #f07662 !important;
border-bottom: 1px solid #202122 !important;
}
}


/* --- Mobile footer: logo image + tagline --- */
/* 2. Add Arrow Symbol (▸) to Level 2 AND Level 3 items */
.minerva-footer-logo {
#cps-toc-list li[data-level="2"] a::before,
font-size: 0 !important;
#cps-toc-list li[data-level="3"] a::before {
content: "▸" !important;
color: transparent !important;
color: #202122 !important;
display: block !important;
text-align: left !important;
margin-right: 8px; /* Space between symbol and text */
margin-bottom: 20px !important;
display: inline-block;
}
}


.minerva-footer-logo::before {
/* 3. Remove the Arrow from the "Contents" header (it is technically Level 2) */
#cps-toc-list li[data-level="2"] a[href="#mw-toc-heading"]::before {
display: none !important;
content: "" !important;
content: "" !important;
display: block !important;
background-image: url("https://pro-wiki.s3.eu-central-1.amazonaws.com/2776118/Logo.png");
width: 160px;
height: 50px;
background-repeat: no-repeat !important;
background-size: contain !important;
background-position: left center !important;
margin-bottom: 6px !important;
}
}


.minerva-footer-logo::after {
/* --- END CUSTOM TOC STYLING --- */
content: "Unleashing intelligence" !important;

font-size: 0.875rem !important;
font-weight: 700 !important;
line-height: 1.4 !important;
color: #202122 !important;
display: block !important;
white-space: pre-wrap !important;
}


/* --- REMOVED THE IPAD HIDING RULE HERE --- */
/* Force hidden Minerva footer links to appear */
body.skin-minerva #footer-places-about,
/* (The @media min-width 768px block was deleted to allow TOC on iPad) */
body.skin-minerva #footer-places-disclaimers {

display: inline-block !important;
@media (prefers-reduced-motion: reduce) {
html { scroll-behavior: auto; }
}
}


/* --- Fullscreen logo (fits content width) --- */
/* FIX: HIDE DUPLICATE "CONTENTS" TITLE IN MOBILE TOC */
.fullscreen-logo {
#cps-toc-panel .toctitle,
width: 100% !important;
#cps-toc-panel #mw-toc-heading,
padding: 0 !important;
#cps-toc-panel h2 {
display: none !important;
margin: 0 auto !important;
max-width: 900px !important;
}
}


.fullscreen-logo figure,
/* ======================================================= */
.fullscreen-logo .mw-default-size,
/* 2. GLOBAL HIDE (READ-ONLY MODE) */
.fullscreen-logo .mw-halign-center {
/* These elements are hidden for everyone by default. */
max-width: 100% !important;
/* They are UNHIDDEN in MediaWiki:Group-user.css */
width: 100% !important;
/* ======================================================= */
margin: 0 !important;

padding: 0 !important;
/* HIDE USER LINKS (Includes Sticky Header IDs for Vector 2022) */
#vector-user-links,
#p-personal,
#pt-login,
#pt-login-2, /* Sticky Header Login */
#pt-createaccount,
#pt-createaccount-2, /* Sticky Header Create Account */
#pt-userpage,
#pt-mytalk,
#pt-preferences,
#pt-watchlist,
#pt-mycontris,
#pt-logout {
display: none !important;
}
}


.fullscreen-logo figure > span {
/* HIDE TOOLS (Sidebar, Dropdowns, Tabs) */
display: block !important;
#p-tb, /* Toolbox */
width: 100% !important;
#vector-page-tools, /* Vector 22 Sidebar */
#vector-page-tools-dropdown, /* Vector 22 Dropdown */
.vector-p-tb,
#ca-viewsource,
#ca-history,
#ca-talk {
display: none !important;
}
}


.fullscreen-logo img.mw-file-element {
/* HIDE CATEGORIES */
display: block !important;
#catlinks,
width: 100% !important;
.catlinks,
max-width: 100% !important;
.mw-normal-catlinks {
display: none !important;
height: auto !important;
min-width: 0 !important;
}
}


/* ======================================================= */
/* FORCE HIDE MOBILE HISTORY BAR */
/* Placed in Common.css to ensure it loads on all devices */
/* ======================================================= */


/* =================================================================
/* Target the container class from your HTML */
4. CAPSACH MOBILE TOC OVERLAY
.last-modified-bar,
================================================================= */
a.last-modified-bar {

display: none !important;
visibility: hidden !important;
/* --- Base state (JS toggles visibility) --- */
#cps-open-toc {
position: fixed;
display: none;
}
}


/* --- Full-screen scrim --- */
/* Target the text wrapper explicitly */
#cps-toc-overlay {
.last-modified-bar__text,
position: fixed; inset: 0;
.modified-enhancement {
display: none !important;
background: rgba(0,0,0,0.4);
display: none;
z-index: 1004;
}
}
#cps-toc-overlay.is-open { display: block; }


/* --- Dropdown panel --- */
/* Target the specific clock icon found inside that button */
#cps-toc-panel {
.minerva-icon--modified-history {
display: none !important;
position: fixed;
top: 0 !important;
left: 0 !important;
right: 0 !important;
margin: 0 auto !important;
bottom: auto !important;
width: 100% !important;
max-width: 900px !important;
max-height: calc(100vh - 60px) !important;
border-radius: 0 !important;
background: #ffffff !important;
color: #202122 !important;
box-shadow: 0 10px 30px rgba(0,0,0,0.15) !important;
padding: 15px !important;
box-sizing: border-box !important;
overflow-y: auto !important;
-webkit-overflow-scrolling: touch;
z-index: 1005 !important;
display: none;
}
}


.is-open #cps-toc-panel,
/* ======================================================= */
#cps-toc-overlay.is-open + #cps-toc-panel,
/* HIDE MOBILE USER/LOGIN MENU (Wrapper Method) */
#cps-toc-panel[style*="display: block"] {
/* ======================================================= */
display: block !important;
}


/* Target the main container div */
/* --- Panel header reset --- */
#cps-toc-header {
.minerva-user-menu {
display: none !important;
background: transparent !important;
padding: 0 !important;
margin: 0 !important;
border: none !important;
min-height: 0 !important;
}
}


/* Backup: Target the toggle button specifically */
/* --- Title bar (grey block) --- */
#cps-toc-panel > h2,
.toggle-list__toggle#minerva-user-menu-toggle {
#cps-toc-title {
display: none !important;
background-color: #F8F9FA !important;
margin: -15px -15px 15px !important;
padding: 20px 0 !important;
border-bottom: 1px solid #eaecf0 !important;
display: block !important;
width: auto !important;
text-align: center !important;
color: #202122 !important;
font-size: 18px !important;
font-family: sans-serif !important;
font-weight: bold !important;
}
}


/* Hide close button and duplicate headings */
/* Backup: Target the icon inside */
#cps-toc-close,
.minerva-icon--userAvatarOutline {
#cps-toc-panel .toctitle,
#cps-toc-panel #mw-toc-heading,
#cps-toc-panel h2 {
display: none !important;
display: none !important;
}
}


/* --- TOC list --- */
/* ======================================================= */
#cps-toc-list { list-style: none; margin: 0; padding: 0; }
/* HIDE MOBILE SIDEBAR ITEMS */
#cps-toc-list li { margin: 0; }
/* ======================================================= */


#cps-toc-list a {
/* 1. Hide "Recent Changes" */
display: block; padding: 12px 10px;
#mw-mf-page-left a[href*="Special:RecentChanges"],
border-bottom: 1px solid #f8f8f8;
#mw-mf-page-left a[data-event-name="recentchanges"] {
display: none !important;
text-decoration: none;
color: #202122;
font-size: 15px;
line-height: 1.4;
}
}


#cps-toc-list a:active {
/* 2. Hide "Special Pages" */
background: #f0f0f0;
#mw-mf-page-left a[href*="Special:SpecialPages"] {
display: none !important;
color: #3366cc;
}
}


/* Indentation levels */
/* 3. Hide "Community Portal" */
#cps-toc-list li[data-level="3"] { padding-left: 15px; }
/* Matches the URL: index.php?title=...Community_portal */
#cps-toc-list li[data-level="4"] { padding-left: 30px; }
#mw-mf-page-left a[href*="Community_portal"] {
#cps-toc-list li[data-level="5"] { padding-left: 45px; }
display: none !important;
}


/* "Contents" header link — bold, orange, dark border */
/* ======================================================= */
#cps-toc-list a[href="#mw-toc-heading"] {
/* HIDE VECTOR 2022 PAGE TOOLBAR & PRE-CONTENT */
font-weight: bold !important;
/* (Restored for logged-in users in MediaWiki:Group-user.css) */
color: #f07662 !important;
/* ======================================================= */
border-bottom: 1px solid #202122 !important;

/* Hides the tabs (Read, Edit, History) and the "Tools" dropdown */
.vector-page-toolbar {
display: none !important;
}
}


/* Hides the "From [Sitename]" text and page status indicators */
/* Arrow prefix (▸) for level 2 and 3 items */
#cps-toc-list li[data-level="2"] a::before,
.vector-body-before-content {
#cps-toc-list li[data-level="3"] a::before {
display: none !important;
content: "▸" !important;
color: #202122 !important;
margin-right: 8px;
display: inline-block;
}
}


/* Remove arrow from "Contents" header (technically level 2) */
/* ======================================================= */
#cps-toc-list li[data-level="2"] a[href="#mw-toc-heading"]::before {
/* HIDE LANGUAGE SELECTOR MENU (Global) */
/* ======================================================= */
#p-vector-user-menu-preferences {
display: none !important;
display: none !important;
content: "" !important;
}
}


/* Hide default in-article TOC */
/* Hides the top-left container (Main Menu / Hamburger Icon) */
.toc,
.vector-main-menu-landmark {
#toc,
.mw-parser-output #toc,
.client-js .mw-content-ltr .toc {
display: none !important;
display: none !important;
}
}


/* ======================================================= */
/* HIDE COLOR THEME (Read-Only/Anonymous Only) */
/* ======================================================= */
/* This specific selector hides the element ONLY if the user
does NOT have the 'group-user' class (i.e., they are logged out). */
body:not(.group-user) #skin-client-prefs-skin-theme {
display: none !important;
}


/* ======================================================= */
/* =================================================================
/* 2. BOTTOM FLOATING SQUARES (4 Buttons: ToC Centered) */
5. FLOATING BOTTOM BUTTONS (Search, Home, ToC, Email)
/* ======================================================= */
================================================================= */

/* --- A. HEADER RESET (Invisible Container) --- */
.header-container.header-chrome {
position: fixed !important;
top: 0 !important; left: 0 !important; right: 0 !important;
height: 60px !important;
z-index: 1000 !important;
background: transparent !important;
border: none !important;
box-shadow: none !important;
pointer-events: none !important;
}

/* Push content down */
body.skin-minerva { padding-top: 60px !important; }
.mw-body { margin-top: 10px !important; }

/* Hide default elements */
.header-container .navigation-drawer { display: none !important; }


/* --- B. SHARED STYLES (Applies to all 4 buttons + Input) --- */
/* --- Shared styles (all 4 buttons + search input) --- */
.branding-box,
.branding-box,
#searchIcon,
#searchIcon,
#cps-open-toc,
#cps-open-toc,
#custom-email-btn, /* The Email Button */
#custom-email-btn,
body.mw-mf-search-mode .minerva-header .search-box input {
body.mw-mf-search-mode .minerva-header .search-box input {
background-color: rgba(0, 0, 0, 0.2) !important;
/* Design: Dark Semi-Transparent Circle */
background-color: rgba(0, 0, 0, 0.2) !important;
opacity: 1 !important;
opacity: 1 !important;
border-radius: 50% !important;
border-radius: 50% !important;
Line 506: Line 479:
backdrop-filter: none !important;
backdrop-filter: none !important;
pointer-events: auto !important;
pointer-events: auto !important;
/* Dimensions: 44px x 44px */
box-sizing: border-box !important;
box-sizing: border-box !important;
width: 44px !important;
width: 44px !important;
height: 44px !important;
height: 44px !important;
min-width: 44px !important;
max-width: 44px !important;
/* === ADD THESE TWO LINES HERE === */
min-width: 44px !important; /* Overrides Minerva 640px tablet default */
padding: 0 !important;
max-width: 44px !important; /* Ensures it stays a circle */
/* ================================ */

padding: 0 !important;
margin: 0 !important;
margin: 0 !important;
/* Fixed Positioning at Bottom */
position: fixed !important;
position: fixed !important;
top: auto !important;
top: auto !important;

/* FIX FOR IPHONE: Respect the Home Indicator + GPU Acceleration */
/* Uses 15px base + the safe area (black bar height) */
bottom: calc(15px + env(safe-area-inset-bottom)) !important;
bottom: calc(15px + env(safe-area-inset-bottom)) !important;
/* Stops the "Jitter" when the address bar moves */
transform: translateZ(0);
transform: translateZ(0);
will-change: transform;
will-change: transform;

/* Center Alignment setup (Offsets defined below) */
left: 50% !important;
left: 50% !important;
right: auto !important;
right: auto !important;
display: flex !important;
/* Flexbox to center the icons inside */
align-items: center;
display: flex !important;
align-items: center;
justify-content: center;
justify-content: center;
z-index: 1002 !important;
z-index: 1002 !important;
}
}


/* --- C. POSITIONS (Order: Search, Home, ToC, Email) --- */
/* --- Individual positions --- */


/* 1. SEARCH (Far Left) */
/* Search (far left, offset -150px) */
/* Offset: -150px */
#searchIcon {
#searchIcon {
margin-left: -150px !important;
margin-left: -150px !important;
z-index: 1003 !important;
z-index: 1003 !important;
}
}
Line 556: Line 510:
color: #fff !important;
color: #fff !important;
fill: #fff !important;
fill: #fff !important;
filter: brightness(0) invert(1);
filter: brightness(0) invert(1);
}
}


/* 2. HOME (Left of Center) */
/* Home (left of center, offset -86px) */
.branding-box {
.branding-box {
margin-left: -86px !important;
margin-left: -86px !important;
flex: 0 0 44px !important;
/* ADD THIS LINE TO PREVENT STRETCHING: */
flex: 0 0 44px !important;
}
}

/* Home Icon (⌂) */
.branding-box::after {
.branding-box::after {
content: "⌂";
content: "⌂";
font-size: 30px !important;
font-size: 30px !important;
color: #fff !important;
color: #fff !important;
-webkit-text-stroke: 0.5px #fff !important;
-webkit-text-stroke: 0.5px #fff !important;
margin-top: -6px !important;
margin-top: -6px !important;
line-height: 1 !important;
line-height: 1 !important;
}
}
.branding-box a { opacity: 0 !important; position: absolute; inset: 0; }
.branding-box a { opacity: 0 !important; position: absolute; inset: 0; }


/* 3. TOC (CENTER ANCHOR) */
/* ToC (center, offset -22px) */
/* Offset: -22px (Centered) */
#cps-open-toc { margin-left: -22px !important; }
#cps-open-toc {
margin-left: -22px !important;
}
#cps-open-toc .icon {
#cps-open-toc .icon {
font-size: 30px !important;
font-size: 30px !important;
line-height: 1 !important;
line-height: 1 !important;
margin-bottom: 3px !important;
margin-bottom: 3px !important;
color: #fff !important;
color: #fff !important;
}
}
#cps-open-toc .label { display: none !important; }
#cps-open-toc .label { display: none !important; }


/* 4. EMAIL (Right of Center) */
/* Email (right of center, offset +42px) */
#custom-email-btn { margin-left: 42px !important; }
/* Offset: +42px */
#custom-email-btn {
margin-left: 42px !important;
}
/* Email Icon (Envelope) */
#custom-email-btn::after {
#custom-email-btn::after {
/* \FE0E forces "Text Mode" (Standard black/white) instead of Emoji */
content: "\2709\FE0E"; /* Text-mode envelope glyph */
content: "\2709\FE0E";
font-size: 26px !important;
font-size: 26px !important;
line-height: 1 !important;
line-height: 1 !important;
margin-top: -2px !important;
margin-top: -2px !important;
color: transparent !important;
text-shadow: 0 0 0 #fff !important;
/* IOS HACK: This forces the icon to be flat white */
color: transparent !important; /* Hide the colorful emoji */
text-shadow: 0 0 0 #fff !important; /* Create a flat white shadow of it */
}
}


/* --- D. THE SEARCH INPUT (When Search is Clicked) --- */
/* --- Search input (expanded state) --- */

/* 1. Hide initially */
body:not(.mw-mf-search-mode) .minerva-header .search-box {
body:not(.mw-mf-search-mode) .minerva-header .search-box {
display: none !important;
display: none !important;
}
}


/* 2. Position Wrapper */
body.mw-mf-search-mode .minerva-header .search-box {
body.mw-mf-search-mode .minerva-header .search-box {
display: block !important;
display: block !important;
Line 624: Line 560:
height: 44px !important;
height: 44px !important;
z-index: 1001 !important;
z-index: 1001 !important;
left: 10px !important;
left: 10px !important;
right: 10px !important;
right: 10px !important;
width: auto !important;
width: auto !important;
padding: 0 !important; margin: 0 !important;
padding: 0 !important; margin: 0 !important;
Line 634: Line 568:
}
}


/* 3. Style Input Pill */
/* (Note: The input background/shape is handled in Shared Styles above) */
body.mw-mf-search-mode .minerva-header .search-box input {
body.mw-mf-search-mode .minerva-header .search-box input {
width: 100% !important;
width: 100% !important;
font-size: 16px !important;
font-size: 16px !important;
/* Text Color */
color: #fff !important;
color: #fff !important;
-webkit-text-fill-color: #fff !important;
-webkit-text-fill-color: #fff !important;
padding-left: 55px !important;
/* PADDING: 44px (Button) + 11px (Gap) */
padding-left: 55px !important;
padding-right: 55px !important;
padding-right: 55px !important;
position: static !important;
/* Reset position for the input box specifically */
position: static !important;
margin: 0 !important;
margin: 0 !important;
}
}


.minerva-header .search-box .search-box-icon-overlay { display: none !important; }
/* 4. Hide Inner Icon */
.minerva-header .search-box .search-box-icon-overlay {
display: none !important;
}


/* 5. Placeholder */
body.mw-mf-search-mode .minerva-header .search-box input::placeholder {
body.mw-mf-search-mode .minerva-header .search-box input::placeholder {
color: rgba(255, 255, 255, 0.7) !important;
color: rgba(255, 255, 255, 0.7) !important;
Line 664: Line 586:
}
}


.search-box .search-box-cancel {
/* 6. Cancel "X" Button */
display: block !important;
.search-box .search-box-cancel {
display: block !important;
position: absolute !important;
position: absolute !important;
top: 0 !important;
top: 0 !important; right: 0 !important;
right: 0 !important;
width: 44px !important; height: 44px !important;
width: 44px !important;
height: 44px !important;
line-height: 44px !important;
line-height: 44px !important;
text-align: center !important;
text-align: center !important;
Line 678: Line 597:
}
}



/* ======================================================= */
/* =================================================================
/* HIDE PAGE ACTIONS MENU (Language, Watch, Edit, etc.) */
6. GLOBAL HIDE (Read-Only Mode)
/* ======================================================= */
Hidden for everyone; un-hidden in MediaWiki:Group-user.css
================================================================= */

/* --- User links (includes Vector 2022 sticky header IDs) --- */
#vector-user-links,
#p-personal,
#pt-login,
#pt-login-2,
#pt-createaccount,
#pt-createaccount-2,
#pt-userpage,
#pt-mytalk,
#pt-preferences,
#pt-watchlist,
#pt-mycontris,
#pt-logout {
display: none !important;
}

/* --- Tools (sidebar, dropdowns, tabs) --- */
#p-tb,
#vector-page-tools,
#vector-page-tools-dropdown,
.vector-p-tb,
#ca-viewsource,
#ca-history,
#ca-talk {
display: none !important;
}

/* --- Categories --- */
#catlinks,
.catlinks,
.mw-normal-catlinks {
display: none !important;
}

/* --- Page actions (Language, Watch, Edit, etc.) --- */
#p-views,
#p-views,
.page-actions-menu__list {
.page-actions-menu__list,
.page-actions-menu {
display: none !important;
display: none !important;
}
}


/* --- Vector 2022 page toolbar & pre-content --- */
/* ======================================================= */
.vector-page-toolbar { display: none !important; }
/* HIDE STANDARD "FIXED" TOC (Force Sticky Button Only) */
.vector-body-before-content { display: none !important; }
/* ======================================================= */

/* This removes the default TOC box inside the article text */
/* --- Language selector & main menu --- */
.toc,
#p-vector-user-menu-preferences { display: none !important; }
#toc,
.vector-main-menu-landmark { display: none !important; }
.mw-parser-output #toc,

.client-js .mw-content-ltr .toc {
/* --- Mobile: history bar --- */
.last-modified-bar,
a.last-modified-bar {
display: none !important;
visibility: hidden !important;
}
.last-modified-bar__text,
.modified-enhancement,
.minerva-icon--modified-history {
display: none !important;
display: none !important;
}
}


/* --- Mobile: user/login menu --- */
/* ======================================================= */
.minerva-user-menu { display: none !important; }
/* FORCE STICKY BUTTONS ON IPAD / TABLET */
.toggle-list__toggle#minerva-user-menu-toggle { display: none !important; }
/* ======================================================= */
.minerva-icon--userAvatarOutline { display: none !important; }
@media screen and (min-width: 768px) {
/* 1. LOCK HOME BUTTON SHAPE (Restored from comment) */
.branding-box {
/* Force exact width to prevent "Tablet Mode" expansion */
width: 44px !important;
min-width: 44px !important;
max-width: 44px !important;
/* Stop Flexbox from stretching it */
flex: 0 0 44px !important;
/* Ensure position stays correct (Left of Center) */
margin-left: -86px !important;
}


/* 2. KEEP TOC CENTERED */
/* --- Mobile: sidebar items --- */
#mw-mf-page-left a[href*="Special:RecentChanges"],
#cps-open-toc {
#mw-mf-page-left a[data-event-name="recentchanges"],
display: flex !important;
#mw-mf-page-left a[href*="Special:SpecialPages"],
visibility: visible !important;
#mw-mf-page-left a[href*="Community_portal"] {
opacity: 1 !important;
z-index: 9999 !important;
display: none !important;
/* Center Offset */
margin-left: -22px !important;
/* Styling */
background-color: rgba(0, 0, 0, 0.2) !important;
width: 44px !important;
height: 44px !important;
border-radius: 50% !important;
}
}
}



/* Constrain main content width for better readability */
/* =================================================================
#content {
7. CHROME EXTRAS
max-width: 900px; /* Optimal reading width */
(Heading, link, and footer COLORS are owned by section 12 —
margin: 0 auto; /* Center it */
this section keeps only structural chrome fixes.)
line-height: 1.6; /* More breathing room between lines */
================================================================= */

/* Remove Vector 2022 default title underline */
.vector-page-titlebar::after {
background-color: transparent !important;
display: none !important;
height: 0 !important;
}
}


#footer-icons { display: none !important; }
/* ======================================================= */
/* SMART HIDE: ONLY HIDE BUTTON ON DESKTOP SKIN */
/* ======================================================= */


.minerva-footer .footer-content,
/* This rule only triggers if the screen is wide AND the user is on the Desktop Skin */
.minerva-footer .branding-box,
@media screen and (min-width: 1000px) {
.minerva-footer-logo,
body.skin-vector-2022 #cps-open-toc {
#footer-info,
display: none !important;
#footer-places {
}
border: none !important;
}
}


/* Mobile section expand icon */
/* 1. Remove gap below the Site Notice (even if empty) */
.skin-minerva .section-heading .mw-ui-icon-wikimedia-expand-small {
#siteNotice {
filter: grayscale(1) brightness(0.2);
margin-bottom: 0 !important;
padding-bottom: 0 !important;
}
}


/* --- Navigation menu paragraphs --- */
/* 2. Remove gap above the Main Content container */
.navigation-menu .infobox-data p {
#content.mw-body {
font-size: 1em !important;
margin: 0 !important;
padding: 0 !important;
}

/* --- Main page menu --- */
.main-page-menu {
line-height: 1.8;
margin-bottom: 0;
font-size: 1em;
}

/* --- Read pill (inline badge) --- */
.read-pill {
display: inline;
white-space: nowrap;
padding: 1px 0.4em;
position: relative;
top: -1px;
border-radius: 4px;
margin: 0 0.2em 0 0;
font-size: 0.85em;
font-weight: 500;
color: #202122 !important;
-webkit-box-decoration-break: clone;
box-decoration-break: clone;
}

.read-pill a,
.read-pill a:visited {
color: #202122 !important;
text-decoration: none !important;
}

.read-pill a.new {
color: red !important;
padding: 0 4px;
border-radius: 3px;
}


/* =================================================================
8. AI ASSISTANT PANEL — STRUCTURE
(Panel colors — borders, bubbles, send button, citations — are
owned by section 12's theme block.)
================================================================= */

/* --- Z-index: sits behind floating buttons (z-index 1002) --- */
.ext-aiassistant,
.ext-aiassistant-panel {
z-index: 1001 !important;
}

.ext-aiassistant-panel { box-shadow: none !important; }

/* --- Header --- */
.ext-aiassistant-header {
margin-left: 0 !important;
margin-right: 0 !important;
padding-left: 12px !important;
padding-right: 12px !important;
}

/* --- Message area --- */
.ext-aiassistant-body {
padding-left: 20px !important;
padding-right: 20px !important;
box-sizing: border-box !important;
}

.ext-aiassistant-message {
margin-left: 0 !important;
margin-right: 0 !important;
}

.ext-aiassistant-message + .ext-aiassistant-message {
margin-top: 0 !important;
margin-top: 0 !important;
padding-top: 0 !important;
}
}


/* --- User bubble --- */
/* 3. Remove gap above the Page Heading ("Home") */
.ext-aiassistant-message-user {
/* This is often the hidden cause of the white line */
margin-left: 100px !important;
.pre-content,
.page-heading,
.firstHeading {
margin-top: 0 !important;
margin-top: 0 !important;
margin-bottom: 0 !important;
}

.ext-aiassistant-message-user .ext-aiassistant-message__content {
color: white !important;
border-radius: 18px !important;
border: none !important;
padding: 6px 12px !important;
}

.ext-aiassistant-message-user .ext-aiassistant-message__content p {
color: white !important;
margin: 0 !important;
}

/* --- Assistant typography (family/color set by section 12) --- */
.ext-aiassistant-message-assistant {
font-size: 1em !important;
overflow-wrap: break-word !important;
white-space: normal !important;
max-width: 100% !important;
}

.ext-aiassistant-message-assistant p {
margin: 0 0 0.6em !important;
}

.ext-aiassistant-message-assistant p,
.ext-aiassistant-message-assistant li,
.ext-aiassistant-message-assistant ul,
.ext-aiassistant-message-assistant ol {
line-height: 1.6 !important;
}

.ext-aiassistant-message-assistant ul,
.ext-aiassistant-message-assistant ol {
margin: 0.3em 0 0.6em !important;
margin-left: 0 !important;
padding-top: 0 !important;
padding-top: 0 !important;
}
}


.ext-aiassistant-message-assistant ul {
/* ======================================================= */
list-style-type: disc !important;
/* 1. MAKE HEADER TRANSPARENT */
padding-left: 1.2em !important;
/* ======================================================= */
}
.header-container.header-chrome,

.minerva-header {
.ext-aiassistant-message-assistant ul ul {
list-style-type: disc !important;
padding-left: 1.5em !important;
}

.ext-aiassistant-message-assistant li {
margin-bottom: 0.2em !important;
white-space: normal !important;
}

.ext-aiassistant-message-assistant pre,
.ext-aiassistant-message-assistant code {
white-space: pre-wrap !important;
word-wrap: break-word !important;
font-family: inherit !important;
background: transparent !important;
border: none !important;
padding: 0 !important;
margin: 0 !important;
}

/* --- Action buttons (copy, source) --- */
.ext-aiassistant-message-assistant .ext-aiassistant-actions {
display: flex !important;
flex-direction: row-reverse !important;
}

.ext-aiassistant-message-user .ext-aiassistant-actions {
display: flex !important;
justify-content: flex-end !important;
}

/* --- Citations (color set by section 12) --- */
.ext-aiassistant-cite {
line-height: 1 !important;
font-size: 80% !important;
vertical-align: super !important;
}

/* --- Sources --- */
.ext-aiassistant-sources {
background: transparent !important;
background: transparent !important;
background-color: transparent !important;
border: none !important;
border: none !important;
box-shadow: none !important;
box-shadow: none !important;
padding: 0 !important;
margin-bottom: 12px !important;
}
}


/* --- "New Chat" label (color set by section 12) --- */
/* ======================================================= */
.ext-aiassistant-panel .cdx-button--weight-quiet:not(.cdx-button--icon-only) {
/* 2. RESET PAGE & CONTAINER TOP MARGINS */
font-size: 0 !important;
/* This removes the "White Gap" at the very top */
}
/* ======================================================= */
.ext-aiassistant-panel .cdx-button--weight-quiet:not(.cdx-button--icon-only)::before {
body.skin-minerva {
padding-top: 0 !important;
content: "New" !important;
font-size: 0.875rem !important;
font-weight: bold !important;
visibility: visible !important;
}
}


/* --- Footer + Composer --- */
/* Force the main content wrapper to start at pixel 0 */
.ext-aiassistant-footer {
#content,
display: flex !important;
.mw-body {
margin-top: 0 !important;
align-items: center !important;
padding-top: 0 !important;
justify-content: center !important;
padding: 0 !important;
box-sizing: border-box !important;
}
}


.ext-aiassistant-prompt-composer {
/* Remove potential gap from the Site Notice container */
margin: 0 !important;
.banner-container,
width: 100% !important;
#siteNotice {
padding-top: 0 !important;
background-color: #fff !important;
margin-top: 0 !important;
padding: 10px 20px !important;
margin-bottom: 0 !important;
border: none !important;
border-radius: 0 !important;
}
}


.ext-aiassistant-prompt-composer__toolbar {
/* ======================================================= */
display: flex !important;
/* 3. PUSH TITLE DOWN INTERNALLY */
align-items: center !important;
/* This pushes the text "Home" down so it's not hidden, */
/* but keeps the background white/transparent at the top. */
/* ======================================================= */
.pre-content.heading-holder {
/* 70px (Header height) + 40px (Visual Space) */
padding-top: 70px !important;
/* Ensure it behaves as a block to accept padding */
display: block !important;
}
}


/* --- Send button (shape; colors set by section 12) --- */
/* Best approach: Hides the text wrapper entirely to remove spacing */
.ext-aiassistant-prompt-composer__send {
.mw-logo-container {
display: none !important;
border-radius: 50% !important;
width: 32px !important;
height: 32px !important;
min-width: 0 !important;
padding: 0 !important;
display: flex !important;
align-items: center !important;
justify-content: center !important;
margin-left: 4px !important;
}
}


.ext-aiassistant-prompt-composer__send:disabled .cdx-icon svg {
/* Target the specific text element directly */
fill: #72777d !important;
.mw-logo-wordmark {
display: none !important;
visibility: hidden !important; /* Backup if display fails */
width: 0 !important;
}
}


/* ======================================================= */
/* ADD TAGLINE TO HEADER (DESKTOP) */
/* ======================================================= */


/* =================================================================
/* 1. Prevent underline on the parent link when hovering */
9. RESPONSIVE OVERRIDES
.mw-logo:hover,
================================================================= */
.mw-logo:active,

.mw-logo:focus {
/* --- Mobile (max-width: 768px) --- */
text-decoration: none !important;
@media screen and (max-width: 768px) {
/* AI assistant: fullscreen mode */
.ext-aiassistant-panel {
position: fixed !important;
box-sizing: border-box !important;
width: 100% !important;
height: 100% !important;
max-width: none !important;
max-height: none !important;
top: 0 !important;
left: 0 !important;
right: 0 !important;
bottom: 0 !important;
border-radius: 0 !important;
margin: 0 !important;
}
.ext-aiassistant-body {
height: auto !important;
flex-grow: 1 !important;
}
/* Push input above sticky buttons */
.ext-aiassistant-footer {
padding-bottom: calc(70px + env(safe-area-inset-bottom)) !important;
}

/* Prevent iOS zoom on AI input */
.ext-aiassistant-panel input,
.ext-aiassistant-panel textarea,
.ext-aiassistant-panel .cdx-text-input__input {
font-size: 16px !important;
}

/* Prevent horizontal scroll */
html, body {
overflow-x: hidden !important;
width: 100% !important;
position: relative;
}

/* Hide AI shortcut hint */
.ext-aiassistant-shortcut-hint { display: none !important; }
}
}


/* 2. Inject the tagline text */
/* --- Tablet (min-width: 768px) --- */
@media screen and (min-width: 768px) {
.mw-logo::after {
/* \A is the CSS escape character for a Newline */
/* Keep ToC button visible above panel overlays */
#cps-open-toc {
content: "Empowering \A human excellence";
visibility: visible !important;
z-index: 9999 !important;
/* Typography - MATCHING FOOTER EXACTLY */
}
/* Removed font-family line so it inherits the correct system font */
font-size: 0.875em;
font-weight: 700;
line-height: 1.4;
/* Visuals */
color: #202122 !important;
text-decoration: none !important;
cursor: pointer;
/* Positioning */
display: block;
white-space: pre;
margin-left: 3px;
text-align: left;
/* MOVES TEXT DOWN */
position: relative;
top: 3px;
}
}


/* --- Desktop (min-width: 1000px) --- */
/* Hide styling on Mobile/Tablet so it doesn't clash */
@media screen and (max-width: 900px) {
@media screen and (min-width: 1000px) {
/* Wider content column */
.mw-logo::after {
#content { max-width: 1200px !important; }

/* Match logo to wider content */
.fullscreen-logo { max-width: 100% !important; }
.fullscreen-logo img.mw-file-element {
max-width: min(100%, 1200px) !important;
margin: 0 auto !important;
}

/* Hide ToC button on desktop Vector 2022 (full sidebar available) */
body.skin-vector-2022 #cps-open-toc { display: none !important; }
}


/* =================================================================
10. PRINT STYLES
================================================================= */

@media print {

/* --- Hide floating buttons, overlays, and AI assistant --- */
#searchIcon,
.branding-box,
#cps-open-toc,
#custom-email-btn,
#cps-toc-panel,
#cps-toc-overlay,
.minerva-header .search-box,
.ext-aiassistant,
.ext-aiassistant-panel,
.ext-aiassistant-trigger {
display: none !important;
display: none !important;
}

/* --- Hide standard MediaWiki UI elements to free up space --- */
#mw-navigation,
#footer,
.printfooter,
.mw-editsection {
display: none !important;
}

/* --- Font consistency for lists --- */
.mw-parser-output ul,
.mw-parser-output ol,
.mw-parser-output li {
font-family: inherit !important;
}

/* --- Remove underlines specifically from internal links in print --- */
.mw-parser-output a:not(.external),
.mw-parser-output a:not(.external):visited {
text-decoration: none !important;
}
}
}
}


/* ======================================================= */
/* CUSTOM MOBILE FOOTER (Logo Image + Tagline) */
/* ======================================================= */


/* ============================================================================
/* 1. Reset the container */
SECTION 11 — WIKITABLES: table TYPES
.minerva-footer-logo {
font-size: 0 !important; /* Hide default text */
- .wikitable = NEUTRAL default: themed (frame, caption, header
tint, hairlines, hover) but free-form — columns
color: transparent !important; /* Make sure it's invisible */
flex, labels wrap, nothing frozen.
display: block !important; /* Stack vertically */
- .wikitable.fintable = FINANCIAL bundle: frozen nowrap first column +
text-align: left !important; /* Align left */
data-column width floors. The bot emits the class
margin-bottom: 20px !important;
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.
- .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-xs: 3em;
--wt-s: 6em;
--wt-m: 9em;
--wt-l: 15em;
--wt-xl: 24em;
--wt-xxl: 39em;
/* row-label indent step — the wt-indent-N classes multiply it; tunable here
(not baked inline), so a change applies to every class-based page, no re-render */
--wt-indent-step: 1.5em;
/* NB: this block is STRUCTURAL tokens only — every color token (ink,
accent, --wt-th-bg) lives in section 12's :root, the single color
authority. §11 no longer renders standalone; the sheet is managed
wholesale, so the old standalone-then-theme split is retired. */
--wt-pad-y: 0.5em;
}
}


/* 2. INSERT THE LOGO (via ::before) */
/* ── Theme: EVERY wikitable, any type ── */
.wikitable { width: 100% !important; }
.minerva-footer-logo::before {
content: "" !important;
display: block !important;


/* ── Chunk Info (summary Phase 3): per-chunk tags + data-items box.
/* DIRECT LINK TO YOUR LOGO */
Infobox geometry — narrow right float in the data voice — as the
background-image: url('https://pro-wiki.s3.eu-central-1.amazonaws.com/2776118/Logo.png');
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 {
/* DIMENSIONS */
width: 160px;
font-size: 0.85em;
border: 1px solid var(--text-dark);
height: 50px;
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,
table.wikitable > * > tr > th,
table.wikitable > * > tr > td {
border: 0; /* inner grid removed. NOT `transparent` — under border-collapse a
transparent border reveals the white table bg, which shows as white
lines over the tinted header/hover rows. border:0 = truly no line;
frame + header-divider are set explicitly on edge cells and win. */
padding: var(--wt-pad-y) 0.6em;
}
table.wikitable > * > tr > th {
background-color: var(--wt-th-bg);
color: var(--text-dark); /* header cells are emphasized (bold) → dark */
}
table.wikitable > * > tr:first-child > th,
table.wikitable > * > tr:first-child > td { border-top: 1px solid var(--text-dark); }
/* 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(--text-dark); }
/* 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 (ink) still outranks it, so a strong first row
keeps the medium frame rather than a doubled line. Collapses cleanly with the
header divider (same ink) when a strong row sits right under a header.
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
font-weight:bold), so one selector covers them all. */
table.wikitable > * > tr:has(b, strong) > th,
table.wikitable > * > tr:has(b, strong) > td {
border-top: 1px solid var(--text-dark);
}


background-repeat: no-repeat !important;
table.wikitable > tbody > tr:hover > td { background-color: #f8f9fa; }

background-size: contain !important;
background-position: left center !important;
table.wikitable td p { font-size: inherit !important; }

/* ── Column size scale: usable on ANY table type ── */
margin-bottom: 6px !important;
.wikitable th.col-xs, .wikitable td.col-xs { width: var(--wt-xs); min-width: var(--wt-xs); }
.wikitable th.col-s, .wikitable td.col-s { width: var(--wt-s); min-width: var(--wt-s); }
.wikitable th.col-m, .wikitable td.col-m { width: var(--wt-m); min-width: var(--wt-m); }
.wikitable th.col-l, .wikitable td.col-l { width: var(--wt-l); min-width: var(--wt-l); }
.wikitable th.col-xl, .wikitable td.col-xl { width: var(--wt-xl); min-width: var(--wt-xl); }
.wikitable th.col-xxl, .wikitable td.col-xxl { width: var(--wt-xxl); min-width: var(--wt-xxl); }
/* legacy marker names on published pages = aliases of s / m */
.wikitable th.col, .wikitable td.col { width: var(--wt-s); min-width: var(--wt-s); }
.wikitable th.col-wide, .wikitable td.col-wide { width: var(--wt-m); min-width: var(--wt-m); }

/* ── FINTABLE bundle — THE definition of "financial table" on this wiki.
Applies to .fintable (emitter-typed numeric-dense tables) and, via
:has(), to every already-published bot table — they all carry the
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 row-label column. white-space:normal (NOT nowrap) with a max-width
cap: a normal label keeps to one line as long as it fits (auto table layout
sizes the column to its content), but a runaway label — e.g. a long note
that ends up in the cell — WRAPS at ~2/3 of the table instead of forcing a
giant one-line column that pushes the data off-screen. overflow-wrap breaks
an unbreakable token. min-width keeps it from collapsing too narrow. */
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 {
white-space: normal;
max-width: 66%; /* hard cap: never hog more than ~2/3 */
overflow-wrap: anywhere;
min-width: 16em;
position: sticky;
left: 0;
z-index: 1;
box-shadow: 1px 0 0 var(--text-dark);
}
}
table.wikitable.fintable td:first-child,
table.wikitable:has(.col, .col-wide) td:first-child { background-color: #fff; }
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
/* 3. INSERT THE TAGLINE (via ::after) */
2 sticks exactly one xs step in. Comes AFTER the fintable bundle so
.minerva-footer-logo::after {
its column-1 width exception wins the tie. ── */
/* \A is the Newline character. Use "pre" or "pre-wrap" to render it. */
table.wikitable.wt-freeze-2 th:first-child,
content: "Empowering human excellence" !important;
table.wikitable.wt-freeze-2 td:first-child {
min-width: var(--wt-xs); /* overrides the fintable 16em label column */
/* Typography - MATCHING FOOTER LINKS */
white-space: normal;
/* Removed font-family to use system font (Roboto/San Francisco) */
position: sticky;
font-size: 0.875rem !important; /* Increased to 14px to match footer links */
left: 0;
font-weight: 700 !important;
line-height: 1.4 !important;
z-index: 1;
/* Visuals - KEEPING YOUR DARK COLOR */
color: #202122 !important;
/* Layout */
display: block !important;
white-space: pre-wrap !important;
}
}
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(--text-dark);
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); }


/* ── wt-bleed add-on: a .fintable that BREAKS OUT to the right instead of scrolling in its wrapper — it
/* ======================================================= */
differs from plain fintable ONLY in the overflow. A wide .wt-bleed table paints past the content edge at
/* FORCE SHOW HIDDEN MOBILE FOOTER LINKS */
its natural width and the PAGE gains a horizontal scroll (default MediaWiki wide-table behavior) instead
/* Minerva hides About/Disclaimers by default. */
of a per-table scrollbar. There are TWO scroll wrappers to neutralise — both via :has(…wt-bleed) +
/* This forces them to appear in the list. */
!important (which beats their inline / script-set overflow):
/* ======================================================= */
1. the emitter's inline <div style="overflow-x:auto"> (Module:TermMap table_open), and
body.skin-minerva #footer-places-about,
2. .copy-table-scroll — a SECOND scroll container the copy-table gadget injects (by JS, ~1s after
body.skin-minerva #footer-places-disclaimers {
load) as the table's DIRECT parent. Without overriding it too, the table briefly breaks out then
display: inline-block !important;
SNAPS BACK the moment the gadget wraps it.
Everything else — column widths, frame, header tint, the frozen first column — stays exactly fintable.
The TOC is in the left grid column, so a right-edge breakout never reaches it. Apply by adding `wt-bleed`
to the table class (Module:TermMap does this for the Datacheck review tables). ── */
.mw-parser-output div[style*="overflow-x"]:has(table.wikitable.wt-bleed),
.copy-table-scroll:has(table.wikitable.wt-bleed) {
overflow-x: visible !important;
}
}


@media screen and (max-width: 719px) {
/* Force paragraphs inside the navigation menu to inherit the parent font size */
table.wikitable { border: none !important; }
.navigation-menu .infobox-data p {
table.wikitable > tr > th,
font-size: 1em !important;
table.wikitable > tr > td,
margin: 0 !important;
table.wikitable > tbody > tr > th,
padding: 0 !important;
table.wikitable > tbody > tr > td {
border: 0; /* inner grid removed (border:0, not transparent) */
}
}
}


/* ======================================================= */
/* =================================================================
12. EDITORIAL DESIGN SYSTEM v12 ("flat mono")
/* GLOBAL BRANDING: DARK LINES & CLEANUP */
Appended LAST deliberately: later rules of equal specificity win,
/* ======================================================= */
so this section restyles typography / color / spacing WITHOUT
editing sections 1-11. This section is the SINGLE COLOR AUTHORITY —
every color token lives in its :root; sections 1-11 are structure.
v12: ONE font (STIX Two Text), ONE ink (#0d0d0d for all text AND
lines), coral for interaction only, square corners, flat controls.
The v11 warm-gray-ramp + serif/sans split was consolidated away
2026-07 — see git history for the old system.
================================================================= */


/* ── Webfonts: PT Serif is THE site face (static 400/700 + italics —
/* ======================================================= */
deliberately NO 600: semibold requests snap to true 700, giving
/* GLOBAL BRANDING: DARK LINES & CLEANUP */
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).
Georgia is the offline fallback. Production hardening: self-host
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";
font-style: normal;
font-weight: 400 700;
font-display: swap;
src: url(https://fonts.gstatic.com/s/stixtwotext/v18/YA9Vr02F12Xkf5whdwKf11l0p76Miw.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: italic;
font-weight: 400 700;
font-display: swap;
src: url(https://fonts.gstatic.com/s/stixtwotext/v18/YA9Lr02F12Xkf5whdwKf11l0p7u8idfU.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;
}


/* ── Design knobs — the v12 FLAT MONO system. ONE font, ONE ink, ONE
/* 1. TEXT COLORS (Headings & Titles) */
accent:
.mw-heading1, h1,
--ed-font = STIX Two Text everywhere (prose, headings, data,
.mw-heading2, h2,
chrome). There is no serif/sans split anymore.
h3, h4, h5, h6,
--text-dark = THE ink: all text AND all lines/borders/frames.
.firstHeading,
Hierarchy is carried by size, weight, and space —
.mw-page-title-main,
never by gray shades.
.page-heading,
--ed-accent = coral, INTERACTION ONLY: link-underline hover,
.section-heading,
focus rings, control hover borders.
.vector-sticky-header-context-bar-primary,
--ed-underline = the one non-ink gray: resting link underlines,
.mw-headline,
quiet by design so the coral hover reads as a jump.
.vector-pinnable-header-label {
ONE body size, ONE small size. h3+ have NO rules (h1 carries the one
color: #202122 !important;
dark title rule). Historical note: v11 ran a warm 3-text/3-line gray
ramp and a serif/sans split — collapsed 2026-07 (see git history for
the old values). ── */
:root {
--ed-font: "PT Serif", "STIX Two Text", Georgia, "Times New Roman", serif;
--text-dark: #0d0d0d; /* THE ink: all text + all lines */
--ed-underline: #ccc1b7; /* resting link underline tint */
--ed-accent: #f07662; /* house coral — interaction only */
--ed-paper: #fff; /* page canvas */
--ed-infobox-w: 18.5rem; /* infobox total width (border-box). NB: prose
is FULL WIDTH (default MediaWiki flow around
the float) — the old --ed-measure prose cap
was retired 2026-07 */
--ed-body: 1.0625rem; /* body size — 17px, user-validated with PT Serif
(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,
so the two gaps stay equal in px despite different heading
sizes); ~2x the old h3 space (was 1.8em ≈ 32px) */
--ed-list-indent: var(--ed-body); /* per-level indent = marker-to-text step, tied to the
BODY size (1em = 16px) — a clean typographic ratio that the
table's first-column labels also align to (see section 12).
Still rem-based (via --ed-body), NOT em — an em offset would
resolve against each marker's own font-size. */

/* table header fill — white: headers carry no tint; the header-row rule
+ 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: paper everywhere — page, the header band Vector
/* 2. BORDERS FOR ALL HEADINGS (Desktop & Mobile) */
paints white on its own, the TOC column, and the TOC's
/* This forces the 1px dark line and overrides the default grey */
scroll-fade overlay ── */
.mw-heading1, h1,
body, .mw-page-container { background-color: var(--ed-paper) !important; }
.mw-heading2, h2,
.vector-header-container .mw-header,
.section-heading {
.vector-header-container .vector-sticky-header {
border-bottom: 1px solid #202122 !important;
background-color: var(--ed-paper) !important;
margin-bottom: 0.6em;
}
}
#vector-toc, .vector-toc, .vector-pinned-container {
background-color: transparent !important;
}
/* Scrollbars: webkit-styled — square thumb, NO arrow buttons, transparent
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
(cost two debugging rounds). EXCEPTION — the sticky TOC scroller: Vector
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 { scrollbar-width: none !important; }
::-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(--text-dark) !important;
border-radius: 0 !important; /* square, like the buttons */
}
::-webkit-scrollbar-corner { background: transparent !important; }
/* Minerva (mobile skin) paints its own white wrappers over body */
#mw-mf-page-center, .mw-body { background-color: var(--ed-paper) !important; }
.vector-sticky-pinned-container::after {
background: linear-gradient(transparent, var(--ed-paper)) !important;
}
@media print { body, .mw-page-container { background-color: #fff !important; } }


/* ── Visitor chrome: Appearance UI hidden for EVERYONE here, re-shown
/* Special weight for the very first page heading */
for logged-in users in MediaWiki:Group-user.css (the wiki's
.mw-first-heading {
read-only-mode architecture — Group-user.css only loads when
border-bottom: 2px solid #202122 !important;
logged in, so no body-class dependency) ── */
margin-bottom: 0.5em;
.vector-appearance-landmark,
#vector-appearance-dropdown,
#vector-appearance-pinned-container,
#vector-appearance,
.vector-column-end { display: none !important; }

/* ── ONE font for everything: interface chrome, prose, and data all share
--ed-font (form controls don't inherit it — they get it explicitly
where they're styled) ── */
body { font-family: var(--ed-font); }

/* ── Tagline ("Unleashing intelligence", the .mw-logo::after): NO underline
and NO hover effect — it reads as branding, not a link (resting ink is
set in §3; the logo still navigates home on click). ── */

/* ── Logo on the TOC axis. Measured on the live DOM (1120px viewport):
TOC label x=48, header-start x=44, Vector's default .mw-logo
margin-left:20px put the logo at x=64. 44 + 4 = 48 → margin 4px.
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 —
its wrapper is #bodyContent.content) ── */
.mw-body-content,
.skin-minerva #bodyContent.content {
font-family: var(--ed-font);
font-size: var(--ed-body);
line-height: 1.6;
color: var(--text-dark);
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);
font-size: var(--ed-small);
color: var(--text-dark); /* the data voice shares the one ink */
}
}
/* lighter bold in tables: the browser default 700 (header th + the <b>/<strong>
subtotal rows) reads too heavy in the sans data voice — 600 semibold is ample
emphasis */
table.wikitable th,
table.wikitable b,
table.wikitable strong { font-weight: 600; color: var(--text-dark); } /* emphasized cells: dark + semibold */


/* ── The table BLOCK ──
/* 2.1 REMOVE VECTOR 2022 DEFAULT TITLE LINE */
1. Printed ON the paper (not white cards): surfaces transparent;
/* You asked to remove the color/transparency of the ::after element */
in a FINTABLE only the sticky first column stays opaque (it
.vector-page-titlebar::after {
must cover scrolling content) in the paper color; hover warms.
background-color: transparent !important;
2. Full frame in ink. Sides: the RIGHT rail is a plain
display: none !important;
border on the last-column cells. On a NEUTRAL table the LEFT
height: 0 !important;
rail is a plain table border (nothing is sticky); on a
FINTABLE it must be a box-shadow on the sticky first-column
cells — with border-collapse, borders on sticky cells do not
move when the cell sticks (they vanish on horizontal scroll),
but shadows travel with the cell — and the table's own 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. ── */
table.wikitable,
table.wikitable td,
table.wikitable caption { background-color: transparent; }
/* row hover comes from §11 (#f8f9fa); the frozen first column carries its
own paper bg (below) at higher specificity, so it needs its OWN hover
rule to highlight 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: #f8f9fa;
}
}


table.wikitable.fintable td:first-child,
/* 2.2 MOBILE CLEANUP (Minerva Skin) */
table.wikitable:has(.col, .col-wide) td:first-child {
/* This removes the Language/Edit buttons to create a cleaner look. */
background-color: var(--ed-paper);
.page-actions-menu {
display: none !important;
}
}
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(--text-dark), /* left rail — sticks with the cell */
1px 0 0 var(--text-dark); /* right edge of the frozen column */
}
/* LEFT + RIGHT frame edges drawn on the CELLS, matching the top/bottom
edges (section 11). The left edge MUST be on the first cell, not only
the table: with border-collapse a cell border outranks the table border.
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(--text-dark); }
.wikitable th:last-child,
.wikitable td:last-child { border-right: 1px solid var(--text-dark); }

/* row labels MEET the bullets: the first column's text starts at the SAME indent
as list text (both = --ed-list-indent), so table row-labels and bullet text read
on ONE axis. The table frame + the bullet dots already share x=0, so this lands
the second axis too. Tied to the same variable → they can never drift apart. */
.wikitable th:first-child,
.wikitable td:first-child { padding-left: var(--ed-list-indent); }
/* Row-label indent depth — a wt-indent-N class on the label cell (emitted by
wikitable.py from the INDENT_TOKEN sentinel: spreadsheet Excel-outline levels and
SEC source padding-left/nbsp). The em step lives here (--wt-indent-step) so it is
tunable without re-rendering; additive on the base indent so each depth reads
clearly deeper. `table.wikitable td.wt-indent-N` (0,0,2,2) outranks the
:first-child base (0,0,2,1); an already-published page's inline padding-left,
if any, still wins over these until it is re-rendered. */
table.wikitable td.wt-indent-1 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step)); }
table.wikitable td.wt-indent-2 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step) * 2); }
table.wikitable td.wt-indent-3 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step) * 3); }
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(--text-dark); }
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
/* 4. CONTENTS SIDEBAR (Desktop) */
every table in <div style="overflow-x:auto">): top margin gives air
h2.vector-pinnable-header-label {
before the eyebrow caption + separates consecutive tables; the scrollbar
border-bottom: none !important;
goes thin and quiet in the header-row tint */
.mw-parser-output div[style*="overflow-x"],
.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
div (a block-formatting context, so margins can't collapse through it) — zero
the inner top margin so the space before a table isn't counted twice */
.mw-parser-output div[style*="overflow-x"] > .copy-table-scroll { margin-top: 0 !important; }


/* caption = the table's TITLE in the h6 voice (bold body text, no
/* 6. FOOTER LINES (Global) */
uppercase/letter-spacing — the old eyebrow treatment is retired here). */
#footer,
table.wikitable caption {
.mw-footer,
font-family: var(--ed-font);
.minerva-footer,
font-size: var(--ed-body);
.printfooter {
font-weight: 700;
border-top: 1px solid #202122 !important;
color: var(--text-dark);
text-align: left;
padding-bottom: 0.5em; /* CALIBRATION: caption→grid air (~8.5px at 17px;
was 0.2em = too tight per user) */
}
}


/* intro sentence → SAME as body text (serif, body size, --text-dark, upright):
/* ======================================================= */
a sans lead reads oddly at the top of serif prose. The source is ''italic'',
/* HIDE FOOTER ICONS (Powered By, Hosted By, etc.) */
so we only reset font-style to upright and let the family/size/colour/line-
/* ======================================================= */
height inherit the surrounding body prose. Anchored to the generated
#footer-icons {
infobox-then-intro pattern. */
display: none !important;
.mw-parser-output > .infobox ~ p:first-of-type > i,
.mw-parser-output > table.infobox + p > i {
font-style: normal;
}
}


/* ── List geometry — ONE definition for both skins: text hangs at
/* 7. CLEAN UP MOBILE FOOTER GAPS */
--ed-list-indent per level; the markers are positioned EXACTLY
.minerva-footer .footer-content,
below (see the ::before block). !important + the Minerva-qualified
.minerva-footer .branding-box,
selectors beat section 7's mobile rules and the skin defaults;
.minerva-footer-logo,
table-cell lists keep section 11's own rule (higher specificity). ── */
#footer-info,
.mw-parser-output ul,
#footer-places {
.mw-parser-output ol,
border: none !important;
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 */
/* 8. MOBILE ICONS */
.mw-parser-output ul { margin-top: 0.4em; }
.skin-minerva .section-heading .mw-ui-icon-wikimedia-expand-small {
.mw-parser-output li { margin-bottom: 0.45em; }
filter: grayscale(1) brightness(0.2);
.mw-parser-output li li { margin-top: 0.3em; margin-bottom: 0.3em; }
.mw-parser-output li > ul { margin-top: 0.3em; }

/* 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.
ONE glyph (the round bullet) at EVERY level — depth is carried by
indentation alone (the per-level padding-left above). */
.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(--text-dark); /* markers match the body text */
font-family: var(--ed-font);
font-size: 0.95em;
line-height: 1.68;
}
}


/* page-reference superscripts — present everywhere, must whisper.
/* 9. SUBTLE UI TWEAKS */
line-height:0 stops them inflating the line box */
.mw-editsection, .mw-editsection a {
.mw-body-content sup,
color: #202122 !important;
.skin-minerva .content sup {
opacity: 0.7;
font-size: 68%;
line-height: 0;
font-family: var(--ed-font);
color: var(--text-dark);
}
}


/* ── Title block: serif display, REGULAR weight, large; the title-gap
/* ======================================================= */
knob lands its rule on the CONTENTS rule's line ── */
/* FORCE LEGACY BLUE (#0645ad) - LINKS & TOGGLES */
h1#firstHeading, .mw-first-heading {
/* ======================================================= */
font-family: var(--ed-font);
font-size: 2.4rem;
line-height: 1.15;
font-weight: 400;
letter-spacing: -0.01em;
color: var(--text-dark) !important;
border-bottom: 2px solid var(--text-dark) !important;
margin-top: var(--ed-title-gap) !important;
padding-bottom: 0.3em;
margin-bottom: 0.35em;
}
/* breadcrumb under the title rule — the shared eyebrow treatment */
#contentSub .subpages {
font-family: var(--ed-font);
font-size: var(--ed-small);
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-dark);
margin-bottom: 1.4em;
}
#contentSub .subpages a,
#contentSub .subpages a:visited { color: var(--text-dark) !important; }
/* 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
/* 1. Force Link Color (Visited, Unvisited & Toggles) */
.mw-body-content — Vector's own typography rules are
/* Overrides standard links and the collapsible "Show/Hide" text */
class-qualified (0,1,1), so bare h2/h3 selectors would LOSE.
a,
Minerva's content wrapper is .content. ── */
a:visited,
.mw-body-content h2, .mw-body-content .mw-heading2, .section-heading,
.mw-parser-output a,
.skin-minerva .content h2 {
.mw-parser-output a:visited,
font-family: var(--ed-font);
.mw-body-content a.external,
font-size: calc(var(--ed-body) * var(--ed-h-ratio) * var(--ed-h-ratio)
.mw-body-content a.external:visited,
* 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 !important; /* NO rule — size/weight/space carry the boundary;
`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);
font-size: calc(var(--ed-body) * var(--ed-h-ratio) * var(--ed-h-ratio)
* 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 rule is h1) */
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);
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);
font-size: var(--ed-body);
font-weight: 700;
color: var(--text-dark) !important;
}
/* h6 spacing: NORMAL paragraph spacing before (0.5em, Vector's p
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: 0.5em 0 0.2em !important;
}
/* pull the block right after an h6 up close, so "less space after" holds even
before a table. The emitter wraps every table in an overflow-x div (1.8em top
margin); the copy-table gadget later injects .copy-table-scroll INSIDE it
(also 1.8em) — the overflow div is a block-formatting context, so that inner
margin can't collapse away. Reset both wrappers, plus a following paragraph. */
.mw-body-content .mw-heading6 + div[style*="overflow-x"],
.mw-body-content h6 + div[style*="overflow-x"],
.mw-body-content .mw-heading6 + div[style*="overflow-x"] > .copy-table-scroll,
.mw-body-content h6 + div[style*="overflow-x"] > .copy-table-scroll,
.mw-body-content .mw-heading6 + p,
.mw-body-content h6 + p {
margin-top: 0.2em !important;
}
/* the inner spans are pinned #202122 !important by old skin CSS — make
them follow their heading's ink instead */
.mw-headline, .mw-page-title-main { color: inherit !important; }

/* ── Links: dark ink like body text — the underline alone marks them
(was FT teal; the resting tint underline still warms to coral on
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 {
.mw-collapsible-toggle-default .mw-collapsible-text {
color: #0645ad !important;
color: var(--text-dark) !important;
}
.mw-parser-output a {
text-decoration: underline;
text-decoration-color: var(--ed-underline);
text-decoration-thickness: 1px;
text-underline-offset: 0.18em;
}
.mw-parser-output a:hover {
text-decoration-color: var(--ed-accent);
text-decoration-thickness: 2px;
}
/* exceptions re-stated AFTER the generic rules so they keep winning */
a.new, a.new:visited { color: #d73333 !important; }
a.mw-ui-button, a.mw-ui-button:visited { color: #fff !important; }
.mw-editsection, .mw-editsection a, .mw-editsection a:visited {
color: var(--text-dark) !important;
text-decoration: none;
opacity: 0.7;
}
}


/* ── Focus/active states join the interactive teal — Codex paints them
/* 2. Protect Red Links (New pages) */
in its own progressive blue (#36c) otherwise. The generic
/* Keeps missing pages red (#d73333) even if visited */
.cdx-text-input rule covers the header search box; the AI chat
a.new,
input is exempted further below (its ring sits on the composer). ── */
a.new:visited {
.cdx-text-input__input:focus,
color: #d73333 !important;
.cdx-text-input__input:enabled:focus {
border-color: var(--ed-accent) !important; /* = the link hover-underline color */
box-shadow: inset 0 0 0 1px var(--ed-accent) !important;
}
}
.cdx-button:enabled:focus,
.cdx-button--fake-button:focus {
box-shadow: inset 0 0 0 2px var(--ed-accent) !important;
}
:focus-visible { outline-color: var(--ed-accent); }


/* ── Header search. Resting border / font / radius come from the GENERIC
/* 3. Protect UI Buttons */
Codex input rules below — only the search-specific pieces live here. ── */
/* Ensures text inside buttons (like 'Save changes') stays white */
/* search bar on the BODY-TEXT axis. Measured on the live DOM (1120px
a.mw-ui-button,
viewport): form x=294, title/body axis x=264 → pull 30px left (24px is
a.mw-ui-button:visited {
Codex's typeahead inset inside #p-search + 6px container offset). The
color: #fff !important;
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
/* MAIN PAGE MENU */
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-font);
--toc-header-inset: 0; /* CONTENTS label sits on the entry axis */
}


/* CONTENTS header: label + 1px ink rule on the title rule's line
.main-page-menu {
(padding-top moves the label and rule together; padding-bottom the
/* Adjusted from 2.2 to 1.8 for better visual grouping */
rule only), inset onto the number axis */
line-height: 1.8;
.vector-toc .vector-pinnable-header {
margin-bottom: 0em;
border-bottom: 1px solid var(--text-dark) !important; /* = the table header-row divider */
font-size: 1em;
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;
margin-left: var(--toc-header-inset) !important;
}
.vector-toc .vector-pinnable-header-label { /* the shared uppercase eyebrow */
font-size: var(--ed-small);
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: var(--text-dark) !important;
margin-left: 0;
}
}


/* entries: ONE ink at all levels — depth is carried by the numbers. Hover
/* ======================================================= */
feedback = the house link convention (grey underline → coral); the
/* READ PILL - INLINE STYLE */
current section = the one bold row. */
/* ======================================================= */
.vector-toc .vector-toc-link,
.read-pill {
.vector-toc .vector-toc-link:visited {
display: inline;
color: var(--text-dark) !important;
white-space: nowrap;
font-size: var(--ed-small);
text-decoration: none; /* the underline lives on the TITLE SPAN below,
/* 1. THICKER TOP PADDING */
so the depth dash marker stays bare */
/* Top: 2px | Right: 0.4em | Bottom: 1px | Left: 0.4em */
padding: 1px 0.4em 1px 0.4em;
/* 2. LIFT TEXT UP 1 PIXEL */
position: relative;
top: -1px;
/* Visuals */
border-radius: 4px;
margin: 0 0.2em 0 0;
/* Fonts */
font-size: 0.85em;
font-weight: 500;
/* Color Inheritance & Wrapping Safety */
color: #202122 !important;
-webkit-box-decoration-break: clone;
box-decoration-break: clone;
}
}
.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
TOC encodes only a compacted nesting depth (vector-toc-level-N), NOT the
original heading tag, so CSS cannot reliably target h6. */


/* lists flush on the component edge; hanging indent carried on every li */
/* Link Color Fixes (Standard, Visited & Missing) */
.vector-toc .vector-toc-contents,
.read-pill a,
.vector-toc .vector-toc-list {
.read-pill a:visited {
margin: 0;
color: #202122 !important;
padding: 0;
text-decoration: none !important;
list-style: none;
}
.vector-toc .vector-toc-list-item {
/* ROW RHYTHM: vertical spacing lives on padding-TOP (ONE gap per row) — so it
takes the FULL wikitable rhythm (2 × --wt-pad-y = the table's top+bottom cell
padding) to give the same visual gap between rows. The li is a flex ROW so
the chevron toggle sits in-flow right after the title; the sublist wraps
onto its own row below (flex-basis:100%). */
display: flex;
flex-wrap: wrap;
align-items: baseline;
padding: calc(var(--wt-pad-y) * 2) 0 0 0 !important;
margin: 0 !important;
font-size: var(--ed-small);
line-height: 1.5; /* = the infobox / wikitable line-height */
}
/* level-2+ sits flush under level-1 (markers aligned on one axis); flex-basis
100% drops the sublist onto its own row below the parent's title + chevron */
.vector-toc .vector-toc-list-item > .vector-toc-list {
flex: 0 0 100%;
margin: 0 !important;
}
}


/* HANG-UNDER-TITLE: the depth marker and the title share a flex row, so the title is
.read-pill a.new {
a wrapping block whose 2nd+ lines align under the TITLE (after the number).
color: red !important;
Because the marker is its own flex item, this holds for any marker width
padding: 0 4px;
(one dash or two), which a fixed text-indent could not. The link is a flex item
border-radius: 3px;
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. */
.vector-toc .vector-toc-link { flex: 1 1 auto; min-width: 0; }
.vector-toc .vector-toc-list-item:has(> .vector-toc-toggle) > .vector-toc-link {
max-width: calc(100% - 1.5em);
}
.vector-toc .vector-toc-text {
display: flex;
align-items: baseline;
padding: 0 !important; /* Vector ships .vector-toc-text{padding:6px 0} — 12px of
EXTRA gap per row on top of the li's rhythm padding,
which made the TOC ~25px apart vs the table's 13px.
Zeroed so the li's 2×--wt-pad-y is the ONE rhythm. */
}
/* NO section numbers — Vector ships .vector-toc-numb display:none and we no
longer re-show it. Depth is carried by TREE markers instead, generated as
the first flex item of the text row off Vector's per-level li classes:
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-level-2 > .vector-toc-link .vector-toc-text::before { width: 0.6em; }
.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 */
}
}


/* chevron: an in-flow disclosure triangle right AFTER the title — a flex item of
/* ======================================================= */
the row, baseline-aligned to the first line. The Codex icon is replaced by a
/* PRINT OPTIMIZATION: HIDE UI BUTTONS */
::before glyph switched on the expanded state; font-size:0 hides the
/* ======================================================= */
screen-reader span without removing it. All button chrome (background, border,
@media print {
focus ring) is stripped so only the bare ▸/▾ glyph ever shows. */
/* 1. Hide the 4 floating bottom buttons (Search, Home, ToC, Email) */
.vector-toc .vector-toc-toggle {
#searchIcon,
position: static !important; /* ← ADD THIS */
.branding-box,
flex: 0 0 auto;
#cps-open-toc,
margin: 0 0 0 0.35em !important;
#custom-email-btn {
display: none !important;
min-width: 0 !important;
min-height: 0 !important;
}
width: auto !important;
height: auto !important;
padding: 0 !important;
border: none !important;
background: none !important;
box-shadow: none !important; /* kill Codex's teal focus ring (the "blue rectangle") */
outline: none !important;
/* NB: do NOT put font-size:0 on the button — as a baseline-aligned flex item
that collapses its baseline to the top and floats the glyph ABOVE the line.
Keep the inherited font-size; hide the inner spans instead (below). */
}
/* Codex re-applies the ring / background on every interaction state — neutralise
them all so only the bare ▸/▾ glyph ever shows (these come AFTER the section's
.cdx-button:focus rule, so they win the tie). */
.vector-toc .vector-toc-toggle:hover,
.vector-toc .vector-toc-toggle:focus,
.vector-toc .vector-toc-toggle:focus-visible,
.vector-toc .vector-toc-toggle:active {
background: none !important;
border: none !important;
box-shadow: none !important;
outline: none !important;
}
/* hide the Codex icon span and zero the screen-reader label span (font-size:0,
not display:none, so assistive tech keeps it); the ::before glyph below is the
only visible chevron */
.vector-toc .vector-toc-toggle .vector-icon { display: none; }
.vector-toc .vector-toc-toggle > span { font-size: 0; }
.vector-toc .vector-toc-toggle::before {
content: "▸"; /* collapsed — the house triangle */
font-size: 0.65rem;
color: var(--text-dark);
}
.vector-toc .vector-toc-list-item-expanded > .vector-toc-toggle::before {
content: "▾"; /* expanded */
}


/* ── Infobox: the page's ONE white card, in the data voice; width
/* 2. Hide the ToC panel and Overlay if they happen to be open */
ENFORCED with !important so inline widths cannot break it — and
#cps-toc-panel,
pinned class-generically so ANY infobox markup (table or div)
#cps-toc-overlay {
obeys. Prose flows full-width around the float (default MediaWiki). ── */
display: none !important;
.mw-parser-output .infobox { /* class-generic: any infobox markup */
}
width: var(--ed-infobox-w) !important;
box-sizing: border-box;
}
.mw-parser-output table.infobox {
font-family: var(--ed-font);
font-size: var(--ed-small);
background-color: #fff !important;
border: 1px solid var(--text-dark) !important; /* infobox OUTER border = medium */
border-spacing: 0; /* kill §1's 3px so the row rhythm is EXACTLY the
cell padding — shared with the wikitable below */
padding: 0.55em 0.9em 0.75em;
line-height: 1.5;
}
.infobox .infobox-above { /* the shared uppercase eyebrow */
background-color: #fff !important; /* beats the template's inline #cee0f2 */
color: var(--text-dark) !important; /* beats inline color:inherit */
text-align: left !important;
font-size: var(--ed-small); /* the shared eyebrow size */
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
border-bottom: 1px solid var(--text-dark); /* header-row divider — kept LIGHT (looks good) */
padding: 0.2em 0.2em 0.55em;
}
.infobox .infobox-label {
color: var(--text-dark);
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-dark); padding: var(--wt-pad-y) 0.2em; }


/* ── Infobox BAND variant — Template:Infobox doc archive `wide=yes` wraps
/* 3. Hide the search input bar if it was left open */
the card in .ed-infobox-band. Same card language, re-flowed as a
.minerva-header .search-box {
full-width horizontal "dateline" strip for TABLE-FIRST pages
display: none !important;
(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 —
/* 3. AI ASSISTANT (AXA BRAIN) CUSTOMIZATION */
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(--text-dark);
padding: 0.2em 0 0.2em calc(var(--ed-list-indent) - 3px);
margin: 1.2em 0;
margin-left: calc(-1 * var(--ed-list-indent)) !important;
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
/* 1. GLOBAL LAYER (All Devices) */
white ground (replaces MediaWiki's gray border + #f8f9fa fill); the
/* We ONLY force the layer order here, not the position. */
image itself loses its inner border (the figure frame is the line).
/* This ensures it sits on top of your floating buttons (z-index: 1002). */
Caption in the data voice. Covers Parsoid figures + legacy .thumb. ── */
.ext-aiassistant,
.mw-parser-output figure[typeof~="mw:File/Thumb"],
.ext-aiassistant-panel {
.mw-parser-output figure[typeof~="mw:File/Frame"],
z-index: 2000 !important;
.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 */
}
}


/* ── Footer + page-bottom cleanup. Vector ships `.mw-footer li
/* 2. MOBILE ONLY: FULL SCREEN MODE */
{ font-size: 0.75em }`, which COMPOUNDS with any footer size —
/* We only force 'fixed' position on mobile to lock it to the screen. */
the rem on the li kills the compounding; footer now matches
@media screen and (max-width: 768px) {
the TOC exactly ── */
.ext-aiassistant-panel {
@media screen {
/* Force Fixed so it covers the screen regardless of scroll */
.printfooter { display: none; } /* "Retrieved from ..." clutter; stays in print */
position: fixed !important;
}
#footer, .mw-footer, .minerva-footer {
/* Override inline styles to force full width/height */
font-family: var(--ed-font);
width: 100% !important;
color: var(--text-dark);
height: 100% !important;
max-width: none !important;
border-top: 1px solid var(--text-dark) !important;
}
max-height: none !important;
#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-dark) !important; }
/* 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,
/* Pin to all 4 corners */
top: 0 !important;
teal send button (later !important wins the ties vs section 8) ── */
left: 0 !important;
.ext-aiassistant-panel { border: 1px solid var(--text-dark) !important; }
/* ONE sans for the whole panel UI (the extension ships its own stack);
right: 0 !important;
the assistant-message serif rule below this still wins for answers */
bottom: 0 !important;
.ext-aiassistant-panel,
.ext-aiassistant-panel input,
.ext-aiassistant-panel textarea,
.ext-aiassistant-panel button { font-family: var(--ed-font) !important; }
.ext-aiassistant-header { border-bottom: 1px solid var(--text-dark) !important; }
.ext-aiassistant-message-user .ext-aiassistant-message__content {
background-color: var(--text-dark) !important;
}
.ext-aiassistant-message-assistant {
font-family: var(--ed-font) !important;
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: none !important; /* the composer's own frame is the line here —
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,
.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 {
border: 1px solid var(--text-dark) !important;
border-radius: 0 !important;
box-shadow: none !important;
outline: none !important;
}
.ext-aiassistant-prompt-composer:hover {
border-color: var(--ed-accent) !important;
}
.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(--text-dark) !important;
border-color: var(--text-dark) !important;
}
.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(--text-dark) !important;
}
/* citation chips in ink, like article links */
.ext-aiassistant-cite,
.ext-aiassistant-cite a { color: var(--text-dark) !important; }


/* ── Inline footnotes ({{footnote}} → <span class="ed-fn" title="…">).
/* Reset styles for a flat app-like look */
A small dotted-underline "note" chip after the term. The note lives
border-radius: 0 !important;
in the title="" attribute, so on DESKTOP the browser's NATIVE tooltip
margin: 0 !important;
shows it on hover — and a native tooltip is rendered above the whole
page, so it can never be covered by the frozen table column or clipped
}
by the table's scroll (the bug an in-page card kept hitting). On TOUCH
devices (no hover) a CSS bubble is synthesised from attr(title) on
/* Ensure the internal chat body expands to fill the space */
tap/focus. NO JavaScript. The note is ALSO kept in a hidden
.ext-aiassistant-body {
"(footnote: …)" span so the bot reads it from the DOM (Docling ignores
height: auto !important;
title attributes) — readers and RAG see different things from one
flex-grow: 1 !important;
markup. ── */
}
.ed-fn { cursor: help; }
.ed-fn-chip::after {
content: "note";
font-family: var(--ed-font);
font-size: 0.7em;
vertical-align: super;
color: var(--text-dark);
/* the house link convention: grey resting underline → coral on hover */
text-decoration: underline;
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 */
/* ======================================================= */
.ed-fn-body { display: none; }
/* 4. AI ASSISTANT FOOTER ALIGNMENT & MAKE BUTTON CIRCLE */
/* ======================================================= */


/* The touch note banner. Created by MediaWiki:Common.js and appended to
.ext-aiassistant-footer {
<body> — so it lives in the ROOT stacking context and NO table sticky column
/* CHANGED: Align items to the middle (center) instead of top (flex-start) */
(or any overlay) can ever cover it, which a CSS ::after on the in-table cue
align-items: center !important;
could not guarantee. Full-width, pinned to the top, white on near-black. The
z-index is belt-and-suspenders; being a child of <body> is what truly wins.
Desktop keeps the browser's native title tooltip (the cue still carries
title=""); this banner only appears on touch. */
.ed-fn-banner {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 2147483647;
box-sizing: border-box;
padding: calc(0.9em + env(safe-area-inset-top)) 1.2em 0.9em;
background: rgba(20, 18, 16, 0.92); /* near-black, slightly transparent */
color: #fff;
font-family: var(--ed-font);
font-size: 0.95rem;
line-height: 1.5;
text-align: left;
/* pre-line: collapse runs of spaces but KEEP newlines, so a multi-point
footnote ("• a&#10;• b") shows each bullet on its own line. */
white-space: pre-line;
}
}


/* ── Reference-preview bubble (Popups extension; .rt-* = the Reference
/* Make the AI Assistant Send button a circle */
Tooltips gadget variant, covered in case it's the active one) on the
.ext-aiassistant-send {
theme: ink frame, square corners. The extension draws its gray outline
/* 1. Force a perfect circle shape */
as a 1px ring INSIDE box-shadow (not a border) — so the shadow is
border-radius: 50% !important;
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>).
/* 2. Force equal width and height */
A small light card beside the cue — white, coral left rule, serif — in the
width: 36px !important;
editorial voice. pointer-events:none so it never steals the hover it reports. */
height: 36px !important;
.ed-fn-popover {
min-width: 0 !important; /* Overrides Codex default "wide" button style */
position: fixed;
z-index: 2147483647;
max-width: min(28rem, 90vw);
box-sizing: border-box;
padding: 0.6em 0.8em;
background: #fff;
color: var(--text-dark);
border: 1px solid var(--text-dark); /* flat: one hairline ink frame, no
coral spine, square corners */
border-radius: 0;
box-shadow: 0 4px 16px rgba(43, 41, 38, 0.18);
font-family: var(--ed-font);
font-size: 0.9rem;
line-height: 1.45;
text-align: left;
/* pre-line: keep newlines so a multi-point footnote ("• a&#10;• b") shows
each bullet on its own line (matches .ed-fn-banner on mobile). */
white-space: pre-line;
pointer-events: none;
}


/* 3. Center the icon */
/* ── Mobile ── */
@media screen and (max-width: 768px) {
padding: 0 !important;
display: flex !important;
.mw-parser-output .infobox { width: 100% !important; } /* full-width on mobile */
h1#firstHeading, .mw-first-heading { font-size: 1.7rem; }
align-items: center !important;
/* the WHOLE ladder tightens on narrow screens via one ratio override.
justify-content: center !important;
(Was an h2-only 1.22rem override, which INVERTED the hierarchy: h3
kept its desktop size and rendered bigger than h2.) */
/* Optional: Add a subtle margin if it's too close to the text input */
:root { --ed-h-ratio: 1.08; }
margin-left: 4px !important;
.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;
}
}
}


/* ── Datacheck review controls — Module:ReportedTable status badge + action buttons ──
/* ======================================================= */
The Status column shows the stored verdict (the value); the Confirm / Reject / Correct
/* 5. AI ASSISTANT VISUAL OVERRIDES (Borders & Shadows) */
columns each hold one .rt-btn the Common.js gadget fills. Active verdict = filled. ── */
/* ======================================================= */
.rt-status {
display: inline-block;
padding: 1px 9px;
border-radius: 999px;
font-family: var(--ed-font);
font-size: 0.82em;
white-space: nowrap;
background: var(--wt-th-bg);
color: var(--text-dark);
}
.rt-status-confirmed { background: #e6f3ea; color: #137333; }
.rt-status-rejected { background: #fbeaea; color: #a3001d; }
.rt-status-overridden { background: #faf0dc; color: #8a5300; }
.rt-status-validated { background: #e6f3ea; color: #137333; }
.rt-status-redo { background: #faf0dc; color: #8a5300; }


.rt-btn {
/* 1. Main Panel: Dark Border, No Shadow */
font-family: var(--ed-font);
.ext-aiassistant-panel {
font-size: 0.95em;
border: 1px solid #202122 !important;
line-height: 1;
box-shadow: none !important;
padding: 5px 12px;
border: 1px solid var(--text-dark);
border-radius: 5px;
background: #fff;
color: var(--text-dark);
cursor: pointer;
}
}
.rt-btn:hover { background: var(--wt-th-bg); border-color: var(--text-dark); }
.rt-btn:active { transform: translateY(0.5px); }
.rt-btn.is-active.rt-btn--confirm { background: #137333; border-color: #137333; color: #fff; }
.rt-btn.is-active.rt-btn--reject { background: #a3001d; border-color: #a3001d; color: #fff; }
.rt-btn.is-active.rt-btn--override { background: #8a5300; border-color: #8a5300; color: #fff; }


/* ── Key figures box ({{Indexing}} f/v pairs, Template:Indexing): a VISUAL
/* 2. Interior Lines (Header Bottom & Footer Top) */
SIBLING of the page infobox — same width token, medium border, white
.ext-aiassistant-header {
ground, small-sans data voice, uppercase eyebrow header — but a
border-bottom: 1px solid #202122 !important;
per-section card (titled "Key facts & figures") floated beside a unit instead
of at the top of the page. Rendered as <table class="key-figures">
(NOT .wikitable: Common.css forces .wikitable{width:100% !important},
which is exactly why .infobox is also not a wikitable). Declarations
mirror .infobox / .infobox-above / .infobox-label / .infobox-data.
Emitted right after a unit's h6; prose wraps to its left. ── */
.mw-parser-output .key-figures {
box-sizing: border-box;
width: var(--ed-infobox-w);
border: 1px solid var(--text-dark); /* = infobox OUTER border (medium) */
border-collapse: separate; /* the INFOBOX box model: separate + table
padding (collapse ignores table padding) —
this is what insets the title divider from
the card edges, like DOCUMENT INFO */
border-spacing: 0; /* = .infobox (row rhythm = cell padding only) */
padding: 0.55em 0.9em 0.75em; /* = table.infobox padding */
background: #fff;
font-family: var(--ed-font);
font-size: var(--ed-small);
line-height: 1.5;
}
@media (min-width: 640px) {
.mw-parser-output .key-figures { float: right; clear: right; margin: 0.5em 0 0.5em 1em; }
}
@media (max-width: 640px) {
.mw-parser-output .key-figures { float: none; width: 100%; margin: 0.6em 0; }
}
.key-figures .key-figures-above { /* = .infobox-above eyebrow — an INSIDE cell now */
text-align: left;
color: var(--text-dark);
font-size: var(--ed-small);
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
border-bottom: 1px solid var(--text-dark); /* the ONE divider, under the title */
padding: 0.2em 0.2em 0.55em; /* = .infobox-above padding */
}
.key-figures th { /* = .infobox-label */
text-align: left;
color: var(--text-dark);
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) */
vertical-align: top;
}
.key-figures td { /* = .infobox-data (left-aligned value) */
text-align: left;
color: var(--text-dark);
padding: var(--wt-pad-y) 0.2em; /* = .infobox-data (wikitable rhythm) */
vertical-align: top;
}
}


/* ── Proofread loop — Original-transcript page furniture (Template:Pdf page,
.ext-aiassistant-footer {
Template:Fn ref, Template:Fn note, chart-description blocks). The page
border-top: 1px solid #202122 !important;
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):
/* User Message Bubble */
"[c. 20; p. 3]" LEFT-aligned on its own line above the chunk heading,
.ext-aiassistant-message-user {
p. 3 linking the Document: transcript's page anchor — same quiet
/* 1. The Light Grey Background you requested */
folio treatment as .ed-pdfpage. Left, not floated right: floats
background-color: #EAECF0 !important;
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
.ext-aiassistant-message-user {
generic "note" chip of Template:Footnote) — same hover machinery. */
border-radius: 20px !important;
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
/* Change background of the Send button ONLY when it is disabled */
(N) marker — a printed footnote block, not body prose. */
.ext-aiassistant-send:disabled {
.ed-fn-note {
background-color: #CCCCCC !important;
font-size: var(--ed-small);
line-height: 1.55;
/* Recommended: Change the border to match so it looks flat */
margin: 0.15em 0;
border-color: #CCCCCC !important;
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;
}
}

Latest revision as of 23:58, 26 July 2026

/* =================================================================
   Common.css — Global styles for all skins
   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
   (tools/wiki/pages/MediaWiki-Common.css in the repo) — no incremental
   block pastes.
   Color/typography authority: SECTION 12 owns all heading, link,
   footer, table and AI-panel colors; earlier sections are structure.
   ================================================================= */


/* =================================================================
   1. BASE MEDIAWIKI OVERRIDES (Fonts, Quotes, Math, References)
   ================================================================= */

cite, dfn { font-style: inherit; }
q { quotes: '"' '"' "'" "'"; }

blockquote {
    overflow: hidden;
    margin: 1em 0;
    padding: 0 40px;
}

small { font-size: 85%; }
.mw-body-content sub, .mw-body-content sup { font-size: 80%; }
.ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; }

/* --- Collapsible elements --- */
.client-js .collapsible:not(.mw-made-collapsible).collapsed > tbody > tr:not(:first-child),
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > p,
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > table,
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > thead + tbody,
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) tr:not(:first-child),
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) .mw-collapsible-content,
#editpage-specialchars {
    display: none;
}

.references { margin-bottom: 0.5em; }

/* --- Cite link styling --- */
span[rel="mw:referencedBy"] { counter-reset: mw-ref-linkback 0; }
span[rel="mw:referencedBy"] > a::before {
    content: counter(mw-ref-linkback, lower-alpha);
    font-size: 80%; font-weight: bold; font-style: italic;
}
a[rel="mw:referencedBy"]::before { font-weight: bold; content: "^"; }
span[rel="mw:referencedBy"]::before { content: "^ "; }

.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) {
    font-weight: normal; padding-right: 0.2em; padding-left: 0.2em;
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle { float: left; }

/* --- PDF icons --- */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
.mw-parser-output a[href*=".pdf#"].external,
.mw-parser-output a[href$=".PDF"].external,
.mw-parser-output a[href*=".PDF?"].external,
.mw-parser-output a[href*=".PDF#"].external {
    background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right;
    padding: 8px 18px 8px 0;
}

/* --- Warnings and notices --- */
.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt,
div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon {
    clear: both; margin: 0.2em 0; border: 1px solid #bb7070;
    background-color: var(--background-color-error-subtle, #ffdbdb);
    padding: 0.25em 0.9em; box-sizing: border-box;
}
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt.mw-warning-with-logexcerpt {
    border-color: #fc3; background-color: var(--background-color-warning-subtle, #fef6e7);
}

@media (min-width: 640px) {
    figure[typeof~="mw:File/Thumb"], figure[typeof~="mw:File/Frame"], .thumbinner { min-width: 100px; }
}

#mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; }

/* --- Permission groups (hidden by default) --- */
.checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show,
.patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show,
.autoconfirmed-show, .user-show { display: none; }

.ve-ui-mwNoticesPopupTool-item .editnotice-redlink,
.ve-ui-mwNoticesPopupTool-item .mbox-image,
.ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; }

ul.permissions-errors { margin: 0; }
ul.permissions-errors > li { list-style: none; }

/* --- Math rendering --- */
span.mwe-math-mathml-inline { font-size: 118%; }
.mwe-math-fallback-image-display, .mwe-math-mathml-display {
    margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em;
}
.mwe-math-mathml-display math { display: inline; }

@media screen {
    body:not(.ns-0):not(.ns-2):not(.ns-100) .gallerybox .thumb img {
        background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat;
    }
    #siteSub { display: block; }
    .references { font-size: 90%; }
}

.flaggedrevs_draft_synced, .flaggedrevs_stable_synced, #t-upload,
.mw-special-Book #coll-downloadbox { display: none; }

/* --- Infoboxes (structure only — width/border/background/font owned
       by section 12) --- */
.infobox {
    padding: 0.2em;
    line-height: 1.5em; border-spacing: 3px;
}
@media (max-width: 640px) { .infobox .nowrap { white-space: normal; } }
@media (min-width: 640px) {
    .infobox { margin: 0.5em 0 0.5em 1em; float: right; clear: right; }
}
.infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data,
.infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar,
.infobox th, .infobox td { vertical-align: top; }
.infobox-label, .infobox-data, .infobox th, .infobox td { text-align: left; }
.infobox .infobox-above, .infobox .infobox-title, .infobox caption {
    font-size: 125%; font-weight: bold; text-align: center; padding: 0.2em;
}
.infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image,
.infobox .infobox-full-data, .infobox .infobox-below { text-align: center; }
.infobox .infobox-navbar { text-align: right; }

/* --- Text utilities --- */
.nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; }
.nowrap, .nowraplinks a { white-space: nowrap; }
.wrap, .wraplinks a { white-space: normal; }

span.texhtml {
    font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif;
    font-size: 118%; line-height: 1;
    font-variant-numeric: lining-nums tabular-nums; font-kerning: none;
}
span.texhtml span.texhtml { font-size: 100%; }
@media (min-width: 640px) { span.texhtml { white-space: nowrap; } }
@media (max-width: 640px) {
    .flagicon a > img, .flagicon noscript > img { max-width: none !important; }
}
@media screen { .nochecker .gallerybox .thumb img { background-image: none; } }

/* --- YouTube embeds --- */
.mw-parser-output iframe[src*="youtube.com"],
.mw-parser-output iframe[src*="youtube-nocookie.com"] {
    width: 100% !important; max-width: 320px; height: auto !important;
    aspect-ratio: 16 / 9; display: block; margin: 0 auto;
}


/* =================================================================
   2. LAYOUT & SPACING
   ================================================================= */

/* --- Content width & readability --- */
#content {
    max-width: 900px;
    margin: 0 auto;
    line-height: 1.6;
}

/* --- Header reset (invisible fixed container for floating buttons) --- */
.header-container.header-chrome {
    position: fixed !important;
    top: 0 !important; left: 0 !important; right: 0 !important;
    height: 60px !important;
    z-index: 1000 !important;
    pointer-events: none !important;
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
}
.minerva-header {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
}

.header-container .navigation-drawer { display: none !important; }

/* --- Top margin resets (remove white gap) --- */
body.skin-minerva { padding-top: 0 !important; }

#content,
#content.mw-body,
.mw-body {
    margin-top: 0 !important;
    padding-top: 0 !important;
}

.banner-container,
#siteNotice {
    padding: 0 !important;
    margin: 0 !important;
}

.pre-content,
.page-heading,
.firstHeading {
    margin-top: 0 !important;
    padding-top: 0 !important;
}

/* Push title down so it clears the invisible header */
.pre-content.heading-holder {
    padding-top: 70px !important; /* 60px header + 10px visual space */
    display: block !important;
}

@media (prefers-reduced-motion: reduce) {
    html { scroll-behavior: auto; }
}


/* =================================================================
   3. BRANDING (Logo, Tagline — Desktop Header & Mobile Footer)
   ================================================================= */

/* --- Desktop: hide logo wordmark, inject tagline --- */
.mw-logo-container { display: none !important; }
.mw-logo-wordmark {
    display: none !important;
    visibility: hidden !important;
    width: 0 !important;
}

.mw-logo:hover,
.mw-logo:active,
.mw-logo:focus { text-decoration: none !important; }

.mw-logo::after {
    content: "Unleashing \A intelligence";
    font-size: 0.875em;
    font-weight: 700;
    line-height: 1.4;
    color: var(--text-dark) !important;
    text-decoration: none !important;
    cursor: pointer;
    display: block;
    white-space: pre;
    margin-left: 3px;
    text-align: left;
    position: relative;
    top: 3px;
}

@media screen and (max-width: 900px) {
    .mw-logo::after { display: none !important; }
}

/* --- Mobile footer: logo image + tagline --- */
.minerva-footer-logo {
    font-size: 0 !important;
    color: transparent !important;
    display: block !important;
    text-align: left !important;
    margin-bottom: 20px !important;
}

.minerva-footer-logo::before {
    content: "" !important;
    display: block !important;
    background-image: url("https://pro-wiki.s3.eu-central-1.amazonaws.com/2776118/Logo.png");
    width: 160px;
    height: 50px;
    background-repeat: no-repeat !important;
    background-size: contain !important;
    background-position: left center !important;
    margin-bottom: 6px !important;
}

.minerva-footer-logo::after {
    content: "Unleashing intelligence" !important;
    font-size: 0.875rem !important;
    font-weight: 700 !important;
    line-height: 1.4 !important;
    color: #202122 !important;
    display: block !important;
    white-space: pre-wrap !important;
}

/* Force hidden Minerva footer links to appear */
body.skin-minerva #footer-places-about,
body.skin-minerva #footer-places-disclaimers {
    display: inline-block !important;
}

/* --- Fullscreen logo (fits content width) --- */
.fullscreen-logo {
    width: 100% !important;
    padding: 0 !important;
    margin: 0 auto !important;
    max-width: 900px !important;
}

.fullscreen-logo figure,
.fullscreen-logo .mw-default-size,
.fullscreen-logo .mw-halign-center {
    max-width: 100% !important;
    width: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
}

.fullscreen-logo figure > span {
    display: block !important;
    width: 100% !important;
}

.fullscreen-logo img.mw-file-element {
    display: block !important;
    width: 100% !important;
    max-width: 100% !important;
    height: auto !important;
    min-width: 0 !important;
}


/* =================================================================
   4. CAPSACH MOBILE TOC OVERLAY
   ================================================================= */

/* --- Base state (JS toggles visibility) --- */
#cps-open-toc {
    position: fixed;
    display: none;
}

/* --- Full-screen scrim --- */
#cps-toc-overlay {
    position: fixed; inset: 0;
    background: rgba(0,0,0,0.4);
    display: none;
    z-index: 1004;
}
#cps-toc-overlay.is-open { display: block; }

/* --- Dropdown panel --- */
#cps-toc-panel {
    position: fixed;
    top: 0 !important;
    left: 0 !important;
    right: 0 !important;
    margin: 0 auto !important;
    bottom: auto !important;
    width: 100% !important;
    max-width: 900px !important;
    max-height: calc(100vh - 60px) !important;
    border-radius: 0 !important;
    background: #ffffff !important;
    color: #202122 !important;
    box-shadow: 0 10px 30px rgba(0,0,0,0.15) !important;
    padding: 15px !important;
    box-sizing: border-box !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch;
    z-index: 1005 !important;
    display: none;
}

.is-open #cps-toc-panel,
#cps-toc-overlay.is-open + #cps-toc-panel,
#cps-toc-panel[style*="display: block"] {
    display: block !important;
}

/* --- Panel header reset --- */
#cps-toc-header {
    background: transparent !important;
    padding: 0 !important;
    margin: 0 !important;
    border: none !important;
    min-height: 0 !important;
}

/* --- Title bar (grey block) --- */
#cps-toc-panel > h2,
#cps-toc-title {
    background-color: #F8F9FA !important;
    margin: -15px -15px 15px !important;
    padding: 20px 0 !important;
    border-bottom: 1px solid #eaecf0 !important;
    display: block !important;
    width: auto !important;
    text-align: center !important;
    color: #202122 !important;
    font-size: 18px !important;
    font-family: sans-serif !important;
    font-weight: bold !important;
}

/* Hide close button and duplicate headings */
#cps-toc-close,
#cps-toc-panel .toctitle,
#cps-toc-panel #mw-toc-heading,
#cps-toc-panel h2 {
    display: none !important;
}

/* --- TOC list --- */
#cps-toc-list { list-style: none; margin: 0; padding: 0; }
#cps-toc-list li { margin: 0; }

#cps-toc-list a {
    display: block; padding: 12px 10px;
    border-bottom: 1px solid #f8f8f8;
    text-decoration: none;
    color: #202122;
    font-size: 15px;
    line-height: 1.4;
}

#cps-toc-list a:active {
    background: #f0f0f0;
    color: #3366cc;
}

/* Indentation levels */
#cps-toc-list li[data-level="3"] { padding-left: 15px; }
#cps-toc-list li[data-level="4"] { padding-left: 30px; }
#cps-toc-list li[data-level="5"] { padding-left: 45px; }

/* "Contents" header link — bold, orange, dark border */
#cps-toc-list a[href="#mw-toc-heading"] {
    font-weight: bold !important;
    color: #f07662 !important;
    border-bottom: 1px solid #202122 !important;
}

/* Arrow prefix (▸) for level 2 and 3 items */
#cps-toc-list li[data-level="2"] a::before,
#cps-toc-list li[data-level="3"] a::before {
    content: "▸" !important;
    color: #202122 !important;
    margin-right: 8px;
    display: inline-block;
}

/* Remove arrow from "Contents" header (technically level 2) */
#cps-toc-list li[data-level="2"] a[href="#mw-toc-heading"]::before {
    display: none !important;
    content: "" !important;
}

/* Hide default in-article TOC */
.toc,
#toc,
.mw-parser-output #toc,
.client-js .mw-content-ltr .toc {
    display: none !important;
}


/* =================================================================
   5. FLOATING BOTTOM BUTTONS (Search, Home, ToC, Email)
   ================================================================= */

/* --- Shared styles (all 4 buttons + search input) --- */
.branding-box,
#searchIcon,
#cps-open-toc,
#custom-email-btn,
body.mw-mf-search-mode .minerva-header .search-box input {
    background-color: rgba(0, 0, 0, 0.2) !important;
    opacity: 1 !important;
    border-radius: 50% !important;
    border: none !important;
    box-shadow: none !important;
    backdrop-filter: none !important;
    pointer-events: auto !important;
    box-sizing: border-box !important;
    width: 44px !important;
    height: 44px !important;
    min-width: 44px !important;
    max-width: 44px !important;
    padding: 0 !important;
    margin: 0 !important;
    position: fixed !important;
    top: auto !important;
    bottom: calc(15px + env(safe-area-inset-bottom)) !important;
    transform: translateZ(0);
    will-change: transform;
    left: 50% !important;
    right: auto !important;
    display: flex !important;
    align-items: center;
    justify-content: center;
    z-index: 1002 !important;
}

/* --- Individual positions --- */

/* Search (far left, offset -150px) */
#searchIcon {
    margin-left: -150px !important;
    z-index: 1003 !important;
}
#searchIcon .minerva-icon {
    font-size: 24px !important;
    color: #fff !important;
    fill: #fff !important;
    filter: brightness(0) invert(1);
}

/* Home (left of center, offset -86px) */
.branding-box {
    margin-left: -86px !important;
    flex: 0 0 44px !important;
}
.branding-box::after {
    content: "⌂";
    font-size: 30px !important;
    color: #fff !important;
    -webkit-text-stroke: 0.5px #fff !important;
    margin-top: -6px !important;
    line-height: 1 !important;
}
.branding-box a { opacity: 0 !important; position: absolute; inset: 0; }

/* ToC (center, offset -22px) */
#cps-open-toc { margin-left: -22px !important; }
#cps-open-toc .icon {
    font-size: 30px !important;
    line-height: 1 !important;
    margin-bottom: 3px !important;
    color: #fff !important;
}
#cps-open-toc .label { display: none !important; }

/* Email (right of center, offset +42px) */
#custom-email-btn { margin-left: 42px !important; }
#custom-email-btn::after {
    content: "\2709\FE0E"; /* Text-mode envelope glyph */
    font-size: 26px !important;
    line-height: 1 !important;
    margin-top: -2px !important;
    color: transparent !important;
    text-shadow: 0 0 0 #fff !important;
}

/* --- Search input (expanded state) --- */
body:not(.mw-mf-search-mode) .minerva-header .search-box {
    display: none !important;
}

body.mw-mf-search-mode .minerva-header .search-box {
    display: block !important;
    position: fixed !important;
    top: 8px !important;
    height: 44px !important;
    z-index: 1001 !important;
    left: 10px !important;
    right: 10px !important;
    width: auto !important;
    padding: 0 !important; margin: 0 !important;
    background: transparent !important;
    border-radius: 0 !important;
}

body.mw-mf-search-mode .minerva-header .search-box input {
    width: 100% !important;
    font-size: 16px !important;
    color: #fff !important;
    -webkit-text-fill-color: #fff !important;
    padding-left: 55px !important;
    padding-right: 55px !important;
    position: static !important;
    margin: 0 !important;
}

.minerva-header .search-box .search-box-icon-overlay { display: none !important; }

body.mw-mf-search-mode .minerva-header .search-box input::placeholder {
    color: rgba(255, 255, 255, 0.7) !important;
    -webkit-text-fill-color: rgba(255, 255, 255, 0.7) !important;
}

.search-box .search-box-cancel {
    display: block !important;
    position: absolute !important;
    top: 0 !important; right: 0 !important;
    width: 44px !important; height: 44px !important;
    line-height: 44px !important;
    text-align: center !important;
    color: #fff !important;
    z-index: 1004 !important;
}


/* =================================================================
   6. GLOBAL HIDE (Read-Only Mode)
   Hidden for everyone; un-hidden in MediaWiki:Group-user.css
   ================================================================= */

/* --- User links (includes Vector 2022 sticky header IDs) --- */
#vector-user-links,
#p-personal,
#pt-login,
#pt-login-2,
#pt-createaccount,
#pt-createaccount-2,
#pt-userpage,
#pt-mytalk,
#pt-preferences,
#pt-watchlist,
#pt-mycontris,
#pt-logout {
    display: none !important;
}

/* --- Tools (sidebar, dropdowns, tabs) --- */
#p-tb,
#vector-page-tools,
#vector-page-tools-dropdown,
.vector-p-tb,
#ca-viewsource,
#ca-history,
#ca-talk {
    display: none !important;
}

/* --- Categories --- */
#catlinks,
.catlinks,
.mw-normal-catlinks {
    display: none !important;
}

/* --- Page actions (Language, Watch, Edit, etc.) --- */
#p-views,
.page-actions-menu__list,
.page-actions-menu {
    display: none !important;
}

/* --- Vector 2022 page toolbar & pre-content --- */
.vector-page-toolbar { display: none !important; }
.vector-body-before-content { display: none !important; }

/* --- Language selector & main menu --- */
#p-vector-user-menu-preferences { display: none !important; }
.vector-main-menu-landmark { display: none !important; }

/* --- Mobile: history bar --- */
.last-modified-bar,
a.last-modified-bar {
    display: none !important;
    visibility: hidden !important;
}
.last-modified-bar__text,
.modified-enhancement,
.minerva-icon--modified-history {
    display: none !important;
}

/* --- Mobile: user/login menu --- */
.minerva-user-menu { display: none !important; }
.toggle-list__toggle#minerva-user-menu-toggle { display: none !important; }
.minerva-icon--userAvatarOutline { display: none !important; }

/* --- Mobile: sidebar items --- */
#mw-mf-page-left a[href*="Special:RecentChanges"],
#mw-mf-page-left a[data-event-name="recentchanges"],
#mw-mf-page-left a[href*="Special:SpecialPages"],
#mw-mf-page-left a[href*="Community_portal"] {
    display: none !important;
}


/* =================================================================
   7. CHROME EXTRAS
   (Heading, link, and footer COLORS are owned by section 12 —
   this section keeps only structural chrome fixes.)
   ================================================================= */

/* Remove Vector 2022 default title underline */
.vector-page-titlebar::after {
    background-color: transparent !important;
    display: none !important;
    height: 0 !important;
}

#footer-icons { display: none !important; }

.minerva-footer .footer-content,
.minerva-footer .branding-box,
.minerva-footer-logo,
#footer-info,
#footer-places {
    border: none !important;
}

/* Mobile section expand icon */
.skin-minerva .section-heading .mw-ui-icon-wikimedia-expand-small {
    filter: grayscale(1) brightness(0.2);
}

/* --- Navigation menu paragraphs --- */
.navigation-menu .infobox-data p {
    font-size: 1em !important;
    margin: 0 !important;
    padding: 0 !important;
}

/* --- Main page menu --- */
.main-page-menu {
    line-height: 1.8;
    margin-bottom: 0;
    font-size: 1em;
}

/* --- Read pill (inline badge) --- */
.read-pill {
    display: inline;
    white-space: nowrap;
    padding: 1px 0.4em;
    position: relative;
    top: -1px;
    border-radius: 4px;
    margin: 0 0.2em 0 0;
    font-size: 0.85em;
    font-weight: 500;
    color: #202122 !important;
    -webkit-box-decoration-break: clone;
    box-decoration-break: clone;
}

.read-pill a,
.read-pill a:visited {
    color: #202122 !important;
    text-decoration: none !important;
}

.read-pill a.new {
    color: red !important;
    padding: 0 4px;
    border-radius: 3px;
}


/* =================================================================
   8. AI ASSISTANT PANEL — STRUCTURE
   (Panel colors — borders, bubbles, send button, citations — are
   owned by section 12's theme block.)
   ================================================================= */

/* --- Z-index: sits behind floating buttons (z-index 1002) --- */
.ext-aiassistant,
.ext-aiassistant-panel {
    z-index: 1001 !important;
}

.ext-aiassistant-panel { box-shadow: none !important; }

/* --- Header --- */
.ext-aiassistant-header {
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 12px !important;
    padding-right: 12px !important;
}

/* --- Message area --- */
.ext-aiassistant-body {
    padding-left: 20px !important;
    padding-right: 20px !important;
    box-sizing: border-box !important;
}

.ext-aiassistant-message {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

.ext-aiassistant-message + .ext-aiassistant-message {
    margin-top: 0 !important;
}

/* --- User bubble --- */
.ext-aiassistant-message-user {
    margin-left: 100px !important;
    margin-top: 0 !important;
    margin-bottom: 0 !important;
}

.ext-aiassistant-message-user .ext-aiassistant-message__content {
    color: white !important;
    border-radius: 18px !important;
    border: none !important;
    padding: 6px 12px !important;
}

.ext-aiassistant-message-user .ext-aiassistant-message__content p {
    color: white !important;
    margin: 0 !important;
}

/* --- Assistant typography (family/color set by section 12) --- */
.ext-aiassistant-message-assistant {
    font-size: 1em !important;
    overflow-wrap: break-word !important;
    white-space: normal !important;
    max-width: 100% !important;
}

.ext-aiassistant-message-assistant p {
    margin: 0 0 0.6em !important;
}

.ext-aiassistant-message-assistant p,
.ext-aiassistant-message-assistant li,
.ext-aiassistant-message-assistant ul,
.ext-aiassistant-message-assistant ol {
    line-height: 1.6 !important;
}

.ext-aiassistant-message-assistant ul,
.ext-aiassistant-message-assistant ol {
    margin: 0.3em 0 0.6em !important;
    margin-left: 0 !important;
    padding-top: 0 !important;
}

.ext-aiassistant-message-assistant ul {
    list-style-type: disc !important;
    padding-left: 1.2em !important;
}

.ext-aiassistant-message-assistant ul ul {
    list-style-type: disc !important;
    padding-left: 1.5em !important;
}

.ext-aiassistant-message-assistant li {
    margin-bottom: 0.2em !important;
    white-space: normal !important;
}

.ext-aiassistant-message-assistant pre,
.ext-aiassistant-message-assistant code {
    white-space: pre-wrap !important;
    word-wrap: break-word !important;
    font-family: inherit !important;
    background: transparent !important;
    border: none !important;
    padding: 0 !important;
    margin: 0 !important;
}

/* --- Action buttons (copy, source) --- */
.ext-aiassistant-message-assistant .ext-aiassistant-actions {
    display: flex !important;
    flex-direction: row-reverse !important;
}

.ext-aiassistant-message-user .ext-aiassistant-actions {
    display: flex !important;
    justify-content: flex-end !important;
}

/* --- Citations (color set by section 12) --- */
.ext-aiassistant-cite {
    line-height: 1 !important;
    font-size: 80% !important;
    vertical-align: super !important;
}

/* --- Sources --- */
.ext-aiassistant-sources {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding: 0 !important;
    margin-bottom: 12px !important;
}

/* --- "New Chat" label (color set by section 12) --- */
.ext-aiassistant-panel .cdx-button--weight-quiet:not(.cdx-button--icon-only) {
    font-size: 0 !important;
}
.ext-aiassistant-panel .cdx-button--weight-quiet:not(.cdx-button--icon-only)::before {
    content: "New" !important;
    font-size: 0.875rem !important;
    font-weight: bold !important;
    visibility: visible !important;
}

/* --- Footer + Composer --- */
.ext-aiassistant-footer {
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    padding: 0 !important;
    box-sizing: border-box !important;
}

.ext-aiassistant-prompt-composer {
    margin: 0 !important;
    width: 100% !important;
    background-color: #fff !important;
    padding: 10px 20px !important;
    border: none !important;
    border-radius: 0 !important;
}

.ext-aiassistant-prompt-composer__toolbar {
    display: flex !important;
    align-items: center !important;
}

/* --- Send button (shape; colors set by section 12) --- */
.ext-aiassistant-prompt-composer__send {
    border-radius: 50% !important;
    width: 32px !important;
    height: 32px !important;
    min-width: 0 !important;
    padding: 0 !important;
    display: flex !important;
    align-items: center !important;
    justify-content: center !important;
    margin-left: 4px !important;
}

.ext-aiassistant-prompt-composer__send:disabled .cdx-icon svg {
    fill: #72777d !important;
}


/* =================================================================
   9. RESPONSIVE OVERRIDES
   ================================================================= */

/* --- Mobile (max-width: 768px) --- */
@media screen and (max-width: 768px) {
    /* AI assistant: fullscreen mode */
    .ext-aiassistant-panel {
        position: fixed !important;
        box-sizing: border-box !important;
        width: 100% !important;
        height: 100% !important;
        max-width: none !important;
        max-height: none !important;
        top: 0 !important;
        left: 0 !important;
        right: 0 !important;
        bottom: 0 !important;
        border-radius: 0 !important;
        margin: 0 !important;
    }
    .ext-aiassistant-body {
        height: auto !important;
        flex-grow: 1 !important;
    }
    /* Push input above sticky buttons */
    .ext-aiassistant-footer {
        padding-bottom: calc(70px + env(safe-area-inset-bottom)) !important;
    }

    /* Prevent iOS zoom on AI input */
    .ext-aiassistant-panel input,
    .ext-aiassistant-panel textarea,
    .ext-aiassistant-panel .cdx-text-input__input {
        font-size: 16px !important;
    }

    /* Prevent horizontal scroll */
    html, body {
        overflow-x: hidden !important;
        width: 100% !important;
        position: relative;
    }

    /* Hide AI shortcut hint */
    .ext-aiassistant-shortcut-hint { display: none !important; }
}

/* --- Tablet (min-width: 768px) --- */
@media screen and (min-width: 768px) {
    /* Keep ToC button visible above panel overlays */
    #cps-open-toc {
        visibility: visible !important;
        z-index: 9999 !important;
    }
}

/* --- Desktop (min-width: 1000px) --- */
@media screen and (min-width: 1000px) {
    /* Wider content column */
    #content { max-width: 1200px !important; }

    /* Match logo to wider content */
    .fullscreen-logo { max-width: 100% !important; }
    .fullscreen-logo img.mw-file-element {
        max-width: min(100%, 1200px) !important;
        margin: 0 auto !important;
    }

    /* Hide ToC button on desktop Vector 2022 (full sidebar available) */
    body.skin-vector-2022 #cps-open-toc { display: none !important; }
}


/* =================================================================
   10. PRINT STYLES
   ================================================================= */

@media print {

    /* --- Hide floating buttons, overlays, and AI assistant --- */
    #searchIcon,
    .branding-box,
    #cps-open-toc,
    #custom-email-btn,
    #cps-toc-panel,
    #cps-toc-overlay,
    .minerva-header .search-box,
    .ext-aiassistant,
    .ext-aiassistant-panel,
    .ext-aiassistant-trigger {
        display: none !important;
    }

    /* --- Hide standard MediaWiki UI elements to free up space --- */
    #mw-navigation,
    #footer,
    .printfooter,
    .mw-editsection {
        display: none !important;
    }

    /* --- Font consistency for lists --- */
    .mw-parser-output ul,
    .mw-parser-output ol,
    .mw-parser-output li {
        font-family: inherit !important;
    }

    /* --- Remove underlines specifically from internal links in print --- */
    .mw-parser-output a:not(.external),
    .mw-parser-output a:not(.external):visited {
        text-decoration: none !important;
    }
}


/* ============================================================================
   SECTION 11 — WIKITABLES: table TYPES
   - .wikitable           = NEUTRAL default: themed (frame, caption, header
                            tint, hairlines, hover) but free-form — columns
                            flex, labels wrap, nothing frozen.
   - .wikitable.fintable  = FINANCIAL bundle: frozen nowrap first column +
                            data-column width floors. The bot emits the class
                            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.
   - .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-xs: 3em;
  --wt-s: 6em;
  --wt-m: 9em;
  --wt-l: 15em;
  --wt-xl: 24em;
  --wt-xxl: 39em;
  /* row-label indent step — the wt-indent-N classes multiply it; tunable here
     (not baked inline), so a change applies to every class-based page, no re-render */
  --wt-indent-step: 1.5em;
  /* NB: this block is STRUCTURAL tokens only — every color token (ink,
     accent, --wt-th-bg) lives in section 12's :root, the single color
     authority. §11 no longer renders standalone; the sheet is managed
     wholesale, so the old standalone-then-theme split is retired. */
  --wt-pad-y: 0.5em;
}

/* ── 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,
table.wikitable > * > tr > th,
table.wikitable > * > tr > td {
    border: 0;   /* inner grid removed. NOT `transparent` — under border-collapse a
                    transparent border reveals the white table bg, which shows as white
                    lines over the tinted header/hover rows. border:0 = truly no line;
                    frame + header-divider are set explicitly on edge cells and win. */
    padding: var(--wt-pad-y) 0.6em;
}
table.wikitable > * > tr > th {
    background-color: var(--wt-th-bg);
    color: var(--text-dark);   /* header cells are emphasized (bold) → dark */
}
table.wikitable > * > tr:first-child > th,
table.wikitable > * > tr:first-child > td { border-top: 1px solid var(--text-dark); }
/* 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(--text-dark); }
/* 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 (ink) still outranks it, so a strong first row
   keeps the medium frame rather than a doubled line. Collapses cleanly with the
   header divider (same ink) when a strong row sits right under a header.
   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
   font-weight:bold), so one selector covers them all. */
table.wikitable > * > tr:has(b, strong) > th,
table.wikitable > * > tr:has(b, strong) > td {
    border-top: 1px solid var(--text-dark);
}

table.wikitable > tbody > tr:hover > td { background-color: #f8f9fa; }

table.wikitable td p { font-size: inherit !important; }

/* ── Column size scale: usable on ANY table type ── */
.wikitable th.col-xs,  .wikitable td.col-xs  { width: var(--wt-xs);  min-width: var(--wt-xs); }
.wikitable th.col-s,   .wikitable td.col-s   { width: var(--wt-s);   min-width: var(--wt-s); }
.wikitable th.col-m,   .wikitable td.col-m   { width: var(--wt-m);   min-width: var(--wt-m); }
.wikitable th.col-l,   .wikitable td.col-l   { width: var(--wt-l);   min-width: var(--wt-l); }
.wikitable th.col-xl,  .wikitable td.col-xl  { width: var(--wt-xl);  min-width: var(--wt-xl); }
.wikitable th.col-xxl, .wikitable td.col-xxl { width: var(--wt-xxl); min-width: var(--wt-xxl); }
/* legacy marker names on published pages = aliases of s / m */
.wikitable th.col,      .wikitable td.col      { width: var(--wt-s); min-width: var(--wt-s); }
.wikitable th.col-wide, .wikitable td.col-wide { width: var(--wt-m); min-width: var(--wt-m); }

/* ── FINTABLE bundle — THE definition of "financial table" on this wiki.
      Applies to .fintable (emitter-typed numeric-dense tables) and, via
      :has(), to every already-published bot table — they all carry the
      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 row-label column. white-space:normal (NOT nowrap) with a max-width
   cap: a normal label keeps to one line as long as it fits (auto table layout
   sizes the column to its content), but a runaway label — e.g. a long note
   that ends up in the cell — WRAPS at ~2/3 of the table instead of forcing a
   giant one-line column that pushes the data off-screen. overflow-wrap breaks
   an unbreakable token. min-width keeps it from collapsing too narrow. */
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 {
    white-space: normal;
    max-width: 66%;                 /* hard cap: never hog more than ~2/3 */
    overflow-wrap: anywhere;
    min-width: 16em;
    position: sticky;
    left: 0;
    z-index: 1;
    box-shadow: 1px 0 0 var(--text-dark);
}
table.wikitable.fintable td:first-child,
table.wikitable:has(.col, .col-wide) td:first-child { background-color: #fff; }
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(--text-dark);
    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); }

/* ── wt-bleed add-on: a .fintable that BREAKS OUT to the right instead of scrolling in its wrapper — it
      differs from plain fintable ONLY in the overflow. A wide .wt-bleed table paints past the content edge at
      its natural width and the PAGE gains a horizontal scroll (default MediaWiki wide-table behavior) instead
      of a per-table scrollbar. There are TWO scroll wrappers to neutralise — both via :has(…wt-bleed) +
      !important (which beats their inline / script-set overflow):
        1. the emitter's inline <div style="overflow-x:auto"> (Module:TermMap table_open), and
        2. .copy-table-scroll — a SECOND scroll container the copy-table gadget injects (by JS, ~1s after
           load) as the table's DIRECT parent. Without overriding it too, the table briefly breaks out then
           SNAPS BACK the moment the gadget wraps it.
      Everything else — column widths, frame, header tint, the frozen first column — stays exactly fintable.
      The TOC is in the left grid column, so a right-edge breakout never reaches it. Apply by adding `wt-bleed`
      to the table class (Module:TermMap does this for the Datacheck review tables). ── */
.mw-parser-output div[style*="overflow-x"]:has(table.wikitable.wt-bleed),
.copy-table-scroll:has(table.wikitable.wt-bleed) {
  overflow-x: visible !important;
}

@media screen and (max-width: 719px) {
    table.wikitable { border: none !important; }
    table.wikitable > tr > th,
    table.wikitable > tr > td,
    table.wikitable > tbody > tr > th,
    table.wikitable > tbody > tr > td {
        border: 0;   /* inner grid removed (border:0, not transparent) */
    }
}

/* =================================================================
   12. EDITORIAL DESIGN SYSTEM v12 ("flat mono")
   Appended LAST deliberately: later rules of equal specificity win,
   so this section restyles typography / color / spacing WITHOUT
   editing sections 1-11. This section is the SINGLE COLOR AUTHORITY —
   every color token lives in its :root; sections 1-11 are structure.
   v12: ONE font (STIX Two Text), ONE ink (#0d0d0d for all text AND
   lines), coral for interaction only, square corners, flat controls.
   The v11 warm-gray-ramp + serif/sans split was consolidated away
   2026-07 — see git history for the old system.
   ================================================================= */

/* ── Webfonts: PT Serif is THE site face (static 400/700 + italics —
      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).
      Georgia is the offline fallback. Production hardening: self-host
      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";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(https://fonts.gstatic.com/s/stixtwotext/v18/YA9Vr02F12Xkf5whdwKf11l0p76Miw.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: italic;
  font-weight: 400 700;
  font-display: swap;
  src: url(https://fonts.gstatic.com/s/stixtwotext/v18/YA9Lr02F12Xkf5whdwKf11l0p7u8idfU.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;
}

/* ── Design knobs — the v12 FLAT MONO system. ONE font, ONE ink, ONE
      accent:
      --ed-font      = STIX Two Text everywhere (prose, headings, data,
                       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 shades.
      --ed-accent    = coral, INTERACTION ONLY: link-underline hover,
                       focus rings, control hover borders.
      --ed-underline = the one non-ink gray: resting link underlines,
                       quiet by design so the coral hover reads as a jump.
      ONE body size, ONE small size. h3+ have NO rules (h1 carries the one
      dark title rule). Historical note: v11 ran a warm 3-text/3-line gray
      ramp and a serif/sans split — collapsed 2026-07 (see git history for
      the old values). ── */
:root {
  --ed-font: "PT Serif", "STIX Two Text", Georgia, "Times New Roman", serif;
  --text-dark: #0d0d0d;          /* THE ink: all text + all lines */
  --ed-underline: #ccc1b7;       /* resting link underline tint */
  --ed-accent: #f07662;          /* house coral — interaction only */
  --ed-paper: #fff;              /* page canvas */
  --ed-infobox-w: 18.5rem;       /* infobox total width (border-box). NB: prose
                                    is FULL WIDTH (default MediaWiki flow around
                                    the float) — the old --ed-measure prose cap
                                    was retired 2026-07 */
  --ed-body: 1.0625rem;          /* body size — 17px, user-validated with PT Serif
                                    (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,
                                    so the two gaps stay equal in px despite different heading
                                    sizes); ~2x the old h3 space (was 1.8em ≈ 32px) */
  --ed-list-indent: var(--ed-body); /* per-level indent = marker-to-text step, tied to the
                                    BODY size (1em = 16px) — a clean typographic ratio that the
                                    table's first-column labels also align to (see section 12).
                                    Still rem-based (via --ed-body), NOT em — an em offset would
                                    resolve against each marker's own font-size. */

  /* table header fill — white: headers carry no tint; the header-row rule
     + 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: paper everywhere — page, the header band Vector
      paints white on its own, the TOC column, and the TOC's
      scroll-fade overlay ── */
body, .mw-page-container { background-color: var(--ed-paper) !important; }
.vector-header-container .mw-header,
.vector-header-container .vector-sticky-header {
  background-color: var(--ed-paper) !important;
}
#vector-toc, .vector-toc, .vector-pinned-container {
  background-color: transparent !important;
}
/* Scrollbars: webkit-styled — square thumb, NO arrow buttons, transparent
   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
   (cost two debugging rounds). EXCEPTION — the sticky TOC scroller: Vector
   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 { scrollbar-width: none !important; }
::-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(--text-dark) !important;
  border-radius: 0 !important;        /* square, like the buttons */
}
::-webkit-scrollbar-corner { background: transparent !important; }
/* Minerva (mobile skin) paints its own white wrappers over body */
#mw-mf-page-center, .mw-body { background-color: var(--ed-paper) !important; }
.vector-sticky-pinned-container::after {
  background: linear-gradient(transparent, var(--ed-paper)) !important;
}
@media print { body, .mw-page-container { background-color: #fff !important; } }

/* ── Visitor chrome: Appearance UI hidden for EVERYONE here, re-shown
      for logged-in users in MediaWiki:Group-user.css (the wiki's
      read-only-mode architecture — Group-user.css only loads when
      logged in, so no body-class dependency) ── */
.vector-appearance-landmark,
#vector-appearance-dropdown,
#vector-appearance-pinned-container,
#vector-appearance,
.vector-column-end { display: none !important; }

/* ── ONE font for everything: interface chrome, prose, and data all share
      --ed-font (form controls don't inherit it — they get it explicitly
      where they're styled) ── */
body { font-family: var(--ed-font); }

/* ── Tagline ("Unleashing intelligence", the .mw-logo::after): NO underline
      and NO hover effect — it reads as branding, not a link (resting ink is
      set in §3; the logo still navigates home on click). ── */

/* ── Logo on the TOC axis. Measured on the live DOM (1120px viewport):
      TOC label x=48, header-start x=44, Vector's default .mw-logo
      margin-left:20px put the logo at x=64. 44 + 4 = 48 → margin 4px.
      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 —
      its wrapper is #bodyContent.content) ── */
.mw-body-content,
.skin-minerva #bodyContent.content {
  font-family: var(--ed-font);
  font-size: var(--ed-body);
  line-height: 1.6;
  color: var(--text-dark);
  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);
  font-size: var(--ed-small);
  color: var(--text-dark);   /* the data voice shares the one ink */
}
/* lighter bold in tables: the browser default 700 (header th + the <b>/<strong>
   subtotal rows) reads too heavy in the sans data voice — 600 semibold is ample
   emphasis */
table.wikitable th,
table.wikitable b,
table.wikitable strong { font-weight: 600; color: var(--text-dark); }  /* emphasized cells: dark + semibold */

/* ── 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 scrolling content) in the paper color; hover warms.
      2. Full frame in ink. Sides: the RIGHT rail is a plain
         border on the last-column cells. On a NEUTRAL table the LEFT
         rail is a plain table border (nothing is sticky); on a
         FINTABLE it must be a box-shadow on the sticky first-column
         cells — with border-collapse, borders on sticky cells do not
         move when the cell sticks (they vanish on horizontal scroll),
         but shadows travel with the cell — and the table's own 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. ── */
table.wikitable,
table.wikitable td,
table.wikitable caption { background-color: transparent; }
/* row hover comes from §11 (#f8f9fa); the frozen first column carries its
   own paper bg (below) at higher specificity, so it needs its OWN hover
   rule to highlight 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: #f8f9fa;
}

table.wikitable.fintable td: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(--text-dark),   /* left rail — sticks with the cell */
              1px 0 0 var(--text-dark);          /* right edge of the frozen column */
}
/* LEFT + RIGHT frame edges drawn on the CELLS, matching the top/bottom
   edges (section 11). The left edge MUST be on the first cell, not only
   the table: with border-collapse a cell border outranks the table border.
   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(--text-dark); }
.wikitable th:last-child,
.wikitable td:last-child { border-right: 1px solid var(--text-dark); }

/* row labels MEET the bullets: the first column's text starts at the SAME indent
   as list text (both = --ed-list-indent), so table row-labels and bullet text read
   on ONE axis. The table frame + the bullet dots already share x=0, so this lands
   the second axis too. Tied to the same variable → they can never drift apart. */
.wikitable th:first-child,
.wikitable td:first-child { padding-left: var(--ed-list-indent); }
/* Row-label indent depth — a wt-indent-N class on the label cell (emitted by
   wikitable.py from the INDENT_TOKEN sentinel: spreadsheet Excel-outline levels and
   SEC source padding-left/nbsp). The em step lives here (--wt-indent-step) so it is
   tunable without re-rendering; additive on the base indent so each depth reads
   clearly deeper. `table.wikitable td.wt-indent-N` (0,0,2,2) outranks the
   :first-child base (0,0,2,1); an already-published page's inline padding-left,
   if any, still wins over these until it is re-rendered. */
table.wikitable td.wt-indent-1 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step)); }
table.wikitable td.wt-indent-2 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step) * 2); }
table.wikitable td.wt-indent-3 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step) * 3); }
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(--text-dark); }
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: 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
   div (a block-formatting context, so margins can't collapse through it) — zero
   the inner top margin so the space before a table isn't counted twice */
.mw-parser-output div[style*="overflow-x"] > .copy-table-scroll { margin-top: 0 !important; }

/* caption = the table's TITLE in the h6 voice (bold body text, no
   uppercase/letter-spacing — the old eyebrow treatment is retired here). */
table.wikitable caption {
  font-family: var(--ed-font);
  font-size: var(--ed-body);
  font-weight: 700;
  color: var(--text-dark);
  text-align: left;
  padding-bottom: 0.5em;   /* CALIBRATION: caption→grid air (~8.5px at 17px;
                              was 0.2em = too tight per user) */
}

/* intro sentence → SAME as body text (serif, body size, --text-dark, upright):
   a sans lead reads oddly at the top of serif prose. The source is ''italic'',
   so we only reset font-style to upright and let the family/size/colour/line-
   height inherit the surrounding body prose. Anchored to the generated
   infobox-then-intro pattern. */
.mw-parser-output > .infobox ~ p:first-of-type > i,
.mw-parser-output > table.infobox + p > i {
  font-style: normal;
}

/* ── 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 */
.mw-parser-output ul { margin-top: 0.4em; }
.mw-parser-output li { margin-bottom: 0.45em; }
.mw-parser-output li li { margin-top: 0.3em; margin-bottom: 0.3em; }
.mw-parser-output li > ul { margin-top: 0.3em; }

/* 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.
   ONE glyph (the round bullet) at EVERY level — depth is carried by
   indentation alone (the per-level padding-left above). */
.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(--text-dark);   /* markers match the body text */
  font-family: var(--ed-font);
  font-size: 0.95em;
  line-height: 1.68;
}

/* page-reference superscripts — present everywhere, must whisper.
   line-height:0 stops them inflating the line box */
.mw-body-content sup,
.skin-minerva .content sup {
  font-size: 68%;
  line-height: 0;
  font-family: var(--ed-font);
  color: var(--text-dark);
}

/* ── Title block: serif display, REGULAR weight, large; the title-gap
      knob lands its rule on the CONTENTS rule's line ── */
h1#firstHeading, .mw-first-heading {
  font-family: var(--ed-font);
  font-size: 2.4rem;
  line-height: 1.15;
  font-weight: 400;
  letter-spacing: -0.01em;
  color: var(--text-dark) !important;
  border-bottom: 2px solid var(--text-dark) !important;
  margin-top: var(--ed-title-gap) !important;
  padding-bottom: 0.3em;
  margin-bottom: 0.35em;
}
/* breadcrumb under the title rule — the shared eyebrow treatment */
#contentSub .subpages {
  font-family: var(--ed-font);
  font-size: var(--ed-small);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-dark);
  margin-bottom: 1.4em;
}
#contentSub .subpages a,
#contentSub .subpages a:visited { color: var(--text-dark) !important; }
/* 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
      .mw-body-content — Vector's own typography rules are
      class-qualified (0,1,1), so bare h2/h3 selectors would LOSE.
      Minerva's content wrapper is .content. ── */
.mw-body-content h2, .mw-body-content .mw-heading2, .section-heading,
.skin-minerva .content h2 {
  font-family: var(--ed-font);
  font-size: calc(var(--ed-body) * var(--ed-h-ratio) * var(--ed-h-ratio)
                                 * 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 !important; /* NO rule — size/weight/space carry the boundary;
                                     `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);
  font-size: calc(var(--ed-body) * var(--ed-h-ratio) * var(--ed-h-ratio)
                                 * 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 rule is h1) */
  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);
  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);
  font-size: var(--ed-body);
  font-weight: 700;
  color: var(--text-dark) !important;
}
/* h6 spacing: NORMAL paragraph spacing before (0.5em, Vector's p
   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: 0.5em 0 0.2em !important;
}
/* pull the block right after an h6 up close, so "less space after" holds even
   before a table. The emitter wraps every table in an overflow-x div (1.8em top
   margin); the copy-table gadget later injects .copy-table-scroll INSIDE it
   (also 1.8em) — the overflow div is a block-formatting context, so that inner
   margin can't collapse away. Reset both wrappers, plus a following paragraph. */
.mw-body-content .mw-heading6 + div[style*="overflow-x"],
.mw-body-content h6 + div[style*="overflow-x"],
.mw-body-content .mw-heading6 + div[style*="overflow-x"] > .copy-table-scroll,
.mw-body-content h6 + div[style*="overflow-x"] > .copy-table-scroll,
.mw-body-content .mw-heading6 + p,
.mw-body-content h6 + p {
  margin-top: 0.2em !important;
}
/* the inner spans are pinned #202122 !important by old skin CSS — make
   them follow their heading's ink instead */
.mw-headline, .mw-page-title-main { color: inherit !important; }

/* ── Links: dark ink like body text — the underline alone marks them
      (was FT teal; the resting tint underline still warms to coral on
      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(--text-dark) !important;
}
.mw-parser-output a {
  text-decoration: underline;
  text-decoration-color: var(--ed-underline);
  text-decoration-thickness: 1px;
  text-underline-offset: 0.18em;
}
.mw-parser-output a:hover {
  text-decoration-color: var(--ed-accent);
  text-decoration-thickness: 2px;
}
/* exceptions re-stated AFTER the generic rules so they keep winning */
a.new, a.new:visited { color: #d73333 !important; }
a.mw-ui-button, a.mw-ui-button:visited { color: #fff !important; }
.mw-editsection, .mw-editsection a, .mw-editsection a:visited {
  color: var(--text-dark) !important;
  text-decoration: none;
  opacity: 0.7;
}

/* ── Focus/active states join the interactive teal — Codex paints them
      in its own progressive blue (#36c) otherwise. The generic
      .cdx-text-input rule covers the header search box; the AI chat
      input is exempted further below (its ring sits on the composer). ── */
.cdx-text-input__input:focus,
.cdx-text-input__input:enabled:focus {
  border-color: var(--ed-accent) !important;   /* = the link hover-underline color */
  box-shadow: inset 0 0 0 1px var(--ed-accent) !important;
}
.cdx-button:enabled:focus,
.cdx-button--fake-button:focus {
  box-shadow: inset 0 0 0 2px var(--ed-accent) !important;
}
:focus-visible { outline-color: var(--ed-accent); }

/* ── 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-font);
  --toc-header-inset: 0;   /* CONTENTS label sits on the entry axis */
}

/* 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(--text-dark) !important;   /* = the table header-row divider */
  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;
  margin-left: var(--toc-header-inset) !important;
}
.vector-toc .vector-pinnable-header-label {   /* the shared uppercase eyebrow */
  font-size: var(--ed-small);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--text-dark) !important;
  margin-left: 0;
}

/* entries: ONE ink at all levels — depth is carried by the numbers. Hover
   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-dark) !important;
  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
   TOC encodes only a compacted nesting depth (vector-toc-level-N), NOT the
   original heading tag, so CSS cannot reliably target h6. */

/* lists flush on the component edge; hanging indent carried on every li */
.vector-toc .vector-toc-contents,
.vector-toc .vector-toc-list {
  margin: 0;
  padding: 0;
  list-style: none;
}
.vector-toc .vector-toc-list-item {
  /* ROW RHYTHM: vertical spacing lives on padding-TOP (ONE gap per row) — so it
     takes the FULL wikitable rhythm (2 × --wt-pad-y = the table's top+bottom cell
     padding) to give the same visual gap between rows. The li is a flex ROW so
     the chevron toggle sits in-flow right after the title; the sublist wraps
     onto its own row below (flex-basis:100%). */
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  padding: calc(var(--wt-pad-y) * 2) 0 0 0 !important;
  margin: 0 !important;
  font-size: var(--ed-small);
  line-height: 1.5;                /* = the infobox / wikitable line-height */
}
/* level-2+ sits flush under level-1 (markers aligned on one axis); flex-basis
   100% drops the sublist onto its own row below the parent's title + chevron */
.vector-toc .vector-toc-list-item > .vector-toc-list {
  flex: 0 0 100%;
  margin: 0 !important;
}

/* HANG-UNDER-TITLE: the depth marker and the title share a flex row, so the title is
   a wrapping block whose 2nd+ lines align under the TITLE (after the number).
   Because the marker is its own flex item, this holds for any marker width
   (one dash or two), which a fixed text-indent could not. The link is a flex item
   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. */
.vector-toc .vector-toc-link { flex: 1 1 auto; min-width: 0; }
.vector-toc .vector-toc-list-item:has(> .vector-toc-toggle) > .vector-toc-link {
  max-width: calc(100% - 1.5em);
}
.vector-toc .vector-toc-text {
  display: flex;
  align-items: baseline;
  padding: 0 !important;   /* Vector ships .vector-toc-text{padding:6px 0} — 12px of
                              EXTRA gap per row on top of the li's rhythm padding,
                              which made the TOC ~25px apart vs the table's 13px.
                              Zeroed so the li's 2×--wt-pad-y is the ONE rhythm. */
}
/* NO section numbers — Vector ships .vector-toc-numb display:none and we no
   longer re-show it. Depth is carried by TREE markers instead, generated as
   the first flex item of the text row off Vector's per-level li classes:
   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-level-2 > .vector-toc-link .vector-toc-text::before { width: 0.6em; }
.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 */
}

/* chevron: an in-flow disclosure triangle right AFTER the title — a flex item of
   the row, baseline-aligned to the first line. The Codex icon is replaced by a
   ::before glyph switched on the expanded state; font-size:0 hides the
   screen-reader span without removing it. All button chrome (background, border,
   focus ring) is stripped so only the bare ▸/▾ glyph ever shows. */
.vector-toc .vector-toc-toggle {
  position: static !important;   /* ← ADD THIS */
  flex: 0 0 auto;
  margin: 0 0 0 0.35em !important;
  min-width: 0 !important;
  min-height: 0 !important;
  width: auto !important;
  height: auto !important;
  padding: 0 !important;
  border: none !important;
  background: none !important;
  box-shadow: none !important;    /* kill Codex's teal focus ring (the "blue rectangle") */
  outline: none !important;
  /* NB: do NOT put font-size:0 on the button — as a baseline-aligned flex item
     that collapses its baseline to the top and floats the glyph ABOVE the line.
     Keep the inherited font-size; hide the inner spans instead (below). */
}
/* Codex re-applies the ring / background on every interaction state — neutralise
   them all so only the bare ▸/▾ glyph ever shows (these come AFTER the section's
   .cdx-button:focus rule, so they win the tie). */
.vector-toc .vector-toc-toggle:hover,
.vector-toc .vector-toc-toggle:focus,
.vector-toc .vector-toc-toggle:focus-visible,
.vector-toc .vector-toc-toggle:active {
  background: none !important;
  border: none !important;
  box-shadow: none !important;
  outline: none !important;
}
/* hide the Codex icon span and zero the screen-reader label span (font-size:0,
   not display:none, so assistive tech keeps it); the ::before glyph below is the
   only visible chevron */
.vector-toc .vector-toc-toggle .vector-icon { display: none; }
.vector-toc .vector-toc-toggle > span { font-size: 0; }
.vector-toc .vector-toc-toggle::before {
  content: "▸";                 /* collapsed — the house triangle */
  font-size: 0.65rem;
  color: var(--text-dark);
}
.vector-toc .vector-toc-list-item-expanded > .vector-toc-toggle::before {
  content: "▾";                 /* expanded */
}

/* ── Infobox: the page's ONE white card, in the data voice; width
      ENFORCED with !important so inline widths cannot break it — and
      pinned class-generically so ANY infobox markup (table or div)
      obeys. Prose flows full-width around the float (default MediaWiki). ── */
.mw-parser-output .infobox {        /* class-generic: any infobox markup */
  width: var(--ed-infobox-w) !important;
  box-sizing: border-box;
}
.mw-parser-output table.infobox {
  font-family: var(--ed-font);
  font-size: var(--ed-small);
  background-color: #fff !important;
  border: 1px solid var(--text-dark) !important;   /* infobox OUTER border = medium */
  border-spacing: 0;            /* kill §1's 3px so the row rhythm is EXACTLY the
                                   cell padding — shared with the wikitable below */
  padding: 0.55em 0.9em 0.75em;
  line-height: 1.5;
}
.infobox .infobox-above {                  /* the shared uppercase eyebrow */
  background-color: #fff !important;       /* beats the template's inline #cee0f2 */
  color: var(--text-dark) !important;   /* beats inline color:inherit */
  text-align: left !important;
  font-size: var(--ed-small);                      /* the shared eyebrow size */
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--text-dark);   /* header-row divider — kept LIGHT (looks good) */
  padding: 0.2em 0.2em 0.55em;
}
.infobox .infobox-label {
  color: var(--text-dark);
  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-dark); padding: var(--wt-pad-y) 0.2em; }

/* ── 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(--text-dark);
  padding: 0.2em 0 0.2em calc(var(--ed-list-indent) - 3px);
  margin: 1.2em 0;
  margin-left: calc(-1 * var(--ed-list-indent)) !important;
  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 */
}

/* ── Footer + page-bottom cleanup. Vector ships `.mw-footer li
      { font-size: 0.75em }`, which COMPOUNDS with any footer size —
      the rem on the li kills the compounding; footer now matches
      the TOC exactly ── */
@media screen {
  .printfooter { display: none; }          /* "Retrieved from ..." clutter; stays in print */
}
#footer, .mw-footer, .minerva-footer {
  font-family: var(--ed-font);
  color: var(--text-dark);
  border-top: 1px solid var(--text-dark) !important;
}
#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-dark) !important; }
/* 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(--text-dark) !important; }
/* ONE sans for the whole panel UI (the extension ships its own stack);
   the assistant-message serif rule below this still wins for answers */
.ext-aiassistant-panel,
.ext-aiassistant-panel input,
.ext-aiassistant-panel textarea,
.ext-aiassistant-panel button { font-family: var(--ed-font) !important; }
.ext-aiassistant-header { border-bottom: 1px solid var(--text-dark) !important; }
.ext-aiassistant-message-user .ext-aiassistant-message__content {
  background-color: var(--text-dark) !important;
}
.ext-aiassistant-message-assistant {
  font-family: var(--ed-font) !important;
  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: none !important;   /* the composer's own frame is the line here —
                                    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,
.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 {
  border: 1px solid var(--text-dark) !important;
  border-radius: 0 !important;
  box-shadow: none !important;
  outline: none !important;
}
.ext-aiassistant-prompt-composer:hover {
  border-color: var(--ed-accent) !important;
}
.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(--text-dark) !important;
  border-color: var(--text-dark) !important;
}
.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(--text-dark) !important;
}
/* citation chips in ink, like article links */
.ext-aiassistant-cite,
.ext-aiassistant-cite a { color: var(--text-dark) !important; }

/* ── Inline footnotes ({{footnote}} → <span class="ed-fn" title="…">).
      A small dotted-underline "note" chip after the term. The note lives
      in the title="" attribute, so on DESKTOP the browser's NATIVE tooltip
      shows it on hover — and a native tooltip is rendered above the whole
      page, so it can never be covered by the frozen table column or clipped
      by the table's scroll (the bug an in-page card kept hitting). On TOUCH
      devices (no hover) a CSS bubble is synthesised from attr(title) on
      tap/focus. NO JavaScript. The note is ALSO kept in a hidden
      "(footnote: …)" span so the bot reads it from the DOM (Docling ignores
      title attributes) — readers and RAG see different things from one
      markup. ── */
.ed-fn { cursor: help; }
.ed-fn-chip::after {
  content: "note";
  font-family: var(--ed-font);
  font-size: 0.7em;
  vertical-align: super;
  color: var(--text-dark);
  /* the house link convention: grey resting underline → coral on hover */
  text-decoration: underline;
  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 */
.ed-fn-body { display: none; }

/* The touch note banner. Created by MediaWiki:Common.js and appended to
   <body> — so it lives in the ROOT stacking context and NO table sticky column
   (or any overlay) can ever cover it, which a CSS ::after on the in-table cue
   could not guarantee. Full-width, pinned to the top, white on near-black. The
   z-index is belt-and-suspenders; being a child of <body> is what truly wins.
   Desktop keeps the browser's native title tooltip (the cue still carries
   title=""); this banner only appears on touch. */
.ed-fn-banner {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 2147483647;
  box-sizing: border-box;
  padding: calc(0.9em + env(safe-area-inset-top)) 1.2em 0.9em;
  background: rgba(20, 18, 16, 0.92);   /* near-black, slightly transparent */
  color: #fff;
  font-family: var(--ed-font);
  font-size: 0.95rem;
  line-height: 1.5;
  text-align: left;
  /* pre-line: collapse runs of spaces but KEEP newlines, so a multi-point
     footnote ("• a&#10;• b") shows each bullet on its own line. */
  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>).
   A small light card beside the cue — white, coral left rule, serif — in the
   editorial voice. pointer-events:none so it never steals the hover it reports. */
.ed-fn-popover {
  position: fixed;
  z-index: 2147483647;
  max-width: min(28rem, 90vw);
  box-sizing: border-box;
  padding: 0.6em 0.8em;
  background: #fff;
  color: var(--text-dark);
  border: 1px solid var(--text-dark);   /* flat: one hairline ink frame, no
                                           coral spine, square corners */
  border-radius: 0;
  box-shadow: 0 4px 16px rgba(43, 41, 38, 0.18);
  font-family: var(--ed-font);
  font-size: 0.9rem;
  line-height: 1.45;
  text-align: left;
  /* pre-line: keep newlines so a multi-point footnote ("• a&#10;• b") shows
     each bullet on its own line (matches .ed-fn-banner on mobile). */
  white-space: pre-line;
  pointer-events: none;
}

/* ── Mobile ── */
@media screen and (max-width: 768px) {
  .mw-parser-output .infobox { width: 100% !important; }  /* full-width on mobile */
  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;
  }
}

/* ── Datacheck review controls — Module:ReportedTable status badge + action buttons ──
   The Status column shows the stored verdict (the value); the Confirm / Reject / Correct
   columns each hold one .rt-btn the Common.js gadget fills. Active verdict = filled. ── */
.rt-status {
  display: inline-block;
  padding: 1px 9px;
  border-radius: 999px;
  font-family: var(--ed-font);
  font-size: 0.82em;
  white-space: nowrap;
  background: var(--wt-th-bg);
  color: var(--text-dark);
}
.rt-status-confirmed  { background: #e6f3ea; color: #137333; }
.rt-status-rejected   { background: #fbeaea; color: #a3001d; }
.rt-status-overridden { background: #faf0dc; color: #8a5300; }
.rt-status-validated  { background: #e6f3ea; color: #137333; }
.rt-status-redo       { background: #faf0dc; color: #8a5300; }

.rt-btn {
  font-family: var(--ed-font);
  font-size: 0.95em;
  line-height: 1;
  padding: 5px 12px;
  border: 1px solid var(--text-dark);
  border-radius: 5px;
  background: #fff;
  color: var(--text-dark);
  cursor: pointer;
}
.rt-btn:hover  { background: var(--wt-th-bg); border-color: var(--text-dark); }
.rt-btn:active { transform: translateY(0.5px); }
.rt-btn.is-active.rt-btn--confirm  { background: #137333; border-color: #137333; color: #fff; }
.rt-btn.is-active.rt-btn--reject   { background: #a3001d; border-color: #a3001d; color: #fff; }
.rt-btn.is-active.rt-btn--override { background: #8a5300; border-color: #8a5300; color: #fff; }

/* ── Key figures box ({{Indexing}} f/v pairs, Template:Indexing): a VISUAL
      SIBLING of the page infobox — same width token, medium border, white
      ground, small-sans data voice, uppercase eyebrow header — but a
      per-section card (titled "Key facts & figures") floated beside a unit instead
      of at the top of the page. Rendered as <table class="key-figures">
      (NOT .wikitable: Common.css forces .wikitable{width:100% !important},
      which is exactly why .infobox is also not a wikitable). Declarations
      mirror .infobox / .infobox-above / .infobox-label / .infobox-data.
      Emitted right after a unit's h6; prose wraps to its left. ── */
.mw-parser-output .key-figures {
  box-sizing: border-box;
  width: var(--ed-infobox-w);
  border: 1px solid var(--text-dark);        /* = infobox OUTER border (medium) */
  border-collapse: separate;                   /* the INFOBOX box model: separate + table
                                                  padding (collapse ignores table padding) —
                                                  this is what insets the title divider from
                                                  the card edges, like DOCUMENT INFO */
  border-spacing: 0;                           /* = .infobox (row rhythm = cell padding only) */
  padding: 0.55em 0.9em 0.75em;                /* = table.infobox padding */
  background: #fff;
  font-family: var(--ed-font);
  font-size: var(--ed-small);
  line-height: 1.5;
}
@media (min-width: 640px) {
  .mw-parser-output .key-figures { float: right; clear: right; margin: 0.5em 0 0.5em 1em; }
}
@media (max-width: 640px) {
  .mw-parser-output .key-figures { float: none; width: 100%; margin: 0.6em 0; }
}
.key-figures .key-figures-above {               /* = .infobox-above eyebrow — an INSIDE cell now */
  text-align: left;
  color: var(--text-dark);
  font-size: var(--ed-small);
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--text-dark);   /* the ONE divider, under the title */
  padding: 0.2em 0.2em 0.55em;                  /* = .infobox-above padding */
}
.key-figures th {                               /* = .infobox-label */
  text-align: left;
  color: var(--text-dark);
  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) */
  vertical-align: top;
}
.key-figures td {                               /* = .infobox-data (left-aligned value) */
  text-align: left;
  color: var(--text-dark);
  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;
}