MediaWiki:Common.css: Difference between revisions

Content deleted Content added
No edit summary
Tag: Manual revert
No edit summary
 
(494 intermediate revisions by the same user not shown)
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; }
q { quotes: '"' '"' "'" "'"; }
Line 17 ⟶ 28:
.ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; }
 
/* --- Collapsible elements logic--- */
.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;
Line 30 ⟶ 41:
.references { margin-bottom: 0.5em; }
 
/* --- Cite Linklink styling 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) {
Line 43 ⟶ 54:
}
.mw-collapsible-leftside-toggle .mw-collapsible-toggle { float: left; }
.wikitable td ul, .wikitable td ol, .wikitable td dl { text-align: left; }
 
/* --- PDF Iconsicons --- */
.mw-parser-output a[href$=".pdf"].external,
.mw-parser-output a[href*=".pdf?"].external,
Line 56 ⟶ 66:
}
 
/* --- Warnings and Noticesnotices --- */
.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt,
div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon {
Line 68 ⟶ 78:
 
@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; }
 
/* Hide--- Permission Groupsgroups (hidden by default) --- */
.checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show,
.patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show,
Line 84 ⟶ 94:
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 {
Line 101 ⟶ 113:
.mw-special-Book #coll-downloadbox { display: none; }
 
/* --- Infoboxes (structure only — width/border/background/font owned
/* Infoboxes */
by section 12) --- */
.infobox {
border: 1px solid #a2a9b1; color: black; padding: 0.2em;
font-size: 88%; line-height: 1.5em; border-spacing: 3px;
}
@media screen(max-width: 640px) { .infobox .nowrap { backgroundwhite-colorspace: #f8f9fanormal; } }
@media (max-width: 640px) { .infobox { width: 100%; } .infobox .nowrap { white-space: normal; } }
@media (min-width: 640px) {
.infobox { margin: 0.5em 0 0.5em 1em; float: right; clear: right; width: 22em; }
}
.infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data,
Line 122 ⟶ 134:
.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; }
.nowrap, .nowraplinks a { white-space: nowrap; }
Line 141 ⟶ 151:
@media screen { .nochecker .gallerybox .thumb img { background-image: none; } }
 
/* --- YouTube Embedsembeds --- */
.mw-parser-output iframe[src*="youtube.com"],
.mw-parser-output iframe[src*="youtube-nocookie.com"] {
Line 148 ⟶ 158:
}
 
/* ======================================================= */
/* RESTORED CAPSACH TOC (Fixed: No "X", Clear Title) */
/* ======================================================= */
 
/* =================================================================
/* CapSach — Mobile TOC overlay (all skins) */
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 (Click outside to close)--- */
#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; }
 
/* --- THEDropdown DROPDOWN PANELpanel --- */
#cps-toc-panel {
position: fixed;
top: 0 !important;
left: 0 !important;
/* POSITION: 60px from top (Below Buttons) */
top right: 60px0 !important;
margin: 0 auto !important;
bottom: auto !important;
/* FULL WIDTH */
left width: 0100% !important;
right max-width: 0900px !important;
bottom max-height: autocalc(100vh - 60px) !important;
border-radius: 0 !important;
width background: 100%#ffffff !important;
max-width color: 100%#202122 !important;
box-shadow: 0 10px 30px rgba(0,0,0,0.15) !important;
padding: 15px !important;
/* HEIGHT CONSTRAINT (Ad Safety) */
box-sizing: border-box !important;
/* CHANGED: Increased gap to 100px to avoid bottom ads/screen edge */
max-height: calc(100vh overflow-y: 150px)auto !important;
-webkit-overflow-scrolling: touch;
 
z-index: 1005 !important;
/* APPEARANCE */
display: none;
/* CHANGED: Removed rounded corners (was 12px) */
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;
/* SCROLLING */
overflow-y: auto !important;
-webkit-overflow-scrolling: touch;
/* VISIBILITY */
z-index: 1005 !important;
display: none;
}
 
.is-open #cps-toc-panel,
/* Logic to show panel */
.is-open #cps-toc-panel,
#cps-toc-overlay.is-open + #cps-toc-panel,
#cps-toc-panel[style*="display: block"] {
Line 213 ⟶ 375:
}
 
/* --- 1.Panel RESETheader THE CONTAINER (Fixes the "part above" issue)reset --- */
/* We remove all spacing/color from the wrapper so it disappears */
#cps-toc-header {
background: transparent !important;
Line 220 ⟶ 381:
margin: 0 !important;
border: none !important;
min-height: 0 !important; /* Ensures it takes no space if empty */
}
 
/* --- 2.Title STYLEbar THE(grey TITLE TEXT AS THE GREY BLOCKblock) --- */
#cps-toc-panel > h2,
/* We target the h2 directly so the color sticks to the text */
#cps-toc-panel > h2,
#cps-toc-title {
/* THE BACKGROUND COLOR */
background-color: #F8F9FA !important;
margin: -15px -15px 15px !important;
padding: 20px 0 !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 */
}
 
