Jump to content

MediaWiki:Common.css: Difference between revisions

From ParksWiki
Imported from text file
 
ParksWiki design system: brand, gateway Main Page, ad slots, Advertise page
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
/* ParkWiki: Wikipedia-faithful infobox styling (Vector 2022). */
/* ============================================================
  ParksWiki design system — Vector 2022.
  Loaded on every page as MediaWiki:Common.css.
 
  Concept: "gateway". Deep park-night ink, warm paper, gilt
  accent. Every illustration on this wiki is duotone and drawn
  in CSS — no image files, so it stays crisp, themeable and
  instant in both light and dark mode.
 
  Sections
    1. Tokens
    2. Dark mode tokens
    3. Chrome (logo, chrome tweaks)
    4. Article typography
    5. Infobox
    6. Main Page: hero
    7. Main Page: park gateway cards (CSS-drawn duotone art)
    8. Main Page: panels, browse strip
    9. Advertising slots and the house ad
    10. Footer: operator line
    11. Responsive
  ============================================================ */
 
/* ---- 1. Tokens ------------------------------------------- */
:root {
--pw-ink: #16243f;
--pw-ink-soft: #3c4d6b;
--pw-muted: #6a7384;
--pw-paper: #fcfbf8;
--pw-paper-2: #f3efe6;
--pw-rule: #ddd6c7;
--pw-gilt: #b07d1f;
--pw-gilt-ink: #8a6216;
--pw-gilt-light: #e8c479;
 
/* Duotone art */
--pw-art-ink: #16243f;
--pw-facet: rgba(255, 255, 255, 0.22);
--pw-card-shadow: rgba(22, 36, 63, 0.16);
}
 
/* ---- 2. Dark mode tokens ---------------------------------- */
/* Vector 2022 night mode: explicit choice. */
html.skin-theme-clientpref-night {
--pw-ink: #dfe5f0;
--pw-ink-soft: #aeb8cc;
--pw-muted: #949db0;
--pw-paper: #16191d;
--pw-paper-2: #1d2127;
--pw-rule: #3a3f49;
--pw-gilt: #d9a93f;
--pw-gilt-ink: #e0b452;
--pw-gilt-light: #f0d08c;
--pw-art-ink: #eaeef6;
--pw-facet: rgba(0, 0, 0, 0.28);
--pw-card-shadow: rgba(0, 0, 0, 0.5);
}
 
/* Night mode: follow the operating system. */
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os {
--pw-ink: #dfe5f0;
--pw-ink-soft: #aeb8cc;
--pw-muted: #949db0;
--pw-paper: #16191d;
--pw-paper-2: #1d2127;
--pw-rule: #3a3f49;
--pw-gilt: #d9a93f;
--pw-gilt-ink: #e0b452;
--pw-gilt-light: #f0d08c;
--pw-art-ink: #eaeef6;
--pw-facet: rgba(0, 0, 0, 0.28);
--pw-card-shadow: rgba(0, 0, 0, 0.5);
}
}
 
/* Fallback for skins/builds that expose no theme class at all:
  honour the OS preference, but never override an explicit day
  or night choice. */
@media screen and (prefers-color-scheme: dark) {
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) {
--pw-ink: #dfe5f0;
--pw-ink-soft: #aeb8cc;
--pw-muted: #949db0;
--pw-paper: #16191d;
--pw-paper-2: #1d2127;
--pw-rule: #3a3f49;
--pw-gilt: #d9a93f;
--pw-gilt-ink: #e0b452;
--pw-gilt-light: #f0d08c;
--pw-art-ink: #eaeef6;
--pw-facet: rgba(0, 0, 0, 0.28);
--pw-card-shadow: rgba(0, 0, 0, 0.5);
}
}
 
/* ---- 3. Chrome -------------------------------------------- */
/* The wordmark is an SVG and should scale, not pixel-snap. */
.mw-logo-wordmark {
max-width: 100%;
height: auto;
}
 
/* The Main Page carries its own masthead, so suppress the
  generic page title there (reading view only — edit and
  history keep it). */
body.page-Main_Page.action-view #firstHeading,
body.page-Main_Page.action-view #siteSub,
body.page-Main_Page.action-view .mw-page-title-main {
display: none;
}
 
/* Gilt marker on the active table-of-contents entry. */
.vector-toc .vector-toc-list-item-active > .vector-toc-link {
border-inline-start-color: var(--pw-gilt);
}
 
/* ---- 4. Article typography --------------------------------- */
.ns-0 .mw-parser-output p {
line-height: 1.65;
}
 
/* A short gilt rule tucked under every section heading.
  MW 1.43 still defaults to the legacy heading DOM (a bare <h2>);
  1.44+ wraps headings in .mw-heading2. Both are handled, and the
  inner <h2> tick is suppressed when the wrapper is present so the
  rule is never drawn twice. */
.ns-0 .mw-parser-output h2,
.ns-0 .mw-parser-output .mw-heading2 {
position: relative;
}
 
.ns-0 .mw-parser-output h2::after,
.ns-0 .mw-parser-output .mw-heading2::after {
content: "";
position: absolute;
inset-inline-start: 0;
bottom: -1px;
width: 2.6em;
height: 2px;
background: var(--pw-gilt);
}
 
.ns-0 .mw-parser-output .mw-heading2 h2::after {
display: none;
}
 
/* "See also" / "References" lists read tighter than body prose. */
.ns-0 .mw-parser-output ul {
line-height: 1.6;
}
 
/* ---- 5. Infobox -------------------------------------------- */
/* Presentation lives here, not in the templates' inline styles, so
  that dark mode and the narrow-screen rules can reach it. */
