MediaWiki:Common.css: Difference between revisions
Appearance
Content deleted Content added
No edit summary |
Replaced content with "→CSS placed here will affect registered users only: →==========================================================: →RESTORE MENUS FOR LOGGED-IN USERS: →This overrides the "Hide" rules in Common.css: →NB: MediaWiki-namespace page — admin manual paste, like: →Common.css. Git (this file) is canonical.: →==========================================================: /* 1. Restore User Li..." Tag: Replaced |
||
| Line 1: | Line 1: | ||
/* CSS placed here will affect registered users only */ |
|||
/* ================================================================= |
|||
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. |
|||
================================================================= */ |
|||
/* ========================================================== */ |
|||
/* RESTORE MENUS FOR LOGGED-IN USERS */ |
|||
/* This overrides the "Hide" rules in Common.css */ |
|||
/* NB: MediaWiki-namespace page — admin manual paste, like */ |
|||
/* Common.css. Git (this file) is canonical. */ |
|||
/* ========================================================== */ |
|||
/* 1. Restore User Links Container */ |
|||
/* ================================================================= |
|||
/* Vector 2022 uses flexbox for the header icons */ |
|||
1. BASE MEDIAWIKI OVERRIDES (Fonts, Quotes, Math, References) |
|||
#vector-user-links, |
|||
================================================================= */ |
|||
.vector-user-links, |
|||
#p-personal { |
|||
cite, dfn { font-style: inherit; } |
|||
q { quotes: '"' '"' "'" "'"; } |
|||
blockquote { |
|||
overflow: hidden; |
|||
margin: 1em 0; |
|||
padding: 0 40px; |
|||
} |
|||
small { font-size: 85%; } |
|||
.mw-body-content sub, .mw-body-content sup { font-size: 80%; } |
|||
.ns-talk .mw-body-content dd { margin-top: 0.4em; margin-bottom: 0.4em; } |
|||
/* --- Collapsible elements --- */ |
|||
.client-js .collapsible:not(.mw-made-collapsible).collapsed > tbody > tr:not(:first-child), |
|||
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > p, |
|||
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > table, |
|||
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) > thead + tbody, |
|||
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) tr:not(:first-child), |
|||
.client-js .outercollapse .innercollapse.mw-collapsible:not(.mw-made-collapsible) .mw-collapsible-content, |
|||
#editpage-specialchars { |
|||
display: none; |
|||
} |
|||
.references { margin-bottom: 0.5em; } |
|||
/* --- Cite link styling --- */ |
|||
span[rel="mw:referencedBy"] { counter-reset: mw-ref-linkback 0; } |
|||
span[rel="mw:referencedBy"] > a::before { |
|||
content: counter(mw-ref-linkback, lower-alpha); |
|||
font-size: 80%; font-weight: bold; font-style: italic; |
|||
} |
|||
a[rel="mw:referencedBy"]::before { font-weight: bold; content: "^"; } |
|||
span[rel="mw:referencedBy"]::before { content: "^ "; } |
|||
.mw-parser-output .mw-collapsible-toggle:not(.mw-ui-button) { |
|||
font-weight: normal; padding-right: 0.2em; padding-left: 0.2em; |
|||
} |
|||
.mw-collapsible-leftside-toggle .mw-collapsible-toggle { float: left; } |
|||
/* --- PDF icons --- */ |
|||
.mw-parser-output a[href$=".pdf"].external, |
|||
.mw-parser-output a[href*=".pdf?"].external, |
|||
.mw-parser-output a[href*=".pdf#"].external, |
|||
.mw-parser-output a[href$=".PDF"].external, |
|||
.mw-parser-output a[href*=".PDF?"].external, |
|||
.mw-parser-output a[href*=".PDF#"].external { |
|||
background: url("//upload.wikimedia.org/wikipedia/commons/4/4d/Icon_pdf_file.png") no-repeat right; |
|||
padding: 8px 18px 8px 0; |
|||
} |
|||
/* --- Warnings and notices --- */ |
|||
.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt.mw-warning-with-logexcerpt, |
|||
div.mw-lag-warn-high, div.mw-cascadeprotectedwarning, div#mw-protect-cascadeon { |
|||
clear: both; margin: 0.2em 0; border: 1px solid #bb7070; |
|||
background-color: var(--background-color-error-subtle, #ffdbdb); |
|||
padding: 0.25em 0.9em; box-sizing: border-box; |
|||
} |
|||
.mw-contributions-blocked-notice-partial .mw-warning-with-logexcerpt.mw-warning-with-logexcerpt { |
|||
border-color: #fc3; background-color: var(--background-color-warning-subtle, #fef6e7); |
|||
} |
|||
@media (min-width: 640px) { |
|||
figure[typeof~="mw:File/Thumb"], figure[typeof~="mw:File/Frame"], .thumbinner { min-width: 100px; } |
|||
} |
|||
#mw-subcategories, #mw-pages, #mw-category-media, #filehistory, #wikiPreview, #wikiDiff { clear: both; } |
|||
/* --- Permission groups (hidden by default) --- */ |
|||
.checkuser-show, .sysop-show, .abusefilter-show, .abusefilter-helper-show, |
|||
.patroller-show, .templateeditor-show, .extendedmover-show, .extendedconfirmed-show, |
|||
.autoconfirmed-show, .user-show { display: none; } |
|||
.ve-ui-mwNoticesPopupTool-item .editnotice-redlink, |
|||
.ve-ui-mwNoticesPopupTool-item .mbox-image, |
|||
.ve-ui-mwNoticesPopupTool-item .mbox-imageright { display: none !important; } |
|||
ul.permissions-errors { margin: 0; } |
|||
ul.permissions-errors > li { list-style: none; } |
|||
/* --- Math rendering --- */ |
|||
span.mwe-math-mathml-inline { font-size: 118%; } |
|||
.mwe-math-fallback-image-display, .mwe-math-mathml-display { |
|||
margin-left: 1.6em !important; margin-top: 0.6em; margin-bottom: 0.6em; |
|||
} |
|||
.mwe-math-mathml-display math { display: inline; } |
|||
@media screen { |
|||
body:not(.ns-0):not(.ns-2):not(.ns-100) .gallerybox .thumb img { |
|||
background: #fff url(//upload.wikimedia.org/wikipedia/commons/5/5d/Checker-16x16.png) repeat; |
|||
} |
|||
#siteSub { display: block; } |
|||
.references { font-size: 90%; } |
|||
} |
|||
.flaggedrevs_draft_synced, .flaggedrevs_stable_synced, #t-upload, |
|||
.mw-special-Book #coll-downloadbox { display: none; } |
|||
/* --- Infoboxes (structure only — width/border/background/font owned |
|||
by section 12) --- */ |
|||
.infobox { |
|||
padding: 0.2em; |
|||
line-height: 1.5em; border-spacing: 3px; |
|||
} |
|||
@media (max-width: 640px) { .infobox .nowrap { white-space: normal; } } |
|||
@media (min-width: 640px) { |
|||
.infobox { margin: 0.5em 0 0.5em 1em; float: right; clear: right; } |
|||
} |
|||
.infobox-header, .infobox-label, .infobox-above, .infobox-full-data, .infobox-data, |
|||
.infobox-below, .infobox-subheader, .infobox-image, .infobox-navbar, |
|||
.infobox th, .infobox td { vertical-align: top; } |
|||
.infobox-label, .infobox-data, .infobox th, .infobox td { text-align: left; } |
|||
.infobox .infobox-above, .infobox .infobox-title, .infobox caption { |
|||
font-size: 125%; font-weight: bold; text-align: center; padding: 0.2em; |
|||
} |
|||
.infobox .infobox-header, .infobox .infobox-subheader, .infobox .infobox-image, |
|||
.infobox .infobox-full-data, .infobox .infobox-below { text-align: center; } |
|||
.infobox .infobox-navbar { text-align: right; } |
|||
/* --- Text utilities --- */ |
|||
.nounderlines a, .IPA a:link, .IPA a:visited { text-decoration: none !important; } |
|||
.nowrap, .nowraplinks a { white-space: nowrap; } |
|||
.wrap, .wraplinks a { white-space: normal; } |
|||
span.texhtml { |
|||
font-family: "Nimbus Roman No9 L", "Times New Roman", Times, serif; |
|||
font-size: 118%; line-height: 1; |
|||
font-variant-numeric: lining-nums tabular-nums; font-kerning: none; |
|||
} |
|||
span.texhtml span.texhtml { font-size: 100%; } |
|||
@media (min-width: 640px) { span.texhtml { white-space: nowrap; } } |
|||
@media (max-width: 640px) { |
|||
.flagicon a > img, .flagicon noscript > img { max-width: none !important; } |
|||
} |
|||
@media screen { .nochecker .gallerybox .thumb img { background-image: none; } } |
|||
/* --- YouTube embeds --- */ |
|||
.mw-parser-output iframe[src*="youtube.com"], |
|||
.mw-parser-output iframe[src*="youtube-nocookie.com"] { |
|||
width: 100% !important; max-width: 320px; height: auto !important; |
|||
aspect-ratio: 16 / 9; display: block; margin: 0 auto; |
|||
} |
|||
/* ================================================================= |
|||
2. LAYOUT & SPACING |
|||
================================================================= */ |
|||
/* --- Content width & readability --- */ |
|||
#content { |
|||
max-width: 900px; |
|||
margin: 0 auto; |
|||
line-height: 1.6; |
|||
} |
|||
/* --- Header reset (invisible fixed container for floating buttons) --- */ |
|||
.header-container.header-chrome { |
|||
position: fixed !important; |
|||
top: 0 !important; left: 0 !important; right: 0 !important; |
|||
height: 60px !important; |
|||
z-index: 1000 !important; |
|||
pointer-events: none !important; |
|||
background: transparent !important; |
|||
border: none !important; |
|||
box-shadow: none !important; |
|||
} |
|||
.minerva-header { |
|||
background: transparent !important; |
|||
border: none !important; |
|||
box-shadow: none !important; |
|||
} |
|||
.header-container .navigation-drawer { display: none !important; } |
|||
/* --- Top margin resets (remove white gap) --- */ |
|||
body.skin-minerva { padding-top: 0 !important; } |
|||
#content, |
|||
#content.mw-body, |
|||
.mw-body { |
|||
margin-top: 0 !important; |
|||
padding-top: 0 !important; |
|||
} |
|||
.banner-container, |
|||
#siteNotice { |
|||
padding: 0 !important; |
|||
margin: 0 !important; |
|||
} |
|||
.pre-content, |
|||
.page-heading, |
|||
.firstHeading { |
|||
margin-top: 0 !important; |
|||
padding-top: 0 !important; |
|||
} |
|||
/* Push title down so it clears the invisible header */ |
|||
.pre-content.heading-holder { |
|||
padding-top: 70px !important; /* 60px header + 10px visual space */ |
|||
display: block !important; |
|||
} |
|||
@media (prefers-reduced-motion: reduce) { |
|||
html { scroll-behavior: auto; } |
|||
} |
|||
/* ================================================================= |
|||
3. BRANDING (Logo, Tagline — Desktop Header & Mobile Footer) |
|||
================================================================= */ |
|||
/* --- Desktop: hide logo wordmark, inject tagline --- */ |
|||
.mw-logo-container { display: none !important; } |
|||
.mw-logo-wordmark { |
|||
display: none !important; |
|||
visibility: hidden !important; |
|||
width: 0 !important; |
|||
} |
|||
.mw-logo:hover, |
|||
.mw-logo:active, |
|||
.mw-logo:focus { text-decoration: none !important; } |
|||
.mw-logo::after { |
|||
content: "Unleashing \A intelligence"; |
|||
font-size: 0.875em; |
|||
font-weight: 700; |
|||
line-height: 1.4; |
|||
color: var(--text-dark) !important; |
|||
text-decoration: none !important; |
|||
cursor: pointer; |
|||
display: block; |
|||
white-space: pre; |
|||
margin-left: 3px; |
|||
text-align: left; |
|||
position: relative; |
|||
top: 3px; |
|||
} |
|||
@media screen and (max-width: 900px) { |
|||
.mw-logo::after { display: none !important; } |
|||
} |
|||
/* --- Mobile footer: logo image + tagline --- */ |
|||
.minerva-footer-logo { |
|||
font-size: 0 !important; |
|||
color: transparent !important; |
|||
display: block !important; |
|||
text-align: left !important; |
|||
margin-bottom: 20px !important; |
|||
} |
|||
.minerva-footer-logo::before { |
|||
content: "" !important; |
|||
display: block !important; |
|||
background-image: url("https://pro-wiki.s3.eu-central-1.amazonaws.com/2776118/Logo.png"); |
|||
width: 160px; |
|||
height: 50px; |
|||
background-repeat: no-repeat !important; |
|||
background-size: contain !important; |
|||
background-position: left center !important; |
|||
margin-bottom: 6px !important; |
|||
} |
|||
.minerva-footer-logo::after { |
|||
content: "Unleashing intelligence" !important; |
|||
font-size: 0.875rem !important; |
|||
font-weight: 700 !important; |
|||
line-height: 1.4 !important; |
|||
color: #202122 !important; |
|||
display: block !important; |
|||
white-space: pre-wrap !important; |
|||
} |
|||
/* Force hidden Minerva footer links to appear */ |
|||
body.skin-minerva #footer-places-about, |
|||
body.skin-minerva #footer-places-disclaimers { |
|||
display: inline-block !important; |
|||
} |
|||
/* --- Fullscreen logo (fits content width) --- */ |
|||
.fullscreen-logo { |
|||
width: 100% !important; |
|||
padding: 0 !important; |
|||
margin: 0 auto !important; |
|||
max-width: 900px !important; |
|||
} |
|||
.fullscreen-logo figure, |
|||
.fullscreen-logo .mw-default-size, |
|||
.fullscreen-logo .mw-halign-center { |
|||
max-width: 100% !important; |
|||
width: 100% !important; |
|||
margin: 0 !important; |
|||
padding: 0 !important; |
|||
} |
|||
.fullscreen-logo figure > span { |
|||
display: block !important; |
|||
width: 100% !important; |
|||
} |
|||
.fullscreen-logo img.mw-file-element { |
|||
display: block !important; |
|||
width: 100% !important; |
|||
max-width: 100% !important; |
|||
height: auto !important; |
|||
min-width: 0 !important; |
|||
} |
|||
/* ================================================================= |
|||
4. CAPSACH MOBILE TOC OVERLAY |
|||
================================================================= */ |
|||
/* --- Base state (JS toggles visibility) --- */ |
|||
#cps-open-toc { |
|||
position: fixed; |
|||
display: none; |
|||
} |
|||
/* --- Full-screen scrim --- */ |
|||
#cps-toc-overlay { |
|||
position: fixed; inset: 0; |
|||
background: rgba(0,0,0,0.4); |
|||
display: none; |
|||
z-index: 1004; |
|||
} |
|||
#cps-toc-overlay.is-open { display: block; } |
|||
/* --- Dropdown panel --- */ |
|||
#cps-toc-panel { |
|||
position: fixed; |
|||
top: 0 !important; |
|||
left: 0 !important; |
|||
right: 0 !important; |
|||
margin: 0 auto !important; |
|||
bottom: auto !important; |
|||
width: 100% !important; |
|||
max-width: 900px !important; |
|||
max-height: calc(100vh - 60px) !important; |
|||
border-radius: 0 !important; |
|||
background: #ffffff !important; |
|||
color: #202122 !important; |
|||
box-shadow: 0 10px 30px rgba(0,0,0,0.15) !important; |
|||
padding: 15px !important; |
|||
box-sizing: border-box !important; |
|||
overflow-y: auto !important; |
|||
-webkit-overflow-scrolling: touch; |
|||
z-index: 1005 !important; |
|||
display: none; |
|||
} |
|||
.is-open #cps-toc-panel, |
|||
#cps-toc-overlay.is-open + #cps-toc-panel, |
|||
#cps-toc-panel[style*="display: block"] { |
|||
display: block !important; |
|||
} |
|||
/* --- Panel header reset --- */ |
|||
#cps-toc-header { |
|||
background: transparent !important; |
|||
padding: 0 !important; |
|||
margin: 0 !important; |
|||
border: none !important; |
|||
min-height: 0 !important; |
|||
} |
|||
/* --- Title bar (grey block) --- */ |
|||
#cps-toc-panel > h2, |
|||
#cps-toc-title { |
|||
background-color: #F8F9FA !important; |
|||
margin: -15px -15px 15px !important; |
|||
padding: 20px 0 !important; |
|||
border-bottom: 1px solid #eaecf0 !important; |
|||
display: block !important; |
|||
width: auto !important; |
|||
text-align: center !important; |
|||
color: #202122 !important; |
|||
font-size: 18px !important; |
|||
font-family: sans-serif !important; |
|||
font-weight: bold !important; |
|||
} |
|||
/* Hide close button and duplicate headings */ |
|||
#cps-toc-close, |
|||
#cps-toc-panel .toctitle, |
|||
#cps-toc-panel #mw-toc-heading, |
|||
#cps-toc-panel h2 { |
|||
display: none !important; |
|||
} |
|||
/* --- TOC list --- */ |
|||
#cps-toc-list { list-style: none; margin: 0; padding: 0; } |
|||
#cps-toc-list li { margin: 0; } |
|||
#cps-toc-list a { |
|||
display: block; padding: 12px 10px; |
|||
border-bottom: 1px solid #f8f8f8; |
|||
text-decoration: none; |
|||
color: #202122; |
|||
font-size: 15px; |
|||
line-height: 1.4; |
|||
} |
|||
#cps-toc-list a:active { |
|||
background: #f0f0f0; |
|||
color: #3366cc; |
|||
} |
|||
/* Indentation levels */ |
|||
#cps-toc-list li[data-level="3"] { padding-left: 15px; } |
|||
#cps-toc-list li[data-level="4"] { padding-left: 30px; } |
|||
#cps-toc-list li[data-level="5"] { padding-left: 45px; } |
|||
/* "Contents" header link — bold, orange, dark border */ |
|||
#cps-toc-list a[href="#mw-toc-heading"] { |
|||
font-weight: bold !important; |
|||
color: #f07662 !important; |
|||
border-bottom: 1px solid #202122 !important; |
|||
} |
|||
/* Arrow prefix (▸) for level 2 and 3 items */ |
|||
#cps-toc-list li[data-level="2"] a::before, |
|||
#cps-toc-list li[data-level="3"] a::before { |
|||
content: "▸" !important; |
|||
color: #202122 !important; |
|||
margin-right: 8px; |
|||
display: inline-block; |
|||
} |
|||
/* Remove arrow from "Contents" header (technically level 2) */ |
|||
#cps-toc-list li[data-level="2"] a[href="#mw-toc-heading"]::before { |
|||
display: none !important; |
|||
content: "" !important; |
|||
} |
|||
/* Hide default in-article TOC */ |
|||
.toc, |
|||
#toc, |
|||
.mw-parser-output #toc, |
|||
.client-js .mw-content-ltr .toc { |
|||
display: none !important; |
|||
} |
|||
/* ================================================================= |
|||
5. FLOATING BOTTOM BUTTONS (Search, Home, ToC, Email) |
|||
================================================================= */ |
|||
/* --- Shared styles (all 4 buttons + search input) --- */ |
|||
.branding-box, |
|||
#searchIcon, |
|||
#cps-open-toc, |
|||
#custom-email-btn, |
|||
body.mw-mf-search-mode .minerva-header .search-box input { |
|||
background-color: rgba(0, 0, 0, 0.2) !important; |
|||
opacity: 1 !important; |
|||
border-radius: 50% !important; |
|||
border: none !important; |
|||
box-shadow: none !important; |
|||
backdrop-filter: none !important; |
|||
pointer-events: auto !important; |
|||
box-sizing: border-box !important; |
|||
width: 44px !important; |
|||
height: 44px !important; |
|||
min-width: 44px !important; |
|||
max-width: 44px !important; |
|||
padding: 0 !important; |
|||
margin: 0 !important; |
|||
position: fixed !important; |
|||
top: auto !important; |
|||
bottom: calc(15px + env(safe-area-inset-bottom)) !important; |
|||
transform: translateZ(0); |
|||
will-change: transform; |
|||
left: 50% !important; |
|||
right: auto !important; |
|||
display: flex !important; |
display: flex !important; |
||
align-items: center; |
|||
justify-content: center; |
|||
z-index: 1002 !important; |
|||
} |
} |
||
/* |
/* 2. Restore Individual User Buttons */ |
||
/* 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-userpage, |
||
#pt-mytalk, |
#pt-mytalk, |
||
| Line 616: | Line 23: | ||
#pt-mycontris, |
#pt-mycontris, |
||
#pt-logout { |
#pt-logout { |
||
display: |
display: block !important; |
||
} |
} |
||
/* the catlinks bar stays visible for editors, but not when it's an |
|||
/* --- Tools (sidebar, dropdowns, tabs) --- */ |
|||
EMPTY box (all of the page's categories are hidden ones) */ |
|||
#p-tb, |
|||
#catlinks.catlinks-allhidden { display: none !important; } |
|||
/* 3. Restore Tools (Sidebar & Dropdowns) */ |
|||
#vector-page-tools, |
#vector-page-tools, |
||
#vector-page-tools-dropdown, |
#vector-page-tools-dropdown, |
||
#p-tb, |
|||
.vector-page-tools, |
|||
.vector-p-tb, |
.vector-p-tb, |
||
#p-coll-print_export { |
|||
display: block !important; |
|||
} |
|||
/* 4. Restore Tabs (History, Talk, Edit) */ |
|||
#ca-viewsource, |
#ca-viewsource, |
||
#ca-history, |
#ca-history, |
||
#ca-talk { |
#ca-talk { |
||
display: |
display: block !important; |
||
} |
} |
||
/* |
/* 5. Restore Categories Bar */ |
||
/* Essential if you want to manage categories */ |
|||
#catlinks, |
#catlinks, |
||
.catlinks, |
.catlinks, |
||
.mw-normal-catlinks { |
.mw-normal-catlinks { |
||
display: |
display: block !important; |
||
} |
} |
||
/* ======================================================= */ |
|||
/* --- Page actions (Language, Watch, Edit, etc.) --- */ |
|||
/* RESTORE PAGE ACTIONS FOR LOGGED-IN USERS */ |
|||
/* ======================================================= */ |
|||
#p-views, |
#p-views, |
||
.page-actions-menu__list |
.page-actions-menu__list { |
||
/* Use FLEX because this menu needs horizontal alignment */ |
|||
.page-actions-menu { |
|||
display: |
display: flex !important; |
||
} |
} |
||
/* ======================================================= */ |
|||
/* --- Vector 2022 page toolbar & pre-content --- */ |
|||
/* RESTORE INTERFACE FOR LOGGED-IN USERS */ |
|||
.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; |
|||
} |
|||
/* Restore Vector 2022 Toolbar */ |
|||
/* --- Action buttons (copy, source) --- */ |
|||
/* We use 'flex' because Vector 2022 uses flexbox for alignment */ |
|||
.ext-aiassistant-message-assistant .ext-aiassistant-actions { |
|||
.vector-page-toolbar { |
|||
display: flex !important; |
display: flex !important; |
||
flex-direction: row-reverse !important; |
|||
} |
} |
||
/* Restore SiteSub ("From...") and Indicators */ |
|||
.ext-aiassistant-message-user .ext-aiassistant-actions { |
|||
.vector-body-before-content { |
|||
display: flex !important; |
|||
display: block !important; |
|||
} |
} |
||
/* |
/* Restore the RIGHT RAIL (.vector-column-end): Common.css section 12 |
||
hides it for everyone, but PINNED page tools (incl. the Delete |
|||
.ext-aiassistant-cite { |
|||
action) render inside it — without this rule the Tools menu has no |
|||
line-height: 1 !important; |
|||
home on the page even for admins (the toolbar itself shows, but a |
|||
font-size: 80% !important; |
|||
pinned Tools panel lives in this column). */ |
|||
vertical-align: super !important; |
|||
.vector-column-end { |
|||
display: block !important; |
|||
} |
} |
||
/* ======================================================= */ |
|||
/* --- Sources --- */ |
|||
/* RESTORE HEADER MENUS FOR LOGGED-IN USERS */ |
|||
.ext-aiassistant-sources { |
|||
/* ======================================================= */ |
|||
background: transparent !important; |
|||
border: none !important; |
|||
box-shadow: none !important; |
|||
padding: 0 !important; |
|||
margin-bottom: 12px !important; |
|||
} |
|||
.vector-menu-content { |
|||
/* --- "New Chat" label (color set by section 12) --- */ |
|||
/* Use flex to maintain correct horizontal alignment of icons */ |
|||
.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; |
display: flex !important; |
||
align-items: center !important; |
|||
justify-content: center !important; |
|||
padding: 0 !important; |
|||
box-sizing: border-box !important; |
|||
} |
} |
||
/* ======================================================= */ |
|||
.ext-aiassistant-prompt-composer { |
|||
/* RESTORE FULL WIDTH FOR LOGGED-IN USERS (EDITORS) */ |
|||
margin: 0 !important; |
|||
/* Overrides the 900px limit set in Common.css */ |
|||
width: 100% !important; |
|||
/* ======================================================= */ |
|||
background-color: #fff !important; |
|||
padding: 10px 20px !important; |
|||
border: none !important; |
|||
border-radius: 0 !important; |
|||
} |
|||
#content { |
|||
.ext-aiassistant-prompt-composer__toolbar { |
|||
max-width: none !important; |
|||
margin: 0 !important; /* Optional: Resets centering if you want it strictly left-aligned */ |
|||
align-items: center !important; |
|||
} |
|||
/* --- Send button (shape; colors set by section 12) --- */ |
|||
.ext-aiassistant-prompt-composer__send { |
|||
border-radius: 50% !important; |
|||
width: 32px !important; |
|||
height: 32px !important; |
|||
min-width: 0 !important; |
|||
padding: 0 !important; |
|||
display: flex !important; |
|||
align-items: center !important; |
|||
justify-content: center !important; |
|||
margin-left: 4px !important; |
|||
} |
|||
.ext-aiassistant-prompt-composer__send:disabled .cdx-icon svg { |
|||
fill: #72777d !important; |
|||
} |
|||
/* ================================================================= |
|||
9. RESPONSIVE OVERRIDES |
|||
================================================================= */ |
|||
/* --- Mobile (max-width: 768px) --- */ |
|||
@media screen and (max-width: 768px) { |
|||
/* AI assistant: fullscreen mode */ |
|||
.ext-aiassistant-panel { |
|||
position: fixed !important; |
|||
box-sizing: border-box !important; |
|||
width: 100% !important; |
|||
height: 100% !important; |
|||
max-width: none !important; |
|||
max-height: none !important; |
|||
top: 0 !important; |
|||
left: 0 !important; |
|||
right: 0 !important; |
|||
bottom: 0 !important; |
|||
border-radius: 0 !important; |
|||
margin: 0 !important; |
|||
} |
|||
.ext-aiassistant-body { |
|||
height: auto !important; |
|||
flex-grow: 1 !important; |
|||
} |
|||
/* Push input above sticky buttons */ |
|||
.ext-aiassistant-footer { |
|||
padding-bottom: calc(70px + env(safe-area-inset-bottom)) !important; |
|||
} |
|||
/* Prevent iOS zoom on AI input */ |
|||
.ext-aiassistant-panel input, |
|||
.ext-aiassistant-panel textarea, |
|||
.ext-aiassistant-panel .cdx-text-input__input { |
|||
font-size: 16px !important; |
|||
} |
|||
/* Prevent horizontal scroll */ |
|||
html, body { |
|||
overflow-x: hidden !important; |
|||
width: 100% !important; |
|||
position: relative; |
|||
} |
|||
/* Hide AI shortcut hint */ |
|||
.ext-aiassistant-shortcut-hint { display: none !important; } |
|||
} |
|||
/* --- Tablet (min-width: 768px) --- */ |
|||
@media screen and (min-width: 768px) { |
|||
/* Keep ToC button visible above panel overlays */ |
|||
#cps-open-toc { |
|||
visibility: visible !important; |
|||
z-index: 9999 !important; |
|||
} |
|||
} |
|||
/* --- Desktop (min-width: 1000px) --- */ |
|||
@media screen and (min-width: 1000px) { |
|||
/* Wider content column */ |
|||
#content { max-width: 1200px !important; } |
|||
/* Match logo to wider content */ |
|||
.fullscreen-logo { max-width: 100% !important; } |
|||
.fullscreen-logo img.mw-file-element { |
|||
max-width: min(100%, 1200px) !important; |
|||
margin: 0 auto !important; |
|||
} |
|||
/* Hide ToC button on desktop Vector 2022 (full sidebar available) */ |
|||
body.skin-vector-2022 #cps-open-toc { display: none !important; } |
|||
} |
|||
/* ================================================================= |
|||
10. PRINT STYLES |
|||
================================================================= */ |
|||
@media print { |
|||
/* --- Hide floating buttons, overlays, and AI assistant --- */ |
|||
#searchIcon, |
|||
.branding-box, |
|||
#cps-open-toc, |
|||
#custom-email-btn, |
|||
#cps-toc-panel, |
|||
#cps-toc-overlay, |
|||
.minerva-header .search-box, |
|||
.ext-aiassistant, |
|||
.ext-aiassistant-panel, |
|||
.ext-aiassistant-trigger { |
|||
display: none !important; |
|||
} |
|||
/* --- Hide standard MediaWiki UI elements to free up space --- */ |
|||
#mw-navigation, |
|||
#footer, |
|||
.printfooter, |
|||
.mw-editsection { |
|||
display: none !important; |
|||
} |
|||
/* --- Font consistency for lists --- */ |
|||
.mw-parser-output ul, |
|||
.mw-parser-output ol, |
|||
.mw-parser-output li { |
|||
font-family: inherit !important; |
|||
} |
|||
/* --- Remove underlines specifically from internal links in print --- */ |
|||
.mw-parser-output a:not(.external), |
|||
.mw-parser-output a:not(.external):visited { |
|||
text-decoration: none !important; |
|||
} |
|||
} |
|||
/* ============================================================================ |
|||
SECTION 11 — WIKITABLES: table TYPES |
|||
- .wikitable = NEUTRAL default: themed (frame, caption, header |
|||
tint, hairlines, hover) but free-form — columns |
|||
flex, labels wrap, nothing frozen. |
|||
- .wikitable.fintable = FINANCIAL bundle: frozen nowrap first column + |
|||
data-column width floors. The bot emits the class |
|||
automatically on numeric-dense tables; add it by |
|||
hand to get the same behavior on a manual table. |
|||
- Future table types = one new class, one new bundle below. |
|||
- .wt-freeze-2 = add-on modifier: freeze columns 1+2 (mark column 1 |
|||
col-xs so column 2 knows where to stick). |
|||
============================================================================ */ |
|||
:root { |
|||
/* column size scale — markers map to these; an UNMARKED column flexes */ |
|||
--wt-xs: 3em; |
|||
--wt-s: 6em; |
|||
--wt-m: 9em; |
|||
--wt-l: 15em; |
|||
--wt-xl: 24em; |
|||
--wt-xxl: 39em; |
|||
/* row-label indent step — the wt-indent-N classes multiply it; tunable here |
|||
(not baked inline), so a change applies to every class-based page, no re-render */ |
|||
--wt-indent-step: 1.5em; |
|||
/* NB: this block is STRUCTURAL tokens only — every color token (ink, |
|||
accent, --wt-th-bg) lives in section 12's :root, the single color |
|||
authority. §11 no longer renders standalone; the sheet is managed |
|||
wholesale, so the old standalone-then-theme split is retired. */ |
|||
--wt-pad-y: 0.5em; |
|||
} |
|||
/* ── Theme: EVERY wikitable, any type ── */ |
|||
.wikitable { width: 100% !important; } |
|||
table.wikitable { |
|||
font-size: 0.85em; |
|||
border: 1px solid var(--text-dark); |
|||
font-variant-numeric: tabular-nums; |
|||
margin-top: 0.3em; |
|||
margin-bottom: 2em; |
|||
} |
|||
/* (td/caption backgrounds + caption typography are owned by §12) */ |
|||
table.wikitable > tr > th, |
|||
table.wikitable > tr > td, |
|||
table.wikitable > * > tr > th, |
|||
table.wikitable > * > tr > td { |
|||
border: 0; /* inner grid removed. NOT `transparent` — under border-collapse a |
|||
transparent border reveals the white table bg, which shows as white |
|||
lines over the tinted header/hover rows. border:0 = truly no line; |
|||
frame + header-divider are set explicitly on edge cells and win. */ |
|||
padding: var(--wt-pad-y) 0.6em; |
|||
} |
|||
table.wikitable > * > tr > th { |
|||
background-color: var(--wt-th-bg); |
|||
color: var(--text-dark); /* header cells are emphasized (bold) → dark */ |
|||
} |
|||
table.wikitable > * > tr:first-child > th, |
|||
table.wikitable > * > tr:first-child > td { border-top: 1px solid var(--text-dark); } |
|||
/* the ONE header divider — PURE header rows only (`:not(:has(> td))`). |
|||
Transcript tables carry the printed row LABELS as <th> inside data rows; |
|||
without the guard every label cell drew its own dark underline (broken |
|||
segments down the first column). Interior all-<th> band rows (one framed |
|||
table with repeated section headers) still get the divider, as printed. */ |
|||
table.wikitable > * > tr:has(> th):not(:has(> td)):has(+ tr > td) > th { border-bottom: 1px solid var(--text-dark); } |
|||
table.wikitable > * > tr:last-child > td, |
|||
table.wikitable > * > tr:last-child > th { border-bottom: 1px solid var(--text-dark); } |
|||
/* a top rule ABOVE emphasized (strong/bold) rows — they are sums or section |
|||
headers, so a hairline above them improves readability. :has() gives it a |
|||
higher specificity than the base border:0, so it wins on the interior; the |
|||
first-row frame (ink) still outranks it, so a strong first row |
|||
keeps the medium frame rather than a doubled line. Collapses cleanly with the |
|||
header divider (same ink) when a strong row sits right under a header. |
|||
Every pipeline now marks a bold row the same way — '''bold''' -> <b>/<strong> |
|||
(wikitable.py wraps total rows; the SEC path no longer emits inline |
|||
font-weight:bold), so one selector covers them all. */ |
|||
table.wikitable > * > tr:has(b, strong) > th, |
|||
table.wikitable > * > tr:has(b, strong) > td { |
|||
border-top: 1px solid var(--text-dark); |
|||
} |
|||
table.wikitable > tbody > tr:hover > td { background-color: #f8f9fa; } |
|||
table.wikitable td p { font-size: inherit !important; } |
|||
/* ── Column size scale: usable on ANY table type ── */ |
|||
.wikitable th.col-xs, .wikitable td.col-xs { width: var(--wt-xs); min-width: var(--wt-xs); } |
|||
.wikitable th.col-s, .wikitable td.col-s { width: var(--wt-s); min-width: var(--wt-s); } |
|||
.wikitable th.col-m, .wikitable td.col-m { width: var(--wt-m); min-width: var(--wt-m); } |
|||
.wikitable th.col-l, .wikitable td.col-l { width: var(--wt-l); min-width: var(--wt-l); } |
|||
.wikitable th.col-xl, .wikitable td.col-xl { width: var(--wt-xl); min-width: var(--wt-xl); } |
|||
.wikitable th.col-xxl, .wikitable td.col-xxl { width: var(--wt-xxl); min-width: var(--wt-xxl); } |
|||
/* legacy marker names on published pages = aliases of s / m */ |
|||
.wikitable th.col, .wikitable td.col { width: var(--wt-s); min-width: var(--wt-s); } |
|||
.wikitable th.col-wide, .wikitable td.col-wide { width: var(--wt-m); min-width: var(--wt-m); } |
|||
/* ── FINTABLE bundle — THE definition of "financial table" on this wiki. |
|||
Applies to .fintable (emitter-typed numeric-dense tables) and, via |
|||
:has(), to every already-published bot table — they all carry the |
|||
legacy col/col-wide markers, so the back catalogue upgrades with NO |
|||
re-publishing. The bridge is scoped to the LEGACY marker names only: |
|||
col-s/col-m on a neutral hand table does NOT trigger financial |
|||
behavior. Repeat this selector group verbatim wherever fintable |
|||
scoping is needed (section 12 uses it too). ── */ |
|||
/* data-column floor (legacy pages can have unmarked data columns) */ |
|||
table.wikitable.fintable th:not(:first-child), |
|||
table.wikitable.fintable td:not(:first-child), |
|||
table.wikitable:has(.col, .col-wide) th:not(:first-child), |
|||
table.wikitable:has(.col, .col-wide) td:not(:first-child) { min-width: var(--wt-s); } |
|||
/* frozen row-label column. white-space:normal (NOT nowrap) with a max-width |
|||
cap: a normal label keeps to one line as long as it fits (auto table layout |
|||
sizes the column to its content), but a runaway label — e.g. a long note |
|||
that ends up in the cell — WRAPS at ~2/3 of the table instead of forcing a |
|||
giant one-line column that pushes the data off-screen. overflow-wrap breaks |
|||
an unbreakable token. min-width keeps it from collapsing too narrow. */ |
|||
table.wikitable.fintable th:first-child, |
|||
table.wikitable.fintable td:first-child, |
|||
table.wikitable:has(.col, .col-wide) th:first-child, |
|||
table.wikitable:has(.col, .col-wide) td:first-child { |
|||
white-space: normal; |
|||
max-width: 66%; /* hard cap: never hog more than ~2/3 */ |
|||
overflow-wrap: anywhere; |
|||
min-width: 16em; |
|||
position: sticky; |
|||
left: 0; |
|||
z-index: 1; |
|||
box-shadow: 1px 0 0 var(--text-dark); |
|||
} |
|||
table.wikitable.fintable td:first-child, |
|||
table.wikitable:has(.col, .col-wide) td:first-child { background-color: #fff; } |
|||
table.wikitable.fintable th:first-child, |
|||
table.wikitable:has(.col, .col-wide) th:first-child { background-color: var(--wt-th-bg); } |
|||
/* ── wt-freeze-2 add-on: freeze columns 1+2. Mark column 1 col-xs — column |
|||
2 sticks exactly one xs step in. Comes AFTER the fintable bundle so |
|||
its column-1 width exception wins the tie. ── */ |
|||
table.wikitable.wt-freeze-2 th:first-child, |
|||
table.wikitable.wt-freeze-2 td:first-child { |
|||
min-width: var(--wt-xs); /* overrides the fintable 16em label column */ |
|||
white-space: normal; |
|||
position: sticky; |
|||
left: 0; |
|||
z-index: 1; |
|||
} |
|||
table.wikitable.wt-freeze-2 th:nth-child(2), |
|||
table.wikitable.wt-freeze-2 td:nth-child(2) { |
|||
position: sticky; |
|||
left: var(--wt-xs); |
|||
z-index: 1; |
|||
box-shadow: 1px 0 0 var(--text-dark); |
|||
background-color: #fff; |
|||
} |
|||
table.wikitable.wt-freeze-2 th:nth-child(2) { background-color: var(--wt-th-bg); } |
|||
table.wikitable.wt-freeze-2 td:first-child { background-color: #fff; } |
|||
table.wikitable.wt-freeze-2 th:first-child { background-color: var(--wt-th-bg); } |
|||
/* ── wt-bleed add-on: a .fintable that BREAKS OUT to the right instead of scrolling in its wrapper — it |
|||
differs from plain fintable ONLY in the overflow. A wide .wt-bleed table paints past the content edge at |
|||
its natural width and the PAGE gains a horizontal scroll (default MediaWiki wide-table behavior) instead |
|||
of a per-table scrollbar. There are TWO scroll wrappers to neutralise — both via :has(…wt-bleed) + |
|||
!important (which beats their inline / script-set overflow): |
|||
1. the emitter's inline <div style="overflow-x:auto"> (Module:TermMap table_open), and |
|||
2. .copy-table-scroll — a SECOND scroll container the copy-table gadget injects (by JS, ~1s after |
|||
load) as the table's DIRECT parent. Without overriding it too, the table briefly breaks out then |
|||
SNAPS BACK the moment the gadget wraps it. |
|||
Everything else — column widths, frame, header tint, the frozen first column — stays exactly fintable. |
|||
The TOC is in the left grid column, so a right-edge breakout never reaches it. Apply by adding `wt-bleed` |
|||
to the table class (Module:TermMap does this for the Datacheck review tables). ── */ |
|||
.mw-parser-output div[style*="overflow-x"]:has(table.wikitable.wt-bleed), |
|||
.copy-table-scroll:has(table.wikitable.wt-bleed) { |
|||
overflow-x: visible !important; |
|||
} |
|||
@media screen and (max-width: 719px) { |
|||
table.wikitable { border: none !important; } |
|||
table.wikitable > tr > th, |
|||
table.wikitable > tr > td, |
|||
table.wikitable > tbody > tr > th, |
|||
table.wikitable > tbody > tr > td { |
|||
border: 0; /* inner grid removed (border:0, not transparent) */ |
|||
} |
|||
} |
|||
/* ================================================================= |
|||
12. EDITORIAL DESIGN SYSTEM v12 ("flat mono") |
|||
Appended LAST deliberately: later rules of equal specificity win, |
|||
so this section restyles typography / color / spacing WITHOUT |
|||
editing sections 1-11. This section is the SINGLE COLOR AUTHORITY — |
|||
every color token lives in its :root; sections 1-11 are structure. |
|||
v12: ONE font (STIX Two Text), ONE ink (#0d0d0d for all text AND |
|||
lines), coral for interaction only, square corners, flat controls. |
|||
The v11 warm-gray-ramp + serif/sans split was consolidated away |
|||
2026-07 — see git history for the old system. |
|||
================================================================= */ |
|||
/* ── Webfont: STIX Two Text (variable; ONE file covers 400-700 — includes |
|||
true 700 bolds, which Source Serif 4's 400-600 range did not). |
|||
@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: "STIX Two Text"; |
|||
font-style: normal; |
|||
font-weight: 400 700; |
|||
font-display: swap; |
|||
src: url(https://fonts.gstatic.com/s/stixtwotext/v18/YA9Vr02F12Xkf5whdwKf11l0p76Miw.woff2) format("woff2"); |
|||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; |
|||
} |
|||
@font-face { |
|||
font-family: "STIX Two Text"; |
|||
font-style: italic; |
|||
font-weight: 400 700; |
|||
font-display: swap; |
|||
src: url(https://fonts.gstatic.com/s/stixtwotext/v18/YA9Lr02F12Xkf5whdwKf11l0p7u8idfU.woff2) format("woff2"); |
|||
unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; |
|||
} |
|||
/* ── Design knobs — the v12 FLAT MONO system. ONE font, ONE ink, ONE |
|||
accent: |
|||
--ed-font = STIX Two Text everywhere (prose, headings, data, |
|||
chrome). There is no serif/sans split anymore. |
|||
--text-dark = THE ink: all text AND all lines/borders/frames. |
|||
Hierarchy is carried by size, weight, and space — |
|||
never by gray shades. |
|||
--ed-accent = coral, INTERACTION ONLY: link-underline hover, |
|||
focus rings, control hover borders. |
|||
--ed-underline = the one non-ink gray: resting link underlines, |
|||
quiet by design so the coral hover reads as a jump. |
|||
ONE body size, ONE small size. h3+ have NO rules (h1 carries the one |
|||
dark title rule). Historical note: v11 ran a warm 3-text/3-line gray |
|||
ramp and a serif/sans split — collapsed 2026-07 (see git history for |
|||
the old values). ── */ |
|||
:root { |
|||
--ed-font: "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: STIX Two Text has a smaller |
|||
x-height than the old Source Serif 4, so +1px |
|||
restores the same optical size (was 1rem) */ |
|||
--ed-small: 0.875rem; /* THE small size: tables, infobox, TOC, footer — |
|||
14px, same optical compensation (was 0.8125rem) */ |
|||
--ed-title-gap: 2.1rem; /* CALIBRATION: moves the title rule DOWN */ |
|||
--ed-heading-gap: 4rem; /* space BEFORE h2 AND h3 — the SAME for both (rem, not em, |
|||
so the two gaps stay equal in px despite different heading |
|||
sizes); ~2x the old h3 space (was 1.8em ≈ 32px) */ |
|||
--ed-list-indent: var(--ed-body); /* per-level indent = marker-to-text step, tied to the |
|||
BODY size (1em = 16px) — a clean typographic ratio that the |
|||
table's first-column labels also align to (see section 12). |
|||
Still rem-based (via --ed-body), NOT em — an em offset would |
|||
resolve against each marker's own font-size. */ |
|||
/* table header fill — white: headers carry no tint; the header-row rule |
|||
+ semibold text do the work. NB: row-hover does NOT read this token |
|||
(white would kill the highlight) — hover uses a literal neutral gray. */ |
|||
--wt-th-bg: #fff; |
|||
} |
|||
/* ── Canvas: paper everywhere — page, the header band Vector |
|||
paints white on its own, the TOC column, and the TOC's |
|||
scroll-fade overlay ── */ |
|||
body, .mw-page-container { background-color: var(--ed-paper) !important; } |
|||
.vector-header-container .mw-header, |
|||
.vector-header-container .vector-sticky-header { |
|||
background-color: var(--ed-paper) !important; |
|||
} |
|||
#vector-toc, .vector-toc, .vector-pinned-container { |
|||
background-color: transparent !important; |
|||
} |
|||
/* Scrollbars: webkit-styled — square thumb, NO arrow buttons, transparent |
|||
track. Deliberately NO standard scrollbar-width/color in this sheet: |
|||
modern Chrome ignores every ::-webkit-scrollbar-* rule on an element that |
|||
also has a standard scrollbar property set, so the two systems cannot mix |
|||
(cost two debugging rounds). EXCEPTION — the sticky TOC scroller: Vector |
|||
pins a standard scrollbar prop on it directly, locking it to the |
|||
uncontrollable standard path (no square corners, no button removal |
|||
possible there) — so its bar is HIDDEN outright instead; wheel/trackpad |
|||
scrolling is unaffected. Firefox gets UA-default scrollbars. */ |
|||
#vector-toc, .vector-toc { scrollbar-width: none !important; } |
|||
::-webkit-scrollbar { width: 5px !important; height: 5px !important; } /* discreet but still draggable */ |
|||
::-webkit-scrollbar-track { background: transparent !important; } |
|||
::-webkit-scrollbar-button { /* no arrow buttons */ |
|||
display: none !important; |
|||
width: 0 !important; |
|||
height: 0 !important; |
|||
} |
|||
::-webkit-scrollbar-thumb { |
|||
background: var(--text-dark) !important; |
|||
border-radius: 0 !important; /* square, like the buttons */ |
|||
} |
|||
::-webkit-scrollbar-corner { background: transparent !important; } |
|||
/* Minerva (mobile skin) paints its own white wrappers over body */ |
|||
#mw-mf-page-center, .mw-body { background-color: var(--ed-paper) !important; } |
|||
.vector-sticky-pinned-container::after { |
|||
background: linear-gradient(transparent, var(--ed-paper)) !important; |
|||
} |
|||
@media print { body, .mw-page-container { background-color: #fff !important; } } |
|||
/* ── Visitor chrome: Appearance UI hidden for EVERYONE here, re-shown |
|||
for logged-in users in MediaWiki:Group-user.css (the wiki's |
|||
read-only-mode architecture — Group-user.css only loads when |
|||
logged in, so no body-class dependency) ── */ |
|||
.vector-appearance-landmark, |
|||
#vector-appearance-dropdown, |
|||
#vector-appearance-pinned-container, |
|||
#vector-appearance, |
|||
.vector-column-end { display: none !important; } |
|||
/* ── ONE font for everything: interface chrome, prose, and data all share |
|||
--ed-font (form controls don't inherit it — they get it explicitly |
|||
where they're styled) ── */ |
|||
body { font-family: var(--ed-font); } |
|||
/* ── Tagline ("Unleashing intelligence", the .mw-logo::after): NO underline — |
|||
unusual on a tagline — hover feedback is the text itself warming to |
|||
coral (resting ink is set in §3). ── */ |
|||
.mw-logo:hover::after { color: var(--ed-accent) !important; } |
|||
/* ── Logo on the TOC axis. Measured on the live DOM (1120px viewport): |
|||
TOC label x=48, header-start x=44, Vector's default .mw-logo |
|||
margin-left:20px put the logo at x=64. 44 + 4 = 48 → margin 4px. |
|||
Empirical at this breakpoint — re-measure if Vector's grid padding |
|||
ever changes. (The old title-axis push is removed.) ── */ |
|||
.vector-header-start .mw-logo, |
|||
.mw-logo { margin-left: 4px !important; } /* !important: Vector pins its own |
|||
20px on a more specific selector */ |
|||
/* ── Prose voice: serif, warm ink (Minerva has no .mw-body-content — |
|||
its wrapper is #bodyContent.content) ── */ |
|||
.mw-body-content, |
|||
.skin-minerva #bodyContent.content { |
|||
font-family: var(--ed-font); |
|||
font-size: var(--ed-body); |
|||
line-height: 1.6; |
|||
color: var(--text-dark); |
|||
font-variant-numeric: lining-nums; |
|||
} |
|||
/* prose runs FULL WIDTH (default MediaWiki flow, wrapping around the |
|||
floated infobox) — the old --ed-measure cap is retired */ |
|||
/* guards: the data voice stays sans at the ONE small size — otherwise the |
|||
serif body size would silently scale section 11's 0.85em tables (and |
|||
every em-based column width) */ |
|||
table.wikitable, .infobox { |
|||
font-family: var(--ed-font); |
|||
font-size: var(--ed-small); |
|||
color: var(--text-dark); /* the data voice shares the one ink */ |
|||
} |
|||
/* lighter bold in tables: the browser default 700 (header th + the <b>/<strong> |
|||
subtotal rows) reads too heavy in the sans data voice — 600 semibold is ample |
|||
emphasis */ |
|||
table.wikitable th, |
|||
table.wikitable b, |
|||
table.wikitable strong { font-weight: 600; color: var(--text-dark); } /* emphasized cells: dark + semibold */ |
|||
/* ── The table BLOCK ── |
|||
1. Printed ON the paper (not white cards): surfaces transparent; |
|||
in a FINTABLE only the sticky first column stays opaque (it |
|||
must cover scrolling content) in the paper color; hover warms. |
|||
2. Full frame in ink. Sides: the RIGHT rail is a plain |
|||
border on the last-column cells. On a NEUTRAL table the LEFT |
|||
rail is a plain table border (nothing is sticky); on a |
|||
FINTABLE it must be a box-shadow on the sticky first-column |
|||
cells — with border-collapse, borders on sticky cells do not |
|||
move when the cell sticks (they vanish on horizontal scroll), |
|||
but shadows travel with the cell — and the table's own left |
|||
border is disabled so the rail is the only line there. |
|||
The fintable selector group below is section 11's definition |
|||
of "financial table", repeated verbatim. |
|||
3. The table's outer margins move to the scroll WRAPPER so the |
|||
horizontal scrollbar hugs the bottom rule. ── */ |
|||
table.wikitable, |
|||
table.wikitable td, |
|||
table.wikitable caption { background-color: transparent; } |
|||
/* row hover comes from §11 (#f8f9fa); the frozen first column carries its |
|||
own paper bg (below) at higher specificity, so it needs its OWN hover |
|||
rule to highlight with the row */ |
|||
table.wikitable.fintable > tbody > tr:hover > td:first-child, |
|||
table.wikitable:has(.col, .col-wide) > tbody > tr:hover > td:first-child { |
|||
background-color: #f8f9fa; |
|||
} |
|||
table.wikitable.fintable td:first-child, |
|||
table.wikitable:has(.col, .col-wide) td:first-child { |
|||
background-color: var(--ed-paper); |
|||
} |
|||
table.wikitable.fintable th:first-child, |
|||
table.wikitable.fintable td:first-child, |
|||
table.wikitable:has(.col, .col-wide) th:first-child, |
|||
table.wikitable:has(.col, .col-wide) td:first-child { |
|||
border-left: none; |
|||
box-shadow: inset 1px 0 0 var(--text-dark), /* left rail — sticks with the cell */ |
|||
1px 0 0 var(--text-dark); /* right edge of the frozen column */ |
|||
} |
|||
/* LEFT + RIGHT frame edges drawn on the CELLS, matching the top/bottom |
|||
edges (section 11). The left edge MUST be on the first cell, not only |
|||
the table: with border-collapse a cell border outranks the table border. |
|||
Fintable overrides first-child border-left → none + box-shadow rail |
|||
(higher specificity, above). NB: in the v11 multi-shade system these |
|||
collapse ties could pick the WRONG (lighter) line — with one ink every |
|||
tie resolves to the same color, so the old !important right-edge |
|||
enforcement rule is gone. */ |
|||
.wikitable th:first-child, |
|||
.wikitable td:first-child { border-left: 1px solid var(--text-dark); } |
|||
.wikitable th:last-child, |
|||
.wikitable td:last-child { border-right: 1px solid var(--text-dark); } |
|||
/* row labels MEET the bullets: the first column's text starts at the SAME indent |
|||
as list text (both = --ed-list-indent), so table row-labels and bullet text read |
|||
on ONE axis. The table frame + the bullet dots already share x=0, so this lands |
|||
the second axis too. Tied to the same variable → they can never drift apart. */ |
|||
.wikitable th:first-child, |
|||
.wikitable td:first-child { padding-left: var(--ed-list-indent); } |
|||
/* Row-label indent depth — a wt-indent-N class on the label cell (emitted by |
|||
wikitable.py from the INDENT_TOKEN sentinel: spreadsheet Excel-outline levels and |
|||
SEC source padding-left/nbsp). The em step lives here (--wt-indent-step) so it is |
|||
tunable without re-rendering; additive on the base indent so each depth reads |
|||
clearly deeper. `table.wikitable td.wt-indent-N` (0,0,2,2) outranks the |
|||
:first-child base (0,0,2,1); an already-published page's inline padding-left, |
|||
if any, still wins over these until it is re-rendered. */ |
|||
table.wikitable td.wt-indent-1 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step)); } |
|||
table.wikitable td.wt-indent-2 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step) * 2); } |
|||
table.wikitable td.wt-indent-3 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step) * 3); } |
|||
table.wikitable td.wt-indent-4 { padding-left: calc(var(--ed-list-indent) + var(--wt-indent-step) * 4); } |
|||
table.wikitable { margin: 0; border-left: 1px solid var(--text-dark); } |
|||
table.wikitable.fintable, |
|||
table.wikitable:has(.col, .col-wide) { border-left: none; } |
|||
/* the table's outer margins live on the scroll WRAPPER (the emitter wraps |
|||
every table in <div style="overflow-x:auto">): top margin gives air |
|||
before the eyebrow caption + separates consecutive tables; the scrollbar |
|||
goes thin and quiet in the header-row tint */ |
|||
.mw-parser-output div[style*="overflow-x"], |
|||
.copy-table-scroll { |
|||
margin: 1em 0 2em; /* reduced top gap before tables (was 1.8em) */ |
|||
/* no standard scrollbar props here — they would knock these wrappers off |
|||
the webkit path (see the scrollbar block) */ |
|||
} |
|||
/* the copy-table gadget nests .copy-table-scroll INSIDE the emitter's overflow-x |
|||
div (a block-formatting context, so margins can't collapse through it) — zero |
|||
the inner top margin so the space before a table isn't counted twice */ |
|||
.mw-parser-output div[style*="overflow-x"] > .copy-table-scroll { margin-top: 0 !important; } |
|||
/* caption = the table's TITLE 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-font); |
|||
font-size: var(--ed-small); |
|||
font-weight: 600; |
|||
letter-spacing: 0.08em; |
|||
text-transform: uppercase; |
|||
color: var(--text-dark); |
|||
text-align: left; |
|||
padding-bottom: 0.7em; |
|||
} |
|||
/* intro sentence → SAME as body text (serif, body size, --text-dark, upright): |
|||
a sans lead reads oddly at the top of serif prose. The source is ''italic'', |
|||
so we only reset font-style to upright and let the family/size/colour/line- |
|||
height inherit the surrounding body prose. Anchored to the generated |
|||
infobox-then-intro pattern. */ |
|||
.mw-parser-output > .infobox ~ p:first-of-type > i, |
|||
.mw-parser-output > table.infobox + p > i { |
|||
font-style: normal; |
|||
} |
|||
/* ── List geometry — ONE definition for both skins: text hangs at |
|||
--ed-list-indent per level; the markers are positioned EXACTLY |
|||
below (see the ::before block). !important + the Minerva-qualified |
|||
selectors beat section 7's mobile rules and the skin defaults; |
|||
table-cell lists keep section 11's own rule (higher specificity). ── */ |
|||
.mw-parser-output ul, |
|||
.mw-parser-output ol, |
|||
body.skin-minerva .mw-parser-output ul, |
|||
body.skin-minerva .collapsible-block ul { |
|||
margin-left: 0 !important; |
|||
padding-left: var(--ed-list-indent) !important; |
|||
} |
|||
.mw-parser-output ol { padding-left: 1.4em !important; } /* numbers need more room */ |
|||
/* list rhythm: air between points, predictable nesting */ |
|||
.mw-parser-output ul { margin-top: 0.4em; } |
|||
.mw-parser-output li { margin-bottom: 0.45em; } |
|||
.mw-parser-output li li { margin-top: 0.3em; margin-bottom: 0.3em; } |
|||
.mw-parser-output li > ul { margin-top: 0.3em; } |
|||
/* markers drawn as ::before at EXACT positions: each marker's LEFT edge |
|||
sits on its parent's text axis (level 1 on the heading axis), because |
|||
left: -indent lands on the container edge, which IS the parent text x. |
|||
ONE glyph (the round bullet) at EVERY level — depth is carried by |
|||
indentation alone (the per-level padding-left above). */ |
|||
.mw-parser-output ul { list-style: none !important; } |
|||
.mw-parser-output ul > li { position: relative; } |
|||
.mw-parser-output ul > li::before { |
|||
content: "\2022"; |
|||
position: absolute; |
|||
left: calc(-1 * var(--ed-list-indent)); |
|||
color: var(--text-dark); /* markers match the body text */ |
|||
font-family: var(--ed-font); |
|||
font-size: 0.95em; |
|||
line-height: 1.68; |
|||
} |
|||
/* page-reference superscripts — present everywhere, must whisper. |
|||
line-height:0 stops them inflating the line box */ |
|||
.mw-body-content sup, |
|||
.skin-minerva .content sup { |
|||
font-size: 68%; |
|||
line-height: 0; |
|||
font-family: var(--ed-font); |
|||
color: var(--text-dark); |
|||
} |
|||
/* ── Title block: serif display, REGULAR weight, large; the title-gap |
|||
knob lands its rule on the CONTENTS rule's line ── */ |
|||
h1#firstHeading, .mw-first-heading { |
|||
font-family: var(--ed-font); |
|||
font-size: 2.4rem; |
|||
line-height: 1.15; |
|||
font-weight: 400; |
|||
letter-spacing: -0.01em; |
|||
color: var(--text-dark) !important; |
|||
border-bottom: 2px solid var(--text-dark) !important; |
|||
margin-top: var(--ed-title-gap) !important; |
|||
padding-bottom: 0.3em; |
|||
margin-bottom: 0.35em; |
|||
} |
|||
/* breadcrumb under the title rule — the shared eyebrow treatment */ |
|||
#contentSub .subpages { |
|||
font-family: var(--ed-font); |
|||
font-size: var(--ed-small); |
|||
font-weight: 600; |
|||
letter-spacing: 0.08em; |
|||
text-transform: uppercase; |
|||
color: var(--text-dark); |
|||
margin-bottom: 1.4em; |
|||
} |
|||
#contentSub .subpages a, |
|||
#contentSub .subpages a:visited { color: var(--text-dark) !important; } |
|||
/* breadcrumb links join the house link convention (it sits among plain |
|||
text, so it must look clickable like body links do) */ |
|||
#contentSub .subpages a { |
|||
text-decoration: underline; |
|||
text-decoration-color: var(--ed-underline); |
|||
text-decoration-thickness: 1px; |
|||
text-underline-offset: 0.18em; |
|||
} |
|||
#contentSub .subpages a:hover { |
|||
text-decoration-color: var(--ed-accent); |
|||
text-decoration-thickness: 2px; |
|||
} |
|||
/* ── Section headings: sans semibold on the house rules. Scoped to |
|||
.mw-body-content — Vector's own typography rules are |
|||
class-qualified (0,1,1), so bare h2/h3 selectors would LOSE. |
|||
Minerva's content wrapper is .content. ── */ |
|||
.mw-body-content h2, .mw-body-content .mw-heading2, .section-heading, |
|||
.skin-minerva .content h2 { |
|||
font-family: var(--ed-font); |
|||
font-size: 1.875rem; /* 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: 1.5rem; /* 24px */ |
|||
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; |
|||
} |
|||
.mw-body-content h4, .mw-body-content h5 { |
|||
font-family: var(--ed-font); |
|||
font-size: var(--ed-body); /* body-size headings track the body token */ |
|||
font-weight: 600; |
|||
color: var(--text-dark) !important; |
|||
} |
|||
/* 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: MORE before, LESS after. 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: 1.8em 0 0.2em !important; |
|||
} |
|||
/* pull the block right after an h6 up close, so "less space after" holds even |
|||
before a table. The emitter wraps every table in an overflow-x div (1.8em top |
|||
margin); the copy-table gadget later injects .copy-table-scroll INSIDE it |
|||
(also 1.8em) — the overflow div is a block-formatting context, so that inner |
|||
margin can't collapse away. Reset both wrappers, plus a following paragraph. */ |
|||
.mw-body-content .mw-heading6 + div[style*="overflow-x"], |
|||
.mw-body-content h6 + div[style*="overflow-x"], |
|||
.mw-body-content .mw-heading6 + div[style*="overflow-x"] > .copy-table-scroll, |
|||
.mw-body-content h6 + div[style*="overflow-x"] > .copy-table-scroll, |
|||
.mw-body-content .mw-heading6 + p, |
|||
.mw-body-content h6 + p { |
|||
margin-top: 0.2em !important; |
|||
} |
|||
/* the inner spans are pinned #202122 !important by old skin CSS — make |
|||
them follow their heading's ink instead */ |
|||
.mw-headline, .mw-page-title-main { color: inherit !important; } |
|||
/* ── Links: dark ink like body text — the underline alone marks them |
|||
(was FT teal; the resting tint underline still warms to coral on |
|||
hover) ── */ |
|||
a, a:visited, |
|||
.mw-parser-output a, .mw-parser-output a:visited, |
|||
.mw-body-content a.external, .mw-body-content a.external:visited, |
|||
.mw-collapsible-toggle-default .mw-collapsible-text { |
|||
color: var(--text-dark) !important; |
|||
} |
|||
.mw-parser-output a { |
|||
text-decoration: underline; |
|||
text-decoration-color: var(--ed-underline); |
|||
text-decoration-thickness: 1px; |
|||
text-underline-offset: 0.18em; |
|||
} |
|||
.mw-parser-output a:hover { |
|||
text-decoration-color: var(--ed-accent); |
|||
text-decoration-thickness: 2px; |
|||
} |
|||
/* exceptions re-stated AFTER the generic rules so they keep winning */ |
|||
a.new, a.new:visited { color: #d73333 !important; } |
|||
a.mw-ui-button, a.mw-ui-button:visited { color: #fff !important; } |
|||
.mw-editsection, .mw-editsection a, .mw-editsection a:visited { |
|||
color: var(--text-dark) !important; |
|||
text-decoration: none; |
|||
opacity: 0.7; |
|||
} |
|||
/* ── Focus/active states join the interactive teal — Codex paints them |
|||
in its own progressive blue (#36c) otherwise. The generic |
|||
.cdx-text-input rule covers the header search box; the AI chat |
|||
input is exempted further below (its ring sits on the composer). ── */ |
|||
.cdx-text-input__input:focus, |
|||
.cdx-text-input__input:enabled:focus { |
|||
border-color: var(--ed-accent) !important; /* = the link hover-underline color */ |
|||
box-shadow: inset 0 0 0 1px var(--ed-accent) !important; |
|||
} |
|||
.cdx-button:enabled:focus, |
|||
.cdx-button--fake-button:focus { |
|||
box-shadow: inset 0 0 0 2px var(--ed-accent) !important; |
|||
} |
|||
:focus-visible { outline-color: var(--ed-accent); } |
|||
/* ── Header search. Resting border / font / radius come from the GENERIC |
|||
Codex input rules below — only the search-specific pieces live here. ── */ |
|||
/* search bar on the BODY-TEXT axis. Measured on the live DOM (1120px |
|||
viewport): form x=294, title/body axis x=264 → pull 30px left (24px is |
|||
Codex's typeahead inset inside #p-search + 6px container offset). The |
|||
typeahead dropdown lives inside the form, so suggestions move with it. |
|||
Calibrated against the rendered logo+tagline width — re-measure if the |
|||
tagline or its font ever changes. */ |
|||
#p-search #searchform { margin-left: -30px; } |
|||
.cdx-search-input { border-radius: 0 !important; } /* the outer assembly layer */ |
|||
/* the bar hovers as ONE unit — pointing at the attached Search button warms |
|||
the input border too. !important is required: the generic input rules pin |
|||
border-color with !important, and only equal importance + higher |
|||
specificity beats them. */ |
|||
.cdx-search-input:hover .cdx-text-input__input { |
|||
border-color: var(--ed-accent) !important; |
|||
} |
|||
.cdx-search-input .cdx-search-input__end-button, |
|||
.cdx-search-input .cdx-search-input__end-button:hover, |
|||
.cdx-search-input .cdx-search-input__end-button:active, |
|||
.cdx-search-input .cdx-search-input__end-button:focus { |
|||
background-color: var(--text-dark) !important; |
|||
border-color: var(--text-dark) !important; |
|||
color: #fff !important; |
|||
box-shadow: none !important; |
|||
border-radius: 0 !important; /* square corners */ |
|||
font-family: var(--ed-font); /* buttons don't inherit the page font */ |
|||
} |
|||
/* ── ALL Codex form inputs (Special:UserLogin etc.) follow the search-bar |
|||
design: square, ink resting border, coral on hover; the generic |
|||
:focus rule above already paints the thick coral focus. The AI |
|||
composer's borderless-input exemption later in this section still |
|||
wins via !important. ── */ |
|||
/* Codex pins input colors on :enabled state selectors — restate at that |
|||
specificity with !important or the gray/rounded defaults win the tie. |
|||
The AI composer exemption still outranks all of these (higher |
|||
specificity + !important). */ |
|||
.cdx-text-input, /* the WRAPPER carries its own 2px |
|||
radius — measured on #wpName1 */ |
|||
.cdx-text-input__input, |
|||
.cdx-text-input__input:enabled { |
|||
border-radius: 0 !important; |
|||
} |
|||
.cdx-text-input__input, |
|||
.cdx-text-input__input:enabled { |
|||
border-color: var(--text-dark) !important; |
|||
font-family: var(--ed-font); |
|||
} |
|||
.cdx-text-input__input:hover, |
|||
.cdx-text-input__input:enabled:hover { border-color: var(--ed-accent) !important; } |
|||
/* Codex checkboxes ("Keep me logged in"): ink border, square; checked fill |
|||
goes ink too — Codex's progressive blue would break the mono theme */ |
|||
.cdx-checkbox__icon { |
|||
border-color: var(--text-dark) !important; |
|||
border-radius: 0 !important; |
|||
} |
|||
.cdx-checkbox__input:checked + .cdx-checkbox__icon { |
|||
background-color: var(--text-dark) !important; |
|||
border-color: var(--text-dark) !important; |
|||
} |
|||
/* form links ("Help with logging in", "Forgot your password?") follow the |
|||
house link convention — special-page forms sit outside .mw-parser-output */ |
|||
.mw-htmlform a { |
|||
text-decoration: underline; |
|||
text-decoration-color: var(--ed-underline); |
|||
text-decoration-thickness: 1px; |
|||
text-underline-offset: 0.18em; |
|||
} |
|||
.mw-htmlform a:hover { |
|||
text-decoration-color: var(--ed-accent); |
|||
text-decoration-thickness: 2px; |
|||
} |
|||
/* primary action buttons (e.g. the "Log in" submit) = the Search button: |
|||
flat ink, white label, square, every state pinned so Codex's progressive |
|||
blue never flashes through */ |
|||
.cdx-button--weight-primary.cdx-button--action-progressive, |
|||
.cdx-button--weight-primary.cdx-button--action-progressive:hover, |
|||
.cdx-button--weight-primary.cdx-button--action-progressive:active, |
|||
.cdx-button--weight-primary.cdx-button--action-progressive:focus, |
|||
.cdx-button--weight-primary.cdx-button--action-progressive:enabled:hover, |
|||
.cdx-button--weight-primary.cdx-button--action-progressive:enabled:active { |
|||
background-color: var(--text-dark) !important; |
|||
border-color: var(--text-dark) !important; |
|||
color: #fff !important; |
|||
border-radius: 0 !important; |
|||
font-family: var(--ed-font); |
|||
} |
|||
/* the TOC "hide" / "move to sidebar" pill (pin/unpin) joins the same flat |
|||
treatment — one class covers both buttons */ |
|||
.vector-pinnable-header-toggle-button, |
|||
.vector-pinnable-header-toggle-button:hover, |
|||
.vector-pinnable-header-toggle-button:active, |
|||
.vector-pinnable-header-toggle-button:focus { |
|||
background-color: var(--text-dark) !important; |
|||
border-color: var(--text-dark) !important; |
|||
color: #fff !important; |
|||
box-shadow: none !important; |
|||
border-radius: 0 !important; /* square corners */ |
|||
font-family: var(--ed-font); /* buttons don't inherit the page font */ |
|||
font-size: var(--ed-small); /* joins the ONE small size */ |
|||
} |
|||
/* ── TOC sidebar — flat left-aligned design, NO section numbers. |
|||
Every entry, ANY level, starts on ONE left axis. Depth is carried by |
|||
an inline en-dash marker generated per Vector level class: top level |
|||
bare, children "–", grandchildren "––" — flowing straight into the |
|||
title as one text run. NO indentation, NO gutter, NO absolute |
|||
positioning. Titles wrap under themselves (the marker is its own |
|||
flex item, so wrapped lines align after it). Expand/collapse is the |
|||
house triangle ▸/▾ INLINE after the heading. The CONTENTS header |
|||
left-aligns with the same axis. ── */ |
|||
.vector-toc { |
|||
font-family: var(--ed-font); |
|||
--toc-header-inset: 0; /* CONTENTS label sits on the entry axis */ |
|||
} |
|||
/* CONTENTS header: label + 1px ink rule on the title rule's line |
|||
(padding-top moves the label and rule together; padding-bottom the |
|||
rule only), inset onto the number axis */ |
|||
.vector-toc .vector-pinnable-header { |
|||
border-bottom: 1px solid var(--text-dark) !important; /* = the table header-row divider */ |
|||
padding-top: 0.35rem; |
|||
padding-bottom: calc(0.95rem - 3px); /* calibrated against the title rule: |
|||
-2px measured (157 vs 159), then -1px |
|||
user fine-tune */ |
|||
margin-bottom: 0.9rem; |
|||
padding-left: 0 !important; |
|||
margin-left: var(--toc-header-inset) !important; |
|||
} |
|||
.vector-toc .vector-pinnable-header-label { /* the shared uppercase eyebrow */ |
|||
font-size: var(--ed-small); |
|||
font-weight: 600; |
|||
letter-spacing: 0.08em; |
|||
text-transform: uppercase; |
|||
color: var(--text-dark) !important; |
|||
margin-left: 0; |
|||
} |
|||
/* entries: ONE ink at all levels — depth is carried by the numbers. Hover |
|||
feedback = the house link convention (grey underline → coral); the |
|||
current section = the one bold row. */ |
|||
.vector-toc .vector-toc-link, |
|||
.vector-toc .vector-toc-link:visited { |
|||
color: var(--text-dark) !important; |
|||
font-size: var(--ed-small); |
|||
text-decoration: none; /* the underline lives on the TITLE SPAN below, |
|||
so the depth dash marker stays bare */ |
|||
} |
|||
.vector-toc .vector-toc-text > span:not(.vector-toc-numb) { |
|||
text-decoration: underline; |
|||
text-decoration-color: var(--ed-underline); |
|||
text-decoration-thickness: 1px; |
|||
text-underline-offset: 0.18em; |
|||
} |
|||
.vector-toc .vector-toc-link:hover .vector-toc-text > span:not(.vector-toc-numb) { |
|||
text-decoration-color: var(--ed-accent); |
|||
text-decoration-thickness: 2px; |
|||
} |
|||
.vector-toc .vector-toc-list-item-active > .vector-toc-link { |
|||
font-weight: 500 !important; /* the "current" cue (one bold row) */ |
|||
} |
|||
/* NB: hiding h6 from the TOC is done in Common.js (pruneTocH6) — MediaWiki's |
|||
TOC encodes only a compacted nesting depth (vector-toc-level-N), NOT the |
|||
original heading tag, so CSS cannot reliably target h6. */ |
|||
/* lists flush on the component edge; hanging indent carried on every li */ |
|||
.vector-toc .vector-toc-contents, |
|||
.vector-toc .vector-toc-list { |
|||
margin: 0; |
|||
padding: 0; |
|||
list-style: none; |
|||
} |
|||
.vector-toc .vector-toc-list-item { |
|||
/* ROW RHYTHM: vertical spacing lives on padding-TOP (ONE gap per row) — so it |
|||
takes the FULL wikitable rhythm (2 × --wt-pad-y = the table's top+bottom cell |
|||
padding) to give the same visual gap between rows. The li is a flex ROW so |
|||
the chevron toggle sits in-flow right after the title; the sublist wraps |
|||
onto its own row below (flex-basis:100%). */ |
|||
display: flex; |
|||
flex-wrap: wrap; |
|||
align-items: baseline; |
|||
padding: calc(var(--wt-pad-y) * 2) 0 0 0 !important; |
|||
margin: 0 !important; |
|||
font-size: var(--ed-small); |
|||
line-height: 1.5; /* = the infobox / wikitable line-height */ |
|||
} |
|||
/* level-2+ sits flush under level-1 (numbers aligned on one axis); flex-basis |
|||
100% drops the sublist onto its own row below the parent's title + chevron */ |
|||
.vector-toc .vector-toc-list-item > .vector-toc-list { |
|||
flex: 0 0 100%; |
|||
margin: 0 !important; |
|||
} |
|||
/* HANG-UNDER-TITLE: the depth marker and the title share a flex row, so the title is |
|||
a wrapping block whose 2nd+ lines align under the TITLE (after the number). |
|||
Because the marker is its own flex item, this holds for any marker width |
|||
(one dash or two), which a fixed text-indent could not. The link is a flex item |
|||
of the row; grow:0 so a short title doesn't stretch (the chevron stays right |
|||
after it), shrink:1 + min-width:0 so a long title wraps. */ |
|||
.vector-toc .vector-toc-link { flex: 1 1 auto; min-width: 0; } |
|||
.vector-toc .vector-toc-list-item:has(> .vector-toc-toggle) > .vector-toc-link { |
|||
max-width: calc(100% - 1.5em); |
|||
} |
|||
.vector-toc .vector-toc-text { |
|||
display: flex; |
|||
align-items: baseline; |
|||
padding: 0 !important; /* Vector ships .vector-toc-text{padding:6px 0} — 12px of |
|||
EXTRA gap per row on top of the li's rhythm padding, |
|||
which made the TOC ~25px apart vs the table's 13px. |
|||
Zeroed so the li's 2×--wt-pad-y is the ONE rhythm. */ |
|||
} |
|||
/* NO section numbers — Vector ships .vector-toc-numb display:none and we no |
|||
longer re-show it. Depth is carried by DASH markers instead: an en dash |
|||
per nesting level ("–" children, "––" grandchildren), generated as the |
|||
first flex item of the text row (the slot the number used to occupy) off |
|||
Vector's per-level li classes. Top-level entries carry no marker. */ |
|||
.vector-toc .vector-toc-level-2 > .vector-toc-link .vector-toc-text::before { content: "\2013"; } |
|||
.vector-toc .vector-toc-level-3 > .vector-toc-link .vector-toc-text::before { content: "\2013\2013"; } |
|||
.vector-toc .vector-toc-level-4 > .vector-toc-link .vector-toc-text::before { content: "\2013\2013\2013"; } |
|||
.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 { |
|||
flex: 0 0 auto; |
|||
margin-right: 0.4em; |
|||
white-space: nowrap; |
|||
letter-spacing: -0.08em; /* consecutive en dashes read as one rule */ |
|||
} |
|||
/* the title span is unclassed in Vector's DOM; it is the wrapping block */ |
|||
.vector-toc .vector-toc-text > span:not(.vector-toc-numb) { |
|||
flex: 1 1 auto; |
|||
min-width: 0; /* allow the title to wrap inside the row */ |
|||
} |
|||
/* chevron: an in-flow disclosure triangle right AFTER the title — a flex item of |
|||
the row, baseline-aligned to the first line. The Codex icon is replaced by a |
|||
::before glyph switched on the expanded state; font-size:0 hides the |
|||
screen-reader span without removing it. All button chrome (background, border, |
|||
focus ring) is stripped so only the bare ▸/▾ glyph ever shows. */ |
|||
.vector-toc .vector-toc-toggle { |
|||
position: static !important; /* ← ADD THIS */ |
|||
flex: 0 0 auto; |
|||
margin: 0 0 0 0.35em !important; |
|||
min-width: 0 !important; |
|||
min-height: 0 !important; |
|||
width: auto !important; |
|||
height: auto !important; |
|||
padding: 0 !important; |
|||
border: none !important; |
|||
background: none !important; |
|||
box-shadow: none !important; /* kill Codex's teal focus ring (the "blue rectangle") */ |
|||
outline: none !important; |
|||
/* NB: do NOT put font-size:0 on the button — as a baseline-aligned flex item |
|||
that collapses its baseline to the top and floats the glyph ABOVE the line. |
|||
Keep the inherited font-size; hide the inner spans instead (below). */ |
|||
} |
|||
/* Codex re-applies the ring / background on every interaction state — neutralise |
|||
them all so only the bare ▸/▾ glyph ever shows (these come AFTER the section's |
|||
.cdx-button:focus rule, so they win the tie). */ |
|||
.vector-toc .vector-toc-toggle:hover, |
|||
.vector-toc .vector-toc-toggle:focus, |
|||
.vector-toc .vector-toc-toggle:focus-visible, |
|||
.vector-toc .vector-toc-toggle:active { |
|||
background: none !important; |
|||
border: none !important; |
|||
box-shadow: none !important; |
|||
outline: none !important; |
|||
} |
|||
/* hide the Codex icon span and zero the screen-reader label span (font-size:0, |
|||
not display:none, so assistive tech keeps it); the ::before glyph below is the |
|||
only visible chevron */ |
|||
.vector-toc .vector-toc-toggle .vector-icon { display: none; } |
|||
.vector-toc .vector-toc-toggle > span { font-size: 0; } |
|||
.vector-toc .vector-toc-toggle::before { |
|||
content: "▸"; /* collapsed — the house triangle */ |
|||
font-size: 0.65rem; |
|||
color: var(--text-dark); |
|||
} |
|||
.vector-toc .vector-toc-list-item-expanded > .vector-toc-toggle::before { |
|||
content: "▾"; /* expanded */ |
|||
} |
|||
/* ── Infobox: the page's ONE white card, in the data voice; width |
|||
ENFORCED with !important so inline widths cannot break it — and |
|||
pinned class-generically so ANY infobox markup (table or div) |
|||
obeys. Prose flows full-width around the float (default MediaWiki). ── */ |
|||
.mw-parser-output .infobox { /* class-generic: any infobox markup */ |
|||
width: var(--ed-infobox-w) !important; |
|||
box-sizing: border-box; |
|||
} |
|||
.mw-parser-output table.infobox { |
|||
font-family: var(--ed-font); |
|||
font-size: var(--ed-small); |
|||
background-color: #fff !important; |
|||
border: 1px solid var(--text-dark) !important; /* infobox OUTER border = medium */ |
|||
border-spacing: 0; /* kill §1's 3px so the row rhythm is EXACTLY the |
|||
cell padding — shared with the wikitable below */ |
|||
padding: 0.55em 0.9em 0.75em; |
|||
line-height: 1.5; |
|||
} |
|||
.infobox .infobox-above { /* the shared uppercase eyebrow */ |
|||
background-color: #fff !important; /* beats the template's inline #cee0f2 */ |
|||
color: var(--text-dark) !important; /* beats inline color:inherit */ |
|||
text-align: left !important; |
|||
font-size: var(--ed-small); /* the shared eyebrow size */ |
|||
font-weight: 600; |
|||
letter-spacing: 0.08em; |
|||
text-transform: uppercase; |
|||
border-bottom: 1px solid var(--text-dark); /* header-row divider — kept LIGHT (looks good) */ |
|||
padding: 0.2em 0.2em 0.55em; |
|||
} |
|||
.infobox .infobox-label { |
|||
color: var(--text-dark); |
|||
font-weight: 600; /* semibold labels, like the band variant and table headers */ |
|||
padding: var(--wt-pad-y) 0.8em var(--wt-pad-y) 0.2em; /* row rhythm = the wikitable's */ |
|||
} |
|||
.infobox .infobox-data { color: var(--text-dark); padding: var(--wt-pad-y) 0.2em; } |
|||
/* ── Infobox BAND variant — Template:Infobox doc archive `wide=yes` wraps |
|||
the card in .ed-infobox-band. Same card language, re-flowed as a |
|||
full-width horizontal "dateline" strip for TABLE-FIRST pages |
|||
(financial supplements): no float, label-OVER-value pairs in a |
|||
responsive grid, content resumes full-width right below. |
|||
DESKTOP-ONLY enhancement: below 769px — and on Minerva, excluded via |
|||
body:not(.skin-minerva) because the host pins a 1120px viewport meta |
|||
on phones so width queries alone can't target them — every band rule |
|||
goes inert and the infobox falls back to the DEFAULT design (which |
|||
the existing mobile rules already render full-width). ── */ |
|||
@media (min-width: 769px) { |
|||
body:not(.skin-minerva) .ed-infobox-band .infobox, |
|||
body:not(.skin-minerva) .ed-infobox-band table.infobox { |
|||
float: none !important; |
|||
clear: none !important; |
|||
width: 100% !important; |
|||
margin: 0.8em 0 1.8em !important; |
|||
} |
|||
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; } |
|||
/* 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 • 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 • 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; } |
|||
.mw-body-content h2, .mw-body-content .mw-heading2 { font-size: 1.22rem; } |
|||
.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 right-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). */ |
|||
.ed-pdfpage { |
|||
margin: 1.4em 0 0.9em; |
|||
text-align: right; |
|||
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; |
|||
} |
|||
/* 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; |
|||
} |
} |
||
Revision as of 10:13, 19 July 2026
/* CSS placed here will affect registered users only */
/* ========================================================== */
/* RESTORE MENUS FOR LOGGED-IN USERS */
/* This overrides the "Hide" rules in Common.css */
/* NB: MediaWiki-namespace page — admin manual paste, like */
/* Common.css. Git (this file) is canonical. */
/* ========================================================== */
/* 1. Restore User Links Container */
/* Vector 2022 uses flexbox for the header icons */
#vector-user-links,
.vector-user-links,
#p-personal {
display: flex !important;
}
/* 2. Restore Individual User Buttons */
#pt-userpage,
#pt-mytalk,
#pt-preferences,
#pt-watchlist,
#pt-mycontris,
#pt-logout {
display: block !important;
}
/* the catlinks bar stays visible for editors, but not when it's an
EMPTY box (all of the page's categories are hidden ones) */
#catlinks.catlinks-allhidden { display: none !important; }
/* 3. Restore Tools (Sidebar & Dropdowns) */
#vector-page-tools,
#vector-page-tools-dropdown,
#p-tb,
.vector-page-tools,
.vector-p-tb,
#p-coll-print_export {
display: block !important;
}
/* 4. Restore Tabs (History, Talk, Edit) */
#ca-viewsource,
#ca-history,
#ca-talk {
display: block !important;
}
/* 5. Restore Categories Bar */
/* Essential if you want to manage categories */
#catlinks,
.catlinks,
.mw-normal-catlinks {
display: block !important;
}
/* ======================================================= */
/* RESTORE PAGE ACTIONS FOR LOGGED-IN USERS */
/* ======================================================= */
#p-views,
.page-actions-menu__list {
/* Use FLEX because this menu needs horizontal alignment */
display: flex !important;
}
/* ======================================================= */
/* RESTORE INTERFACE FOR LOGGED-IN USERS */
/* ======================================================= */
/* Restore Vector 2022 Toolbar */
/* We use 'flex' because Vector 2022 uses flexbox for alignment */
.vector-page-toolbar {
display: flex !important;
}
/* Restore SiteSub ("From...") and Indicators */
.vector-body-before-content {
display: block !important;
}
/* Restore the RIGHT RAIL (.vector-column-end): Common.css section 12
hides it for everyone, but PINNED page tools (incl. the Delete
action) render inside it — without this rule the Tools menu has no
home on the page even for admins (the toolbar itself shows, but a
pinned Tools panel lives in this column). */
.vector-column-end {
display: block !important;
}
/* ======================================================= */
/* RESTORE HEADER MENUS FOR LOGGED-IN USERS */
/* ======================================================= */
.vector-menu-content {
/* Use flex to maintain correct horizontal alignment of icons */
display: flex !important;
}
/* ======================================================= */
/* RESTORE FULL WIDTH FOR LOGGED-IN USERS (EDITORS) */
/* Overrides the 900px limit set in Common.css */
/* ======================================================= */
#content {
max-width: none !important;
margin: 0 !important; /* Optional: Resets centering if you want it strictly left-aligned */
}