Jump to content

MediaWiki:Common.js

From Insurer Brain
Revision as of 14:48, 18 June 2026 by Wikilah admin (talk | contribs)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
/* =================================================================
   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
   (temp/design/common_css_clean.css) — no incremental block pastes.
   Color/typography authority: SECTION 12 owns all heading, link,
   footer, table and AI-panel colors; earlier sections are structure.
   ================================================================= */


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

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

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

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

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

.references { margin-bottom: 0.5em; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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


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

@media print {

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

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

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

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


/* ============================================================================
   SECTION 11 — WIKITABLES: table TYPES
   - .wikitable           = NEUTRAL default: themed (frame, caption, header
                            tint, hairlines, hover) but free-form — columns
                            flex, labels wrap, nothing frozen.
   - .wikitable.fintable  = FINANCIAL bundle: frozen nowrap first column +
                            data-column width floors. The bot emits the class
                            automatically on numeric-dense tables; add it by
                            hand to get the same behavior on a manual table.
   - Future table types = one new class, one new bundle below.
   - .wt-freeze-2         = add-on modifier: freeze columns 1+2 (mark column 1
                            col-xs so column 2 knows where to stick).
   ============================================================================ */
:root {
  /* column size scale — markers map to these; an UNMARKED column flexes */
  --wt-xs: 3em;
  --wt-s: 6em;
  --wt-m: 9em;
  --wt-l: 15em;
  --wt-xl: 24em;
  --wt-xxl: 39em;
  /* palette (section 12 re-points these onto the warm ramp) */
  --wt-border: #eceef1;
  --wt-rule: #72777d;
  --wt-edge: #dadde1;
  --wt-th-bg: #f6f7f9;
  --wt-th-text: #54595d;
  --wt-pad-y: 0.5em;
}

/* ── Theme: EVERY wikitable, any type ── */
.wikitable { width: 100% !important; }

table.wikitable {
    font-size: 0.85em;
    background-color: #fff;
    border: 1px solid var(--wt-border);
    font-variant-numeric: tabular-nums;
    margin-top: 0.3em;
    margin-bottom: 2em;
}
table.wikitable td { background-color: #fff; }
table.wikitable caption {
    text-align: left;
    font-weight: bold;
    background-color: #fff;
    padding-bottom: 0.45em;
}
table.wikitable > tr > th,
table.wikitable > tr > td,
table.wikitable > * > tr > th,
table.wikitable > * > tr > td {
    border: 1px solid var(--wt-border);
    padding: var(--wt-pad-y) 0.6em;
}
table.wikitable > * > tr > th {
    background-color: var(--wt-th-bg);
    color: var(--wt-th-text);
}
table.wikitable > * > tr:first-child > th,
table.wikitable > * > tr:first-child > td { border-top: 1px solid var(--wt-rule); }
table.wikitable > * > tr:has(> th):has(+ tr > td) > th { border-bottom: 1px solid var(--wt-rule); }
table.wikitable > * > tr:last-child > td,
table.wikitable > * > tr:last-child > th { border-bottom: 1px solid var(--wt-rule); }

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

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

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

/* ── FINTABLE bundle — THE definition of "financial table" on this wiki.
      Applies to .fintable (emitter-typed numeric-dense tables) and, via
      :has(), to every already-published bot table — they all carry the
      legacy col/col-wide markers, so the back catalogue upgrades with NO
      re-publishing. The bridge is scoped to the LEGACY marker names only:
      col-s/col-m on a neutral hand table does NOT trigger financial
      behavior. Repeat this selector group verbatim wherever fintable
      scoping is needed (section 12 uses it too). ── */

/* data-column floor (legacy pages can have unmarked data columns) */
table.wikitable.fintable th:not(:first-child),
table.wikitable.fintable td:not(:first-child),
table.wikitable:has(.col, .col-wide) th:not(:first-child),
table.wikitable:has(.col, .col-wide) td:not(:first-child) { min-width: var(--wt-s); }

/* frozen row-label column. white-space:normal (NOT nowrap) with a max-width
   cap: a normal label keeps to one line as long as it fits (auto table layout
   sizes the column to its content), but a runaway label — e.g. a long note
   that ends up in the cell — WRAPS at ~2/3 of the table instead of forcing a
   giant one-line column that pushes the data off-screen. overflow-wrap breaks
   an unbreakable token. min-width keeps it from collapsing too narrow. */
table.wikitable.fintable th:first-child,
table.wikitable.fintable td:first-child,
table.wikitable:has(.col, .col-wide) th:first-child,
table.wikitable:has(.col, .col-wide) td:first-child {
    white-space: normal;
    max-width: 66%;                 /* hard cap: never hog more than ~2/3 */
    overflow-wrap: anywhere;
    min-width: 16em;
    position: sticky;
    left: 0;
    z-index: 1;
    box-shadow: 1px 0 0 var(--wt-edge);
}
table.wikitable.fintable td:first-child,
table.wikitable:has(.col, .col-wide) td:first-child { background-color: #fff; }
table.wikitable.fintable th:first-child,
table.wikitable:has(.col, .col-wide) th:first-child { background-color: var(--wt-th-bg); }

/* ── wt-freeze-2 add-on: freeze columns 1+2. Mark column 1 col-xs — column
      2 sticks exactly one xs step in. Comes AFTER the fintable bundle so
      its column-1 width exception wins the tie. ── */
table.wikitable.wt-freeze-2 th:first-child,
table.wikitable.wt-freeze-2 td:first-child {
    min-width: var(--wt-xs);      /* overrides the fintable 16em label column */
    white-space: normal;
    position: sticky;
    left: 0;
    z-index: 1;
}
table.wikitable.wt-freeze-2 th:nth-child(2),
table.wikitable.wt-freeze-2 td:nth-child(2) {
    position: sticky;
    left: var(--wt-xs);
    z-index: 1;
    box-shadow: 1px 0 0 var(--wt-edge);
    background-color: #fff;
}
table.wikitable.wt-freeze-2 th:nth-child(2) { background-color: var(--wt-th-bg); }
table.wikitable.wt-freeze-2 td:first-child { background-color: #fff; }
table.wikitable.wt-freeze-2 th:first-child { background-color: var(--wt-th-bg); }

@media screen and (max-width: 719px) {
    table.wikitable { border: none !important; }
    table.wikitable > tr > th,
    table.wikitable > tr > td,
    table.wikitable > tbody > tr > th,
    table.wikitable > tbody > tr > td {
        border: 1px solid var(--wt-border);
    }
}

/* =================================================================
   12. EDITORIAL DESIGN SYSTEM v11 ("paper & ink")
   Appended LAST deliberately: later rules of equal specificity win,
   so this section restyles typography / color / spacing WITHOUT
   editing sections 1-11 (it even re-points section 11's --wt-*
   color variables from here — a later :root wins). Delete the whole
   section to revert.
   v11: full-sheet cleanup — sections 7/8 stripped to structure (this
   section is the single color authority); TOC block consolidated
   (numbers in a fixed right-aligned gutter, "0." on Beginning,
   inline chevron, no rails).
   ================================================================= */

/* ── Webfont: Source Serif 4 (variable; ONE file covers 400-600).
      @font-face is safe anywhere in ResourceLoader output — never use
      @import here (gadget CSS is concatenated BEFORE Common.css and
      breaks it, per T165040). If the font fails to load, Georgia
      takes over seamlessly. Production hardening: copy the two woff2
      files to the S3 bucket and swap the URLs. ── */
@font-face {
  font-family: "Source Serif 4";
  font-style: normal;
  font-weight: 400 600;
  font-display: swap;
  src: url(https://fonts.gstatic.com/s/sourceserif4/v14/vEFF2_tTDB4M7-auWDN0ahZJW3IX2ih5nk3AucvUHf6kDXr4.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: "Source Serif 4";
  font-style: italic;
  font-weight: 400 600;
  font-display: swap;
  src: url(https://fonts.gstatic.com/s/sourceserif4/v14/vEF02_tTDB4M7-auWDN0ahZJW1ge6NmXpVAHV83Bfb_US2D2QYxoUKIkn98pRl9tDMQC.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.
      ONE gray ramp (3 grays + 2 hairlines), ONE small size, ONE sans.
      The --wt-* lines re-point section 11's table palette onto the
      same warm ramp (this :root is later, so it wins the tie). ── */
:root {
  --ed-serif: "Source Serif 4", Georgia, "Times New Roman", serif;
  --ed-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
             "Inter", Helvetica, Arial, sans-serif;  /* = Vector/Codex chrome stack */
  --ed-ink: #2b2926;             /* text, headings, strong rules */
  --ed-secondary: #66605c;       /* labels, standfirst, TOC, footer links */
  --ed-faint: #807973;           /* page refs, list markers, footer body */
  --ed-hairline: #e7e2db;        /* light warm line (infobox frame) */
  --ed-hairline-strong: #d6d0c8; /* stronger warm line (panel frame) */
  --ed-link: #0d7680;            /* interactive teal: links, focus, send */
  --ed-underline: #ccc1b7;       /* resting link underline tint */
  --ed-accent: #f07662;          /* house coral — hover underline, sparing */
  --ed-paper: #fbfaf7;           /* page canvas (set #fff to disable the tint) */
  --ed-infobox-w: 18.5rem;       /* infobox total width (border-box) */
  --ed-measure: calc((100% - var(--ed-infobox-w)) * 0.9); /* prose stops ~10% short of
                                    the infobox — tighter readable line + a gutter before the card */
  --ed-body: 1rem;               /* body size (16px — the "90% zoom" preference) */
  --ed-small: 0.8125rem;         /* THE small size: tables, infobox, TOC, footer */
  --ed-title-gap: 2.1rem;        /* CALIBRATION: moves the title rule DOWN */
  --ed-list-indent: 1.2rem;      /* per-level indent = the marker-to-text step
                                    (rem, NOT em — an em offset would resolve
                                    against each marker's own font-size) */

  /* section 11's table palette, warmed onto the same ramp.
     --wt-rule is the table FRAME: deliberately lighter than the ink
     h2 rules so tables sit below section structure in the hierarchy */
  --wt-border: #ece8e1;
  --wt-rule: #b3aca3;
  --wt-edge: var(--wt-border);  /* ONE hairline tone for interior edges */
  --wt-th-bg: #f3efe8;
  --wt-th-text: var(--ed-secondary);
}

/* ── Canvas: warm paper everywhere — page, the header band Vector
      paints white on its own, the TOC column, and the TOC's
      scroll-fade overlay ── */
body, .mw-page-container { background-color: var(--ed-paper) !important; }
.vector-header-container .mw-header,
.vector-header-container .vector-sticky-header {
  background-color: var(--ed-paper) !important;
}
#vector-toc, .vector-toc, .vector-pinned-container {
  background-color: transparent !important;
}
/* Minerva (mobile skin) paints its own white wrappers over body */
#mw-mf-page-center, .mw-body { background-color: var(--ed-paper) !important; }
.vector-sticky-pinned-container::after {
  background: linear-gradient(transparent, var(--ed-paper)) !important;
}
@media print { body, .mw-page-container { background-color: #fff !important; } }

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

/* ── Mobile (Minerva) keeps ONE light line tone in tables — every
      structural table line consumes --wt-rule, so one override
      simplifies frame, header rule, and side rails at once ── */
.skin-minerva { --wt-rule: var(--wt-border); }

/* ── ONE sans: the whole interface (header, search, tagline, buttons,
      footer) and all data share the Codex stack; prose re-asserts the
      serif below ── */
body { font-family: var(--ed-sans); }

/* ── Logo on the title axis: push it right by the TOC column + grid
      gap at Vector's own grid breakpoints, so the logo + tagline sit
      exactly above the page title. Below 1120px the TOC column does
      not exist, so no offset. ── */
@media (min-width: 1120px) { .mw-logo { margin-left: calc(12.25rem + 24px); } }
@media (min-width: 1680px) { .mw-logo { margin-left: calc(15.5rem + 24px); } }

/* ── 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-serif);
  font-size: var(--ed-body);
  line-height: 1.6;
  color: var(--ed-ink);
  font-variant-numeric: lining-nums;
}
/* readable measure for prose; data/tables stay full width */
.mw-parser-output > p,
.mw-parser-output > ul,
.mw-parser-output > ol,
.mw-parser-output > dl { max-width: var(--ed-measure); }
/* nested paragraphs too (hand-written page structures); table cells released */
.mw-parser-output p { max-width: var(--ed-measure); }
.mw-parser-output table p { max-width: none; }
/* 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-sans);
  font-size: var(--ed-small);
}

/* ── The table BLOCK ──
      1. Printed ON the paper (not white cards): surfaces transparent;
         in a FINTABLE only the sticky first column stays opaque (it
         must cover scrolling content) in the paper color; hover warms.
      2. Full frame in --wt-rule. Sides: the RIGHT rail is a plain
         border on the last-column cells. On a NEUTRAL table the LEFT
         rail is a plain table border (nothing is sticky); on a
         FINTABLE it must be a box-shadow on the sticky first-column
         cells — with border-collapse, borders on sticky cells do not
         move when the cell sticks (they vanish on horizontal scroll),
         but shadows travel with the cell — and the table's own left
         border is disabled so the rail is the only line there.
         The fintable selector group below is section 11's definition
         of "financial table", repeated verbatim.
      3. The table's outer margins move to the scroll WRAPPER so the
         horizontal scrollbar hugs the bottom rule, and the scrollbar
         itself goes thin + warm. ── */
table.wikitable,
table.wikitable td,
table.wikitable caption { background-color: transparent; }
table.wikitable > tbody > tr:hover > td { background-color: #f2ede5; }
/* the frozen first column carries its own paper bg (below) at higher
   specificity, so it needs its OWN hover rule to warm with the row */
table.wikitable.fintable > tbody > tr:hover > td:first-child,
table.wikitable:has(.col, .col-wide) > tbody > tr:hover > td:first-child {
  background-color: #f2ede5;
}

table.wikitable.fintable td:first-child,
table.wikitable:has(.col, .col-wide) td:first-child {
  background-color: var(--ed-paper);
}
table.wikitable.fintable th:first-child,
table.wikitable.fintable td:first-child,
table.wikitable:has(.col, .col-wide) th:first-child,
table.wikitable:has(.col, .col-wide) td:first-child {
  border-left: none;
  box-shadow: inset 1px 0 0 var(--wt-rule),   /* left rail — sticks with the cell */
              1px 0 0 var(--wt-edge);          /* right edge of the frozen column */
}
/* LEFT + RIGHT frame edges drawn on the CELLS in --wt-rule, 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,
   so the first column's --wt-border (light) cell border would otherwise win the
   left edge and render it lighter than the other three sides. Fintable overrides
   first-child border-left → none + box-shadow rail (higher specificity, above). */
.wikitable th:first-child,
.wikitable td:first-child { border-left: 1px solid var(--wt-rule); }
.wikitable th:last-child,
.wikitable td:last-child { border-right: 1px solid var(--wt-rule); }

table.wikitable { margin: 0; border-left: 1px solid var(--wt-rule); }
table.wikitable.fintable,
table.wikitable:has(.col, .col-wide) { border-left: none; }

/* the table's outer margins live on the scroll WRAPPER (the emitter wraps
   every table in <div style="overflow-x:auto">): top margin gives air
   before the eyebrow caption + separates consecutive tables; the scrollbar
   goes thin and quiet in the header-row tint */
.mw-parser-output div[style*="overflow-x"],
.copy-table-scroll {
  margin: 1.8em 0 2em;
  scrollbar-width: thin;
  scrollbar-color: var(--wt-th-bg) transparent;
}

/* caption = the table's TITLE as a quiet EYEBROW (the shared kicker
   treatment — breadcrumb / infobox header): uppercase sans, letter-spaced,
   secondary ink, with air below before the grid. No glyph. */
table.wikitable caption {
  font-family: var(--ed-sans);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ed-secondary);
  text-align: left;
  padding-bottom: 0.7em;
}

/* standfirst — the italic intro sentence (FT: sans, calm). Anchored to the
   generated infobox-then-intro pattern so hand-written pages keep real italics */
.mw-parser-output > .infobox ~ p:first-of-type > i,
.mw-parser-output > table.infobox + p > i {
  font-family: var(--ed-sans);
  font-style: normal;
  font-size: 0.97em;
  line-height: 1.55;
  color: var(--ed-secondary);
}

/* ── List geometry — ONE definition for both skins: text hangs at
      --ed-list-indent per level; the markers are positioned EXACTLY
      below (see the ::before block). !important + the Minerva-qualified
      selectors beat section 7's mobile rules and the skin defaults;
      table-cell lists keep section 11's own rule (higher specificity). ── */
.mw-parser-output ul,
.mw-parser-output ol,
body.skin-minerva .mw-parser-output ul,
body.skin-minerva .collapsible-block ul {
  margin-left: 0 !important;
  padding-left: var(--ed-list-indent) !important;
}
.mw-parser-output ol { padding-left: 1.4em !important; }  /* numbers need more room */

/* list rhythm: air between points, predictable nesting */
.mw-parser-output ul { margin-top: 0.4em; }
.mw-parser-output li { margin-bottom: 0.45em; }
.mw-parser-output li li { margin-top: 0.3em; margin-bottom: 0.3em; }
.mw-parser-output li > ul { margin-top: 0.3em; }

/* per-level markers drawn as ::before at EXACT positions: each marker's
   LEFT edge sits on its parent's text axis (level 1 on the heading
   axis), because left: -indent lands on the container edge, which IS
   the parent text x. Shapes: bullet / house triangle (drivers, echoes
   the TOC prefix) / hairline en dash; per-level font-size +
   line-height keep the three optically equal and vertically centered */
.mw-parser-output ul { list-style: none !important; }
.mw-parser-output ul > li { position: relative; }
.mw-parser-output ul > li::before {
  content: "\2022";
  position: absolute;
  left: calc(-1 * var(--ed-list-indent));
  color: var(--ed-faint);
  font-family: var(--ed-sans);
  font-size: 0.95em;
  line-height: 1.68;
}
.mw-parser-output ul ul > li::before { content: "\25B8"; font-size: 0.7em; line-height: 2.29; }
.mw-parser-output ul ul ul > li::before { content: "\2013"; font-size: 0.95em; line-height: 1.68; }

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

/* ── Title block: serif display, REGULAR weight, large; the title-gap
      knob lands its rule on the CONTENTS rule's line ── */
h1#firstHeading, .mw-first-heading {
  font-family: var(--ed-serif);
  font-size: 2.4rem;
  line-height: 1.15;
  font-weight: 400;
  letter-spacing: -0.01em;
  color: var(--ed-ink) !important;
  border-bottom: 2px solid var(--ed-ink) !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-sans);
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ed-secondary);
  margin-bottom: 1.4em;
}
#contentSub .subpages a,
#contentSub .subpages a:visited { color: var(--ed-secondary) !important; }

/* ── Section headings: sans semibold on the house rules. Scoped to
      .mw-body-content — Vector's own typography rules are
      class-qualified (0,1,1), so bare h2/h3 selectors would LOSE.
      Minerva's content wrapper is .content. ── */
.mw-body-content h2, .mw-body-content .mw-heading2, .section-heading,
.skin-minerva .content h2 {
  font-family: var(--ed-sans);
  font-size: 1.4rem;
  line-height: 1.25;
  font-weight: 600;
  letter-spacing: -0.005em;
  color: var(--ed-ink) !important;
  border-bottom: 1px solid var(--ed-ink) !important;
  margin-top: 2.2em;
  margin-bottom: 0.7em;
  padding-bottom: 0.3em;
}
.mw-body-content h3,
.skin-minerva .content h3 {
  font-family: var(--ed-sans);
  font-size: 1.08rem;
  font-weight: 600;
  color: var(--ed-ink) !important;
  margin-top: 1.8em;
  margin-bottom: 0.5em;
}
.mw-body-content h4, .mw-body-content h5, .mw-body-content h6 {
  font-family: var(--ed-sans);
  font-size: 1rem;
  font-weight: 600;
  color: var(--ed-ink) !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: FT teal; content links carry a resting tint underline that
      warms to the house coral on hover ── */
a, a:visited,
.mw-parser-output a, .mw-parser-output a:visited,
.mw-body-content a.external, .mw-body-content a.external:visited,
.mw-collapsible-toggle-default .mw-collapsible-text {
  color: var(--ed-link) !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(--ed-secondary) !important;
  text-decoration: none;
  opacity: 0.7;
}

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

/* ── TOC sidebar — flat left-aligned design.
      Every entry, ANY level, starts on ONE left axis: the section
      number is INLINE (Vector ships it display:none; we re-show it)
      flowing straight into the title as a single text run, so "2.1.
      Press release" reads as one string. Depth is carried by the
      number itself plus a lighter ink on child rows — NO indentation,
      NO number gutter, NO absolute positioning (the old gutter geometry
      is gone). The ONE structural rule is a hanging indent on every li
      (--toc-hang): the first line outdents to the axis, wrapped lines
      align under the TITLE. Nested <ul>s are pulled back by the same
      --toc-hang so level-2+ numbers land on the level-1 axis (flat, no
      staircase). "Beginning" (the one entry MediaWiki leaves unnumbered)
      gets a generated inline "0.". Expand/collapse is the house triangle
      ▸/▾ INLINE after the heading. The CONTENTS header left-aligns with
      the number axis.
      CALIBRATION: --toc-hang is the wrap-indent / number budget — size
      it to the title-start of the entries that actually wrap (level-2,
      ~"2.2. "); the 0.22rem row rhythm is unchanged. ── */
.vector-toc {
  font-family: var(--ed-sans);
  --toc-hang: 2.6em;       /* hanging indent = number budget + gap to title */
  --toc-header-inset: 0;   /* CONTENTS label sits on the number axis */
}

/* CONTENTS header: label + 1px ink rule on the title rule's line
   (padding-top moves the label and rule together; padding-bottom the
   rule only), inset onto the number axis */
.vector-toc .vector-pinnable-header {
  border-bottom: 1px solid var(--ed-ink) !important;
  padding-top: 0.35rem;
  padding-bottom: 0.95rem;
  margin-bottom: 0.9rem;
  padding-left: 0 !important;
  margin-left: var(--toc-header-inset) !important;
}
.vector-toc .vector-pinnable-header-label {
  font-size: 0.75rem;
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--ed-secondary) !important;
  margin-left: 0;
}

/* entries: TOP-LEVEL rows in full body ink so the section spine reads as
   strongly as the article; CHILD rows (level 2+) drop to the faint ink — the
   parent↔child contrast is now ink↔faint (the widest gap on the ramp), so
   subsections clearly recede and group under their parent WITHOUT any indent.
   Hover + active go to ink: a child darkens, a top-level row is already ink so
   its "current" cue is the weight bump on active.
   CASCADE: the base is a (0,2,0) non-visited + (0,3,0) :visited PAIR; the child
   rules carry their own :visited arm so they reach (0,4,0) and win for visited
   child links regardless of order; hover/active are (0,3,0) !important and sit
   AFTER the child block so source order hands them the tie for a hovered/active
   child. Keep this order: base → children → hover → active. */
.vector-toc .vector-toc-link,
.vector-toc .vector-toc-link:visited {
  color: var(--ed-ink) !important;
  font-size: var(--ed-small);
  text-decoration: none;
}
.vector-toc .vector-toc-level-2 > .vector-toc-link,
.vector-toc .vector-toc-level-2 > .vector-toc-link:visited,
.vector-toc .vector-toc-level-3 > .vector-toc-link,
.vector-toc .vector-toc-level-3 > .vector-toc-link:visited,
.vector-toc .vector-toc-level-4 > .vector-toc-link,
.vector-toc .vector-toc-level-4 > .vector-toc-link:visited {
  color: var(--ed-faint) !important;
}
.vector-toc .vector-toc-link:hover { color: var(--ed-ink) !important; }
.vector-toc .vector-toc-list-item-active > .vector-toc-link {
  color: var(--ed-ink) !important;
  font-weight: 500 !important;     /* the "current" cue (top-level is already ink) */
}

/* lists flush on the component edge; hanging indent carried on every li */
.vector-toc .vector-toc-contents,
.vector-toc .vector-toc-list {
  margin: 0;
  padding: 0;
  list-style: none;
}
.vector-toc .vector-toc-list-item {
  /* ROW RHYTHM — single source of truth: ALL vertical spacing lives on
     padding-TOP. padding-bottom is 0 and the nested <ul> carries no vertical
     margin, so EVERY gap (sibling→sibling, parent→child, end-of-group→next
     section) is exactly ONE padding-top — uniform at any nesting depth, with
     nothing to drift out of sync. margin:0 neutralises any Vector li margin. */
  padding: 0.44em 0 0 var(--toc-hang) !important;   /* em (not rem): the row gap now
     equals the infobox's 0.22em+0.22em cell padding — ONE shared data voice */
  margin: 0 !important;
  text-indent: calc(-1 * var(--toc-hang));   /* first line out to the axis;
                                                wrapped lines hang at the title.
                                                Each li re-declares it, so the
                                                value never compounds through
                                                inheritance into nested lists */
  font-size: var(--ed-small);
  line-height: 1.5;                          /* = the infobox / wikitable line-height
                                                (was inherited & unspecified before) */
}
/* nested list: HORIZONTAL pull ONLY (back by one hang so level-2+ numbers land
   on the level-1 axis — the flat look). No vertical margin: a child's spacing
   from its parent is just the child li's own padding-top, so it equals the
   sibling gap automatically. !important neutralises Vector's own list margins. */
.vector-toc .vector-toc-list-item > .vector-toc-list {
  margin: 0 0 0 calc(-1 * var(--toc-hang)) !important;
}

/* the numbers: inline, flowing straight into the title as one run */
.vector-toc .vector-toc-numb {
  display: inline;                /* defeat Vector's display:none */
  margin-right: 0.4em;            /* the only gap to the title (DOM has none) */
  white-space: nowrap;            /* the number + dot never break apart */
  font-variant-numeric: tabular-nums;
}
.vector-toc .vector-toc-numb::after { content: "."; }

/* "0." for Beginning — generated INLINE at the head of the line, in the same
   number voice; goes ink + medium when Beginning is the active section
   (mirrors the active-link rule above) */
.vector-toc #toc-mw-content-text::before {
  content: "0.";
  margin-right: 0.4em;
  white-space: nowrap;
  font-variant-numeric: tabular-nums;
  color: var(--ed-ink);            /* Beginning is top-level → body ink */
}
.vector-toc #toc-mw-content-text.vector-toc-list-item-active::before {
  color: var(--ed-ink);
  font-weight: 500;
}

/* chevron: the entry text goes inline so the sibling toggle button
   flows right after the label ("Outlook 3 ▾"). The Codex icon is
   replaced by a ::before glyph switched on the li's expanded state;
   font-size:0 on the button hides its screen-reader span visually
   without removing it for assistive tech. */
.vector-toc .vector-toc-link,
.vector-toc .vector-toc-text { display: inline; text-indent: 0; }  /* guard: keep the
   li's hanging text-indent from re-activating if these wrappers ever go block */
.vector-toc .vector-toc-toggle {
  position: static !important;
  display: inline !important;
  min-width: 0 !important;
  min-height: 0 !important;
  width: auto !important;
  height: auto !important;
  margin: 0 0 0 0.3em !important;
  padding: 0 0.2em !important;
  border: none !important;
  background: none !important;
  font-size: 0;
}
.vector-toc .vector-toc-toggle .vector-icon { display: none; }
.vector-toc .vector-toc-toggle::before {
  content: "▸";                 /* collapsed — the house triangle */
  font-size: 0.65rem;
  color: var(--ed-faint);
}
.vector-toc .vector-toc-list-item-expanded > .vector-toc-toggle::before {
  content: "▾";                 /* expanded */
}
.vector-toc .vector-toc-toggle:hover::before { color: var(--ed-ink); }

/* ── Infobox: the page's ONE white card, in the data voice; its width
      is the SAME token the prose measure subtracts, ENFORCED with
      !important so inline widths cannot break the axis — and pinned
      class-generically so ANY infobox markup (table or div) obeys. ── */
.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-sans);
  font-size: var(--ed-small);
  background-color: #fff !important;
  border: 1px solid var(--ed-hairline) !important;
  padding: 0.55em 0.9em 0.75em;
  line-height: 1.5;
}
.infobox .infobox-above {
  background-color: #fff !important;       /* beats the template's inline #cee0f2 */
  color: var(--ed-secondary) !important;   /* beats inline color:inherit */
  text-align: left !important;
  font-size: 0.75rem;                      /* the shared eyebrow size */
  font-weight: 600;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  border-bottom: 1px solid var(--ed-ink);
  padding: 0.2em 0.2em 0.55em;
}
.infobox .infobox-label {
  color: var(--ed-secondary);
  font-weight: 400;
  padding: 0.22em 0.8em 0.22em 0.2em;
}
.infobox .infobox-data { color: var(--ed-ink); padding: 0.22em 0.2em; }

/* ── Blockquotes: coral bar, serif italic (future-proofing — the emitter
      currently renders quotes as "> ..." list items) ── */
.mw-parser-output blockquote {
  border-left: 3px solid var(--ed-accent);
  padding: 0.2em 0 0.2em 1.2em;
  margin: 1.2em 0;
  margin-left: 2px !important; /* sit the coral bar on the bullet axis. Two jobs:
                                  (1) override MediaWiki/Parsoid core content
                                  styles that otherwise indent the blockquote;
                                  (2) +2px optical nudge so the straight 3px bar's
                                  left edge lines up with the round bullet's visual
                                  left edge (a bar and a dot share no geometric
                                  edge). Dial to 1px if it ever overshoots */
  color: var(--ed-secondary);
  font-style: italic;
}

/* ── 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-sans);
  color: var(--ed-faint);
  border-top: 1px solid var(--ed-ink) !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(--ed-secondary) !important; }

/* ── 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(--ed-hairline-strong) !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-sans) !important; }
.ext-aiassistant-header { border-bottom: 1px solid var(--ed-hairline) !important; }
.ext-aiassistant-message-user .ext-aiassistant-message__content {
  background-color: var(--ed-ink) !important;
}
.ext-aiassistant-message-assistant {
  font-family: var(--ed-serif) !important;
  color: var(--ed-ink) !important;
}
.ext-aiassistant-footer {
  border-top: 1px solid var(--ed-hairline) !important;
  background-color: var(--ed-paper) !important;
}
/* ONE focus ring around the whole composer (input + send button); the
   text field itself stays borderless — the panel's input is exempted
   from the generic Codex focus rule above */
.ext-aiassistant-panel .cdx-text-input__input,
.ext-aiassistant-panel .cdx-text-input__input:focus,
.ext-aiassistant-prompt-composer__input,
.ext-aiassistant-prompt-composer__input:focus {
  border-color: transparent !important;
  box-shadow: none !important;
  outline: none !important;
}
.ext-aiassistant-prompt-composer { box-shadow: none !important; }
.ext-aiassistant-prompt-composer:focus-within {
  outline: 1px solid var(--ed-link) !important;
  outline-offset: -1px;
  box-shadow: none !important;
}
.ext-aiassistant-prompt-composer__send:not(:disabled) {
  background-color: var(--ed-link) !important;
  border-color: var(--ed-link) !important;
}
.ext-aiassistant-prompt-composer__send:disabled {
  background-color: var(--ed-hairline) !important;
  border-color: var(--ed-hairline) !important;
}
.ext-aiassistant-panel .cdx-button--weight-quiet:not(.cdx-button--icon-only)::before {
  color: var(--ed-link) !important;
}
/* citation chips in the theme's interactive teal, like article links */
.ext-aiassistant-cite,
.ext-aiassistant-cite a { color: var(--ed-link) !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-sans);
  font-size: 0.7em;
  vertical-align: super;
  color: var(--ed-faint);
  text-decoration: underline dotted;
  text-underline-offset: 2px;
  white-space: nowrap;
}
.ed-fn:hover .ed-fn-chip::after { color: var(--ed-link); }

/* 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-sans);
  font-size: 0.95rem;
  line-height: 1.5;
  text-align: left;
  white-space: normal;
}

/* 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(--ed-ink);
  border: 1px solid var(--ed-hairline-strong);
  border-left: 3px solid var(--ed-accent);
  border-radius: 4px;
  box-shadow: 0 4px 16px rgba(43, 41, 38, 0.18);
  font-family: var(--ed-serif);
  font-size: 0.9rem;
  line-height: 1.45;
  text-align: left;
  white-space: normal;
  pointer-events: none;
}

/* ── Mobile ── */
@media screen and (max-width: 768px) {
  :root { --ed-measure: 100%; }  /* infobox is full-width on mobile */
  .mw-parser-output .infobox { width: 100% !important; }
  h1#firstHeading, .mw-first-heading { font-size: 1.7rem; }
  .mw-body-content h2, .mw-body-content .mw-heading2 { font-size: 1.22rem; }
  .ext-aiassistant-prompt-composer { border-bottom: 1px solid var(--ed-hairline) !important; }
}