.infobox {
.infobox {
border: 1px solid #a2a9b1;
width: 22em;
background-color: #f8f9fa;
font-size: 90%;
color: #202122;
border: 1px solid var(--pw-rule);
padding: 0.2em;
background-color: var(--pw-paper);
margin: 0.5em 0 0.5em 1em;
color: var(--pw-ink);
border-radius: 3px;
padding: 0;
margin: 0.5em 0 1em 1.4em;
float: right;
float: right;
clear: right;
clear: right;
border-spacing: 3px;
border-spacing: 0;
box-shadow: 0 1px 3px var(--pw-card-shadow);
}
}
.infobox th {
 
background-color: #eaecf0;
.infobox caption {
font-weight: bold;
}
 
.infobox th,
.infobox td {
text-align: left;
text-align: left;
vertical-align: top;
vertical-align: top;
padding: 0.4em 0.65em;
border-top: 1px solid var(--pw-rule);
}
.infobox th {
color: var(--pw-ink-soft);
font-weight: 600;
}
/* Label column. */
.infobox > tbody > tr > th:not(.pw-infobox-title) {
width: 7.5em;
}
/* Title row: ink band, serif, gilt underline. */
.infobox .pw-infobox-title {
background: var(--pw-ink);
color: var(--pw-paper);
font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
font-size: 1.25em;
font-weight: 400;
text-align: center;
border-top: 0;
border-bottom: 2px solid var(--pw-gilt);
border-radius: 2px 2px 0 0;
padding: 0.5em 0.65em;
}
.infobox .pw-infobox-title a {
color: var(--pw-gilt-light);
}
.infobox > tbody > tr:nth-child(even) > td,
.infobox > tbody > tr:nth-child(even) > th {
background: var(--pw-paper-2);
}
/* ---- 6. Main Page: hero ------------------------------------ */
.pw-hero {
position: relative;
overflow: hidden;
padding: 1.7em 1.9em 1.5em;
margin-bottom: 0.4em;
border-radius: 3px;
border-bottom: 3px solid var(--pw-gilt);
background: linear-gradient(135deg, #1d2f51 0%, #16243f 55%, #0e1729 100%);
color: #f2f4f8;
}
/* Ghost spire, bottom right. */
.pw-hero::after {
content: "";
position: absolute;
inset-inline-end: 34px;
bottom: -42px;
width: 0;
height: 0;
border-left: 74px solid transparent;
border-right: 74px solid transparent;
border-bottom: 158px solid rgba(255, 255, 255, 0.05);
}
.pw-hero > * {
position: relative;
z-index: 1;
}
/* The hero title is a real <h1>: Vector's own page title is hidden on
  the Main Page, so this has to carry the document heading. Reset
  Vector's h1 chrome rather than inherit it. */
.pw-hero-title {
margin: 0;
padding: 0;
border: 0;
color: inherit;
font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
font-size: 2.15em;
font-weight: 400;
line-height: 1.15;
letter-spacing: -0.005em;
}
.pw-hero-title .pw-accent {
color: var(--pw-gilt-light);
}
.pw-hero-sub {
margin-top: 0.5em;
max-width: 42em;
font-size: 1.05em;
line-height: 1.55;
color: #cdd5e3;
}
.pw-hero-meta {
margin-top: 1em;
padding-top: 0.75em;
border-top: 1px solid rgba(255, 255, 255, 0.16);
font-size: 0.88em;
color: #a9b3c6;
}
.pw-hero a,
.pw-hero a.external {
color: #a9c8f6;
}
.pw-hero a:visited {
color: #c2b2e8;
}
/* ---- Section labels ---------------------------------------- */
.pw-label {
display: flex;
align-items: center;
gap: 0.85em;
margin: 1.7em 0 0.75em;
font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
font-size: 0.8em;
letter-spacing: 0.15em;
text-transform: uppercase;
color: var(--pw-gilt-ink);
}
.pw-label::after {
content: "";
flex: 1 1 auto;
height: 1px;
background: var(--pw-rule);
}
/* ---- 7. Park gateway cards --------------------------------- */
.pw-gates {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 1.1em;
}
.pw-gate {
display: flex;
flex-direction: column;
border: 1px solid var(--pw-rule);
border-radius: 3px;
overflow: hidden;
background: var(--pw-paper);
transition: box-shadow 120ms ease, transform 120ms ease;
}
.pw-gate:hover {
box-shadow: 0 2px 12px var(--pw-card-shadow);
transform: translateY(-1px);
}
.pw-gate-body {
padding: 0.7em 0.9em 0.9em;
}
.pw-gate-name {
font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
font-size: 1.2em;
line-height: 1.2;
}
.pw-gate-name a {
color: var(--pw-ink);
}
.pw-gate-name a:hover {
color: var(--pw-gilt-ink);
}
.pw-gate-meta {
margin-top: 0.2em;
font-size: 0.82em;
color: var(--pw-muted);
}
.pw-gate-links {
margin-top: 0.55em;
padding-top: 0.55em;
border-top: 1px dotted var(--pw-rule);
font-size: 0.85em;
line-height: 1.55;
}
/* Art panel: duotone ground + ink silhouette, drawn in CSS. */
.pw-art {
position: relative;
height: 118px;
overflow: hidden;
border-bottom: 1px solid var(--pw-rule);
background: linear-gradient(180deg, var(--pw-tint-2) 0%, var(--pw-tint) 100%);
}
.pw-art .pw-s {
position: absolute;
bottom: 20px;
}
.pw-ground {
position: absolute;
left: 0;
right: 0;
bottom: 0;
height: 20px;
background: var(--pw-art-ink);
opacity: 0.9;
}
/* Per-park duotone grounds. */
.pw-gate--mk { --pw-tint: #b7c7e2; --pw-tint-2: #e8edf7; }
.pw-gate--ep { --pw-tint: #a9cfca; --pw-tint-2: #e3f0ee; }
.pw-gate--hs { --pw-tint: #e0b394; --pw-tint-2: #f6e8dd; }
.pw-gate--ak { --pw-tint: #b1cb97; --pw-tint-2: #e9f1e0; }
.pw-gate--dl { --pw-tint: #cbb4d8; --pw-tint-2: #efe7f4; }
.pw-gate--dca { --pw-tint: #e6c585; --pw-tint-2: #faf0db; }
html.skin-theme-clientpref-night .pw-gate--mk { --pw-tint: #26334d; --pw-tint-2: #161d2b; }
html.skin-theme-clientpref-night .pw-gate--ep { --pw-tint: #1c3633; --pw-tint-2: #121f1e; }
html.skin-theme-clientpref-night .pw-gate--hs { --pw-tint: #3a2a20; --pw-tint-2: #211812; }
html.skin-theme-clientpref-night .pw-gate--ak { --pw-tint: #22311b; --pw-tint-2: #151d11; }
html.skin-theme-clientpref-night .pw-gate--dl { --pw-tint: #2e2440; --pw-tint-2: #1b1626; }
html.skin-theme-clientpref-night .pw-gate--dca { --pw-tint: #3a2f16; --pw-tint-2: #221c0e; }
@media screen and (prefers-color-scheme: dark) {
html.skin-theme-clientpref-os .pw-gate--mk { --pw-tint: #26334d; --pw-tint-2: #161d2b; }
html.skin-theme-clientpref-os .pw-gate--ep { --pw-tint: #1c3633; --pw-tint-2: #121f1e; }
html.skin-theme-clientpref-os .pw-gate--hs { --pw-tint: #3a2a20; --pw-tint-2: #211812; }
html.skin-theme-clientpref-os .pw-gate--ak { --pw-tint: #22311b; --pw-tint-2: #151d11; }
html.skin-theme-clientpref-os .pw-gate--dl { --pw-tint: #2e2440; --pw-tint-2: #1b1626; }
html.skin-theme-clientpref-os .pw-gate--dca { --pw-tint: #3a2f16; --pw-tint-2: #221c0e; }
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--mk { --pw-tint: #26334d; --pw-tint-2: #161d2b; }
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--ep { --pw-tint: #1c3633; --pw-tint-2: #121f1e; }
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--hs { --pw-tint: #3a2a20; --pw-tint-2: #211812; }
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--ak { --pw-tint: #22311b; --pw-tint-2: #151d11; }
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--dl { --pw-tint: #2e2440; --pw-tint-2: #1b1626; }
html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--dca { --pw-tint: #3a2f16; --pw-tint-2: #221c0e; }
}
/* Magic Kingdom — three-spire castle. */
.pw-gate--mk .pw-s1 {
left: 50%;
margin-left: -13px;
width: 26px;
height: 52px;
background: var(--pw-art-ink);
}
.pw-gate--mk .pw-s1::before {
content: "";
position: absolute;
left: -5px;
top: -30px;
border-left: 18px solid transparent;
border-right: 18px solid transparent;
border-bottom: 30px solid var(--pw-art-ink);
}
.pw-gate--mk .pw-s2,
.pw-gate--mk .pw-s3 {
width: 17px;
height: 34px;
background: var(--pw-art-ink);
}
.pw-gate--mk .pw-s2 { left: 50%; margin-left: -47px; }
.pw-gate--mk .pw-s3 { left: 50%; margin-left: 30px; }
.pw-gate--mk .pw-s2::before,
.pw-gate--mk .pw-s3::before {
content: "";
position: absolute;
left: -4px;
top: -21px;
border-left: 12px solid transparent;
border-right: 13px solid transparent;
border-bottom: 21px solid var(--pw-art-ink);
}
/* EPCOT — faceted sphere on two legs. */
.pw-gate--ep .pw-s1 {
left: 50%;
margin-left: -37px;
bottom: 26px;
width: 74px;
height: 74px;
border-radius: 50%;
background: var(--pw-art-ink);
background-image:
repeating-linear-gradient(60deg, var(--pw-facet) 0 1px, transparent 1px 13px),
repeating-linear-gradient(-60deg, var(--pw-facet) 0 1px, transparent 1px 13px),
repeating-linear-gradient(0deg, var(--pw-facet) 0 1px, transparent 1px 13px);
}
.pw-gate--ep .pw-s2,
.pw-gate--ep .pw-s3 {
width: 7px;
height: 30px;
background: var(--pw-art-ink);
}
.pw-gate--ep .pw-s2 { left: 50%; margin-left: -22px; transform: skewX(12deg); }
.pw-gate--ep .pw-s3 { left: 50%; margin-left: 15px; transform: skewX(-12deg); }
/* Hollywood Studios — stepped art-deco tower. */
.pw-gate--hs .pw-s1 { left: 50%; margin-left: -26px; width: 52px; height: 34px; background: var(--pw-art-ink); }
.pw-gate--hs .pw-s2 { left: 50%; margin-left: -17px; width: 34px; height: 60px; background: var(--pw-art-ink); }
.pw-gate--hs .pw-s3 { left: 50%; margin-left: -9px; width: 18px; height: 82px; background: var(--pw-art-ink); }
.pw-gate--hs .pw-s3::before {
content: "";
position: absolute;
left: 8px;
top: -16px;
width: 2px;
height: 16px;
background: var(--pw-art-ink);
}
/* Animal Kingdom — the tree. */
.pw-gate--ak .pw-s1 {
left: 50%;
margin-left: -15px;
width: 30px;
height: 44px;
background: var(--pw-art-ink);
clip-path: polygon(34% 0, 66% 0, 100% 100%, 0 100%);
}
.pw-gate--ak .pw-s2 {
left: 50%;
margin-left: -44px;
bottom: 52px;
width: 88px;
height: 48px;
border-radius: 50%;
background: var(--pw-art-ink);
}
.pw-gate--ak .pw-s3 {
left: 50%;
margin-left: -14px;
bottom: 74px;
width: 54px;
height: 34px;
border-radius: 50%;
background: var(--pw-art-ink);
opacity: 0.85;
}
/* Disneyland Park — rounded castle with a lit gateway arch. */
.pw-gate--dl .pw-s1 {
left: 50%;
margin-left: -17px;
width: 34px;
height: 54px;
border-radius: 17px 17px 0 0;
background: var(--pw-art-ink);
}
.pw-gate--dl .pw-s1::before {
content: "";
position: absolute;
left: 9px;
bottom: 0;
width: 16px;
height: 22px;
border-radius: 8px 8px 0 0;
background: var(--pw-tint-2);
}
.pw-gate--dl .pw-s1::after {
content: "";
position: absolute;
left: -11px;
top: -32px;
border-left: 22px solid transparent;
border-right: 23px solid transparent;
border-bottom: 32px solid var(--pw-art-ink);
}
.pw-gate--dl .pw-s2,
.pw-gate--dl .pw-s3 {
width: 15px;
height: 32px;
background: var(--pw-art-ink);
}
.pw-gate--dl .pw-s2 { left: 50%; margin-left: -40px; }
.pw-gate--dl .pw-s3 { left: 50%; margin-left: 25px; }
.pw-gate--dl .pw-s2::before,
.pw-gate--dl .pw-s3::before {
content: "";
position: absolute;
left: -4px;
top: -22px;
border-left: 11px solid transparent;
border-right: 12px solid transparent;
border-bottom: 22px solid var(--pw-art-ink);
}
/* California Adventure — the pier wheel. */
.pw-gate--dca .pw-s1 {
left: 50%;
margin-left: -36px;
bottom: 30px;
width: 72px;
height: 72px;
box-sizing: border-box;
border: 6px solid var(--pw-art-ink);
border-radius: 50%;
}
.pw-gate--dca .pw-s2 {
left: 50%;
margin-left: -30px;
bottom: 36px;
width: 60px;
height: 60px;
border-radius: 50%;
background: repeating-conic-gradient(from 0deg, var(--pw-art-ink) 0 1.6deg, transparent 1.6deg 30deg);
}
.pw-gate--dca .pw-s3 {
left: 50%;
margin-left: -5px;
width: 10px;
height: 36px;
background: var(--pw-art-ink);
}
.pw-gate--dca .pw-s3::before {
content: "";
position: absolute;
left: -3px;
top: -12px;
width: 16px;
height: 16px;
border-radius: 50%;
background: var(--pw-art-ink);
}
/* ---- 8. Panels and browse strip ---------------------------- */
.pw-cols {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1.1em;
}
.pw-panel {
border: 1px solid var(--pw-rule);
border-radius: 3px;
background: var(--pw-paper);
overflow: hidden;
}
.pw-panel-title {
padding: 0.45em 0.9em;
background: var(--pw-paper-2);
border-bottom: 1px solid var(--pw-rule);
font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
font-size: 1.05em;
color: var(--pw-ink);
}
.pw-panel-body {
padding: 0.85em 0.95em;
line-height: 1.6;
}
.pw-panel-body p {
margin: 0 0 0.6em;
}
.pw-panel-body p:last-child {
margin-bottom: 0;
}
.pw-panel-body ul {
margin: 0 0 0 1.3em;
padding: 0;
}
.pw-panel-body li {
margin-bottom: 0.45em;
}
.pw-browse {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 0.6em;
}
.pw-chip {
padding: 0.55em 0.7em;
border: 1px solid var(--pw-rule);
border-radius: 3px;
background: var(--pw-paper);
text-align: center;
font-size: 0.92em;
transition: border-color 120ms ease;
}
.pw-chip:hover {
border-color: var(--pw-gilt);
}
/* Make the whole chip the hit target, not just the link text. */
.pw-chip a {
display: block;
}
.pw-colophon {
margin-top: 1.6em;
padding-top: 0.9em;
border-top: 1px solid var(--pw-rule);
font-size: 0.9em;
line-height: 1.6;
color: var(--pw-muted);
}
.pw-colophon p,
.pw-hero > div > p,
.pw-gate-body p {
margin: 0;
}
/* ---- 9. Advertising slots ---------------------------------- */
/* Three slots, all injected server-side from LocalSettings.php so
  that no article wikitext knows they exist:
    .pw-ad--leaderboard  beneath the page title, above the prose
    .pw-ad--in-article  after the lead section, long articles only
    .pw-ad--rail        in the Vector 2022 sidebar
  A slot with no creative is never emitted at all, so an unsold
  slot leaves no gap; the :empty rules here are belt and braces
  for an ad tag that renders to nothing at request time. */
.pw-ad {
margin: 1.15em 0 1.5em;
}
.pw-ad:empty {
display: none;
}
/* The frame is the containing block for whatever the network
  serves: it can be no wider than the column it sits in. */
.pw-ad__frame {
max-width: 100%;
overflow: hidden;
}
.pw-ad__frame:empty {
display: none;
}
/* Label. Same small-caps serif grammar as the Main Page section
  labels, one step quieter — it is a disclosure, not a heading. */
.pw-ad__label {
display: flex;
align-items: center;
gap: 0.6em;
margin-bottom: 0.4em;
font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
font-size: 0.7em;
letter-spacing: 0.18em;
text-transform: uppercase;
color: var(--pw-muted);
}
.pw-ad__label::after {
content: "";
flex: 1 1 auto;
height: 1px;
background: var(--pw-rule);
}
/* (a) Leaderboard: sits directly under the title block, so it is
  pulled up tight against it rather than floating in the gap. */
.pw-ad--leaderboard {
margin-top: 0.3em;
}
/* (b) In-article: clears the infobox float so a creative is never
  squeezed into the gutter beside it, and so it can never reflow
  or overlap a line of prose. */
.pw-ad--in-article {
clear: both;
margin: 1.9em 0;
}
/* (c) Rail: lives in the skin's sidebar, outside the prose column
  entirely, which is what makes it structurally incapable of
  disturbing article text. */
.pw-ad--rail {
margin: 1em 0 0.3em;
font-size: 0.9em;
}
/* ---- House ad ---------------------------------------------- */
/* The founding-advertiser placeholder. Duotone, drawn in CSS, same
  grammar as the gateway cards: ink tower, gilt roof, paper ground. */
.pw-house {
display: flex;
align-items: center;
gap: 0.85em;
padding: 0.8em 1em;
border: 1px solid var(--pw-rule);
border-radius: 3px;
background: linear-gradient(180deg, var(--pw-paper) 0%, var(--pw-paper-2) 100%);
transition: border-color 120ms ease;
}
a.pw-house,
a.pw-house:visited {
color: var(--pw-ink);
text-decoration: none;
}
.pw-house:hover {
border-color: var(--pw-gilt);
}
}
.infobox caption {
 
font-weight: bold;
.pw-house__mark {
position: relative;
flex: 0 0 34px;
height: 34px;
}
 
.pw-house__mark::before {
content: "";
position: absolute;
left: 11px;
bottom: 0;
width: 12px;
height: 19px;
background: var(--pw-art-ink);
}
 
.pw-house__mark::after {
content: "";
position: absolute;
left: 5px;
bottom: 19px;
width: 0;
height: 0;
border-left: 12px solid transparent;
border-right: 12px solid transparent;
border-bottom: 13px solid var(--pw-gilt);
}
 
.pw-house__text {
display: block;
min-width: 0;
}
 
.pw-house__name {
display: block;
font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
font-size: 1.15em;
line-height: 1.2;
color: var(--pw-ink);
}
 
/* The neutral tagline area: reserved for the advertiser's own line
  once a real creative replaces this placeholder. */
.pw-house__tag {
display: block;
margin-top: 0.15em;
font-size: 0.82em;
line-height: 1.3;
color: var(--pw-muted);
}
 
.pw-house__cta {
margin-left: auto;
padding-bottom: 1px;
border-bottom: 1px solid var(--pw-gilt);
font-size: 0.78em;
letter-spacing: 0.08em;
text-transform: uppercase;
white-space: nowrap;
color: var(--pw-gilt-ink);
}
 
/* Rail variant: a narrow column, so the card stacks. */
.pw-ad--rail .pw-house {
flex-direction: column;
align-items: flex-start;
gap: 0.5em;
padding: 0.75em 0.8em;
}
 
.pw-ad--rail .pw-house__cta {
margin-left: 0;
}
 
/* ---- 10. Footer: operator line ------------------------------ */
#footer-info-pw-operator {
color: var(--pw-muted);
}
 
#footer-info-pw-operator .pw-operator-sep {
padding: 0 0.45em;
color: var(--pw-rule);
}
 
/* ---- 11. Responsive ----------------------------------------- */
@media screen and (max-width: 999px) {
/* The sidebar collapses to a drawer below this width; a rail ad
  inside a drawer is an ad nobody asked to open, so it goes. */
.pw-ad--rail { display: none; }
}
 
@media screen and (max-width: 860px) {
.pw-gates { grid-template-columns: repeat(2, 1fr); }
.pw-browse { grid-template-columns: repeat(2, 1fr); }
}
 
@media screen and (max-width: 600px) {
.pw-gates { grid-template-columns: 1fr; }
.pw-cols { grid-template-columns: 1fr; }
.pw-hero { padding: 1.3em 1.2em 1.2em; }
.pw-hero-title { font-size: 1.7em; }
.pw-hero::after { display: none; }
.infobox { float: none; margin: 0 0 1em; width: auto !important; }
/* Phone width: the call to action wraps under the name rather
  than squeezing it. */
.pw-house { flex-wrap: wrap; gap: 0.6em 0.85em; }
.pw-house__cta { margin-left: 0; }
}
 
@media print {
.pw-ad { display: none; }
}
 
@media (prefers-reduced-motion: reduce) {
.pw-gate { transition: none; }
.pw-gate:hover { transform: none; }
.pw-house { transition: none; }
}
}

Latest revision as of 07:14, 14 November 2026

/* ============================================================
   ParksWiki design system — Vector 2022.
   Loaded on every page as MediaWiki:Common.css.

   Concept: "gateway". Deep park-night ink, warm paper, gilt
   accent. Every illustration on this wiki is duotone and drawn
   in CSS — no image files, so it stays crisp, themeable and
   instant in both light and dark mode.

   Sections
     1. Tokens
     2. Dark mode tokens
     3. Chrome (logo, chrome tweaks)
     4. Article typography
     5. Infobox
     6. Main Page: hero
     7. Main Page: park gateway cards (CSS-drawn duotone art)
     8. Main Page: panels, browse strip
     9. Advertising slots and the house ad
    10. Footer: operator line
    11. Responsive
   ============================================================ */

/* ---- 1. Tokens ------------------------------------------- */
:root {
	--pw-ink: #16243f;
	--pw-ink-soft: #3c4d6b;
	--pw-muted: #6a7384;
	--pw-paper: #fcfbf8;
	--pw-paper-2: #f3efe6;
	--pw-rule: #ddd6c7;
	--pw-gilt: #b07d1f;
	--pw-gilt-ink: #8a6216;
	--pw-gilt-light: #e8c479;

	/* Duotone art */
	--pw-art-ink: #16243f;
	--pw-facet: rgba(255, 255, 255, 0.22);
	--pw-card-shadow: rgba(22, 36, 63, 0.16);
}

/* ---- 2. Dark mode tokens ---------------------------------- */
/* Vector 2022 night mode: explicit choice. */
html.skin-theme-clientpref-night {
	--pw-ink: #dfe5f0;
	--pw-ink-soft: #aeb8cc;
	--pw-muted: #949db0;
	--pw-paper: #16191d;
	--pw-paper-2: #1d2127;
	--pw-rule: #3a3f49;
	--pw-gilt: #d9a93f;
	--pw-gilt-ink: #e0b452;
	--pw-gilt-light: #f0d08c;
	--pw-art-ink: #eaeef6;
	--pw-facet: rgba(0, 0, 0, 0.28);
	--pw-card-shadow: rgba(0, 0, 0, 0.5);
}

/* Night mode: follow the operating system. */
@media screen and (prefers-color-scheme: dark) {
	html.skin-theme-clientpref-os {
		--pw-ink: #dfe5f0;
		--pw-ink-soft: #aeb8cc;
		--pw-muted: #949db0;
		--pw-paper: #16191d;
		--pw-paper-2: #1d2127;
		--pw-rule: #3a3f49;
		--pw-gilt: #d9a93f;
		--pw-gilt-ink: #e0b452;
		--pw-gilt-light: #f0d08c;
		--pw-art-ink: #eaeef6;
		--pw-facet: rgba(0, 0, 0, 0.28);
		--pw-card-shadow: rgba(0, 0, 0, 0.5);
	}
}

/* Fallback for skins/builds that expose no theme class at all:
   honour the OS preference, but never override an explicit day
   or night choice. */
@media screen and (prefers-color-scheme: dark) {
	html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) {
		--pw-ink: #dfe5f0;
		--pw-ink-soft: #aeb8cc;
		--pw-muted: #949db0;
		--pw-paper: #16191d;
		--pw-paper-2: #1d2127;
		--pw-rule: #3a3f49;
		--pw-gilt: #d9a93f;
		--pw-gilt-ink: #e0b452;
		--pw-gilt-light: #f0d08c;
		--pw-art-ink: #eaeef6;
		--pw-facet: rgba(0, 0, 0, 0.28);
		--pw-card-shadow: rgba(0, 0, 0, 0.5);
	}
}

/* ---- 3. Chrome -------------------------------------------- */
/* The wordmark is an SVG and should scale, not pixel-snap. */
.mw-logo-wordmark {
	max-width: 100%;
	height: auto;
}

/* The Main Page carries its own masthead, so suppress the
   generic page title there (reading view only — edit and
   history keep it). */
body.page-Main_Page.action-view #firstHeading,
body.page-Main_Page.action-view #siteSub,
body.page-Main_Page.action-view .mw-page-title-main {
	display: none;
}

/* Gilt marker on the active table-of-contents entry. */
.vector-toc .vector-toc-list-item-active > .vector-toc-link {
	border-inline-start-color: var(--pw-gilt);
}

/* ---- 4. Article typography --------------------------------- */
.ns-0 .mw-parser-output p {
	line-height: 1.65;
}

/* A short gilt rule tucked under every section heading.
   MW 1.43 still defaults to the legacy heading DOM (a bare <h2>);
   1.44+ wraps headings in .mw-heading2. Both are handled, and the
   inner <h2> tick is suppressed when the wrapper is present so the
   rule is never drawn twice. */
.ns-0 .mw-parser-output h2,
.ns-0 .mw-parser-output .mw-heading2 {
	position: relative;
}

.ns-0 .mw-parser-output h2::after,
.ns-0 .mw-parser-output .mw-heading2::after {
	content: "";
	position: absolute;
	inset-inline-start: 0;
	bottom: -1px;
	width: 2.6em;
	height: 2px;
	background: var(--pw-gilt);
}

.ns-0 .mw-parser-output .mw-heading2 h2::after {
	display: none;
}

/* "See also" / "References" lists read tighter than body prose. */
.ns-0 .mw-parser-output ul {
	line-height: 1.6;
}

/* ---- 5. Infobox -------------------------------------------- */
/* Presentation lives here, not in the templates' inline styles, so
   that dark mode and the narrow-screen rules can reach it. */
.infobox {
	width: 22em;
	font-size: 90%;
	border: 1px solid var(--pw-rule);
	background-color: var(--pw-paper);
	color: var(--pw-ink);
	border-radius: 3px;
	padding: 0;
	margin: 0.5em 0 1em 1.4em;
	float: right;
	clear: right;
	border-spacing: 0;
	box-shadow: 0 1px 3px var(--pw-card-shadow);
}

.infobox caption {
	font-weight: bold;
}

.infobox th,
.infobox td {
	text-align: left;
	vertical-align: top;
	padding: 0.4em 0.65em;
	border-top: 1px solid var(--pw-rule);
}

.infobox th {
	color: var(--pw-ink-soft);
	font-weight: 600;
}

/* Label column. */
.infobox > tbody > tr > th:not(.pw-infobox-title) {
	width: 7.5em;
}

/* Title row: ink band, serif, gilt underline. */
.infobox .pw-infobox-title {
	background: var(--pw-ink);
	color: var(--pw-paper);
	font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
	font-size: 1.25em;
	font-weight: 400;
	text-align: center;
	border-top: 0;
	border-bottom: 2px solid var(--pw-gilt);
	border-radius: 2px 2px 0 0;
	padding: 0.5em 0.65em;
}

.infobox .pw-infobox-title a {
	color: var(--pw-gilt-light);
}

.infobox > tbody > tr:nth-child(even) > td,
.infobox > tbody > tr:nth-child(even) > th {
	background: var(--pw-paper-2);
}

/* ---- 6. Main Page: hero ------------------------------------ */
.pw-hero {
	position: relative;
	overflow: hidden;
	padding: 1.7em 1.9em 1.5em;
	margin-bottom: 0.4em;
	border-radius: 3px;
	border-bottom: 3px solid var(--pw-gilt);
	background: linear-gradient(135deg, #1d2f51 0%, #16243f 55%, #0e1729 100%);
	color: #f2f4f8;
}

/* Ghost spire, bottom right. */
.pw-hero::after {
	content: "";
	position: absolute;
	inset-inline-end: 34px;
	bottom: -42px;
	width: 0;
	height: 0;
	border-left: 74px solid transparent;
	border-right: 74px solid transparent;
	border-bottom: 158px solid rgba(255, 255, 255, 0.05);
}

.pw-hero > * {
	position: relative;
	z-index: 1;
}

/* The hero title is a real <h1>: Vector's own page title is hidden on
   the Main Page, so this has to carry the document heading. Reset
   Vector's h1 chrome rather than inherit it. */
.pw-hero-title {
	margin: 0;
	padding: 0;
	border: 0;
	color: inherit;
	font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
	font-size: 2.15em;
	font-weight: 400;
	line-height: 1.15;
	letter-spacing: -0.005em;
}

.pw-hero-title .pw-accent {
	color: var(--pw-gilt-light);
}

.pw-hero-sub {
	margin-top: 0.5em;
	max-width: 42em;
	font-size: 1.05em;
	line-height: 1.55;
	color: #cdd5e3;
}

.pw-hero-meta {
	margin-top: 1em;
	padding-top: 0.75em;
	border-top: 1px solid rgba(255, 255, 255, 0.16);
	font-size: 0.88em;
	color: #a9b3c6;
}

.pw-hero a,
.pw-hero a.external {
	color: #a9c8f6;
}

.pw-hero a:visited {
	color: #c2b2e8;
}

/* ---- Section labels ---------------------------------------- */
.pw-label {
	display: flex;
	align-items: center;
	gap: 0.85em;
	margin: 1.7em 0 0.75em;
	font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
	font-size: 0.8em;
	letter-spacing: 0.15em;
	text-transform: uppercase;
	color: var(--pw-gilt-ink);
}

.pw-label::after {
	content: "";
	flex: 1 1 auto;
	height: 1px;
	background: var(--pw-rule);
}

/* ---- 7. Park gateway cards --------------------------------- */
.pw-gates {
	display: grid;
	grid-template-columns: repeat(3, 1fr);
	gap: 1.1em;
}

.pw-gate {
	display: flex;
	flex-direction: column;
	border: 1px solid var(--pw-rule);
	border-radius: 3px;
	overflow: hidden;
	background: var(--pw-paper);
	transition: box-shadow 120ms ease, transform 120ms ease;
}

.pw-gate:hover {
	box-shadow: 0 2px 12px var(--pw-card-shadow);
	transform: translateY(-1px);
}

.pw-gate-body {
	padding: 0.7em 0.9em 0.9em;
}

.pw-gate-name {
	font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
	font-size: 1.2em;
	line-height: 1.2;
}

.pw-gate-name a {
	color: var(--pw-ink);
}

.pw-gate-name a:hover {
	color: var(--pw-gilt-ink);
}

.pw-gate-meta {
	margin-top: 0.2em;
	font-size: 0.82em;
	color: var(--pw-muted);
}

.pw-gate-links {
	margin-top: 0.55em;
	padding-top: 0.55em;
	border-top: 1px dotted var(--pw-rule);
	font-size: 0.85em;
	line-height: 1.55;
}

/* Art panel: duotone ground + ink silhouette, drawn in CSS. */
.pw-art {
	position: relative;
	height: 118px;
	overflow: hidden;
	border-bottom: 1px solid var(--pw-rule);
	background: linear-gradient(180deg, var(--pw-tint-2) 0%, var(--pw-tint) 100%);
}

.pw-art .pw-s {
	position: absolute;
	bottom: 20px;
}

.pw-ground {
	position: absolute;
	left: 0;
	right: 0;
	bottom: 0;
	height: 20px;
	background: var(--pw-art-ink);
	opacity: 0.9;
}

/* Per-park duotone grounds. */
.pw-gate--mk { --pw-tint: #b7c7e2; --pw-tint-2: #e8edf7; }
.pw-gate--ep { --pw-tint: #a9cfca; --pw-tint-2: #e3f0ee; }
.pw-gate--hs { --pw-tint: #e0b394; --pw-tint-2: #f6e8dd; }
.pw-gate--ak { --pw-tint: #b1cb97; --pw-tint-2: #e9f1e0; }
.pw-gate--dl { --pw-tint: #cbb4d8; --pw-tint-2: #efe7f4; }
.pw-gate--dca { --pw-tint: #e6c585; --pw-tint-2: #faf0db; }

html.skin-theme-clientpref-night .pw-gate--mk { --pw-tint: #26334d; --pw-tint-2: #161d2b; }
html.skin-theme-clientpref-night .pw-gate--ep { --pw-tint: #1c3633; --pw-tint-2: #121f1e; }
html.skin-theme-clientpref-night .pw-gate--hs { --pw-tint: #3a2a20; --pw-tint-2: #211812; }
html.skin-theme-clientpref-night .pw-gate--ak { --pw-tint: #22311b; --pw-tint-2: #151d11; }
html.skin-theme-clientpref-night .pw-gate--dl { --pw-tint: #2e2440; --pw-tint-2: #1b1626; }
html.skin-theme-clientpref-night .pw-gate--dca { --pw-tint: #3a2f16; --pw-tint-2: #221c0e; }

@media screen and (prefers-color-scheme: dark) {
	html.skin-theme-clientpref-os .pw-gate--mk { --pw-tint: #26334d; --pw-tint-2: #161d2b; }
	html.skin-theme-clientpref-os .pw-gate--ep { --pw-tint: #1c3633; --pw-tint-2: #121f1e; }
	html.skin-theme-clientpref-os .pw-gate--hs { --pw-tint: #3a2a20; --pw-tint-2: #211812; }
	html.skin-theme-clientpref-os .pw-gate--ak { --pw-tint: #22311b; --pw-tint-2: #151d11; }
	html.skin-theme-clientpref-os .pw-gate--dl { --pw-tint: #2e2440; --pw-tint-2: #1b1626; }
	html.skin-theme-clientpref-os .pw-gate--dca { --pw-tint: #3a2f16; --pw-tint-2: #221c0e; }

	html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--mk { --pw-tint: #26334d; --pw-tint-2: #161d2b; }
	html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--ep { --pw-tint: #1c3633; --pw-tint-2: #121f1e; }
	html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--hs { --pw-tint: #3a2a20; --pw-tint-2: #211812; }
	html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--ak { --pw-tint: #22311b; --pw-tint-2: #151d11; }
	html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--dl { --pw-tint: #2e2440; --pw-tint-2: #1b1626; }
	html:not(.skin-theme-clientpref-day):not(.skin-theme-clientpref-night):not(.skin-theme-clientpref-os) .pw-gate--dca { --pw-tint: #3a2f16; --pw-tint-2: #221c0e; }
}

/* Magic Kingdom — three-spire castle. */
.pw-gate--mk .pw-s1 {
	left: 50%;
	margin-left: -13px;
	width: 26px;
	height: 52px;
	background: var(--pw-art-ink);
}

.pw-gate--mk .pw-s1::before {
	content: "";
	position: absolute;
	left: -5px;
	top: -30px;
	border-left: 18px solid transparent;
	border-right: 18px solid transparent;
	border-bottom: 30px solid var(--pw-art-ink);
}

.pw-gate--mk .pw-s2,
.pw-gate--mk .pw-s3 {
	width: 17px;
	height: 34px;
	background: var(--pw-art-ink);
}

.pw-gate--mk .pw-s2 { left: 50%; margin-left: -47px; }
.pw-gate--mk .pw-s3 { left: 50%; margin-left: 30px; }

.pw-gate--mk .pw-s2::before,
.pw-gate--mk .pw-s3::before {
	content: "";
	position: absolute;
	left: -4px;
	top: -21px;
	border-left: 12px solid transparent;
	border-right: 13px solid transparent;
	border-bottom: 21px solid var(--pw-art-ink);
}

/* EPCOT — faceted sphere on two legs. */
.pw-gate--ep .pw-s1 {
	left: 50%;
	margin-left: -37px;
	bottom: 26px;
	width: 74px;
	height: 74px;
	border-radius: 50%;
	background: var(--pw-art-ink);
	background-image:
		repeating-linear-gradient(60deg, var(--pw-facet) 0 1px, transparent 1px 13px),
		repeating-linear-gradient(-60deg, var(--pw-facet) 0 1px, transparent 1px 13px),
		repeating-linear-gradient(0deg, var(--pw-facet) 0 1px, transparent 1px 13px);
}

.pw-gate--ep .pw-s2,
.pw-gate--ep .pw-s3 {
	width: 7px;
	height: 30px;
	background: var(--pw-art-ink);
}

.pw-gate--ep .pw-s2 { left: 50%; margin-left: -22px; transform: skewX(12deg); }
.pw-gate--ep .pw-s3 { left: 50%; margin-left: 15px; transform: skewX(-12deg); }

/* Hollywood Studios — stepped art-deco tower. */
.pw-gate--hs .pw-s1 { left: 50%; margin-left: -26px; width: 52px; height: 34px; background: var(--pw-art-ink); }
.pw-gate--hs .pw-s2 { left: 50%; margin-left: -17px; width: 34px; height: 60px; background: var(--pw-art-ink); }
.pw-gate--hs .pw-s3 { left: 50%; margin-left: -9px; width: 18px; height: 82px; background: var(--pw-art-ink); }

.pw-gate--hs .pw-s3::before {
	content: "";
	position: absolute;
	left: 8px;
	top: -16px;
	width: 2px;
	height: 16px;
	background: var(--pw-art-ink);
}

/* Animal Kingdom — the tree. */
.pw-gate--ak .pw-s1 {
	left: 50%;
	margin-left: -15px;
	width: 30px;
	height: 44px;
	background: var(--pw-art-ink);
	clip-path: polygon(34% 0, 66% 0, 100% 100%, 0 100%);
}

.pw-gate--ak .pw-s2 {
	left: 50%;
	margin-left: -44px;
	bottom: 52px;
	width: 88px;
	height: 48px;
	border-radius: 50%;
	background: var(--pw-art-ink);
}

.pw-gate--ak .pw-s3 {
	left: 50%;
	margin-left: -14px;
	bottom: 74px;
	width: 54px;
	height: 34px;
	border-radius: 50%;
	background: var(--pw-art-ink);
	opacity: 0.85;
}

/* Disneyland Park — rounded castle with a lit gateway arch. */
.pw-gate--dl .pw-s1 {
	left: 50%;
	margin-left: -17px;
	width: 34px;
	height: 54px;
	border-radius: 17px 17px 0 0;
	background: var(--pw-art-ink);
}

.pw-gate--dl .pw-s1::before {
	content: "";
	position: absolute;
	left: 9px;
	bottom: 0;
	width: 16px;
	height: 22px;
	border-radius: 8px 8px 0 0;
	background: var(--pw-tint-2);
}

.pw-gate--dl .pw-s1::after {
	content: "";
	position: absolute;
	left: -11px;
	top: -32px;
	border-left: 22px solid transparent;
	border-right: 23px solid transparent;
	border-bottom: 32px solid var(--pw-art-ink);
}

.pw-gate--dl .pw-s2,
.pw-gate--dl .pw-s3 {
	width: 15px;
	height: 32px;
	background: var(--pw-art-ink);
}

.pw-gate--dl .pw-s2 { left: 50%; margin-left: -40px; }
.pw-gate--dl .pw-s3 { left: 50%; margin-left: 25px; }

.pw-gate--dl .pw-s2::before,
.pw-gate--dl .pw-s3::before {
	content: "";
	position: absolute;
	left: -4px;
	top: -22px;
	border-left: 11px solid transparent;
	border-right: 12px solid transparent;
	border-bottom: 22px solid var(--pw-art-ink);
}

/* California Adventure — the pier wheel. */
.pw-gate--dca .pw-s1 {
	left: 50%;
	margin-left: -36px;
	bottom: 30px;
	width: 72px;
	height: 72px;
	box-sizing: border-box;
	border: 6px solid var(--pw-art-ink);
	border-radius: 50%;
}

.pw-gate--dca .pw-s2 {
	left: 50%;
	margin-left: -30px;
	bottom: 36px;
	width: 60px;
	height: 60px;
	border-radius: 50%;
	background: repeating-conic-gradient(from 0deg, var(--pw-art-ink) 0 1.6deg, transparent 1.6deg 30deg);
}

.pw-gate--dca .pw-s3 {
	left: 50%;
	margin-left: -5px;
	width: 10px;
	height: 36px;
	background: var(--pw-art-ink);
}

.pw-gate--dca .pw-s3::before {
	content: "";
	position: absolute;
	left: -3px;
	top: -12px;
	width: 16px;
	height: 16px;
	border-radius: 50%;
	background: var(--pw-art-ink);
}

/* ---- 8. Panels and browse strip ---------------------------- */
.pw-cols {
	display: grid;
	grid-template-columns: 1fr 1fr;
	gap: 1.1em;
}

.pw-panel {
	border: 1px solid var(--pw-rule);
	border-radius: 3px;
	background: var(--pw-paper);
	overflow: hidden;
}

.pw-panel-title {
	padding: 0.45em 0.9em;
	background: var(--pw-paper-2);
	border-bottom: 1px solid var(--pw-rule);
	font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
	font-size: 1.05em;
	color: var(--pw-ink);
}

.pw-panel-body {
	padding: 0.85em 0.95em;
	line-height: 1.6;
}

.pw-panel-body p {
	margin: 0 0 0.6em;
}

.pw-panel-body p:last-child {
	margin-bottom: 0;
}

.pw-panel-body ul {
	margin: 0 0 0 1.3em;
	padding: 0;
}

.pw-panel-body li {
	margin-bottom: 0.45em;
}

.pw-browse {
	display: grid;
	grid-template-columns: repeat(4, 1fr);
	gap: 0.6em;
}

.pw-chip {
	padding: 0.55em 0.7em;
	border: 1px solid var(--pw-rule);
	border-radius: 3px;
	background: var(--pw-paper);
	text-align: center;
	font-size: 0.92em;
	transition: border-color 120ms ease;
}

.pw-chip:hover {
	border-color: var(--pw-gilt);
}

/* Make the whole chip the hit target, not just the link text. */
.pw-chip a {
	display: block;
}

.pw-colophon {
	margin-top: 1.6em;
	padding-top: 0.9em;
	border-top: 1px solid var(--pw-rule);
	font-size: 0.9em;
	line-height: 1.6;
	color: var(--pw-muted);
}

.pw-colophon p,
.pw-hero > div > p,
.pw-gate-body p {
	margin: 0;
}

/* ---- 9. Advertising slots ---------------------------------- */
/* Three slots, all injected server-side from LocalSettings.php so
   that no article wikitext knows they exist:

     .pw-ad--leaderboard  beneath the page title, above the prose
     .pw-ad--in-article   after the lead section, long articles only
     .pw-ad--rail         in the Vector 2022 sidebar

   A slot with no creative is never emitted at all, so an unsold
   slot leaves no gap; the :empty rules here are belt and braces
   for an ad tag that renders to nothing at request time. */
.pw-ad {
	margin: 1.15em 0 1.5em;
}

.pw-ad:empty {
	display: none;
}

/* The frame is the containing block for whatever the network
   serves: it can be no wider than the column it sits in. */
.pw-ad__frame {
	max-width: 100%;
	overflow: hidden;
}

.pw-ad__frame:empty {
	display: none;
}

/* Label. Same small-caps serif grammar as the Main Page section
   labels, one step quieter — it is a disclosure, not a heading. */
.pw-ad__label {
	display: flex;
	align-items: center;
	gap: 0.6em;
	margin-bottom: 0.4em;
	font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
	font-size: 0.7em;
	letter-spacing: 0.18em;
	text-transform: uppercase;
	color: var(--pw-muted);
}

.pw-ad__label::after {
	content: "";
	flex: 1 1 auto;
	height: 1px;
	background: var(--pw-rule);
}

/* (a) Leaderboard: sits directly under the title block, so it is
   pulled up tight against it rather than floating in the gap. */
.pw-ad--leaderboard {
	margin-top: 0.3em;
}

/* (b) In-article: clears the infobox float so a creative is never
   squeezed into the gutter beside it, and so it can never reflow
   or overlap a line of prose. */
.pw-ad--in-article {
	clear: both;
	margin: 1.9em 0;
}

/* (c) Rail: lives in the skin's sidebar, outside the prose column
   entirely, which is what makes it structurally incapable of
   disturbing article text. */
.pw-ad--rail {
	margin: 1em 0 0.3em;
	font-size: 0.9em;
}

/* ---- House ad ---------------------------------------------- */
/* The founding-advertiser placeholder. Duotone, drawn in CSS, same
   grammar as the gateway cards: ink tower, gilt roof, paper ground. */
.pw-house {
	display: flex;
	align-items: center;
	gap: 0.85em;
	padding: 0.8em 1em;
	border: 1px solid var(--pw-rule);
	border-radius: 3px;
	background: linear-gradient(180deg, var(--pw-paper) 0%, var(--pw-paper-2) 100%);
	transition: border-color 120ms ease;
}

a.pw-house,
a.pw-house:visited {
	color: var(--pw-ink);
	text-decoration: none;
}

.pw-house:hover {
	border-color: var(--pw-gilt);
}

.pw-house__mark {
	position: relative;
	flex: 0 0 34px;
	height: 34px;
}

.pw-house__mark::before {
	content: "";
	position: absolute;
	left: 11px;
	bottom: 0;
	width: 12px;
	height: 19px;
	background: var(--pw-art-ink);
}

.pw-house__mark::after {
	content: "";
	position: absolute;
	left: 5px;
	bottom: 19px;
	width: 0;
	height: 0;
	border-left: 12px solid transparent;
	border-right: 12px solid transparent;
	border-bottom: 13px solid var(--pw-gilt);
}

.pw-house__text {
	display: block;
	min-width: 0;
}

.pw-house__name {
	display: block;
	font-family: "Linux Libertine", "Georgia", "Times New Roman", serif;
	font-size: 1.15em;
	line-height: 1.2;
	color: var(--pw-ink);
}

/* The neutral tagline area: reserved for the advertiser's own line
   once a real creative replaces this placeholder. */
.pw-house__tag {
	display: block;
	margin-top: 0.15em;
	font-size: 0.82em;
	line-height: 1.3;
	color: var(--pw-muted);
}

.pw-house__cta {
	margin-left: auto;
	padding-bottom: 1px;
	border-bottom: 1px solid var(--pw-gilt);
	font-size: 0.78em;
	letter-spacing: 0.08em;
	text-transform: uppercase;
	white-space: nowrap;
	color: var(--pw-gilt-ink);
}

/* Rail variant: a narrow column, so the card stacks. */
.pw-ad--rail .pw-house {
	flex-direction: column;
	align-items: flex-start;
	gap: 0.5em;
	padding: 0.75em 0.8em;
}

.pw-ad--rail .pw-house__cta {
	margin-left: 0;
}

/* ---- 10. Footer: operator line ------------------------------ */
#footer-info-pw-operator {
	color: var(--pw-muted);
}

#footer-info-pw-operator .pw-operator-sep {
	padding: 0 0.45em;
	color: var(--pw-rule);
}

/* ---- 11. Responsive ----------------------------------------- */
@media screen and (max-width: 999px) {
	/* The sidebar collapses to a drawer below this width; a rail ad
	   inside a drawer is an ad nobody asked to open, so it goes. */
	.pw-ad--rail { display: none; }
}

@media screen and (max-width: 860px) {
	.pw-gates { grid-template-columns: repeat(2, 1fr); }
	.pw-browse { grid-template-columns: repeat(2, 1fr); }
}

@media screen and (max-width: 600px) {
	.pw-gates { grid-template-columns: 1fr; }
	.pw-cols { grid-template-columns: 1fr; }
	.pw-hero { padding: 1.3em 1.2em 1.2em; }
	.pw-hero-title { font-size: 1.7em; }
	.pw-hero::after { display: none; }
	.infobox { float: none; margin: 0 0 1em; width: auto !important; }
	/* Phone width: the call to action wraps under the name rather
	   than squeezing it. */
	.pw-house { flex-wrap: wrap; gap: 0.6em 0.85em; }
	.pw-house__cta { margin-left: 0; }
}

@media print {
	.pw-ad { display: none; }
}

@media (prefers-reduced-motion: reduce) {
	.pw-gate { transition: none; }
	.pw-gate:hover { transform: none; }
	.pw-house { transition: none; }
}