/* HIDEHide THEclose CLOSEbutton BUTTONand ("X")duplicate headings */
#cps-toc-close {,
#cps-toc-panel .toctitle,
display: none !important;
#cps-toc-panel #mw-toc-heading,
#cps-toc-panel h2 {
display: none !important;
}
 
/* --- LISTTOC STYLINGlist --- */
#cps-toc-list { list-style: none; margin: 0; padding: 0; }
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" REMOVEDheader THElink IPAD HIDINGbold, RULEorange, HEREdark ---border */
#cps-toc-list a[href="#mw-toc-heading"] {
/* (The @media min-width 768px block was deleted to allow TOC on iPad) */
font-weight: bold !important;
color: #f07662 !important;
border-bottom: 1px solid #202122 !important;
}
 
/* Arrow prefix (▸) for level 2 and 3 items */
@media (prefers-reduced-motion: reduce) {
#cps-toc-list li[data-level="2"] a::before,
html { scroll-behavior: auto; }
#cps-toc-list li[data-level="3"] a::before {
content: "▸" !important;
color: #202122 !important;
margin-right: 8px;
display: inline-block;
}
 
/* FIX:Remove HIDEarrow DUPLICATEfrom "CONTENTSContents" TITLEheader IN(technically MOBILElevel TOC2) */
#cps-toc-list li[data-level="2"] a[href="#mw-toc-heading"]::before {
#cps-toc-panel .toctitle,
#cps-toc-panel #mw-toc-heading,
#cps-toc-panel h2 {
display: none !important;
content: "" !important;
}
 
/* Hide default in-article TOC */
/* ======================================================= */
.toc,
/* 2. GLOBAL HIDE (READ-ONLY MODE) */
#toc,
/* These elements are hidden for everyone by default. */
.mw-parser-output #toc,
/* They are UNHIDDEN in MediaWiki:Group-user.css */
.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
================================================================= */
 
/* HIDE--- USERUser LINKSlinks (Includesincludes StickyVector Header2022 IDssticky forheader Vector 2022IDs) --- */
#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,
Line 320 ⟶ 619:
}
 
/* HIDE--- TOOLSTools (Sidebarsidebar, Dropdownsdropdowns, Tabstabs) --- */
#p-tb,
#p-tb, /* Toolbox */
#vector-page-tools, /* Vector 22 Sidebar */
#vector-page-tools-dropdown, /* Vector 22 Dropdown */
.vector-p-tb,
#ca-viewsource,
Line 331 ⟶ 630:
}
 
/* HIDE--- CATEGORIESCategories --- */
#catlinks,
.catlinks,
Line 338 ⟶ 637:
}
 
/* --- Page actions (Language, Watch, Edit, etc.) --- */
/* ======================================================= */
#p-views,
/* FORCE HIDE MOBILE HISTORY BAR */
.page-actions-menu__list,
/* Placed in Common.css to ensure it loads on all devices */
.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 --- */
/* Target the container class from your HTML */
.last-modified-bar,
a.last-modified-bar {
Line 349 ⟶ 658:
visibility: hidden !important;
}
 
/* Target the text wrapper explicitly */
.last-modified-bar__text,
.modified-enhancement {,
display: none !important;
}
 
/* Target the specific clock icon found inside that button */
.minerva-icon--modified-history {
display: none !important;
}
 
/* --- Mobile: user/login menu --- */
/* ======================================================= */
.minerva-user-menu { display: none !important; }
/* HIDE MOBILE USER/LOGIN MENU (Wrapper Method) */
.toggle-list__toggle#minerva-user-menu-toggle { display: none !important; }
/* ======================================================= */
.minerva-icon--userAvatarOutline { display: none !important; }
 
/* Target--- theMobile: mainsidebar containeritems div--- */
#mw-mf-page-left a[href*="Special:RecentChanges"],
.minerva-user-menu {
#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;
}
 
/* Backup: Target the toggle button specifically */
.toggle-list__toggle#minerva-user-menu-toggle {
display: none !important;
}
 
/* =================================================================
/* Backup: Target the icon inside */
7. CHROME EXTRAS
.minerva-icon--userAvatarOutline {
(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; }
/* ======================================================= */
/* HIDE MOBILE SIDEBAR ITEMS */
/* ======================================================= */
 
.minerva-footer .footer-content,
/* 1. Hide "Recent Changes" */
.minerva-footer .branding-box,
#mw-mf-page-left a[href*="Special:RecentChanges"],
.minerva-footer-logo,
#mw-mf-page-left a[data-event-name="recentchanges"] {
#footer-info,
display: none !important;
#footer-places {
border: none !important;
}
 
/* 2.Mobile Hidesection "Specialexpand Pages"icon */
.skin-minerva .section-heading .mw-ui-icon-wikimedia-expand-small {
#mw-mf-page-left a[href*="Special:SpecialPages"] {
filter: grayscale(1) brightness(0.2);
display: none !important;
}
 
/* --- Navigation menu paragraphs --- */
/* 3. Hide "Community Portal" */
.navigation-menu .infobox-data p {
/* Matches the URL: index.php?title=...Community_portal */
font-size: 1em !important;
#mw-mf-page-left a[href*="Community_portal"] {
displaymargin: none0 !important;
padding: 0 !important;
}
 
/* --- Main page menu --- */
/* ======================================================= */
.main-page-menu {
/* HIDE VECTOR 2022 PAGE TOOLBAR & PRE-CONTENT */
line-height: 1.8;
/* (Restored for logged-in users in MediaWiki:Group-user.css) */
margin-bottom: 0;
/* ======================================================= */
font-size: 1em;
}
 
/* --- Read pill (inline badge) --- */
/* Hides the tabs (Read, Edit, History) and the "Tools" dropdown */
.read-pill {
.vector-page-toolbar {
display: none !importantinline;
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,
/* Hides the "From [Sitename]" text and page status indicators */
.read-pill a:visited {
.vector-body-before-content {
displaycolor: none#202122 !important;
text-decoration: none !important;
}
 
.read-pill a.new {
/* ======================================================= */
color: red !important;
/* HIDE LANGUAGE SELECTOR MENU (Global) */
padding: 0 4px;
/* ======================================================= */
border-radius: 3px;
#p-vector-user-menu-preferences {
display: none !important;
}
 
 
/* Hides the top-left container (Main Menu / Hamburger Icon) */
/* =================================================================
.vector-main-menu-landmark {
8. AI ASSISTANT PANEL — STRUCTURE
display: none !important;
(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; }
/* ======================================================= */
/* 1. DESKTOP STICKY HEADER (Vector 2022 Skin) */
/* ======================================================= */
/* This part works perfectly, as confirmed. */
 
/* --- Header --- */
.vector-header-container {
.ext-aiassistant-header {
position: fixed !important;
topmargin-left: 0 !important;
leftmargin-right: 0 !important;
rightpadding-left: 012px !important;
padding-right: 12px !important;
width: 100%;
z-index: 1000;
background-color: #fff;
box-shadow: 0 1px 2px rgba(0,0,0,0.1);
}
 
/* --- Message area --- */
/* Pushes article content down so it isn't hidden behind the fixed header */
.ext-aiassistant-body {
body.skin-vector-2022 {
padding-topleft: 60px20px !important;
padding-right: 20px !important;
box-sizing: border-box !important;
}
 
.mw-page-container {
.ext-aiassistant-message {
margin-top: 10px;
margin-left: 0 !important;
margin-right: 0 !important;
}
 
.ext-aiassistant-message + .ext-aiassistant-message {
/* ======================================================= */
margin-top: 0 !important;
/* 2. TOP FLOATING SQUARES (44px | #F8F9FA Tone) */
}
/* ======================================================= */
 
/* --- A.User HEADER RESET (Invisible Container)bubble --- */
.ext-aiassistant-message-user {
.header-container.header-chrome {
positionmargin-left: fixed100px !important;
margin-top: 0 !important; left: 0 !important; right: 0 !important;
heightmargin-bottom: 60px0 !important;
z-index: 1000 !important;
background: transparent !important;
border: none !important;
box-shadow: none !important;
pointer-events: none !important;
transform: none !important;
transition: none !important;
overflow: visible !important;
}
 
.ext-aiassistant-message-user .ext-aiassistant-message__content {
/* Push content down */
body.skin-minerva { padding-top color: 60pxwhite !important; }
.mw-body { margin border-topradius: 10px18px !important; }
border: none !important;
padding: 6px 12px !important;
}
 
.ext-aiassistant-message-user .ext-aiassistant-message__content p {
/* Hide default elements */
.header-container .navigation-drawer { display color: nonewhite !important; }
 
/* --- B. COMMON SQUARE STYLE (0.03 Transparency for #F8F9FA) --- */
.branding-box,
#searchIcon,
#cps-open-toc,
body.mw-mf-search-mode .minerva-header .search-box input {
/* 3% Black = ~#F8F9FA on white */
background-color: rgba(0, 0, 0, 0.1) !important;
/* Force Full Opacity & Strip Defaults */
opacity: 1 !important;
background-image: none !important;
-webkit-appearance: none !important;
border: none !important;
box-shadow: none !important;
backdrop-filter: none !important;
border-radius: 8px !important;
pointer-events: auto !important;
/* STANDARD 44px SIZING */
box-sizing: border-box !important;
width: 44px !important;
height: 44px !important;
padding: 0 !important;
margin: 0 !important;
}
 
/* --- C.Assistant BUTTONtypography 1:(family/color SEARCHset TRIGGERby (TOPsection LEFT12) --- */
.ext-aiassistant-message-assistant {
#searchIcon {
positionfont-size: fixed1em !important;
overflow-wrap: break-word !important;
white-space: normal !important;
/* ALIGNMENT: 8px Top */
topmax-width: 8px100% !important;
left: 10px !important;
right: auto !important;
/* FORCE SIZE RESET */
min-width: 0 !important;
min-height: 0 !important;
max-width: 44px !important;
max-height: 44px !important;
z-index: 1003 !important;
display: flex !important; align-items: center; justify-content: center;
}
 
.ext-aiassistant-message-assistant p {
/* Search Icon */
margin: 0 0 0.6em !important;
#searchIcon .minerva-icon {
font-size: 24px !important;
color: #fff !important;
fill: #fff !important;
opacity: 1 !important;
filter: brightness(0) invert(1);
margin: 0 !important;
}
 
.ext-aiassistant-message-assistant p,
/* --- D. BUTTON 2: TOC (RIGHT - 100px SPACE) --- */
.ext-aiassistant-message-assistant li,
#cps-open-toc {
.ext-aiassistant-message-assistant ul,
display: flex !important;
.ext-aiassistant-message-assistant ol {
position: fixed !important;
topline-height: 8px1.6 !important;
/* Position: 100px from right edge */
right: 100px !important;
left: auto !important; bottom: auto !important;
z-index: 1002 !important;
color: #fff !important;
align-items: center; justify-content: center;
}
 
.ext-aiassistant-message-assistant ul,
/* TOC Icon */
.ext-aiassistant-message-assistant ol {
#cps-open-toc .icon {
font-sizemargin: 30px0.3em 0 0.6em !important;
/* fontmargin-weightleft: 9000 !important; Matches thickness */
padding-top: 0 !important;
/* FIX: Force line-height to be tight to the icon */
line-height: 1 !important;
/* FIX: Pushes the icon UP by adding invisible space below it */
margin-bottom: 3px !important;
}
 
.ext-aiassistant-message-assistant ul {
/* FIX: Ensure no text label appears in button */
#cps-open-toc .label { display list-style-type: nonedisc !important; }
padding-left: 1.2em !important;
}
 
.ext-aiassistant-message-assistant ul ul {
/* --- E. BUTTON 3: HOME (LEFT OF TOC) --- */
list-style-type: disc !important;
.branding-box {
positionpadding-left: fixed1.5em !important;
top: 8px !important;
/* Position: 100px (Space) + 44px (TOC) + 10px (Gap) */
right: 154px !important;
left: auto !important;
/* FIX: Force Square Shape on iPad/PC */
/* This overrides the skin's "Tablet Mode" resizing */
min-width: 0 !important;
max-width: 44px !important;
width: 44px !important;
z-index: 1002 !important;
display: flex !important;
align-items: center;
justify-content: center;
}
 
.ext-aiassistant-message-assistant li {
/* 1. The Home Icon (Bold & White) */
margin-bottom: 0.2em !important;
.branding-box::after {
white-space: normal !important;
content: "⌂";
font-size: 30px !important;
color: #fff !important;
/* CHANGED: Reduced from 1px to 0.5px for a cleaner look */
-webkit-text-stroke: 0.5px #fff !important;
margin-top: -6px !important;
display: block !important;
line-height: 1 !important;
}
 
.ext-aiassistant-message-assistant pre,
/* 2. The Link Overlay */
.ext-aiassistant-message-assistant code {
.branding-box a {
positionwhite-space: absolutepre-wrap !important;
topword-wrap: 0 !important; left: 0break-word !important;
widthfont-family: 100% !important; height: 100%inherit !important;
opacitybackground: 0transparent !important;
z-indexborder: 2none !important;
padding: 0 !important;
margin: 0 !important;
}
.branding-box a * { display: none !important; }
.branding-box a::before { display: none !important; }
 
/* --- F.Action THEbuttons SEARCH(copy, INPUTsource) --- */
.ext-aiassistant-message-assistant .ext-aiassistant-actions {
display: flex !important;
flex-direction: row-reverse !important;
}
 
.ext-aiassistant-message-user .ext-aiassistant-actions {
/* 1. Hide initially */
display: flex !important;
body:not(.mw-mf-search-mode) .minerva-header .search-box {
displayjustify-content: noneflex-end !important;
}
 
/* --- Citations (color set by section 12) --- */
/* 2. Position Wrapper */
.ext-aiassistant-cite {
body.mw-mf-search-mode .minerva-header .search-box {
displayline-height: block1 !important;
positionfont-size: fixed80% !important;
topvertical-align: 8pxsuper !important;
}
height: 44px !important;
 
z-index: 1001 !important;
/* --- Sources --- */
.ext-aiassistant-sources {
left: 10px !important;
right: 10px !important;
width: auto !important;
padding: 0 !important; margin: 0 !important;
background: transparent !important;
border-radius: 0none !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;
}
 
/* 3.--- StyleFooter Input+ PillComposer --- */
.ext-aiassistant-footer {
body.mw-mf-search-mode .minerva-header .search-box input {
widthdisplay: 100%flex !important;
heightalign-items: 44pxcenter !important;
borderjustify-radiuscontent: 8pxcenter !important;
padding: 0 !important;
box-sizing: border-box !important;
/* Background matches buttons */
background-color: rgba(0, 0, 0, 0.03) !important;
color: #fff !important;
-webkit-text-fill-color: #fff !important;
font-size: 16px !important;
/* PADDING: 44px (Button) + 11px (Gap) */
padding-left: 55px !important;
padding-right: 55px !important;
margin: 0 !important;
}
 
.ext-aiassistant-prompt-composer {
/* 4. Hide Inner Icon */
margin: 0 !important;
.minerva-header .search-box .search-box-icon-overlay {
displaywidth: none100% !important;
background-color: #fff !important;
padding: 10px 20px !important;
border: none !important;
border-radius: 0 !important;
}
 
.ext-aiassistant-prompt-composer__toolbar {
/* 5. Placeholder */
display: flex !important;
body.mw-mf-search-mode .minerva-header .search-box input::placeholder {
coloralign-items: rgba(255, 255, 255, 0.7)center !important;
-webkit-text-fill-color: rgba(255, 255, 255, 0.7) !important;
}
 
/* --- Send button (shape; colors set by section 12) --- */
/* 6. Cancel "X" Button */
.ext-aiassistant-prompt-composer__send {
.search-box .search-box-cancel {
displayborder-radius: block50% !important;
positionwidth: absolute32px !important;
topheight: 032px !important;
rightmin-width: 0 !important;
widthpadding: 44px0 !important;
heightdisplay: 44pxflex !important;
linealign-heightitems: 44pxcenter !important;
textjustify-aligncontent: center !important;
colormargin-left: #fff4px !important;
z-index: 1004 !important;
}
 
.ext-aiassistant-prompt-composer__send:disabled .cdx-icon svg {
/* ======================================================= */
fill: #72777d !important;
/* HIDE PAGE ACTIONS MENU (Language, Watch, Edit, etc.) */
/* ======================================================= */
#p-views,
.page-actions-menu__list {
display: none !important;
}
 
 
/* ======================================================= */
/* =================================================================
/* HIDE STANDARD "FIXED" TOC (Force Sticky Button Only) */
9. RESPONSIVE OVERRIDES
/* ======================================================= */
================================================================= */
/* This removes the default TOC box inside the article text */
 
.toc,
/* --- Mobile (max-width: 768px) --- */
#toc,
@media screen and (max-width: 768px) {
.mw-parser-output #toc,
/* AI assistant: fullscreen mode */
.client-js .mw-content-ltr .toc {
.ext-aiassistant-panel {
display: none !important;
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) --- */
/* ======================================================= */
/* FORCE STICKY TOC ON IPAD / TABLET */
/* ======================================================= */
@media screen and (min-width: 768px) {
/* Keep ToC button visible above panel overlays */
#cps-open-toc {
/* Force Display */
display: flex !important;
visibility: visible !important;
opacity: 1 !important;
/* Ensure it sits on top of the iPad header */
z-index: 9999 !important;
/* Ensure positioning is correct */
position: fixed !important;
top: 8px !important;
right: 100px !important;
/* CHANGE THIS: 0.05 -> 0.1 to match other buttons */
background-color: rgba(0, 0, 0, 0.1) !important;
width: 44px !important;
height: 44px !important;
border-radius: 8px !important;
}
/* ... (rest of the block remains the same) */
}
 
/* Constrain--- main contentDesktop (min-width: for better1000px) readability--- */
@media screen and (min-width: 1000px) {
#content {
max-width: 900px; /* OptimalWider readingcontent widthcolumn */
#content { max-width: 1200px !important; }
margin: 0 auto; /* Center it */
 
line-height: 1.6; /* More breathing room between lines */
/* 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; }
}
 
/* ======================================================= */
/* SMART HIDE: ONLY HIDE BUTTON ON DESKTOP SKIN */
/* ======================================================= */
 
/* =================================================================
/* This rule only triggers if the screen is wide AND the user is on the Desktop Skin */
10. PRINT STYLES
@media screen and (min-width: 1000px) {
================================================================= */
body.skin-vector-2022 #cps-open-toc {
 
@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;
}
}
 
 
/* 1. Remove gap below the Site Notice (even if empty) */
/* ============================================================================
#siteNotice {
SECTION 11 — WIKITABLES: table TYPES
margin-bottom: 0 !important;
- .wikitable = NEUTRAL default: themed (frame, caption, header
padding-bottom: 0 !important;
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 ── */
/* 2. Remove gap above the Main Content container */
.wikitable { width: 100% !important; }
#content.mw-body {
 
margin-top: 0 !important;
/* ── Chunk Info (summary Phase 3): per-chunk tags + data-items box.
padding-top: 0 !important;
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 {
/* 3. Remove gap above the Page Heading ("Home") */
font-size: 0.85em;
/* This is often the hidden cause of the white line */
border: 1px solid var(--text-dark);
.pre-content,
font-variant-numeric: tabular-nums;
.page-heading,
margin-top: 0.3em;
.firstHeading {
margin-topbottom: 0 !important2em;
}
padding-top: 0 !important;
/* (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; }
/* ======================================================= */
 
/* 1. MAKE HEADER TRANSPARENT */
table.wikitable td p { font-size: inherit !important; }
/* ======================================================= */
 
.header-container.header-chrome,
/* ── Column size scale: usable on ANY table type ── */
.minerva-header {
.wikitable th.col-xs, .wikitable td.col-xs { width: var(--wt-xs); min-width: var(--wt-xs); }
background: transparent !important;
.wikitable th.col-s, .wikitable td.col-s { width: var(--wt-s); min-width: var(--wt-s); }
background-color: transparent !important;
.wikitable th.col-m, .wikitable td.col-m { width: var(--wt-m); min-width: var(--wt-m); }
border: none !important;
.wikitable th.col-l, .wikitable td.col-l { width: var(--wt-l); min-width: var(--wt-l); }
box-shadow: none !important;
.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
/* 2. RESET PAGE & CONTAINER TOP MARGINS */
its column-1 width exception wins the tie. ── */
/* This removes the "White Gap" at the very top */
table.wikitable.wt-freeze-2 th:first-child,
/* ======================================================= */
table.wikitable.wt-freeze-2 td:first-child {
body.skin-minerva {
min-width: var(--wt-xs); /* overrides the fintable 16em label column */
padding-top: 0 !important;
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
/* Force the main content wrapper to start at pixel 0 */
differs from plain fintable ONLY in the overflow. A wide .wt-bleed table paints past the content edge at
#content,
its natural width and the PAGE gains a horizontal scroll (default MediaWiki wide-table behavior) instead
.mw-body {
of a per-table scrollbar. There are TWO scroll wrappers to neutralise — both via :has(…wt-bleed) +
margin-top: 0 !important;
padding-top: 0 !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) {
/* Remove potential gap from the Site Notice container */
table.wikitable { border: none !important; }
.banner-container,
table.wikitable > tr > th,
#siteNotice {
table.wikitable > tr > td,
padding-top: 0 !important;
table.wikitable > tbody > tr > th,
margin-top: 0 !important;
table.wikitable > tbody > tr > td {
margin-bottom: 0 !important;
border: 0; /* inner grid removed (border:0, not transparent) */
}
}
 
/* ======================================================= */==========
12. EDITORIAL DESIGN SYSTEM v12 ("flat mono")
/* 3. PUSH TITLE DOWN INTERNALLY */
Appended LAST deliberately: later rules of equal specificity win,
/* This pushes the text "Home" down so it's not hidden, */
so this section restyles typography / color / spacing WITHOUT
/* but keeps the background white/transparent at the top. */
editing sections 1-11. This section is the SINGLE COLOR AUTHORITY —
/* ======================================================= */
every color token lives in its :root; sections 1-11 are structure.
.pre-content.heading-holder {
v12: /*ONE 70pxfont (HeaderSTIX heightTwo Text), +ONE 40pxink (Visual#0d0d0d Space)for all text */AND
lines), coral for interaction only, square corners, flat controls.
padding-top: 70px !important;
The v11 warm-gray-ramp + serif/sans split was consolidated away
2026-07 — see git history for the old system.
/* Ensure it behaves as a block to accept padding */
================================================================= */
display: block !important;
 
/* ── 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
/* Best approach: Hides the text wrapper entirely to remove spacing */
accent:
.mw-logo-container {
--ed-font = STIX Two Text everywhere (prose, headings, data,
display: none !important;
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
/* Target the specific text element directly */
paints white on its own, the TOC column, and the TOC's
.mw-logo-wordmark {
scroll-fade overlay ── */
display: none !important;
body, .mw-page-container { background-color: var(--ed-paper) !important; }
visibility: hidden !important; /* Backup if display fails */
.vector-header-container .mw-header,
width: 0 !important;
.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
/* ADD TAGLINE TO HEADER (DESKTOP) */
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
/* 1. Prevent underline on the parent link when hovering */
--ed-font (form controls don't inherit it — they get it explicitly
.mw-logo:hover,
where they're styled) ── */
.mw-logo:active,
body { font-family: var(--ed-font); }
.mw-logo:focus {
 
text-decoration: none !important;
/* ── 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. Inject the tagline text */
1. Printed ON the paper (not white cards): surfaces transparent;
.mw-logo::after {
in a FINTABLE only the sticky first column stays opaque (it
/* \A is the CSS escape character for a Newline */
must cover scrolling content) in the paper color; hover warms.
content: "Sharpen your\A business edge";
2. Full frame in ink. Sides: the RIGHT rail is a plain
border on the last-column cells. On a NEUTRAL table the LEFT
/* Typography - MATCHING FOOTER EXACTLY */
rail is a plain table border (nothing is sticky); on a
/* Removed font-family line so it inherits the correct system font */
FINTABLE it must be a box-shadow on the sticky first-column
font-size: 0.75em; /* Reduced from 0.85em to 0.75em */
cells — with border-collapse, borders on sticky cells do not
font-weight: 700;
move when the cell sticks (they vanish on horizontal scroll),
line-height: 1.4;
but shadows travel with the cell — and the table's own left
border is disabled so the rail is the only line there.
/* Visuals */
The fintable selector group below is section 11's definition
color: #202122 !important;
of "financial table", repeated verbatim.
text-decoration: none !important;
3. The table's outer margins move to the scroll WRAPPER so the
cursor: pointer;
horizontal scrollbar hugs the bottom rule. ── */
table.wikitable,
/* Positioning */
table.wikitable td,
display: block;
table.wikitable caption { background-color: transparent; }
white-space: pre;
/* row hover comes from §11 (#f8f9fa); the frozen first column carries its
margin-left: 3px;
own paper bg (below) at higher specificity, so it needs its OWN hover
text-align: left;
rule to highlight with the row */
table.wikitable.fintable > tbody > tr:hover > td:first-child,
/* MOVES TEXT DOWN */
table.wikitable:has(.col, .col-wide) > tbody > tr:hover > td:first-child {
position: relative;
background-color: #f8f9fa;
top: 3px;
}
 
table.wikitable.fintable td:first-child,
/* Hide styling on Mobile/Tablet so it doesn't clash */
table.wikitable:has(.col, .col-wide) td:first-child {
@media screen and (max-width: 900px) {
background-color: var(--ed-paper);
.mw-logo::after {
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
/* CUSTOM MOBILE FOOTER (Logo Image + Tagline) */
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); }
/* 1. Reset the container */
table.wikitable.fintable,
.minerva-footer-logo {
table.wikitable:has(.col, .col-wide) { border-left: none; }
font-size: 0 !important; /* Hide default text */
 
color: transparent !important; /* Make sure it's invisible */
/* the table's outer margins live on the scroll WRAPPER (the emitter wraps
display: block !important; /* Stack vertically */
every table in <div style="overflow-x:auto">): top margin gives air
text-align: left !important; /* Align left */
before the eyebrow caption + separates consecutive tables; the scrollbar
margin-bottom: 20px !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
/* 2. INSERT THE LOGO (via ::before) */
uppercase/letter-spacing — the old eyebrow treatment is retired here). */
.minerva-footer-logo::before {
table.wikitable caption {
content: "" !important;
font-family: var(--ed-font);
display: block !important;
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):
/* DIRECT LINK TO YOUR LOGO */
a sans lead reads oddly at the top of serif prose. The source is ''italic'',
background-image: url('https://pro-wiki.s3.eu-central-1.amazonaws.com/2776118/Logo.png');
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
/* DIMENSIONS */
--ed-list-indent per level; the markers are positioned EXACTLY
width: 160px;
below (see the ::before block). !important + the Minerva-qualified
height: 50px;
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 */
background-repeat: no-repeat !important;
.mw-parser-output ul { margin-top: 0.4em; }
background-size: contain !important;
.mw-parser-output li { margin-bottom: 0.45em; }
background-position: left center !important;
.mw-parser-output li li { margin-top: 0.3em; margin-bottom: 0.3em; }
.mw-parser-output li > ul { margin-bottomtop: 6px !important0.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.
/* 3. INSERT THE TAGLINE (via ::after) */
line-height:0 stops them inflating the line box */
.minerva-footer-logo::after {
.mw-body-content sup,
/* \A is the Newline character. Use "pre" or "pre-wrap" to render it. */
.skin-minerva .content sup {
content: "Sharpen your business edge" !important;
font-size: 68%;
line-height: 0;
/* Typography - MATCHING FOOTER LINKS */
/* Removed font-family: to use system var(--ed-font (Roboto/San Francisco) */;
color: var(--text-dark);
font-size: 14px !important; /* Increased to 14px to match footer links */
font-weight: 700 !important;
line-height: 1.4 !important;
/* Visuals - KEEPING YOUR DARK COLOR */
color: #202122 !important;
/* Layout */
display: block !important;
white-space: pre-wrap !important;
}
 
/* ── Title block: serif display, REGULAR weight, large; the title-gap
/* ======================================================= */
knob lands its rule on the CONTENTS rule's line ── */
/* FORCE SHOW HIDDEN MOBILE FOOTER LINKS */
h1#firstHeading, .mw-first-heading {
/* Minerva hides About/Disclaimers by default. */
font-family: var(--ed-font);
/* This forces them to appear in the list. */
font-size: 2.4rem;
/* ======================================================= */
line-height: 1.15;
body.skin-minerva #footer-places-about,
font-weight: 400;
body.skin-minerva #footer-places-disclaimers {
letter-spacing: -0.01em;
display: inline-block !important;
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
/* Force paragraphs inside the navigation menu to inherit the parent font size */
.mw-body-content — Vector's own typography rules are
.navigation-menu .infobox-data p {
class-qualified (0,1,1), so bare h2/h3 selectors would LOSE.
font-size: 1em !important;
Minerva's content wrapper is .content. ── */
margin: 0 !important;
.mw-body-content h2, .mw-body-content .mw-heading2, .section-heading,
padding: 0 !important;
.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
/* GLOBAL BRANDING: DARK LINES & CLEANUP */
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
/* 1. TEXT COLORS (Headings & Titles) */
in its own progressive blue (#36c) otherwise. The generic
h1, h2, h3, h4, h5, h6,
.cdx-text-input rule covers the header search box; the AI chat
.firstHeading,
input is exempted further below (its ring sits on the composer). ── */
.mw-page-title-main,
.cdx-text-input__input:focus,
.page-heading,
.cdx-text-input__input:enabled:focus {
.section-heading,
border-color: var(--ed-accent) !important; /* = the link hover-underline color */
.vector-sticky-header-context-bar-primary,
box-shadow: inset 0 0 0 1px var(--ed-accent) !important;
.mw-headline,
.vector-pinnable-header-label {
color: #202122 !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
/* 2. BORDERS FOR ALL HEADINGS (Desktop & Mobile) */
Codex input rules below — only the search-specific pieces live here. ── */
/* This puts the 1px dark line under the Title and Headings */
/* search bar on the BODY-TEXT axis. Measured on the live DOM (1120px
h2,
viewport): form x=294, title/body axis x=264 → pull 30px left (24px is
.mw-first-heading,
Codex's typeahead inset inside #p-search + 6px container offset). The
.section-heading { /* Mobile Section Headers */
typeahead dropdown lives inside the form, so suggestions move with it.
border-bottom: 1px solid #202122 !important;
Calibrated against the rendered logo+tagline width — re-measure if the
margin-bottom: 0.5em;
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.
/* 2.1 REMOVE VECTOR 2022 DEFAULT TITLE LINE */
Every entry, ANY level, starts on ONE left axis. Depth is carried by
/* You asked to remove the color/transparency of the ::after element */
an inline en-dash marker generated per Vector level class: top level
.vector-page-titlebar::after {
bare, children "–", grandchildren "––" — flowing straight into the
background-color: transparent !important;
title as one text run. NO indentation, NO gutter, NO absolute
display: none !important;
positioning. Titles wrap under themselves (the marker is its own
height: 0 !important;
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
/* 2.2 MOBILE CLEANUP (Minerva Skin) */
(padding-top moves the label and rule together; padding-bottom the
/* This removes the Language/Edit buttons to create a cleaner look. */
rule only), inset onto the number axis */
.page-actions-menu {
.vector-toc .vector-pinnable-header {
display: none !important;
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
/* 4. CONTENTS SIDEBAR (Desktop) */
feedback = the house link convention (grey underline → coral); the
h2.vector-pinnable-header-label {
current section = the one bold row. */
border-bottom: none !important;
.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 */
/* 6. FOOTER LINES (Global) */
.vector-toc .vector-toc-contents,
#footer,
.vector-toc .vector-toc-list {
.mw-footer,
margin: 0;
.minerva-footer,
padding: 0;
.printfooter {
list-style: none;
border-top: 1px solid #202122 !important;
}
.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
/* 7. CLEAN UP MOBILE FOOTER GAPS */
a wrapping block whose 2nd+ lines align under the TITLE (after the number).
.minerva-footer .footer-content,
Because the marker is its own flex item, this holds for any marker width
.minerva-footer .branding-box,
(one dash or two), which a fixed text-indent could not. The link is a flex item
.minerva-footer-logo,
of the row; grow:0 so a short title doesn't stretch (the chevron stays right
#footer-info,
after it), shrink:1 + min-width:0 so a long title wraps. */
#footer-places {
.vector-toc .vector-toc-link { flex: 1 1 auto; min-width: 0; }
border: none !important;
.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
/* 8. MOBILE ICONS */
the row, baseline-aligned to the first line. The Codex icon is replaced by a
.skin-minerva .section-heading .mw-ui-icon-wikimedia-expand-small {
::before glyph switched on the expanded state; font-size:0 hides the
filter: grayscale(1) brightness(0.2);
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
/* 9. SUBTLE UI TWEAKS */
ENFORCED with !important so inline widths cannot break it — and
.mw-editsection, .mw-editsection a {
pinned class-generically so ANY infobox markup (table or div)
color: #202122 !important;
obeys. Prose flows full-width around the float (default MediaWiki). ── */
opacity: 0.7;
.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;
}