<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://edfieldmanual.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=EDFM+Content+Maintenance</id>
	<title>Elite Dangerous Field Manual - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://edfieldmanual.com/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=EDFM+Content+Maintenance"/>
	<link rel="alternate" type="text/html" href="https://edfieldmanual.com/wiki/Special:Contributions/EDFM_Content_Maintenance"/>
	<updated>2026-08-25T11:32:37Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Template:EDFM_style/styles.css&amp;diff=616</id>
		<title>Template:EDFM style/styles.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Template:EDFM_style/styles.css&amp;diff=616"/>
		<updated>2026-08-10T20:18:14Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Reduce centered draft/status notice width&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Shared styling for EDFM&#039;s editorial templates (Article status, Draft&lt;br /&gt;
   warning, Prerequisites, Related articles, etc. -- see each template&#039;s&lt;br /&gt;
   own page for which classes it uses). Freely uses the --edfm-* custom&lt;br /&gt;
   properties defined in MediaWiki:Common.css -- see the note there under&lt;br /&gt;
   &amp;quot;6. Panels&amp;quot; for why these classes live only in this file and not&lt;br /&gt;
   duplicated in Common.css too.&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: panels keep the accent-rail + corner-cut&lt;br /&gt;
   language from the first pass (both are explicitly the &amp;quot;hierarchy&lt;br /&gt;
   without a full border around everything&amp;quot; technique this redesign asks&lt;br /&gt;
   for) but get noticeably more padding/breathing room; the status module&lt;br /&gt;
   is rebuilt with a coloured header band and stacked label/value metadata&lt;br /&gt;
   instead of a plain left-rail box with inline &amp;quot;Label: value&amp;quot; text; and a&lt;br /&gt;
   new .edfm-related component replaces the old plain notice-style&lt;br /&gt;
   &amp;quot;Related articles&amp;quot; bar with a small tile row. */&lt;br /&gt;
&lt;br /&gt;
.edfm-box,&lt;br /&gt;
.edfm-panel {&lt;br /&gt;
	border-left: 4px solid var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 1.1em 1.3em;&lt;br /&gt;
	margin: 1.4em 0;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 10px ) 0, 100% 10px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-info {&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-warning,&lt;br /&gt;
.edfm-box.edfm-warning {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	background: #201a12;&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-draft,&lt;br /&gt;
.edfm-box.edfm-draft {&lt;br /&gt;
	border-left-color: var( --edfm-text-dim );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* Draft/maintenance notices are intentionally compact and centred; article&lt;br /&gt;
   prose/nav/tables may stretch, but these banners should not become a&lt;br /&gt;
   full-width strip across the whole rail. */&lt;br /&gt;
.edfm-panel-draft:not( .edfm-status ),&lt;br /&gt;
.edfm-box.edfm-draft:not( .edfm-status ) {&lt;br /&gt;
	max-width: 44rem !important;&lt;br /&gt;
	margin-left: auto !important;&lt;br /&gt;
	margin-right: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-reference {&lt;br /&gt;
	border-left-color: var( --edfm-blue );&lt;br /&gt;
}&lt;br /&gt;
.edfm-box.edfm-disclaimer {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	font-size: 0.92em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dl,&lt;br /&gt;
.edfm-panel dl {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dt,&lt;br /&gt;
.edfm-panel dt {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	float: left;&lt;br /&gt;
	clear: left;&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dd,&lt;br /&gt;
.edfm-panel dd {&lt;br /&gt;
	margin-left: 11em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-inline-flag {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Article metadata / status module (Template:Article status) --------&lt;br /&gt;
   2026-08-08 second revision: a compact maintenance banner (RuneScape&lt;br /&gt;
   Wiki-style notice as the UX reference, not its markup/colours) rather&lt;br /&gt;
   than a small internal dashboard -- an icon, the bare status word (no&lt;br /&gt;
   mode/version appended to it), one standard sentence for that status,&lt;br /&gt;
   and a concise &amp;quot;Uncertain: ...&amp;quot; line when there&#039;s something worth&lt;br /&gt;
   flagging. The full editorial record (reviewer, mode, version, source&lt;br /&gt;
   quality, the complete uncertainty note, etc.) moves to the&lt;br /&gt;
   .edfm-status-expand collapsible below, not removed, just no longer&lt;br /&gt;
   competing with the article for attention. Semantic colouring always&lt;br /&gt;
   pairs with the visible text status/icon -- never colour alone, per the&lt;br /&gt;
   site&#039;s Verification Policy. Three colour tiers cover the seven actual&lt;br /&gt;
   status values (see Elite Dangerous Field Manual: Verification Policy):&lt;br /&gt;
   positive/confirmed (Verified, Partially verified) in cyan -- matching&lt;br /&gt;
   &amp;quot;cyan = verification information&amp;quot; from the colour system;&lt;br /&gt;
   attention-needed (Needs review, Upcoming) in orange -- matching&lt;br /&gt;
   &amp;quot;orange = important actions/emphasis&amp;quot;; and neutral (Draft, Historical,&lt;br /&gt;
   Legacy only) in a dim neutral tone -- Draft moved here from the&lt;br /&gt;
   attention tier, since &amp;quot;still being written&amp;quot; isn&#039;t the same kind of&lt;br /&gt;
   concern as &amp;quot;unchecked&amp;quot; or &amp;quot;not released yet&amp;quot;. The template sets the&lt;br /&gt;
   modifier class via #switch. */&lt;br /&gt;
.edfm-status {&lt;br /&gt;
	border-left-width: 4px;&lt;br /&gt;
	border-left-style: solid;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	max-width: 44rem !important;&lt;br /&gt;
	margin: 1em auto !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive { border-left-color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention { border-left-color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral { border-left-color: var( --edfm-status-neutral ); }&lt;br /&gt;
&lt;br /&gt;
.edfm-status-banner {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: flex-start;&lt;br /&gt;
	gap: 0.65em;&lt;br /&gt;
	padding: 0.55em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Fixed-size icon swatch -- a single CSS-safe glyph (no icon font/library),&lt;br /&gt;
   never the same shape as a hard error: a checkmark for the positive&lt;br /&gt;
   tier, a plain &amp;quot;!&amp;quot; (not a red triangle) for attention, a quiet &amp;quot;i&amp;quot; for&lt;br /&gt;
   neutral. &amp;quot;Needs review&amp;quot; means not fully verified yet, not wrong. */&lt;br /&gt;
.edfm-status-icon {&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
	width: 1.45em;&lt;br /&gt;
	height: 1.45em;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive .edfm-status-icon { background: var( --edfm-status-positive-bg ); color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention .edfm-status-icon { background: var( --edfm-status-attention-bg ); color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral .edfm-status-icon { background: var( --edfm-status-neutral-bg ); color: var( --edfm-text-dim ); }&lt;br /&gt;
.edfm-status-banner-body {&lt;br /&gt;
	flex: 1 1 auto;&lt;br /&gt;
	min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-heading {&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.9em;&lt;br /&gt;
	margin-bottom: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive .edfm-status-heading { color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention .edfm-status-heading { color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral .edfm-status-heading { color: var( --edfm-text ); }&lt;br /&gt;
.edfm-status-message {&lt;br /&gt;
	margin: 0 0 0.2em;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 0.86em;&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-uncertain {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.86em;&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-uncertain-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-details {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( auto-fit, minmax( 11em, 1fr ) );&lt;br /&gt;
	gap: 0.85em 1.25em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0.85em 1em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	gap: 0.2em;&lt;br /&gt;
	/* Grid items default to min-width: auto, which floors their shrink at&lt;br /&gt;
	   their content&#039;s min-content size -- a long slash-joined run like&lt;br /&gt;
	   &amp;quot;prerequisite/discovery/invitation/unlock&amp;quot; (no spaces, so no natural&lt;br /&gt;
	   break point in some engines) could floor a column wider than its&lt;br /&gt;
	   track and spill into the next one at in-between widths (2026-08-08:&lt;br /&gt;
	   found at ~820px on The Dweller). Letting the item shrink below that&lt;br /&gt;
	   floor, paired with the dd&#039;s own overflow-wrap below, keeps long&lt;br /&gt;
	   values inside their own column at every width instead. */&lt;br /&gt;
	min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row dt {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	float: none;&lt;br /&gt;
	clear: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.7em;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row dd {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.98em;&lt;br /&gt;
	overflow-wrap: anywhere;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 480px ) {&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Related content (Template:Related articles) -----------------------&lt;br /&gt;
   A small navigation strip instead of a generic bordered notice -- a&lt;br /&gt;
   quiet uppercase label above a row of individually-boxed link &amp;quot;tiles&amp;quot;,&lt;br /&gt;
   each with a trailing arrow. Deliberately styles the `&amp;lt;a&amp;gt;` elements&lt;br /&gt;
   directly (not container-level flexbox) so the freeform wikitext link&lt;br /&gt;
   list passed into the template (arbitrary separators/whitespace between&lt;br /&gt;
   links) can&#039;t break the layout -- every link gets its own tile&lt;br /&gt;
   regardless of what, if anything, sits between them in the source. */&lt;br /&gt;
.edfm-related {&lt;br /&gt;
	margin: 1.6em 0;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-label {&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.75em;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin-bottom: 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( auto-fit, minmax( 12rem, 1fr ) );&lt;br /&gt;
	gap: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: space-between;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border-left: 2px solid var( --edfm-cyan );&lt;br /&gt;
	padding: 0.65em 1.1em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-left-color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a::after {&lt;br /&gt;
	content: &#039;\2192&#039;;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a:hover {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;View verification details&amp;quot; collapsible ---------------------------&lt;br /&gt;
   Wraps everything beyond the compact banner (Status, Last reviewed,&lt;br /&gt;
   Reviewer, Game mode, Version coverage, Source quality, the full Known&lt;br /&gt;
   uncertainty text, and the optional Legacy differences/Recent changes/&lt;br /&gt;
   Verification notes fields) behind a native mw-collapsible toggle&lt;br /&gt;
   instead of a new dependency -- jquery.makeCollapsible&lt;br /&gt;
   is core MediaWiki, loaded on every page by mediawiki.page.ready. For a&lt;br /&gt;
   plain &amp;lt;div&amp;gt; its default behaviour prepends a&lt;br /&gt;
   &amp;lt;button class=&amp;quot;mw-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;mw-collapsible-text&amp;quot;&amp;gt;&lt;br /&gt;
   as the first child and wraps the remaining content in&lt;br /&gt;
   .mw-collapsible-content -- reset here to a plain full-width text row&lt;br /&gt;
   matching this module&#039;s mono/uppercase metadata language, instead of the&lt;br /&gt;
   browser&#039;s default button chrome, which would render as a jarring light&lt;br /&gt;
   box against this site&#039;s dark surfaces (same class of fix as the Save&lt;br /&gt;
   dialog/toolbar/#filetoc native-component passes elsewhere on this&lt;br /&gt;
   site). */&lt;br /&gt;
.edfm-status-expand {&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0.45em 1em;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.75em;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle:hover,&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand .mw-collapsible-content .edfm-status-details {&lt;br /&gt;
	padding-top: 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Fact / Field Manual Recommendation callouts ------------------------&lt;br /&gt;
   Template:Fact and Template:Field manual recommendation -- a small&lt;br /&gt;
   labelled distinction between a verified fact and EDFM&#039;s own editorial&lt;br /&gt;
   judgement (see Elite Dangerous Field Manual:Engineering Architecture on&lt;br /&gt;
   why pinning/strategy guidance is treated as editorial, not database&lt;br /&gt;
   fact). Deliberately reuses the accent-rail + cyan/orange language&lt;br /&gt;
   already used everywhere else on this site (status positive/attention,&lt;br /&gt;
   infobox labels, related-link hover) instead of inventing a new callout&lt;br /&gt;
   style: cyan marks a verified fact (&amp;quot;cyan = verification information&amp;quot;),&lt;br /&gt;
   orange marks editorial guidance (&amp;quot;orange = important actions/&lt;br /&gt;
   emphasis&amp;quot;) -- see the colour rules this mirrors in this file&#039;s own&lt;br /&gt;
   .edfm-status-- modifiers above. */&lt;br /&gt;
.edfm-fact-recommendation {&lt;br /&gt;
	border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	padding: 0.5em 0.9em;&lt;br /&gt;
	margin: 0.8em 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--fact {&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--recommendation {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation-label {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 0.72em;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.3em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--fact .edfm-fact-recommendation-label {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--recommendation .edfm-fact-recommendation-label {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation-body {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=615</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=615"/>
		<updated>2026-08-10T20:18:13Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Final prose-width override and smaller centered draft notices&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Full-width article workspace: keep the fixed Vector sidebar clear,&lt;br /&gt;
	   but let the article surface use the entire remaining viewport. */&lt;br /&gt;
	--edfm-sidebar-width: 12.75rem;&lt;br /&gt;
	--edfm-sidebar-clear: 12.75rem;&lt;br /&gt;
	--edfm-content-max: calc( 100vw - var( --edfm-sidebar-clear ) );&lt;br /&gt;
	--edfm-gutter: 0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
/* Full-height sidebar rail: mirrors the RuneScape.wiki behavior where the&lt;br /&gt;
   left rail has no visible bottom edge. The real #mw-panel only carries the&lt;br /&gt;
   navigation content; this fixed layer paints the uninterrupted surface,&lt;br /&gt;
   border, and shadow down the whole viewport. */&lt;br /&gt;
body::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: 0;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	background: linear-gradient( 180deg, var( --edfm-surface-1 ) 0%, var( --edfm-bg-deep ) 100% );&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 10px 0 22px rgba( 0, 0, 0, 0.32 );&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
	z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;&lt;br /&gt;
	font-size: clamp( 1.75rem, 1.35rem + 1.45vw, 2.15rem );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0;&lt;br /&gt;
	line-height: 1.18;&lt;br /&gt;
	margin: 0.15em 0 0.25em;&lt;br /&gt;
	padding-bottom: 0.22em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.25em;&lt;br /&gt;
	margin-top: 2rem;&lt;br /&gt;
	margin-bottom: 0.85rem;&lt;br /&gt;
	font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;&lt;br /&gt;
	font-size: clamp( 1.28rem, 1.08rem + 0.65vw, 1.62rem );&lt;br /&gt;
	font-weight: 500;&lt;br /&gt;
	letter-spacing: 0;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: none !important; /* Site-wide full-width pass: article text should use the whole content rail. */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Full-width article pass: the article now fills the workspace to the right edge.&lt;br /&gt;
   Historical note: this block originally centred a capped article column.&lt;br /&gt;
&lt;br /&gt;
   THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable,&lt;br /&gt;
.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: block;&lt;br /&gt;
	margin: 0.2em 0 0.15em 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
	font-weight: 600;&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: 0.95rem;&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	line-height: 1.45;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin: 0.25em 0 0.85em 1.4em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background: transparent;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding: 0 0.65rem 1.35rem 0.65rem;&lt;br /&gt;
	border-right: 0;&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
	z-index: 3;&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually. Do not draw a divider on or near&lt;br /&gt;
   #p-logo: Vector legacy fixes the logo box at 155px high and the EDFM hex&lt;br /&gt;
   mark reaches that edge, so any horizontal rule in this box cuts through&lt;br /&gt;
   the lower point of the logo. Navigation spacing below provides the break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	margin: 0 -0.65rem 1.25rem -0.65rem;&lt;br /&gt;
	padding: 0.95rem 0.55rem 1.05rem 0.55rem;&lt;br /&gt;
	border-bottom: 0 !important;&lt;br /&gt;
	background: radial-gradient( circle at 50% 25%, rgba( 255, 138, 0, 0.08 ), transparent 58% );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
&lt;br /&gt;
/* Sidebar Discord invite CTA: injected by MediaWiki:Common.js directly below&lt;br /&gt;
   the logo and above the first generated Vector portlet, matching the compact&lt;br /&gt;
   community-button placement shown in the reference screenshot. */&lt;br /&gt;
.edfm-discord-cta {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	gap: 0.42rem;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: calc( 100% - 1.35rem );&lt;br /&gt;
	min-height: 1.78rem;&lt;br /&gt;
	margin: 0.35rem 0.675rem 1.05rem 0.675rem;&lt;br /&gt;
	padding: 0.36rem 0.56rem;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	background: #5865f2;&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
	font-size: 0.76rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	line-height: 1.1;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	box-shadow: 0 2px 5px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	transition: background-color 120ms ease, box-shadow 120ms ease, transform 120ms ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta:hover,&lt;br /&gt;
.edfm-discord-cta:focus {&lt;br /&gt;
	background: #4752c4;&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	box-shadow: 0 3px 8px rgba( 0, 0, 0, 0.42 );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta-icon {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	width: 1rem;&lt;br /&gt;
	height: 1rem;&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta-icon svg {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	fill: currentColor;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.45rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
	padding: 0.42em 0.55em;&lt;br /&gt;
	margin: 0.08em -0.35em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	box-shadow: inset 0 0 0 1px rgba( 255, 138, 0, 0.08 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
#p-personal ul {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55rem;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li {&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clocks {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5rem;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.3em;&lt;br /&gt;
	padding: 0.3em 0.55em;&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 );&lt;br /&gt;
	border: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	border-left: 2px solid var( --edfm-cyan );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-label {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock time {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-local {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.06 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-local time {&lt;br /&gt;
	color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Front-page chrome: the hero already names the site, so suppress the&lt;br /&gt;
   generated MediaWiki page title only on the Main Page. Keep the namespace&lt;br /&gt;
   tab label and all other article titles intact. */&lt;br /&gt;
body.page-Main_Page #firstHeading {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
body.page-Main_Page .mw-body-content {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
.mw-body {&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site notice chrome. The global disclaimer was moved to its dedicated&lt;br /&gt;
   legal/disclaimer page, so an empty #siteNotice must not leave behind a&lt;br /&gt;
   phantom divider at the top of the article surface. */&lt;br /&gt;
#siteNotice:empty {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) em, #siteNotice:not( :empty ) i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   HOME PAGE DASHBOARD&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-home-hero {&lt;br /&gt;
	margin: 0.9rem 0 1.6rem;&lt;br /&gt;
	padding: 1.35rem 1.55rem;&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.16 ), transparent 34% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 66, 199, 217, 0.14 ), transparent 42% ),&lt;br /&gt;
		var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-left: 4px solid var( --edfm-cyan );&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 12px ) 0, 100% 12px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-kicker,&lt;br /&gt;
.edfm-home-card-kicker {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-title {&lt;br /&gt;
	margin-top: 0.25rem;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: clamp( 1.55rem, 1.1rem + 1.5vw, 2.2rem );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.15;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-text {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 0.55rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	gap: 1rem;&lt;br /&gt;
	margin: 1.2rem 0 2rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-four {&lt;br /&gt;
	grid-template-columns: repeat( 4, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-topics {&lt;br /&gt;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-two {&lt;br /&gt;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card {&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-left: 3px solid var( --edfm-cyan );&lt;br /&gt;
	padding: 1rem 1.1rem;&lt;br /&gt;
	box-shadow: 0 12px 24px rgba( 0, 0, 0, 0.2 );&lt;br /&gt;
	transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card:hover {&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-primary {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-warning {&lt;br /&gt;
	border-left-color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-title,&lt;br /&gt;
.edfm-home-card-title a {&lt;br /&gt;
	margin-top: 0.35rem;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-title a:hover {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-text,&lt;br /&gt;
.edfm-home-link-list {&lt;br /&gt;
	margin-top: 0.65rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-link-list a {&lt;br /&gt;
	font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 1100px ) {&lt;br /&gt;
	.edfm-home-grid-four {&lt;br /&gt;
		grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 760px ) {&lt;br /&gt;
	.edfm-home-grid-four,&lt;br /&gt;
	.edfm-home-grid-topics,&lt;br /&gt;
	.edfm-home-grid-two {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   HOME PAGE NEWS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-home-news {&lt;br /&gt;
	margin: 1.8rem 0 2.2rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-feature-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 3, minmax( 0, 1fr ) );&lt;br /&gt;
	gap: 1rem;&lt;br /&gt;
	margin-bottom: 1rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card,&lt;br /&gt;
.edfm-news-list {&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 0 14px 26px rgba( 0, 0, 0, 0.22 );&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	min-height: 100%;&lt;br /&gt;
	transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card:hover {&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.48 );&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-art {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: flex-end;&lt;br /&gt;
	min-height: 7rem;&lt;br /&gt;
	padding: 0.8rem 1rem;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.28 ), transparent 42% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 66, 199, 217, 0.2 ), transparent 48% ),&lt;br /&gt;
		linear-gradient( 180deg, var( --edfm-surface-4 ), var( --edfm-surface-1 ) );&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	color: rgba( 237, 240, 242, 0.72 );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.8rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.16em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-primary .edfm-news-card-art {&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.38 ), transparent 46% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 79, 159, 232, 0.26 ), transparent 52% ),&lt;br /&gt;
		var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-body {&lt;br /&gt;
	padding: 1rem 1.15rem 1.15rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-meta {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.35rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-title,&lt;br /&gt;
.edfm-news-title a {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.25;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-title a:hover {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-summary {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	margin-top: 0.65rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list {&lt;br /&gt;
	padding: 1.1rem 1.25rem 1.2rem;&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list-heading {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list ul {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list li {&lt;br /&gt;
	margin-bottom: 0.55rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-more {&lt;br /&gt;
	margin-top: 0.9rem;&lt;br /&gt;
	padding-top: 0.85rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 900px ) {&lt;br /&gt;
	.edfm-news-feature-grid {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   5b. FULL-WIDTH ARTICLE FLOW OVERRIDES&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* 2026-08-10 audit: EDFM pages should not leave half the article rail empty.&lt;br /&gt;
   Earlier readability caps on paragraphs/hero copy made long-form sections&lt;br /&gt;
   look like narrow blocks while tables, TOCs, and navigation tiles spanned&lt;br /&gt;
   the page. Keep the main rail full-width everywhere; individual components&lt;br /&gt;
   may still opt into their own internal grids, but ordinary article copy and&lt;br /&gt;
   common block containers should stretch to the content edge. */&lt;br /&gt;
.mw-parser-output &amp;gt; p,&lt;br /&gt;
.mw-parser-output &amp;gt; ul,&lt;br /&gt;
.mw-parser-output &amp;gt; ol,&lt;br /&gt;
.mw-parser-output &amp;gt; dl,&lt;br /&gt;
.mw-parser-output &amp;gt; div:not( .thumb ):not( .tright ):not( .tleft ):not( .floatright ):not( .floatleft ):not( .edfm-status ):not( .edfm-panel ):not( .edfm-box ) {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Final guard against stale/skin rules recapping article prose while leaving&lt;br /&gt;
   compact maintenance/status panels free to keep their intentional centred width. */&lt;br /&gt;
.mw-body .mw-parser-output &amp;gt; p,&lt;br /&gt;
.mw-parser-output &amp;gt; p {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body::before {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		background: var( --edfm-bg-deep );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Core MediaWiki/action buttons: match EDFM dark theme instead of default white/orange controls. */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.mw-htmlform-submit,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button,&lt;br /&gt;
#mw-patrol-form button,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;],&lt;br /&gt;
form.mw-htmlform button,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button,&lt;br /&gt;
button.mw-ui-button,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ) {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border: 1px solid var( --edfm-border-strong, var( --edfm-border ) ) !important;&lt;br /&gt;
	border-radius: 0 !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	font-family: var( --edfm-mono ) !important;&lt;br /&gt;
	font-weight: 800 !important;&lt;br /&gt;
	text-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.mw-htmlform-submit:hover,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button:hover,&lt;br /&gt;
#mw-patrol-form button:hover,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;]:hover,&lt;br /&gt;
form.mw-htmlform button:hover,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;]:hover,&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button:hover,&lt;br /&gt;
button.mw-ui-button:hover,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ):hover {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
	border-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button:focus,&lt;br /&gt;
.mw-htmlform-submit:focus,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button:focus,&lt;br /&gt;
#mw-patrol-form button:focus,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;]:focus,&lt;br /&gt;
form.mw-htmlform button:focus,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;]:focus,&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button:focus,&lt;br /&gt;
button.mw-ui-button:focus,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ):focus {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan ) !important;&lt;br /&gt;
	outline-offset: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Patrol action: remove the cramped review button from the public article chrome. */&lt;br /&gt;
#mw-patrol-form {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Frontier news: after removing the repeated dispatch list, keep attribution compact. */&lt;br /&gt;
.edfm-news-attribution-compact {&lt;br /&gt;
	margin-top: 0.35rem;&lt;br /&gt;
	padding-top: 0.6rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS.&lt;br /&gt;
   The close button is injected into #mw-panel by Common.js, so it must be&lt;br /&gt;
   explicitly hidden by default; otherwise a tiny native white button appears&lt;br /&gt;
   in the desktop sidebar&#039;s top-left corner. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim,&lt;br /&gt;
.edfm-mobile-close-button {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips -- intentionally quiet so table rows still&lt;br /&gt;
   read like data rows, not card/list hybrids. */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 30px;&lt;br /&gt;
	height: 30px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Frontier official news feed image treatment */&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image {&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	/* Keep all news thumbnails uniform, including the first/primary story. */&lt;br /&gt;
	height: 9.5rem;&lt;br /&gt;
	min-height: 9.5rem;&lt;br /&gt;
	aspect-ratio: 16 / 9;&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-primary .edfm-news-card-art-image {&lt;br /&gt;
	height: 9.5rem;&lt;br /&gt;
	min-height: 9.5rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image &amp;gt; span,&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-default-size,&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-file-description {&lt;br /&gt;
	display: block !important;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	inset: 0;&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	height: 100% !important;&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-file-element {&lt;br /&gt;
	display: block !important;&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	height: 100% !important;&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	transition: transform 0.2s ease, filter 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card:hover .edfm-news-card-art-image .mw-file-element {&lt;br /&gt;
	filter: brightness( 1.08 ) contrast( 1.05 );&lt;br /&gt;
	transform: scale( 1.035 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-source-badge {&lt;br /&gt;
	display: inline-flex !important;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	position: absolute !important;&lt;br /&gt;
	left: 0.8rem !important;&lt;br /&gt;
	right: auto !important;&lt;br /&gt;
	bottom: 0.75rem !important;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	max-width: calc( 100% - 1.6rem );&lt;br /&gt;
	padding: 0.25rem 0.55rem;&lt;br /&gt;
	background: rgba( 10, 13, 17, 0.82 );&lt;br /&gt;
	border: 1px solid rgba( 255, 138, 0, 0.48 );&lt;br /&gt;
	box-shadow: 0 8px 18px rgba( 0, 0, 0, 0.34 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.68rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.edfm-news-attribution {&lt;br /&gt;
	margin-top: 0.85rem;&lt;br /&gt;
	padding-top: 0.75rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Patrol action: hide MediaWiki generated patrol footer/link from article chrome. */&lt;br /&gt;
.patrollink,&lt;br /&gt;
.patrollink[data-mw-interface],&lt;br /&gt;
.patrollink .cdx-button,&lt;br /&gt;
#mw-content-text + .patrollink,&lt;br /&gt;
.mw-parser-output + .patrollink {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
	visibility: hidden !important;&lt;br /&gt;
	height: 0 !important;&lt;br /&gt;
	min-height: 0 !important;&lt;br /&gt;
	margin: 0 !important;&lt;br /&gt;
	padding: 0 !important;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	overflow: hidden !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2026-08-10 FINAL WIDTH CORRECTION&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Article prose was still visually capped on live pages because older/more&lt;br /&gt;
   specific paragraph rules could win in the final cascade. This block is&lt;br /&gt;
   deliberately last: normal article text and lists may use the article rail,&lt;br /&gt;
   while maintenance/status notices keep their compact centered width in&lt;br /&gt;
   Template:EDFM style/styles.css. */&lt;br /&gt;
.mw-body .mw-parser-output p:not( .edfm-status-message ):not( .edfm-status-uncertain ),&lt;br /&gt;
.mw-body .mw-parser-output li,&lt;br /&gt;
.mw-body .mw-parser-output dd:not( .edfm-status-row dd ) {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-body .mw-parser-output &amp;gt; p:not( .edfm-status-message ):not( .edfm-status-uncertain ),&lt;br /&gt;
.mw-body .mw-parser-output &amp;gt; ul,&lt;br /&gt;
.mw-body .mw-parser-output &amp;gt; ol,&lt;br /&gt;
.mw-body .mw-parser-output &amp;gt; dl:not( .edfm-status-details ) {&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Template:EDFM_style/styles.css&amp;diff=614</id>
		<title>Template:EDFM style/styles.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Template:EDFM_style/styles.css&amp;diff=614"/>
		<updated>2026-08-10T20:12:15Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Restore compact centered draft/status notices&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Shared styling for EDFM&#039;s editorial templates (Article status, Draft&lt;br /&gt;
   warning, Prerequisites, Related articles, etc. -- see each template&#039;s&lt;br /&gt;
   own page for which classes it uses). Freely uses the --edfm-* custom&lt;br /&gt;
   properties defined in MediaWiki:Common.css -- see the note there under&lt;br /&gt;
   &amp;quot;6. Panels&amp;quot; for why these classes live only in this file and not&lt;br /&gt;
   duplicated in Common.css too.&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: panels keep the accent-rail + corner-cut&lt;br /&gt;
   language from the first pass (both are explicitly the &amp;quot;hierarchy&lt;br /&gt;
   without a full border around everything&amp;quot; technique this redesign asks&lt;br /&gt;
   for) but get noticeably more padding/breathing room; the status module&lt;br /&gt;
   is rebuilt with a coloured header band and stacked label/value metadata&lt;br /&gt;
   instead of a plain left-rail box with inline &amp;quot;Label: value&amp;quot; text; and a&lt;br /&gt;
   new .edfm-related component replaces the old plain notice-style&lt;br /&gt;
   &amp;quot;Related articles&amp;quot; bar with a small tile row. */&lt;br /&gt;
&lt;br /&gt;
.edfm-box,&lt;br /&gt;
.edfm-panel {&lt;br /&gt;
	border-left: 4px solid var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 1.1em 1.3em;&lt;br /&gt;
	margin: 1.4em 0;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 10px ) 0, 100% 10px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-info {&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-warning,&lt;br /&gt;
.edfm-box.edfm-warning {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	background: #201a12;&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-draft,&lt;br /&gt;
.edfm-box.edfm-draft {&lt;br /&gt;
	border-left-color: var( --edfm-text-dim );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* Draft/maintenance notices are intentionally compact and centred; article&lt;br /&gt;
   prose/nav/tables may stretch, but these banners should not become a&lt;br /&gt;
   full-width strip across the whole rail. */&lt;br /&gt;
.edfm-panel-draft:not( .edfm-status ),&lt;br /&gt;
.edfm-box.edfm-draft:not( .edfm-status ) {&lt;br /&gt;
	max-width: 64em !important;&lt;br /&gt;
	margin-left: auto !important;&lt;br /&gt;
	margin-right: auto !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-reference {&lt;br /&gt;
	border-left-color: var( --edfm-blue );&lt;br /&gt;
}&lt;br /&gt;
.edfm-box.edfm-disclaimer {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	font-size: 0.92em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dl,&lt;br /&gt;
.edfm-panel dl {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dt,&lt;br /&gt;
.edfm-panel dt {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	float: left;&lt;br /&gt;
	clear: left;&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dd,&lt;br /&gt;
.edfm-panel dd {&lt;br /&gt;
	margin-left: 11em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-inline-flag {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Article metadata / status module (Template:Article status) --------&lt;br /&gt;
   2026-08-08 second revision: a compact maintenance banner (RuneScape&lt;br /&gt;
   Wiki-style notice as the UX reference, not its markup/colours) rather&lt;br /&gt;
   than a small internal dashboard -- an icon, the bare status word (no&lt;br /&gt;
   mode/version appended to it), one standard sentence for that status,&lt;br /&gt;
   and a concise &amp;quot;Uncertain: ...&amp;quot; line when there&#039;s something worth&lt;br /&gt;
   flagging. The full editorial record (reviewer, mode, version, source&lt;br /&gt;
   quality, the complete uncertainty note, etc.) moves to the&lt;br /&gt;
   .edfm-status-expand collapsible below, not removed, just no longer&lt;br /&gt;
   competing with the article for attention. Semantic colouring always&lt;br /&gt;
   pairs with the visible text status/icon -- never colour alone, per the&lt;br /&gt;
   site&#039;s Verification Policy. Three colour tiers cover the seven actual&lt;br /&gt;
   status values (see Elite Dangerous Field Manual: Verification Policy):&lt;br /&gt;
   positive/confirmed (Verified, Partially verified) in cyan -- matching&lt;br /&gt;
   &amp;quot;cyan = verification information&amp;quot; from the colour system;&lt;br /&gt;
   attention-needed (Needs review, Upcoming) in orange -- matching&lt;br /&gt;
   &amp;quot;orange = important actions/emphasis&amp;quot;; and neutral (Draft, Historical,&lt;br /&gt;
   Legacy only) in a dim neutral tone -- Draft moved here from the&lt;br /&gt;
   attention tier, since &amp;quot;still being written&amp;quot; isn&#039;t the same kind of&lt;br /&gt;
   concern as &amp;quot;unchecked&amp;quot; or &amp;quot;not released yet&amp;quot;. The template sets the&lt;br /&gt;
   modifier class via #switch. */&lt;br /&gt;
.edfm-status {&lt;br /&gt;
	border-left-width: 4px;&lt;br /&gt;
	border-left-style: solid;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	max-width: 64em !important;&lt;br /&gt;
	margin: 1em auto !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive { border-left-color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention { border-left-color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral { border-left-color: var( --edfm-status-neutral ); }&lt;br /&gt;
&lt;br /&gt;
.edfm-status-banner {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: flex-start;&lt;br /&gt;
	gap: 0.65em;&lt;br /&gt;
	padding: 0.55em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Fixed-size icon swatch -- a single CSS-safe glyph (no icon font/library),&lt;br /&gt;
   never the same shape as a hard error: a checkmark for the positive&lt;br /&gt;
   tier, a plain &amp;quot;!&amp;quot; (not a red triangle) for attention, a quiet &amp;quot;i&amp;quot; for&lt;br /&gt;
   neutral. &amp;quot;Needs review&amp;quot; means not fully verified yet, not wrong. */&lt;br /&gt;
.edfm-status-icon {&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
	width: 1.45em;&lt;br /&gt;
	height: 1.45em;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive .edfm-status-icon { background: var( --edfm-status-positive-bg ); color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention .edfm-status-icon { background: var( --edfm-status-attention-bg ); color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral .edfm-status-icon { background: var( --edfm-status-neutral-bg ); color: var( --edfm-text-dim ); }&lt;br /&gt;
.edfm-status-banner-body {&lt;br /&gt;
	flex: 1 1 auto;&lt;br /&gt;
	min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-heading {&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.9em;&lt;br /&gt;
	margin-bottom: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive .edfm-status-heading { color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention .edfm-status-heading { color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral .edfm-status-heading { color: var( --edfm-text ); }&lt;br /&gt;
.edfm-status-message {&lt;br /&gt;
	margin: 0 0 0.2em;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 0.86em;&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-uncertain {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.86em;&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-uncertain-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-details {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( auto-fit, minmax( 11em, 1fr ) );&lt;br /&gt;
	gap: 0.85em 1.25em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0.85em 1em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	gap: 0.2em;&lt;br /&gt;
	/* Grid items default to min-width: auto, which floors their shrink at&lt;br /&gt;
	   their content&#039;s min-content size -- a long slash-joined run like&lt;br /&gt;
	   &amp;quot;prerequisite/discovery/invitation/unlock&amp;quot; (no spaces, so no natural&lt;br /&gt;
	   break point in some engines) could floor a column wider than its&lt;br /&gt;
	   track and spill into the next one at in-between widths (2026-08-08:&lt;br /&gt;
	   found at ~820px on The Dweller). Letting the item shrink below that&lt;br /&gt;
	   floor, paired with the dd&#039;s own overflow-wrap below, keeps long&lt;br /&gt;
	   values inside their own column at every width instead. */&lt;br /&gt;
	min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row dt {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	float: none;&lt;br /&gt;
	clear: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.7em;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row dd {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.98em;&lt;br /&gt;
	overflow-wrap: anywhere;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 480px ) {&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Related content (Template:Related articles) -----------------------&lt;br /&gt;
   A small navigation strip instead of a generic bordered notice -- a&lt;br /&gt;
   quiet uppercase label above a row of individually-boxed link &amp;quot;tiles&amp;quot;,&lt;br /&gt;
   each with a trailing arrow. Deliberately styles the `&amp;lt;a&amp;gt;` elements&lt;br /&gt;
   directly (not container-level flexbox) so the freeform wikitext link&lt;br /&gt;
   list passed into the template (arbitrary separators/whitespace between&lt;br /&gt;
   links) can&#039;t break the layout -- every link gets its own tile&lt;br /&gt;
   regardless of what, if anything, sits between them in the source. */&lt;br /&gt;
.edfm-related {&lt;br /&gt;
	margin: 1.6em 0;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-label {&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.75em;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin-bottom: 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( auto-fit, minmax( 12rem, 1fr ) );&lt;br /&gt;
	gap: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: space-between;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border-left: 2px solid var( --edfm-cyan );&lt;br /&gt;
	padding: 0.65em 1.1em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-left-color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a::after {&lt;br /&gt;
	content: &#039;\2192&#039;;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a:hover {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;View verification details&amp;quot; collapsible ---------------------------&lt;br /&gt;
   Wraps everything beyond the compact banner (Status, Last reviewed,&lt;br /&gt;
   Reviewer, Game mode, Version coverage, Source quality, the full Known&lt;br /&gt;
   uncertainty text, and the optional Legacy differences/Recent changes/&lt;br /&gt;
   Verification notes fields) behind a native mw-collapsible toggle&lt;br /&gt;
   instead of a new dependency -- jquery.makeCollapsible&lt;br /&gt;
   is core MediaWiki, loaded on every page by mediawiki.page.ready. For a&lt;br /&gt;
   plain &amp;lt;div&amp;gt; its default behaviour prepends a&lt;br /&gt;
   &amp;lt;button class=&amp;quot;mw-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;mw-collapsible-text&amp;quot;&amp;gt;&lt;br /&gt;
   as the first child and wraps the remaining content in&lt;br /&gt;
   .mw-collapsible-content -- reset here to a plain full-width text row&lt;br /&gt;
   matching this module&#039;s mono/uppercase metadata language, instead of the&lt;br /&gt;
   browser&#039;s default button chrome, which would render as a jarring light&lt;br /&gt;
   box against this site&#039;s dark surfaces (same class of fix as the Save&lt;br /&gt;
   dialog/toolbar/#filetoc native-component passes elsewhere on this&lt;br /&gt;
   site). */&lt;br /&gt;
.edfm-status-expand {&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0.45em 1em;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.75em;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle:hover,&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand .mw-collapsible-content .edfm-status-details {&lt;br /&gt;
	padding-top: 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Fact / Field Manual Recommendation callouts ------------------------&lt;br /&gt;
   Template:Fact and Template:Field manual recommendation -- a small&lt;br /&gt;
   labelled distinction between a verified fact and EDFM&#039;s own editorial&lt;br /&gt;
   judgement (see Elite Dangerous Field Manual:Engineering Architecture on&lt;br /&gt;
   why pinning/strategy guidance is treated as editorial, not database&lt;br /&gt;
   fact). Deliberately reuses the accent-rail + cyan/orange language&lt;br /&gt;
   already used everywhere else on this site (status positive/attention,&lt;br /&gt;
   infobox labels, related-link hover) instead of inventing a new callout&lt;br /&gt;
   style: cyan marks a verified fact (&amp;quot;cyan = verification information&amp;quot;),&lt;br /&gt;
   orange marks editorial guidance (&amp;quot;orange = important actions/&lt;br /&gt;
   emphasis&amp;quot;) -- see the colour rules this mirrors in this file&#039;s own&lt;br /&gt;
   .edfm-status-- modifiers above. */&lt;br /&gt;
.edfm-fact-recommendation {&lt;br /&gt;
	border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	padding: 0.5em 0.9em;&lt;br /&gt;
	margin: 0.8em 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--fact {&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--recommendation {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation-label {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 0.72em;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.3em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--fact .edfm-fact-recommendation-label {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--recommendation .edfm-fact-recommendation-label {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation-body {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=613</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=613"/>
		<updated>2026-08-10T20:12:15Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Restore compact centered status panels and force full-width article prose&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Full-width article workspace: keep the fixed Vector sidebar clear,&lt;br /&gt;
	   but let the article surface use the entire remaining viewport. */&lt;br /&gt;
	--edfm-sidebar-width: 12.75rem;&lt;br /&gt;
	--edfm-sidebar-clear: 12.75rem;&lt;br /&gt;
	--edfm-content-max: calc( 100vw - var( --edfm-sidebar-clear ) );&lt;br /&gt;
	--edfm-gutter: 0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
/* Full-height sidebar rail: mirrors the RuneScape.wiki behavior where the&lt;br /&gt;
   left rail has no visible bottom edge. The real #mw-panel only carries the&lt;br /&gt;
   navigation content; this fixed layer paints the uninterrupted surface,&lt;br /&gt;
   border, and shadow down the whole viewport. */&lt;br /&gt;
body::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: 0;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	background: linear-gradient( 180deg, var( --edfm-surface-1 ) 0%, var( --edfm-bg-deep ) 100% );&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 10px 0 22px rgba( 0, 0, 0, 0.32 );&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
	z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;&lt;br /&gt;
	font-size: clamp( 1.75rem, 1.35rem + 1.45vw, 2.15rem );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0;&lt;br /&gt;
	line-height: 1.18;&lt;br /&gt;
	margin: 0.15em 0 0.25em;&lt;br /&gt;
	padding-bottom: 0.22em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.25em;&lt;br /&gt;
	margin-top: 2rem;&lt;br /&gt;
	margin-bottom: 0.85rem;&lt;br /&gt;
	font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;&lt;br /&gt;
	font-size: clamp( 1.28rem, 1.08rem + 0.65vw, 1.62rem );&lt;br /&gt;
	font-weight: 500;&lt;br /&gt;
	letter-spacing: 0;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: none !important; /* Site-wide full-width pass: article text should use the whole content rail. */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Full-width article pass: the article now fills the workspace to the right edge.&lt;br /&gt;
   Historical note: this block originally centred a capped article column.&lt;br /&gt;
&lt;br /&gt;
   THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable,&lt;br /&gt;
.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: block;&lt;br /&gt;
	margin: 0.2em 0 0.15em 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
	font-weight: 600;&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: 0.95rem;&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	line-height: 1.45;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin: 0.25em 0 0.85em 1.4em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background: transparent;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding: 0 0.65rem 1.35rem 0.65rem;&lt;br /&gt;
	border-right: 0;&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
	z-index: 3;&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually. Do not draw a divider on or near&lt;br /&gt;
   #p-logo: Vector legacy fixes the logo box at 155px high and the EDFM hex&lt;br /&gt;
   mark reaches that edge, so any horizontal rule in this box cuts through&lt;br /&gt;
   the lower point of the logo. Navigation spacing below provides the break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	margin: 0 -0.65rem 1.25rem -0.65rem;&lt;br /&gt;
	padding: 0.95rem 0.55rem 1.05rem 0.55rem;&lt;br /&gt;
	border-bottom: 0 !important;&lt;br /&gt;
	background: radial-gradient( circle at 50% 25%, rgba( 255, 138, 0, 0.08 ), transparent 58% );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
&lt;br /&gt;
/* Sidebar Discord invite CTA: injected by MediaWiki:Common.js directly below&lt;br /&gt;
   the logo and above the first generated Vector portlet, matching the compact&lt;br /&gt;
   community-button placement shown in the reference screenshot. */&lt;br /&gt;
.edfm-discord-cta {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	gap: 0.42rem;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: calc( 100% - 1.35rem );&lt;br /&gt;
	min-height: 1.78rem;&lt;br /&gt;
	margin: 0.35rem 0.675rem 1.05rem 0.675rem;&lt;br /&gt;
	padding: 0.36rem 0.56rem;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	background: #5865f2;&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
	font-size: 0.76rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	line-height: 1.1;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	box-shadow: 0 2px 5px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	transition: background-color 120ms ease, box-shadow 120ms ease, transform 120ms ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta:hover,&lt;br /&gt;
.edfm-discord-cta:focus {&lt;br /&gt;
	background: #4752c4;&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	box-shadow: 0 3px 8px rgba( 0, 0, 0, 0.42 );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta-icon {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	width: 1rem;&lt;br /&gt;
	height: 1rem;&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta-icon svg {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	fill: currentColor;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.45rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
	padding: 0.42em 0.55em;&lt;br /&gt;
	margin: 0.08em -0.35em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	box-shadow: inset 0 0 0 1px rgba( 255, 138, 0, 0.08 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
#p-personal ul {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55rem;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li {&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clocks {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5rem;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.3em;&lt;br /&gt;
	padding: 0.3em 0.55em;&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 );&lt;br /&gt;
	border: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	border-left: 2px solid var( --edfm-cyan );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-label {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock time {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-local {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.06 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-local time {&lt;br /&gt;
	color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Front-page chrome: the hero already names the site, so suppress the&lt;br /&gt;
   generated MediaWiki page title only on the Main Page. Keep the namespace&lt;br /&gt;
   tab label and all other article titles intact. */&lt;br /&gt;
body.page-Main_Page #firstHeading {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
body.page-Main_Page .mw-body-content {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
.mw-body {&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site notice chrome. The global disclaimer was moved to its dedicated&lt;br /&gt;
   legal/disclaimer page, so an empty #siteNotice must not leave behind a&lt;br /&gt;
   phantom divider at the top of the article surface. */&lt;br /&gt;
#siteNotice:empty {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) em, #siteNotice:not( :empty ) i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   HOME PAGE DASHBOARD&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-home-hero {&lt;br /&gt;
	margin: 0.9rem 0 1.6rem;&lt;br /&gt;
	padding: 1.35rem 1.55rem;&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.16 ), transparent 34% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 66, 199, 217, 0.14 ), transparent 42% ),&lt;br /&gt;
		var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-left: 4px solid var( --edfm-cyan );&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 12px ) 0, 100% 12px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-kicker,&lt;br /&gt;
.edfm-home-card-kicker {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-title {&lt;br /&gt;
	margin-top: 0.25rem;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: clamp( 1.55rem, 1.1rem + 1.5vw, 2.2rem );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.15;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-text {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 0.55rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	gap: 1rem;&lt;br /&gt;
	margin: 1.2rem 0 2rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-four {&lt;br /&gt;
	grid-template-columns: repeat( 4, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-topics {&lt;br /&gt;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-two {&lt;br /&gt;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card {&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-left: 3px solid var( --edfm-cyan );&lt;br /&gt;
	padding: 1rem 1.1rem;&lt;br /&gt;
	box-shadow: 0 12px 24px rgba( 0, 0, 0, 0.2 );&lt;br /&gt;
	transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card:hover {&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-primary {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-warning {&lt;br /&gt;
	border-left-color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-title,&lt;br /&gt;
.edfm-home-card-title a {&lt;br /&gt;
	margin-top: 0.35rem;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-title a:hover {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-text,&lt;br /&gt;
.edfm-home-link-list {&lt;br /&gt;
	margin-top: 0.65rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-link-list a {&lt;br /&gt;
	font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 1100px ) {&lt;br /&gt;
	.edfm-home-grid-four {&lt;br /&gt;
		grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 760px ) {&lt;br /&gt;
	.edfm-home-grid-four,&lt;br /&gt;
	.edfm-home-grid-topics,&lt;br /&gt;
	.edfm-home-grid-two {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   HOME PAGE NEWS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-home-news {&lt;br /&gt;
	margin: 1.8rem 0 2.2rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-feature-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 3, minmax( 0, 1fr ) );&lt;br /&gt;
	gap: 1rem;&lt;br /&gt;
	margin-bottom: 1rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card,&lt;br /&gt;
.edfm-news-list {&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 0 14px 26px rgba( 0, 0, 0, 0.22 );&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	min-height: 100%;&lt;br /&gt;
	transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card:hover {&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.48 );&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-art {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: flex-end;&lt;br /&gt;
	min-height: 7rem;&lt;br /&gt;
	padding: 0.8rem 1rem;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.28 ), transparent 42% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 66, 199, 217, 0.2 ), transparent 48% ),&lt;br /&gt;
		linear-gradient( 180deg, var( --edfm-surface-4 ), var( --edfm-surface-1 ) );&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	color: rgba( 237, 240, 242, 0.72 );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.8rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.16em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-primary .edfm-news-card-art {&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.38 ), transparent 46% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 79, 159, 232, 0.26 ), transparent 52% ),&lt;br /&gt;
		var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-body {&lt;br /&gt;
	padding: 1rem 1.15rem 1.15rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-meta {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.35rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-title,&lt;br /&gt;
.edfm-news-title a {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.25;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-title a:hover {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-summary {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	margin-top: 0.65rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list {&lt;br /&gt;
	padding: 1.1rem 1.25rem 1.2rem;&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list-heading {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list ul {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list li {&lt;br /&gt;
	margin-bottom: 0.55rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-more {&lt;br /&gt;
	margin-top: 0.9rem;&lt;br /&gt;
	padding-top: 0.85rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 900px ) {&lt;br /&gt;
	.edfm-news-feature-grid {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   5b. FULL-WIDTH ARTICLE FLOW OVERRIDES&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* 2026-08-10 audit: EDFM pages should not leave half the article rail empty.&lt;br /&gt;
   Earlier readability caps on paragraphs/hero copy made long-form sections&lt;br /&gt;
   look like narrow blocks while tables, TOCs, and navigation tiles spanned&lt;br /&gt;
   the page. Keep the main rail full-width everywhere; individual components&lt;br /&gt;
   may still opt into their own internal grids, but ordinary article copy and&lt;br /&gt;
   common block containers should stretch to the content edge. */&lt;br /&gt;
.mw-parser-output &amp;gt; p,&lt;br /&gt;
.mw-parser-output &amp;gt; ul,&lt;br /&gt;
.mw-parser-output &amp;gt; ol,&lt;br /&gt;
.mw-parser-output &amp;gt; dl,&lt;br /&gt;
.mw-parser-output &amp;gt; div:not( .thumb ):not( .tright ):not( .tleft ):not( .floatright ):not( .floatleft ):not( .edfm-status ):not( .edfm-panel ):not( .edfm-box ) {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Final guard against stale/skin rules recapping article prose while leaving&lt;br /&gt;
   compact maintenance/status panels free to keep their intentional centred width. */&lt;br /&gt;
.mw-body .mw-parser-output &amp;gt; p,&lt;br /&gt;
.mw-parser-output &amp;gt; p {&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body::before {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		background: var( --edfm-bg-deep );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Core MediaWiki/action buttons: match EDFM dark theme instead of default white/orange controls. */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.mw-htmlform-submit,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button,&lt;br /&gt;
#mw-patrol-form button,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;],&lt;br /&gt;
form.mw-htmlform button,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button,&lt;br /&gt;
button.mw-ui-button,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ) {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border: 1px solid var( --edfm-border-strong, var( --edfm-border ) ) !important;&lt;br /&gt;
	border-radius: 0 !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	font-family: var( --edfm-mono ) !important;&lt;br /&gt;
	font-weight: 800 !important;&lt;br /&gt;
	text-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.mw-htmlform-submit:hover,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button:hover,&lt;br /&gt;
#mw-patrol-form button:hover,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;]:hover,&lt;br /&gt;
form.mw-htmlform button:hover,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;]:hover,&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button:hover,&lt;br /&gt;
button.mw-ui-button:hover,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ):hover {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
	border-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button:focus,&lt;br /&gt;
.mw-htmlform-submit:focus,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button:focus,&lt;br /&gt;
#mw-patrol-form button:focus,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;]:focus,&lt;br /&gt;
form.mw-htmlform button:focus,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;]:focus,&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button:focus,&lt;br /&gt;
button.mw-ui-button:focus,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ):focus {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan ) !important;&lt;br /&gt;
	outline-offset: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Patrol action: remove the cramped review button from the public article chrome. */&lt;br /&gt;
#mw-patrol-form {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Frontier news: after removing the repeated dispatch list, keep attribution compact. */&lt;br /&gt;
.edfm-news-attribution-compact {&lt;br /&gt;
	margin-top: 0.35rem;&lt;br /&gt;
	padding-top: 0.6rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS.&lt;br /&gt;
   The close button is injected into #mw-panel by Common.js, so it must be&lt;br /&gt;
   explicitly hidden by default; otherwise a tiny native white button appears&lt;br /&gt;
   in the desktop sidebar&#039;s top-left corner. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim,&lt;br /&gt;
.edfm-mobile-close-button {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips -- intentionally quiet so table rows still&lt;br /&gt;
   read like data rows, not card/list hybrids. */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 30px;&lt;br /&gt;
	height: 30px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Frontier official news feed image treatment */&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image {&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	/* Keep all news thumbnails uniform, including the first/primary story. */&lt;br /&gt;
	height: 9.5rem;&lt;br /&gt;
	min-height: 9.5rem;&lt;br /&gt;
	aspect-ratio: 16 / 9;&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-primary .edfm-news-card-art-image {&lt;br /&gt;
	height: 9.5rem;&lt;br /&gt;
	min-height: 9.5rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image &amp;gt; span,&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-default-size,&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-file-description {&lt;br /&gt;
	display: block !important;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	inset: 0;&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	height: 100% !important;&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-file-element {&lt;br /&gt;
	display: block !important;&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	height: 100% !important;&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	transition: transform 0.2s ease, filter 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card:hover .edfm-news-card-art-image .mw-file-element {&lt;br /&gt;
	filter: brightness( 1.08 ) contrast( 1.05 );&lt;br /&gt;
	transform: scale( 1.035 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-source-badge {&lt;br /&gt;
	display: inline-flex !important;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	position: absolute !important;&lt;br /&gt;
	left: 0.8rem !important;&lt;br /&gt;
	right: auto !important;&lt;br /&gt;
	bottom: 0.75rem !important;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	max-width: calc( 100% - 1.6rem );&lt;br /&gt;
	padding: 0.25rem 0.55rem;&lt;br /&gt;
	background: rgba( 10, 13, 17, 0.82 );&lt;br /&gt;
	border: 1px solid rgba( 255, 138, 0, 0.48 );&lt;br /&gt;
	box-shadow: 0 8px 18px rgba( 0, 0, 0, 0.34 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.68rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.edfm-news-attribution {&lt;br /&gt;
	margin-top: 0.85rem;&lt;br /&gt;
	padding-top: 0.75rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Patrol action: hide MediaWiki generated patrol footer/link from article chrome. */&lt;br /&gt;
.patrollink,&lt;br /&gt;
.patrollink[data-mw-interface],&lt;br /&gt;
.patrollink .cdx-button,&lt;br /&gt;
#mw-content-text + .patrollink,&lt;br /&gt;
.mw-parser-output + .patrollink {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
	visibility: hidden !important;&lt;br /&gt;
	height: 0 !important;&lt;br /&gt;
	min-height: 0 !important;&lt;br /&gt;
	margin: 0 !important;&lt;br /&gt;
	padding: 0 !important;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	overflow: hidden !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=611</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=611"/>
		<updated>2026-08-10T19:28:56Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Ensure top-level wiki tables also span full article width&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Full-width article workspace: keep the fixed Vector sidebar clear,&lt;br /&gt;
	   but let the article surface use the entire remaining viewport. */&lt;br /&gt;
	--edfm-sidebar-width: 12.75rem;&lt;br /&gt;
	--edfm-sidebar-clear: 12.75rem;&lt;br /&gt;
	--edfm-content-max: calc( 100vw - var( --edfm-sidebar-clear ) );&lt;br /&gt;
	--edfm-gutter: 0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
/* Full-height sidebar rail: mirrors the RuneScape.wiki behavior where the&lt;br /&gt;
   left rail has no visible bottom edge. The real #mw-panel only carries the&lt;br /&gt;
   navigation content; this fixed layer paints the uninterrupted surface,&lt;br /&gt;
   border, and shadow down the whole viewport. */&lt;br /&gt;
body::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: 0;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	background: linear-gradient( 180deg, var( --edfm-surface-1 ) 0%, var( --edfm-bg-deep ) 100% );&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 10px 0 22px rgba( 0, 0, 0, 0.32 );&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
	z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;&lt;br /&gt;
	font-size: clamp( 1.75rem, 1.35rem + 1.45vw, 2.15rem );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0;&lt;br /&gt;
	line-height: 1.18;&lt;br /&gt;
	margin: 0.15em 0 0.25em;&lt;br /&gt;
	padding-bottom: 0.22em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.25em;&lt;br /&gt;
	margin-top: 2rem;&lt;br /&gt;
	margin-bottom: 0.85rem;&lt;br /&gt;
	font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;&lt;br /&gt;
	font-size: clamp( 1.28rem, 1.08rem + 0.65vw, 1.62rem );&lt;br /&gt;
	font-weight: 500;&lt;br /&gt;
	letter-spacing: 0;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: none; /* Site-wide full-width pass: article text should use the whole content rail. */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Full-width article pass: the article now fills the workspace to the right edge.&lt;br /&gt;
   Historical note: this block originally centred a capped article column.&lt;br /&gt;
&lt;br /&gt;
   THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable,&lt;br /&gt;
.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: block;&lt;br /&gt;
	margin: 0.2em 0 0.15em 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
	font-weight: 600;&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: 0.95rem;&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	line-height: 1.45;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin: 0.25em 0 0.85em 1.4em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background: transparent;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding: 0 0.65rem 1.35rem 0.65rem;&lt;br /&gt;
	border-right: 0;&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
	z-index: 3;&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually. Do not draw a divider on or near&lt;br /&gt;
   #p-logo: Vector legacy fixes the logo box at 155px high and the EDFM hex&lt;br /&gt;
   mark reaches that edge, so any horizontal rule in this box cuts through&lt;br /&gt;
   the lower point of the logo. Navigation spacing below provides the break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	margin: 0 -0.65rem 1.25rem -0.65rem;&lt;br /&gt;
	padding: 0.95rem 0.55rem 1.05rem 0.55rem;&lt;br /&gt;
	border-bottom: 0 !important;&lt;br /&gt;
	background: radial-gradient( circle at 50% 25%, rgba( 255, 138, 0, 0.08 ), transparent 58% );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
&lt;br /&gt;
/* Sidebar Discord invite CTA: injected by MediaWiki:Common.js directly below&lt;br /&gt;
   the logo and above the first generated Vector portlet, matching the compact&lt;br /&gt;
   community-button placement shown in the reference screenshot. */&lt;br /&gt;
.edfm-discord-cta {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	gap: 0.42rem;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: calc( 100% - 1.35rem );&lt;br /&gt;
	min-height: 1.78rem;&lt;br /&gt;
	margin: 0.35rem 0.675rem 1.05rem 0.675rem;&lt;br /&gt;
	padding: 0.36rem 0.56rem;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	background: #5865f2;&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
	font-size: 0.76rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	line-height: 1.1;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	box-shadow: 0 2px 5px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	transition: background-color 120ms ease, box-shadow 120ms ease, transform 120ms ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta:hover,&lt;br /&gt;
.edfm-discord-cta:focus {&lt;br /&gt;
	background: #4752c4;&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	box-shadow: 0 3px 8px rgba( 0, 0, 0, 0.42 );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta-icon {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	width: 1rem;&lt;br /&gt;
	height: 1rem;&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta-icon svg {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	fill: currentColor;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.45rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
	padding: 0.42em 0.55em;&lt;br /&gt;
	margin: 0.08em -0.35em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	box-shadow: inset 0 0 0 1px rgba( 255, 138, 0, 0.08 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
#p-personal ul {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55rem;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li {&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clocks {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5rem;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.3em;&lt;br /&gt;
	padding: 0.3em 0.55em;&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 );&lt;br /&gt;
	border: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	border-left: 2px solid var( --edfm-cyan );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-label {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock time {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-local {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.06 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-local time {&lt;br /&gt;
	color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Front-page chrome: the hero already names the site, so suppress the&lt;br /&gt;
   generated MediaWiki page title only on the Main Page. Keep the namespace&lt;br /&gt;
   tab label and all other article titles intact. */&lt;br /&gt;
body.page-Main_Page #firstHeading {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
body.page-Main_Page .mw-body-content {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
.mw-body {&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site notice chrome. The global disclaimer was moved to its dedicated&lt;br /&gt;
   legal/disclaimer page, so an empty #siteNotice must not leave behind a&lt;br /&gt;
   phantom divider at the top of the article surface. */&lt;br /&gt;
#siteNotice:empty {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) em, #siteNotice:not( :empty ) i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   HOME PAGE DASHBOARD&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-home-hero {&lt;br /&gt;
	margin: 0.9rem 0 1.6rem;&lt;br /&gt;
	padding: 1.35rem 1.55rem;&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.16 ), transparent 34% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 66, 199, 217, 0.14 ), transparent 42% ),&lt;br /&gt;
		var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-left: 4px solid var( --edfm-cyan );&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 12px ) 0, 100% 12px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-kicker,&lt;br /&gt;
.edfm-home-card-kicker {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-title {&lt;br /&gt;
	margin-top: 0.25rem;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: clamp( 1.55rem, 1.1rem + 1.5vw, 2.2rem );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.15;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-text {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 0.55rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	gap: 1rem;&lt;br /&gt;
	margin: 1.2rem 0 2rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-four {&lt;br /&gt;
	grid-template-columns: repeat( 4, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-topics {&lt;br /&gt;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-two {&lt;br /&gt;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card {&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-left: 3px solid var( --edfm-cyan );&lt;br /&gt;
	padding: 1rem 1.1rem;&lt;br /&gt;
	box-shadow: 0 12px 24px rgba( 0, 0, 0, 0.2 );&lt;br /&gt;
	transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card:hover {&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-primary {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-warning {&lt;br /&gt;
	border-left-color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-title,&lt;br /&gt;
.edfm-home-card-title a {&lt;br /&gt;
	margin-top: 0.35rem;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-title a:hover {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-text,&lt;br /&gt;
.edfm-home-link-list {&lt;br /&gt;
	margin-top: 0.65rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-link-list a {&lt;br /&gt;
	font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 1100px ) {&lt;br /&gt;
	.edfm-home-grid-four {&lt;br /&gt;
		grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 760px ) {&lt;br /&gt;
	.edfm-home-grid-four,&lt;br /&gt;
	.edfm-home-grid-topics,&lt;br /&gt;
	.edfm-home-grid-two {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   HOME PAGE NEWS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-home-news {&lt;br /&gt;
	margin: 1.8rem 0 2.2rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-feature-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 3, minmax( 0, 1fr ) );&lt;br /&gt;
	gap: 1rem;&lt;br /&gt;
	margin-bottom: 1rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card,&lt;br /&gt;
.edfm-news-list {&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 0 14px 26px rgba( 0, 0, 0, 0.22 );&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	min-height: 100%;&lt;br /&gt;
	transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card:hover {&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.48 );&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-art {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: flex-end;&lt;br /&gt;
	min-height: 7rem;&lt;br /&gt;
	padding: 0.8rem 1rem;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.28 ), transparent 42% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 66, 199, 217, 0.2 ), transparent 48% ),&lt;br /&gt;
		linear-gradient( 180deg, var( --edfm-surface-4 ), var( --edfm-surface-1 ) );&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	color: rgba( 237, 240, 242, 0.72 );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.8rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.16em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-primary .edfm-news-card-art {&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.38 ), transparent 46% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 79, 159, 232, 0.26 ), transparent 52% ),&lt;br /&gt;
		var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-body {&lt;br /&gt;
	padding: 1rem 1.15rem 1.15rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-meta {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.35rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-title,&lt;br /&gt;
.edfm-news-title a {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.25;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-title a:hover {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-summary {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	margin-top: 0.65rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list {&lt;br /&gt;
	padding: 1.1rem 1.25rem 1.2rem;&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list-heading {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list ul {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list li {&lt;br /&gt;
	margin-bottom: 0.55rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-more {&lt;br /&gt;
	margin-top: 0.9rem;&lt;br /&gt;
	padding-top: 0.85rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 900px ) {&lt;br /&gt;
	.edfm-news-feature-grid {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   5b. FULL-WIDTH ARTICLE FLOW OVERRIDES&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* 2026-08-10 audit: EDFM pages should not leave half the article rail empty.&lt;br /&gt;
   Earlier readability caps on paragraphs/hero copy made long-form sections&lt;br /&gt;
   look like narrow blocks while tables, TOCs, and navigation tiles spanned&lt;br /&gt;
   the page. Keep the main rail full-width everywhere; individual components&lt;br /&gt;
   may still opt into their own internal grids, but ordinary article copy and&lt;br /&gt;
   common block containers should stretch to the content edge. */&lt;br /&gt;
.mw-parser-output &amp;gt; p,&lt;br /&gt;
.mw-parser-output &amp;gt; ul,&lt;br /&gt;
.mw-parser-output &amp;gt; ol,&lt;br /&gt;
.mw-parser-output &amp;gt; dl,&lt;br /&gt;
.mw-parser-output &amp;gt; div:not( .thumb ):not( .tright ):not( .tleft ):not( .floatright ):not( .floatleft ) {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body::before {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		background: var( --edfm-bg-deep );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Core MediaWiki/action buttons: match EDFM dark theme instead of default white/orange controls. */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.mw-htmlform-submit,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button,&lt;br /&gt;
#mw-patrol-form button,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;],&lt;br /&gt;
form.mw-htmlform button,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button,&lt;br /&gt;
button.mw-ui-button,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ) {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border: 1px solid var( --edfm-border-strong, var( --edfm-border ) ) !important;&lt;br /&gt;
	border-radius: 0 !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	font-family: var( --edfm-mono ) !important;&lt;br /&gt;
	font-weight: 800 !important;&lt;br /&gt;
	text-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.mw-htmlform-submit:hover,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button:hover,&lt;br /&gt;
#mw-patrol-form button:hover,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;]:hover,&lt;br /&gt;
form.mw-htmlform button:hover,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;]:hover,&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button:hover,&lt;br /&gt;
button.mw-ui-button:hover,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ):hover {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
	border-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button:focus,&lt;br /&gt;
.mw-htmlform-submit:focus,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button:focus,&lt;br /&gt;
#mw-patrol-form button:focus,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;]:focus,&lt;br /&gt;
form.mw-htmlform button:focus,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;]:focus,&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button:focus,&lt;br /&gt;
button.mw-ui-button:focus,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ):focus {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan ) !important;&lt;br /&gt;
	outline-offset: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Patrol action: remove the cramped review button from the public article chrome. */&lt;br /&gt;
#mw-patrol-form {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Frontier news: after removing the repeated dispatch list, keep attribution compact. */&lt;br /&gt;
.edfm-news-attribution-compact {&lt;br /&gt;
	margin-top: 0.35rem;&lt;br /&gt;
	padding-top: 0.6rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS.&lt;br /&gt;
   The close button is injected into #mw-panel by Common.js, so it must be&lt;br /&gt;
   explicitly hidden by default; otherwise a tiny native white button appears&lt;br /&gt;
   in the desktop sidebar&#039;s top-left corner. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim,&lt;br /&gt;
.edfm-mobile-close-button {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips -- intentionally quiet so table rows still&lt;br /&gt;
   read like data rows, not card/list hybrids. */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 30px;&lt;br /&gt;
	height: 30px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Frontier official news feed image treatment */&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image {&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	/* Keep all news thumbnails uniform, including the first/primary story. */&lt;br /&gt;
	height: 9.5rem;&lt;br /&gt;
	min-height: 9.5rem;&lt;br /&gt;
	aspect-ratio: 16 / 9;&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-primary .edfm-news-card-art-image {&lt;br /&gt;
	height: 9.5rem;&lt;br /&gt;
	min-height: 9.5rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image &amp;gt; span,&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-default-size,&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-file-description {&lt;br /&gt;
	display: block !important;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	inset: 0;&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	height: 100% !important;&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-file-element {&lt;br /&gt;
	display: block !important;&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	height: 100% !important;&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	transition: transform 0.2s ease, filter 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card:hover .edfm-news-card-art-image .mw-file-element {&lt;br /&gt;
	filter: brightness( 1.08 ) contrast( 1.05 );&lt;br /&gt;
	transform: scale( 1.035 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-source-badge {&lt;br /&gt;
	display: inline-flex !important;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	position: absolute !important;&lt;br /&gt;
	left: 0.8rem !important;&lt;br /&gt;
	right: auto !important;&lt;br /&gt;
	bottom: 0.75rem !important;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	max-width: calc( 100% - 1.6rem );&lt;br /&gt;
	padding: 0.25rem 0.55rem;&lt;br /&gt;
	background: rgba( 10, 13, 17, 0.82 );&lt;br /&gt;
	border: 1px solid rgba( 255, 138, 0, 0.48 );&lt;br /&gt;
	box-shadow: 0 8px 18px rgba( 0, 0, 0, 0.34 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.68rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.edfm-news-attribution {&lt;br /&gt;
	margin-top: 0.85rem;&lt;br /&gt;
	padding-top: 0.75rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Patrol action: hide MediaWiki generated patrol footer/link from article chrome. */&lt;br /&gt;
.patrollink,&lt;br /&gt;
.patrollink[data-mw-interface],&lt;br /&gt;
.patrollink .cdx-button,&lt;br /&gt;
#mw-content-text + .patrollink,&lt;br /&gt;
.mw-parser-output + .patrollink {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
	visibility: hidden !important;&lt;br /&gt;
	height: 0 !important;&lt;br /&gt;
	min-height: 0 !important;&lt;br /&gt;
	margin: 0 !important;&lt;br /&gt;
	padding: 0 !important;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	overflow: hidden !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Template:Resource_card/styles.css&amp;diff=610</id>
		<title>Template:Resource card/styles.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Template:Resource_card/styles.css&amp;diff=610"/>
		<updated>2026-08-10T19:26:24Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Make standalone resource cards full width&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Resource card component -- compact reference card for third-party&lt;br /&gt;
   tools/sites/services (see Template:Resource card). Uses the site&#039;s&lt;br /&gt;
   existing --edfm-* design tokens (defined once in MediaWiki:Common.css)&lt;br /&gt;
   rather than introducing a second colour system.&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 POLISH PASS: kept the pass-2 approach (no full border,&lt;br /&gt;
   elevated surface + accent rail + corner-cut, custom arrow icon) and&lt;br /&gt;
   refined it rather than redesigning it --&lt;br /&gt;
   - stronger internal hierarchy between the resource name and its&lt;br /&gt;
     expanded full name (full name now reads as a small technical label:&lt;br /&gt;
     smaller, uppercase, letter-spaced, more separated vertically)&lt;br /&gt;
   - the corner-cut is now paired with a small filled accent triangle&lt;br /&gt;
     right at the notch so the motif actually registers instead of&lt;br /&gt;
     blending into the dark background at a glance&lt;br /&gt;
   - hover stays in the cyan family (brighter cyan + thicker rail)&lt;br /&gt;
     instead of swapping to orange, since these cards are &amp;quot;reference/&lt;br /&gt;
     link&amp;quot; content and cyan is that tier&#039;s colour throughout the rest of&lt;br /&gt;
     the site -- swapping hue on hover sent a mixed signal&lt;br /&gt;
   - hover shadow reduced (was a bit heavy for &amp;quot;extremely subtle&amp;quot;)&lt;br /&gt;
   - keyboard focus still gets a clear indicator via the site-wide&lt;br /&gt;
     `a:focus-visible` outline rule in Common.css on the card&#039;s own link;&lt;br /&gt;
     :focus-within (which would have mirrored the full :hover treatment&lt;br /&gt;
     onto the card itself) is NOT used here because TemplateStyles&#039;&lt;br /&gt;
     selector sanitizer rejects it -- confirmed by testing, not assumed&lt;br /&gt;
&lt;br /&gt;
   The single/two/N-up column behaviour is NOT hard-coded per section --&lt;br /&gt;
   it falls out of .edfm-resource-grid&#039;s `repeat(auto-fit, minmax(...))`&lt;br /&gt;
   automatically: a lone card in a grid becomes the one available track&lt;br /&gt;
   and fills it (full width), two cards split evenly, more wrap onto&lt;br /&gt;
   additional rows. Tools and Resources now wraps every resource-card&lt;br /&gt;
   section in this container (including the previously-standalone single&lt;br /&gt;
   ones), not just the multi-card ones -- see that page&#039;s wikitext, not&lt;br /&gt;
   this file, for that change.&lt;br /&gt;
&lt;br /&gt;
   The linked resource name reuses the site&#039;s normal external-link colour&lt;br /&gt;
   (from MediaWiki:Common.css&#039;s `.mw-parser-output a.external` rule)&lt;br /&gt;
   rather than redefining it here, per &amp;quot;use the site&#039;s link/accent system,&lt;br /&gt;
   not bright orange for every name&amp;quot;. */&lt;br /&gt;
.edfm-resource {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	border-left: 3px solid var( --edfm-cyan );&lt;br /&gt;
	padding: 1.5em 1.75em;&lt;br /&gt;
	margin: 1.4em 0;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	transition: background-color 0.15s ease, border-left-color 0.15s ease, transform 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
/* The one recurring EDFM shape motif on this component: a small filled&lt;br /&gt;
   triangle sitting exactly in the clipped corner, echoing the logo&#039;s&lt;br /&gt;
   angular geometry. Low opacity, cyan by default so it doesn&#039;t compete&lt;br /&gt;
   with the orange-reserved-for-navigation rule; single technique, not&lt;br /&gt;
   layered with anything else. */&lt;br /&gt;
.edfm-resource::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	right: 0;&lt;br /&gt;
	width: 14px;&lt;br /&gt;
	height: 14px;&lt;br /&gt;
	background: linear-gradient( 135deg, transparent 50%, var( --edfm-cyan ) 50% );&lt;br /&gt;
	opacity: 0.6;&lt;br /&gt;
	/* Note: no pointer-events here -- TemplateStyles&#039; sanitizer doesn&#039;t&lt;br /&gt;
	   allow that property. Not needed in practice: this sits in the&lt;br /&gt;
	   card&#039;s empty top-right corner, past where the name/link text runs,&lt;br /&gt;
	   so there&#039;s nothing under it to intercept clicks from. */&lt;br /&gt;
	transition: opacity 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	border-left-width: 4px;&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	box-shadow: 0 3px 8px rgba( 0, 0, 0, 0.25 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource:hover::before {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource:hover .edfm-resource-name a.external {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource-head {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: baseline;&lt;br /&gt;
	flex-wrap: wrap;&lt;br /&gt;
	column-gap: 0.7em;&lt;br /&gt;
	row-gap: 0.3em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource-name {&lt;br /&gt;
	/* TemplateStyles&#039; CSS sanitizer rejects var() specifically inside&lt;br /&gt;
	   font-family (even though it&#039;s otherwise valid CSS) -- spelled out&lt;br /&gt;
	   literally here to match --edfm-mono in MediaWiki:Common.css. */&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.02em;&lt;br /&gt;
	overflow-wrap: anywhere;&lt;br /&gt;
}&lt;br /&gt;
/* Swap the default MediaWiki external-link icon for a bigger, consistently&lt;br /&gt;
   -aligned arrow that reads clearly at this larger name size. Core sets&lt;br /&gt;
   the default icon via `.mw-parser-output a.external` at (0,2,1)&lt;br /&gt;
   specificity (two classes + a tag); matching that shape here (plus the&lt;br /&gt;
   card&#039;s own class, so it&#039;s scoped to just this component) keeps the&lt;br /&gt;
   override unambiguous rather than depending on stylesheet order. */&lt;br /&gt;
.edfm-resource-name a.external {&lt;br /&gt;
	background-image: none !important;&lt;br /&gt;
	padding-right: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource-name a.external::after {&lt;br /&gt;
	content: &#039;\2197&#039;;&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-left: 0.3em;&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
/* Full/expanded name now reads as its own small technical label rather&lt;br /&gt;
   than a slightly-smaller second name sitting right next to the first --&lt;br /&gt;
   uppercase, letter-spaced, on its own line by default (the flex-wrap&lt;br /&gt;
   above naturally drops it to a second line whenever the name + full&lt;br /&gt;
   name don&#039;t both fit on one, and forcing it here keeps that behaviour&lt;br /&gt;
   consistent instead of depending on available width). */&lt;br /&gt;
.edfm-resource-fullname {&lt;br /&gt;
	flex-basis: 100%;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: 0.72rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource-desc {&lt;br /&gt;
	margin: 0.7em 0 0 0;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1rem;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource-tags {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-wrap: wrap;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	margin-top: 1.1em;&lt;br /&gt;
	padding-top: 0.9em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource-tag {&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.72rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	padding: 0.2em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Wrapping container for resource cards -- used for EVERY resource-card&lt;br /&gt;
   section on a page, not just multi-card ones (see the note up top): a&lt;br /&gt;
   lone card becomes the grid&#039;s one track and spans full width, two split&lt;br /&gt;
   evenly, more wrap onto further rows, all from the same rule. Equal-&lt;br /&gt;
   height rows via grid&#039;s default align-items:stretch plus height:100% on&lt;br /&gt;
   the card, so cards with slightly different description lengths still&lt;br /&gt;
   line up. Cards should never visually touch -- a deliberately generous&lt;br /&gt;
   1.4rem (~22px) gap. */&lt;br /&gt;
.edfm-resource-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( auto-fit, minmax( 300px, 1fr ) );&lt;br /&gt;
	gap: 1.4rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-resource-grid .edfm-resource {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-resource {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
		padding: 1.3em 1.4em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=609</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=609"/>
		<updated>2026-08-10T19:24:58Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Make article text and common sections full-width site-wide&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Full-width article workspace: keep the fixed Vector sidebar clear,&lt;br /&gt;
	   but let the article surface use the entire remaining viewport. */&lt;br /&gt;
	--edfm-sidebar-width: 12.75rem;&lt;br /&gt;
	--edfm-sidebar-clear: 12.75rem;&lt;br /&gt;
	--edfm-content-max: calc( 100vw - var( --edfm-sidebar-clear ) );&lt;br /&gt;
	--edfm-gutter: 0px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
/* Full-height sidebar rail: mirrors the RuneScape.wiki behavior where the&lt;br /&gt;
   left rail has no visible bottom edge. The real #mw-panel only carries the&lt;br /&gt;
   navigation content; this fixed layer paints the uninterrupted surface,&lt;br /&gt;
   border, and shadow down the whole viewport. */&lt;br /&gt;
body::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: 0;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	background: linear-gradient( 180deg, var( --edfm-surface-1 ) 0%, var( --edfm-bg-deep ) 100% );&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 10px 0 22px rgba( 0, 0, 0, 0.32 );&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
	z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;&lt;br /&gt;
	font-size: clamp( 1.75rem, 1.35rem + 1.45vw, 2.15rem );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0;&lt;br /&gt;
	line-height: 1.18;&lt;br /&gt;
	margin: 0.15em 0 0.25em;&lt;br /&gt;
	padding-bottom: 0.22em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.25em;&lt;br /&gt;
	margin-top: 2rem;&lt;br /&gt;
	margin-bottom: 0.85rem;&lt;br /&gt;
	font-family: Georgia, &#039;Times New Roman&#039;, Times, serif;&lt;br /&gt;
	font-size: clamp( 1.28rem, 1.08rem + 0.65vw, 1.62rem );&lt;br /&gt;
	font-weight: 500;&lt;br /&gt;
	letter-spacing: 0;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: none; /* Site-wide full-width pass: article text should use the whole content rail. */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Full-width article pass: the article now fills the workspace to the right edge.&lt;br /&gt;
   Historical note: this block originally centred a capped article column.&lt;br /&gt;
&lt;br /&gt;
   THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: block;&lt;br /&gt;
	margin: 0.2em 0 0.15em 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
	font-weight: 600;&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: 0.95rem;&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	line-height: 1.45;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin: 0.25em 0 0.85em 1.4em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	border: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background: transparent;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding: 0 0.65rem 1.35rem 0.65rem;&lt;br /&gt;
	border-right: 0;&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
	z-index: 3;&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually. Do not draw a divider on or near&lt;br /&gt;
   #p-logo: Vector legacy fixes the logo box at 155px high and the EDFM hex&lt;br /&gt;
   mark reaches that edge, so any horizontal rule in this box cuts through&lt;br /&gt;
   the lower point of the logo. Navigation spacing below provides the break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	margin: 0 -0.65rem 1.25rem -0.65rem;&lt;br /&gt;
	padding: 0.95rem 0.55rem 1.05rem 0.55rem;&lt;br /&gt;
	border-bottom: 0 !important;&lt;br /&gt;
	background: radial-gradient( circle at 50% 25%, rgba( 255, 138, 0, 0.08 ), transparent 58% );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
&lt;br /&gt;
/* Sidebar Discord invite CTA: injected by MediaWiki:Common.js directly below&lt;br /&gt;
   the logo and above the first generated Vector portlet, matching the compact&lt;br /&gt;
   community-button placement shown in the reference screenshot. */&lt;br /&gt;
.edfm-discord-cta {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	gap: 0.42rem;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: calc( 100% - 1.35rem );&lt;br /&gt;
	min-height: 1.78rem;&lt;br /&gt;
	margin: 0.35rem 0.675rem 1.05rem 0.675rem;&lt;br /&gt;
	padding: 0.36rem 0.56rem;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	background: #5865f2;&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
	font-size: 0.76rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	line-height: 1.1;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	box-shadow: 0 2px 5px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	transition: background-color 120ms ease, box-shadow 120ms ease, transform 120ms ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta:hover,&lt;br /&gt;
.edfm-discord-cta:focus {&lt;br /&gt;
	background: #4752c4;&lt;br /&gt;
	color: #fff !important;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	box-shadow: 0 3px 8px rgba( 0, 0, 0, 0.42 );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta-icon {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	width: 1rem;&lt;br /&gt;
	height: 1rem;&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
}&lt;br /&gt;
.edfm-discord-cta-icon svg {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	fill: currentColor;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.45rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
	padding: 0.42em 0.55em;&lt;br /&gt;
	margin: 0.08em -0.35em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	box-shadow: inset 0 0 0 1px rgba( 255, 138, 0, 0.08 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
#p-personal ul {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55rem;&lt;br /&gt;
}&lt;br /&gt;
#p-personal li {&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clocks {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5rem;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.3em;&lt;br /&gt;
	padding: 0.3em 0.55em;&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 );&lt;br /&gt;
	border: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	border-left: 2px solid var( --edfm-cyan );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-label {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock time {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-local {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.06 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-topbar-clock-local time {&lt;br /&gt;
	color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Front-page chrome: the hero already names the site, so suppress the&lt;br /&gt;
   generated MediaWiki page title only on the Main Page. Keep the namespace&lt;br /&gt;
   tab label and all other article titles intact. */&lt;br /&gt;
body.page-Main_Page #firstHeading {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
body.page-Main_Page .mw-body-content {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
.mw-body {&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Site notice chrome. The global disclaimer was moved to its dedicated&lt;br /&gt;
   legal/disclaimer page, so an empty #siteNotice must not leave behind a&lt;br /&gt;
   phantom divider at the top of the article surface. */&lt;br /&gt;
#siteNotice:empty {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) em, #siteNotice:not( :empty ) i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice:not( :empty ) a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   HOME PAGE DASHBOARD&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-home-hero {&lt;br /&gt;
	margin: 0.9rem 0 1.6rem;&lt;br /&gt;
	padding: 1.35rem 1.55rem;&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.16 ), transparent 34% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 66, 199, 217, 0.14 ), transparent 42% ),&lt;br /&gt;
		var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-left: 4px solid var( --edfm-cyan );&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 12px ) 0, 100% 12px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-kicker,&lt;br /&gt;
.edfm-home-card-kicker {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-title {&lt;br /&gt;
	margin-top: 0.25rem;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: clamp( 1.55rem, 1.1rem + 1.5vw, 2.2rem );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.15;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-hero-text {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 0.55rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	gap: 1rem;&lt;br /&gt;
	margin: 1.2rem 0 2rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-four {&lt;br /&gt;
	grid-template-columns: repeat( 4, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-topics {&lt;br /&gt;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-grid-two {&lt;br /&gt;
	grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card {&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-left: 3px solid var( --edfm-cyan );&lt;br /&gt;
	padding: 1rem 1.1rem;&lt;br /&gt;
	box-shadow: 0 12px 24px rgba( 0, 0, 0, 0.2 );&lt;br /&gt;
	transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card:hover {&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-primary {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-warning {&lt;br /&gt;
	border-left-color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-title,&lt;br /&gt;
.edfm-home-card-title a {&lt;br /&gt;
	margin-top: 0.35rem;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-title a:hover {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-card-text,&lt;br /&gt;
.edfm-home-link-list {&lt;br /&gt;
	margin-top: 0.65rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
.edfm-home-link-list a {&lt;br /&gt;
	font-weight: 600;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 1100px ) {&lt;br /&gt;
	.edfm-home-grid-four {&lt;br /&gt;
		grid-template-columns: repeat( 2, minmax( 0, 1fr ) );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 760px ) {&lt;br /&gt;
	.edfm-home-grid-four,&lt;br /&gt;
	.edfm-home-grid-topics,&lt;br /&gt;
	.edfm-home-grid-two {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   HOME PAGE NEWS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-home-news {&lt;br /&gt;
	margin: 1.8rem 0 2.2rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-feature-grid {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 3, minmax( 0, 1fr ) );&lt;br /&gt;
	gap: 1rem;&lt;br /&gt;
	margin-bottom: 1rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card,&lt;br /&gt;
.edfm-news-list {&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 0 14px 26px rgba( 0, 0, 0, 0.22 );&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	min-height: 100%;&lt;br /&gt;
	transition: transform 0.15s ease, border-color 0.15s ease, background-color 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card:hover {&lt;br /&gt;
	transform: translateY( -2px );&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.48 );&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-art {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: flex-end;&lt;br /&gt;
	min-height: 7rem;&lt;br /&gt;
	padding: 0.8rem 1rem;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.28 ), transparent 42% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 66, 199, 217, 0.2 ), transparent 48% ),&lt;br /&gt;
		linear-gradient( 180deg, var( --edfm-surface-4 ), var( --edfm-surface-1 ) );&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	color: rgba( 237, 240, 242, 0.72 );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.8rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.16em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-primary .edfm-news-card-art {&lt;br /&gt;
	background:&lt;br /&gt;
		linear-gradient( 135deg, rgba( 255, 138, 0, 0.38 ), transparent 46% ),&lt;br /&gt;
		linear-gradient( 315deg, rgba( 79, 159, 232, 0.26 ), transparent 52% ),&lt;br /&gt;
		var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-card-body {&lt;br /&gt;
	padding: 1rem 1.15rem 1.15rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-meta {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.35rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-title,&lt;br /&gt;
.edfm-news-title a {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	line-height: 1.25;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-title a:hover {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-summary {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	margin-top: 0.65rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list {&lt;br /&gt;
	padding: 1.1rem 1.25rem 1.2rem;&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list-heading {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list ul {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-list li {&lt;br /&gt;
	margin-bottom: 0.55rem;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
}&lt;br /&gt;
.edfm-news-more {&lt;br /&gt;
	margin-top: 0.9rem;&lt;br /&gt;
	padding-top: 0.85rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	text-align: right;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 900px ) {&lt;br /&gt;
	.edfm-news-feature-grid {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   5b. FULL-WIDTH ARTICLE FLOW OVERRIDES&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* 2026-08-10 audit: EDFM pages should not leave half the article rail empty.&lt;br /&gt;
   Earlier readability caps on paragraphs/hero copy made long-form sections&lt;br /&gt;
   look like narrow blocks while tables, TOCs, and navigation tiles spanned&lt;br /&gt;
   the page. Keep the main rail full-width everywhere; individual components&lt;br /&gt;
   may still opt into their own internal grids, but ordinary article copy and&lt;br /&gt;
   common block containers should stretch to the content edge. */&lt;br /&gt;
.mw-parser-output &amp;gt; p,&lt;br /&gt;
.mw-parser-output &amp;gt; ul,&lt;br /&gt;
.mw-parser-output &amp;gt; ol,&lt;br /&gt;
.mw-parser-output &amp;gt; dl,&lt;br /&gt;
.mw-parser-output &amp;gt; div:not( .thumb ):not( .tright ):not( .tleft ):not( .floatright ):not( .floatleft ) {&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body::before {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		background: var( --edfm-bg-deep );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Core MediaWiki/action buttons: match EDFM dark theme instead of default white/orange controls. */&lt;br /&gt;
.mw-ui-button,&lt;br /&gt;
.mw-htmlform-submit,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button,&lt;br /&gt;
#mw-patrol-form button,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;],&lt;br /&gt;
form.mw-htmlform button,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;],&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button,&lt;br /&gt;
button.mw-ui-button,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ) {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border: 1px solid var( --edfm-border-strong, var( --edfm-border ) ) !important;&lt;br /&gt;
	border-radius: 0 !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	font-family: var( --edfm-mono ) !important;&lt;br /&gt;
	font-weight: 800 !important;&lt;br /&gt;
	text-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button:hover,&lt;br /&gt;
.mw-htmlform-submit:hover,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button:hover,&lt;br /&gt;
#mw-patrol-form button:hover,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;]:hover,&lt;br /&gt;
form.mw-htmlform button:hover,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;]:hover,&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button:hover,&lt;br /&gt;
button.mw-ui-button:hover,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ):hover {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
	border-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-ui-button:focus,&lt;br /&gt;
.mw-htmlform-submit:focus,&lt;br /&gt;
.mw-htmlform-ooui-wrapper button:focus,&lt;br /&gt;
#mw-patrol-form button:focus,&lt;br /&gt;
#mw-patrol-form input[type=&amp;quot;submit&amp;quot;]:focus,&lt;br /&gt;
form.mw-htmlform button:focus,&lt;br /&gt;
form.mw-htmlform input[type=&amp;quot;submit&amp;quot;]:focus,&lt;br /&gt;
input[type=&amp;quot;submit&amp;quot;].mw-ui-button:focus,&lt;br /&gt;
button.mw-ui-button:focus,&lt;br /&gt;
.cdx-button:not( .cdx-button--fake-button--enabled ):focus {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan ) !important;&lt;br /&gt;
	outline-offset: 2px !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Patrol action: remove the cramped review button from the public article chrome. */&lt;br /&gt;
#mw-patrol-form {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Frontier news: after removing the repeated dispatch list, keep attribution compact. */&lt;br /&gt;
.edfm-news-attribution-compact {&lt;br /&gt;
	margin-top: 0.35rem;&lt;br /&gt;
	padding-top: 0.6rem;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS.&lt;br /&gt;
   The close button is injected into #mw-panel by Common.js, so it must be&lt;br /&gt;
   explicitly hidden by default; otherwise a tiny native white button appears&lt;br /&gt;
   in the desktop sidebar&#039;s top-left corner. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim,&lt;br /&gt;
.edfm-mobile-close-button {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips -- intentionally quiet so table rows still&lt;br /&gt;
   read like data rows, not card/list hybrids. */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 30px;&lt;br /&gt;
	height: 30px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.2;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Frontier official news feed image treatment */&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image {&lt;br /&gt;
	display: block;&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	/* Keep all news thumbnails uniform, including the first/primary story. */&lt;br /&gt;
	height: 9.5rem;&lt;br /&gt;
	min-height: 9.5rem;&lt;br /&gt;
	aspect-ratio: 16 / 9;&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-primary .edfm-news-card-art-image {&lt;br /&gt;
	height: 9.5rem;&lt;br /&gt;
	min-height: 9.5rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image &amp;gt; span,&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-default-size,&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-file-description {&lt;br /&gt;
	display: block !important;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	inset: 0;&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	height: 100% !important;&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	margin: 0 !important;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card-art-image .mw-file-element {&lt;br /&gt;
	display: block !important;&lt;br /&gt;
	width: 100% !important;&lt;br /&gt;
	height: 100% !important;&lt;br /&gt;
	max-width: none !important;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	transition: transform 0.2s ease, filter 0.2s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-card:hover .edfm-news-card-art-image .mw-file-element {&lt;br /&gt;
	filter: brightness( 1.08 ) contrast( 1.05 );&lt;br /&gt;
	transform: scale( 1.035 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-frontier-news .edfm-news-source-badge {&lt;br /&gt;
	display: inline-flex !important;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	position: absolute !important;&lt;br /&gt;
	left: 0.8rem !important;&lt;br /&gt;
	right: auto !important;&lt;br /&gt;
	bottom: 0.75rem !important;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	max-width: calc( 100% - 1.6rem );&lt;br /&gt;
	padding: 0.25rem 0.55rem;&lt;br /&gt;
	background: rgba( 10, 13, 17, 0.82 );&lt;br /&gt;
	border: 1px solid rgba( 255, 138, 0, 0.48 );&lt;br /&gt;
	box-shadow: 0 8px 18px rgba( 0, 0, 0, 0.34 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.68rem;&lt;br /&gt;
	font-weight: 800;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
.edfm-news-attribution {&lt;br /&gt;
	margin-top: 0.85rem;&lt;br /&gt;
	padding-top: 0.75rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.45;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Patrol action: hide MediaWiki generated patrol footer/link from article chrome. */&lt;br /&gt;
.patrollink,&lt;br /&gt;
.patrollink[data-mw-interface],&lt;br /&gt;
.patrollink .cdx-button,&lt;br /&gt;
#mw-content-text + .patrollink,&lt;br /&gt;
.mw-parser-output + .patrollink {&lt;br /&gt;
	display: none !important;&lt;br /&gt;
	visibility: hidden !important;&lt;br /&gt;
	height: 0 !important;&lt;br /&gt;
	min-height: 0 !important;&lt;br /&gt;
	margin: 0 !important;&lt;br /&gt;
	padding: 0 !important;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	overflow: hidden !important;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Template:EDFM_style/styles.css&amp;diff=608</id>
		<title>Template:EDFM style/styles.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Template:EDFM_style/styles.css&amp;diff=608"/>
		<updated>2026-08-10T19:20:02Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Make EDFM editorial panels and related sections span full width&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* Shared styling for EDFM&#039;s editorial templates (Article status, Draft&lt;br /&gt;
   warning, Prerequisites, Related articles, etc. -- see each template&#039;s&lt;br /&gt;
   own page for which classes it uses). Freely uses the --edfm-* custom&lt;br /&gt;
   properties defined in MediaWiki:Common.css -- see the note there under&lt;br /&gt;
   &amp;quot;6. Panels&amp;quot; for why these classes live only in this file and not&lt;br /&gt;
   duplicated in Common.css too.&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: panels keep the accent-rail + corner-cut&lt;br /&gt;
   language from the first pass (both are explicitly the &amp;quot;hierarchy&lt;br /&gt;
   without a full border around everything&amp;quot; technique this redesign asks&lt;br /&gt;
   for) but get noticeably more padding/breathing room; the status module&lt;br /&gt;
   is rebuilt with a coloured header band and stacked label/value metadata&lt;br /&gt;
   instead of a plain left-rail box with inline &amp;quot;Label: value&amp;quot; text; and a&lt;br /&gt;
   new .edfm-related component replaces the old plain notice-style&lt;br /&gt;
   &amp;quot;Related articles&amp;quot; bar with a small tile row. */&lt;br /&gt;
&lt;br /&gt;
.edfm-box,&lt;br /&gt;
.edfm-panel {&lt;br /&gt;
	border-left: 4px solid var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 1.1em 1.3em;&lt;br /&gt;
	margin: 1.4em 0;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 10px ) 0, 100% 10px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-info {&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-warning,&lt;br /&gt;
.edfm-box.edfm-warning {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	background: #201a12;&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-draft,&lt;br /&gt;
.edfm-box.edfm-draft {&lt;br /&gt;
	border-left-color: var( --edfm-text-dim );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-panel-reference {&lt;br /&gt;
	border-left-color: var( --edfm-blue );&lt;br /&gt;
}&lt;br /&gt;
.edfm-box.edfm-disclaimer {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	font-size: 0.92em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dl,&lt;br /&gt;
.edfm-panel dl {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dt,&lt;br /&gt;
.edfm-panel dt {&lt;br /&gt;
	font-weight: bold;&lt;br /&gt;
	float: left;&lt;br /&gt;
	clear: left;&lt;br /&gt;
	margin-right: 0.5em;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.edfm-box dd,&lt;br /&gt;
.edfm-panel dd {&lt;br /&gt;
	margin-left: 11em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-inline-flag {&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Article metadata / status module (Template:Article status) --------&lt;br /&gt;
   2026-08-08 second revision: a compact maintenance banner (RuneScape&lt;br /&gt;
   Wiki-style notice as the UX reference, not its markup/colours) rather&lt;br /&gt;
   than a small internal dashboard -- an icon, the bare status word (no&lt;br /&gt;
   mode/version appended to it), one standard sentence for that status,&lt;br /&gt;
   and a concise &amp;quot;Uncertain: ...&amp;quot; line when there&#039;s something worth&lt;br /&gt;
   flagging. The full editorial record (reviewer, mode, version, source&lt;br /&gt;
   quality, the complete uncertainty note, etc.) moves to the&lt;br /&gt;
   .edfm-status-expand collapsible below, not removed, just no longer&lt;br /&gt;
   competing with the article for attention. Semantic colouring always&lt;br /&gt;
   pairs with the visible text status/icon -- never colour alone, per the&lt;br /&gt;
   site&#039;s Verification Policy. Three colour tiers cover the seven actual&lt;br /&gt;
   status values (see Elite Dangerous Field Manual: Verification Policy):&lt;br /&gt;
   positive/confirmed (Verified, Partially verified) in cyan -- matching&lt;br /&gt;
   &amp;quot;cyan = verification information&amp;quot; from the colour system;&lt;br /&gt;
   attention-needed (Needs review, Upcoming) in orange -- matching&lt;br /&gt;
   &amp;quot;orange = important actions/emphasis&amp;quot;; and neutral (Draft, Historical,&lt;br /&gt;
   Legacy only) in a dim neutral tone -- Draft moved here from the&lt;br /&gt;
   attention tier, since &amp;quot;still being written&amp;quot; isn&#039;t the same kind of&lt;br /&gt;
   concern as &amp;quot;unchecked&amp;quot; or &amp;quot;not released yet&amp;quot;. The template sets the&lt;br /&gt;
   modifier class via #switch. */&lt;br /&gt;
.edfm-status {&lt;br /&gt;
	border-left-width: 4px;&lt;br /&gt;
	border-left-style: solid;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	overflow: hidden;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin: 1em 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive { border-left-color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention { border-left-color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral { border-left-color: var( --edfm-status-neutral ); }&lt;br /&gt;
&lt;br /&gt;
.edfm-status-banner {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: flex-start;&lt;br /&gt;
	gap: 0.65em;&lt;br /&gt;
	padding: 0.55em 0.9em;&lt;br /&gt;
}&lt;br /&gt;
/* Fixed-size icon swatch -- a single CSS-safe glyph (no icon font/library),&lt;br /&gt;
   never the same shape as a hard error: a checkmark for the positive&lt;br /&gt;
   tier, a plain &amp;quot;!&amp;quot; (not a red triangle) for attention, a quiet &amp;quot;i&amp;quot; for&lt;br /&gt;
   neutral. &amp;quot;Needs review&amp;quot; means not fully verified yet, not wrong. */&lt;br /&gt;
.edfm-status-icon {&lt;br /&gt;
	flex: 0 0 auto;&lt;br /&gt;
	width: 1.45em;&lt;br /&gt;
	height: 1.45em;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive .edfm-status-icon { background: var( --edfm-status-positive-bg ); color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention .edfm-status-icon { background: var( --edfm-status-attention-bg ); color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral .edfm-status-icon { background: var( --edfm-status-neutral-bg ); color: var( --edfm-text-dim ); }&lt;br /&gt;
.edfm-status-banner-body {&lt;br /&gt;
	flex: 1 1 auto;&lt;br /&gt;
	min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-heading {&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.9em;&lt;br /&gt;
	margin-bottom: 0.2em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status--positive .edfm-status-heading { color: var( --edfm-status-positive ); }&lt;br /&gt;
.edfm-status--attention .edfm-status-heading { color: var( --edfm-status-attention ); }&lt;br /&gt;
.edfm-status--neutral .edfm-status-heading { color: var( --edfm-text ); }&lt;br /&gt;
.edfm-status-message {&lt;br /&gt;
	margin: 0 0 0.2em;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 0.86em;&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-uncertain {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.86em;&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-uncertain-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-details {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( auto-fit, minmax( 11em, 1fr ) );&lt;br /&gt;
	gap: 0.85em 1.25em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0.85em 1em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: column;&lt;br /&gt;
	gap: 0.2em;&lt;br /&gt;
	/* Grid items default to min-width: auto, which floors their shrink at&lt;br /&gt;
	   their content&#039;s min-content size -- a long slash-joined run like&lt;br /&gt;
	   &amp;quot;prerequisite/discovery/invitation/unlock&amp;quot; (no spaces, so no natural&lt;br /&gt;
	   break point in some engines) could floor a column wider than its&lt;br /&gt;
	   track and spill into the next one at in-between widths (2026-08-08:&lt;br /&gt;
	   found at ~820px on The Dweller). Letting the item shrink below that&lt;br /&gt;
	   floor, paired with the dd&#039;s own overflow-wrap below, keeps long&lt;br /&gt;
	   values inside their own column at every width instead. */&lt;br /&gt;
	min-width: 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row dt {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	white-space: nowrap;&lt;br /&gt;
	float: none;&lt;br /&gt;
	clear: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.7em;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-row dd {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.98em;&lt;br /&gt;
	overflow-wrap: anywhere;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 480px ) {&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Related content (Template:Related articles) -----------------------&lt;br /&gt;
   A small navigation strip instead of a generic bordered notice -- a&lt;br /&gt;
   quiet uppercase label above a row of individually-boxed link &amp;quot;tiles&amp;quot;,&lt;br /&gt;
   each with a trailing arrow. Deliberately styles the `&amp;lt;a&amp;gt;` elements&lt;br /&gt;
   directly (not container-level flexbox) so the freeform wikitext link&lt;br /&gt;
   list passed into the template (arbitrary separators/whitespace between&lt;br /&gt;
   links) can&#039;t break the layout -- every link gets its own tile&lt;br /&gt;
   regardless of what, if anything, sits between them in the source. */&lt;br /&gt;
.edfm-related {&lt;br /&gt;
	margin: 1.6em 0;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-label {&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.75em;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin-bottom: 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( auto-fit, minmax( 12rem, 1fr ) );&lt;br /&gt;
	gap: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: space-between;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	border-left: 2px solid var( --edfm-cyan );&lt;br /&gt;
	padding: 0.65em 1.1em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-left-color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a::after {&lt;br /&gt;
	content: &#039;\2192&#039;;&lt;br /&gt;
}&lt;br /&gt;
.edfm-related-links a:hover {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- &amp;quot;View verification details&amp;quot; collapsible ---------------------------&lt;br /&gt;
   Wraps everything beyond the compact banner (Status, Last reviewed,&lt;br /&gt;
   Reviewer, Game mode, Version coverage, Source quality, the full Known&lt;br /&gt;
   uncertainty text, and the optional Legacy differences/Recent changes/&lt;br /&gt;
   Verification notes fields) behind a native mw-collapsible toggle&lt;br /&gt;
   instead of a new dependency -- jquery.makeCollapsible&lt;br /&gt;
   is core MediaWiki, loaded on every page by mediawiki.page.ready. For a&lt;br /&gt;
   plain &amp;lt;div&amp;gt; its default behaviour prepends a&lt;br /&gt;
   &amp;lt;button class=&amp;quot;mw-collapsible-toggle&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;mw-collapsible-text&amp;quot;&amp;gt;&lt;br /&gt;
   as the first child and wraps the remaining content in&lt;br /&gt;
   .mw-collapsible-content -- reset here to a plain full-width text row&lt;br /&gt;
   matching this module&#039;s mono/uppercase metadata language, instead of the&lt;br /&gt;
   browser&#039;s default button chrome, which would render as a jarring light&lt;br /&gt;
   box against this site&#039;s dark surfaces (same class of fix as the Save&lt;br /&gt;
   dialog/toolbar/#filetoc native-component passes elsewhere on this&lt;br /&gt;
   site). */&lt;br /&gt;
.edfm-status-expand {&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle {&lt;br /&gt;
	display: block;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0.45em 1em;&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-size: 0.75em;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	cursor: pointer;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle:hover,&lt;br /&gt;
.edfm-status-expand &amp;gt; .mw-collapsible-toggle:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-status-expand .mw-collapsible-content .edfm-status-details {&lt;br /&gt;
	padding-top: 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* --- Fact / Field Manual Recommendation callouts ------------------------&lt;br /&gt;
   Template:Fact and Template:Field manual recommendation -- a small&lt;br /&gt;
   labelled distinction between a verified fact and EDFM&#039;s own editorial&lt;br /&gt;
   judgement (see Elite Dangerous Field Manual:Engineering Architecture on&lt;br /&gt;
   why pinning/strategy guidance is treated as editorial, not database&lt;br /&gt;
   fact). Deliberately reuses the accent-rail + cyan/orange language&lt;br /&gt;
   already used everywhere else on this site (status positive/attention,&lt;br /&gt;
   infobox labels, related-link hover) instead of inventing a new callout&lt;br /&gt;
   style: cyan marks a verified fact (&amp;quot;cyan = verification information&amp;quot;),&lt;br /&gt;
   orange marks editorial guidance (&amp;quot;orange = important actions/&lt;br /&gt;
   emphasis&amp;quot;) -- see the colour rules this mirrors in this file&#039;s own&lt;br /&gt;
   .edfm-status-- modifiers above. */&lt;br /&gt;
.edfm-fact-recommendation {&lt;br /&gt;
	border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	padding: 0.5em 0.9em;&lt;br /&gt;
	margin: 0.8em 0;&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--fact {&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--recommendation {&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation-label {&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-family: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 0.72em;&lt;br /&gt;
	letter-spacing: 0.1em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	margin-bottom: 0.3em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--fact .edfm-fact-recommendation-label {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation--recommendation .edfm-fact-recommendation-label {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-fact-recommendation-body {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=547</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=547"/>
		<updated>2026-08-10T01:51:31Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Hide injected mobile close button on desktop sidebar&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Polish-pass bump from 1280px -- article read as slightly too narrow&lt;br /&gt;
	   on large desktop displays, and future reference tables (engineering,&lt;br /&gt;
	   ship stats, colonisation data) will want the room. Still centred&lt;br /&gt;
	   within the workspace via --edfm-gutter below, not stretched&lt;br /&gt;
	   edge-to-edge. */&lt;br /&gt;
	--edfm-content-max: 1320px;&lt;br /&gt;
	/* RuneScape.wiki-style integrated rail: wide enough for readable labels,&lt;br /&gt;
	   but joined directly to the page plane. Width and clear match so the&lt;br /&gt;
	   article starts beside the sidebar shadow instead of after a dead gutter. */&lt;br /&gt;
	--edfm-sidebar-width: 12.75rem;&lt;br /&gt;
	--edfm-sidebar-clear: 12.75rem;&lt;br /&gt;
	/* The gutter is whatever&#039;s left of the workspace (viewport minus the&lt;br /&gt;
	   sidebar) after the capped content width, split evenly, never&lt;br /&gt;
	   negative. On a screen too narrow to fit sidebar+content-max, this&lt;br /&gt;
	   collapses to 0 and content just fills the workspace edge-to-edge --&lt;br /&gt;
	   see &amp;quot;GLOBAL LAYOUT&amp;quot; below for the full explanation. */&lt;br /&gt;
	--edfm-gutter: max( 0px, calc( ( 100vw - var( --edfm-sidebar-clear ) - var( --edfm-content-max ) ) / 2 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
/* Full-height sidebar rail: mirrors the RuneScape.wiki behavior where the&lt;br /&gt;
   left rail has no visible bottom edge. The real #mw-panel only carries the&lt;br /&gt;
   navigation content; this fixed layer paints the uninterrupted surface,&lt;br /&gt;
   border, and shadow down the whole viewport. */&lt;br /&gt;
body::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: 0;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	background: linear-gradient( 180deg, var( --edfm-surface-1 ) 0%, var( --edfm-bg-deep ) 100% );&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 10px 0 22px rgba( 0, 0, 0, 0.32 );&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
	z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-title );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	margin-top: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-top: 3.25rem;&lt;br /&gt;
	margin-bottom: 1.1rem;&lt;br /&gt;
	font-size: var( --edfm-fs-h2 );&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: &#039;// &#039;;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: 46em; /* comfortable reading measure, not the full column */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55em;&lt;br /&gt;
	margin: 0 0 0.5em 0;&lt;br /&gt;
	padding-top: 1.1em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 8px;&lt;br /&gt;
	height: 8px;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	clip-path: polygon( 0 0, 100% 0, 100% 65%, 65% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	max-width: 42em;&lt;br /&gt;
	margin: 0.5em 0 1.7em 0;&lt;br /&gt;
	padding-bottom: 1.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background: transparent;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding: 0 0.65rem 1.35rem 0.65rem;&lt;br /&gt;
	border-right: 0;&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
	z-index: 3;&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually -- a rule beneath it separates&lt;br /&gt;
   &amp;quot;identity&amp;quot; from &amp;quot;navigation&amp;quot; instead of the nav groups just starting&lt;br /&gt;
   immediately under the logo with no break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	margin: 0 -0.65rem 0.9rem -0.65rem;&lt;br /&gt;
	padding: 0.95rem 0.55rem 1.05rem 0.55rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	background: radial-gradient( circle at 50% 25%, rgba( 255, 138, 0, 0.08 ), transparent 58% );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.45rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
	padding: 0.42em 0.55em;&lt;br /&gt;
	margin: 0.08em -0.35em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	box-shadow: inset 0 0 0 1px rgba( 255, 138, 0, 0.08 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Global Frontier/unofficial-project disclaimer (rendered via $wgSiteNotice,&lt;br /&gt;
   #siteNotice sits inside #content right before #firstHeading on every&lt;br /&gt;
   page). Previously inherited plain prose styling and read like the start&lt;br /&gt;
   of the article; restyled as a thin, quiet info line -- small text, a&lt;br /&gt;
   bottom rule, no italic-paragraph treatment -- so it reads as global&lt;br /&gt;
   utility chrome rather than article content, without moving or removing&lt;br /&gt;
   it (still the very first thing in the article surface, still contains&lt;br /&gt;
   the real &amp;quot;Full notice&amp;quot; link). */&lt;br /&gt;
#siteNotice {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice em, #siteNotice i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body::before {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		background: var( --edfm-bg-deep );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS.&lt;br /&gt;
   The close button is injected into #mw-panel by Common.js, so it must be&lt;br /&gt;
   explicitly hidden by default; otherwise a tiny native white button appears&lt;br /&gt;
   in the desktop sidebar&#039;s top-left corner. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim,&lt;br /&gt;
.edfm-mobile-close-button {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips -- intentionally quiet so table rows still&lt;br /&gt;
   read like data rows, not card/list hybrids. */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 30px;&lt;br /&gt;
	height: 30px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.2;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=546</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=546"/>
		<updated>2026-08-10T01:47:10Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Make sidebar rail full-height with no visible bottom edge&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Polish-pass bump from 1280px -- article read as slightly too narrow&lt;br /&gt;
	   on large desktop displays, and future reference tables (engineering,&lt;br /&gt;
	   ship stats, colonisation data) will want the room. Still centred&lt;br /&gt;
	   within the workspace via --edfm-gutter below, not stretched&lt;br /&gt;
	   edge-to-edge. */&lt;br /&gt;
	--edfm-content-max: 1320px;&lt;br /&gt;
	/* RuneScape.wiki-style integrated rail: wide enough for readable labels,&lt;br /&gt;
	   but joined directly to the page plane. Width and clear match so the&lt;br /&gt;
	   article starts beside the sidebar shadow instead of after a dead gutter. */&lt;br /&gt;
	--edfm-sidebar-width: 12.75rem;&lt;br /&gt;
	--edfm-sidebar-clear: 12.75rem;&lt;br /&gt;
	/* The gutter is whatever&#039;s left of the workspace (viewport minus the&lt;br /&gt;
	   sidebar) after the capped content width, split evenly, never&lt;br /&gt;
	   negative. On a screen too narrow to fit sidebar+content-max, this&lt;br /&gt;
	   collapses to 0 and content just fills the workspace edge-to-edge --&lt;br /&gt;
	   see &amp;quot;GLOBAL LAYOUT&amp;quot; below for the full explanation. */&lt;br /&gt;
	--edfm-gutter: max( 0px, calc( ( 100vw - var( --edfm-sidebar-clear ) - var( --edfm-content-max ) ) / 2 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
/* Full-height sidebar rail: mirrors the RuneScape.wiki behavior where the&lt;br /&gt;
   left rail has no visible bottom edge. The real #mw-panel only carries the&lt;br /&gt;
   navigation content; this fixed layer paints the uninterrupted surface,&lt;br /&gt;
   border, and shadow down the whole viewport. */&lt;br /&gt;
body::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: fixed;&lt;br /&gt;
	top: 0;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: 0;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	background: linear-gradient( 180deg, var( --edfm-surface-1 ) 0%, var( --edfm-bg-deep ) 100% );&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 10px 0 22px rgba( 0, 0, 0, 0.32 );&lt;br /&gt;
	pointer-events: none;&lt;br /&gt;
	z-index: 1;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-title );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	margin-top: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-top: 3.25rem;&lt;br /&gt;
	margin-bottom: 1.1rem;&lt;br /&gt;
	font-size: var( --edfm-fs-h2 );&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: &#039;// &#039;;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: 46em; /* comfortable reading measure, not the full column */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	z-index: 2;&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55em;&lt;br /&gt;
	margin: 0 0 0.5em 0;&lt;br /&gt;
	padding-top: 1.1em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 8px;&lt;br /&gt;
	height: 8px;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	clip-path: polygon( 0 0, 100% 0, 100% 65%, 65% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	max-width: 42em;&lt;br /&gt;
	margin: 0.5em 0 1.7em 0;&lt;br /&gt;
	padding-bottom: 1.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background: transparent;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding: 0 0.65rem 1.35rem 0.65rem;&lt;br /&gt;
	border-right: 0;&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
	z-index: 3;&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually -- a rule beneath it separates&lt;br /&gt;
   &amp;quot;identity&amp;quot; from &amp;quot;navigation&amp;quot; instead of the nav groups just starting&lt;br /&gt;
   immediately under the logo with no break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	margin: 0 -0.65rem 0.9rem -0.65rem;&lt;br /&gt;
	padding: 0.95rem 0.55rem 1.05rem 0.55rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	background: radial-gradient( circle at 50% 25%, rgba( 255, 138, 0, 0.08 ), transparent 58% );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.45rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
	padding: 0.42em 0.55em;&lt;br /&gt;
	margin: 0.08em -0.35em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	box-shadow: inset 0 0 0 1px rgba( 255, 138, 0, 0.08 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Global Frontier/unofficial-project disclaimer (rendered via $wgSiteNotice,&lt;br /&gt;
   #siteNotice sits inside #content right before #firstHeading on every&lt;br /&gt;
   page). Previously inherited plain prose styling and read like the start&lt;br /&gt;
   of the article; restyled as a thin, quiet info line -- small text, a&lt;br /&gt;
   bottom rule, no italic-paragraph treatment -- so it reads as global&lt;br /&gt;
   utility chrome rather than article content, without moving or removing&lt;br /&gt;
   it (still the very first thing in the article surface, still contains&lt;br /&gt;
   the real &amp;quot;Full notice&amp;quot; link). */&lt;br /&gt;
#siteNotice {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice em, #siteNotice i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body::before {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		background: var( --edfm-bg-deep );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips -- intentionally quiet so table rows still&lt;br /&gt;
   read like data rows, not card/list hybrids. */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 30px;&lt;br /&gt;
	height: 30px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.2;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=545</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=545"/>
		<updated>2026-08-10T01:41:19Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Integrate sidebar with page plane using RuneScape-style rail shadow&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Polish-pass bump from 1280px -- article read as slightly too narrow&lt;br /&gt;
	   on large desktop displays, and future reference tables (engineering,&lt;br /&gt;
	   ship stats, colonisation data) will want the room. Still centred&lt;br /&gt;
	   within the workspace via --edfm-gutter below, not stretched&lt;br /&gt;
	   edge-to-edge. */&lt;br /&gt;
	--edfm-content-max: 1320px;&lt;br /&gt;
	/* RuneScape.wiki-style integrated rail: wide enough for readable labels,&lt;br /&gt;
	   but joined directly to the page plane. Width and clear match so the&lt;br /&gt;
	   article starts beside the sidebar shadow instead of after a dead gutter. */&lt;br /&gt;
	--edfm-sidebar-width: 12.75rem;&lt;br /&gt;
	--edfm-sidebar-clear: 12.75rem;&lt;br /&gt;
	/* The gutter is whatever&#039;s left of the workspace (viewport minus the&lt;br /&gt;
	   sidebar) after the capped content width, split evenly, never&lt;br /&gt;
	   negative. On a screen too narrow to fit sidebar+content-max, this&lt;br /&gt;
	   collapses to 0 and content just fills the workspace edge-to-edge --&lt;br /&gt;
	   see &amp;quot;GLOBAL LAYOUT&amp;quot; below for the full explanation. */&lt;br /&gt;
	--edfm-gutter: max( 0px, calc( ( 100vw - var( --edfm-sidebar-clear ) - var( --edfm-content-max ) ) / 2 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-title );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	margin-top: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-top: 3.25rem;&lt;br /&gt;
	margin-bottom: 1.1rem;&lt;br /&gt;
	font-size: var( --edfm-fs-h2 );&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: &#039;// &#039;;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: 46em; /* comfortable reading measure, not the full column */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55em;&lt;br /&gt;
	margin: 0 0 0.5em 0;&lt;br /&gt;
	padding-top: 1.1em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 8px;&lt;br /&gt;
	height: 8px;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	clip-path: polygon( 0 0, 100% 0, 100% 65%, 65% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	max-width: 42em;&lt;br /&gt;
	margin: 0.5em 0 1.7em 0;&lt;br /&gt;
	padding-bottom: 1.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background: linear-gradient( 180deg, var( --edfm-surface-1 ) 0%, var( --edfm-bg-deep ) 100% );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding: 0 0.65rem 1.35rem 0.65rem;&lt;br /&gt;
	border-right: 1px solid var( --edfm-border );&lt;br /&gt;
	box-shadow: 10px 0 22px rgba( 0, 0, 0, 0.32 );&lt;br /&gt;
	z-index: 3;&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually -- a rule beneath it separates&lt;br /&gt;
   &amp;quot;identity&amp;quot; from &amp;quot;navigation&amp;quot; instead of the nav groups just starting&lt;br /&gt;
   immediately under the logo with no break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	margin: 0 -0.65rem 0.9rem -0.65rem;&lt;br /&gt;
	padding: 0.95rem 0.55rem 1.05rem 0.55rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	background: radial-gradient( circle at 50% 25%, rgba( 255, 138, 0, 0.08 ), transparent 58% );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.45rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.35;&lt;br /&gt;
	padding: 0.42em 0.55em;&lt;br /&gt;
	margin: 0.08em -0.35em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	box-shadow: inset 0 0 0 1px rgba( 255, 138, 0, 0.08 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Global Frontier/unofficial-project disclaimer (rendered via $wgSiteNotice,&lt;br /&gt;
   #siteNotice sits inside #content right before #firstHeading on every&lt;br /&gt;
   page). Previously inherited plain prose styling and read like the start&lt;br /&gt;
   of the article; restyled as a thin, quiet info line -- small text, a&lt;br /&gt;
   bottom rule, no italic-paragraph treatment -- so it reads as global&lt;br /&gt;
   utility chrome rather than article content, without moving or removing&lt;br /&gt;
   it (still the very first thing in the article surface, still contains&lt;br /&gt;
   the real &amp;quot;Full notice&amp;quot; link). */&lt;br /&gt;
#siteNotice {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice em, #siteNotice i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: var( --edfm-sidebar-clear );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips -- intentionally quiet so table rows still&lt;br /&gt;
   read like data rows, not card/list hybrids. */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 30px;&lt;br /&gt;
	height: 30px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.2;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=544</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=544"/>
		<updated>2026-08-10T01:32:36Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Rebalance sidebar width and quiet Engineer table portraits&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Polish-pass bump from 1280px -- article read as slightly too narrow&lt;br /&gt;
	   on large desktop displays, and future reference tables (engineering,&lt;br /&gt;
	   ship stats, colonisation data) will want the room. Still centred&lt;br /&gt;
	   within the workspace via --edfm-gutter below, not stretched&lt;br /&gt;
	   edge-to-edge. */&lt;br /&gt;
	--edfm-content-max: 1320px;&lt;br /&gt;
	/* Slightly wider than stock Vector, but still a rail rather than a second&lt;br /&gt;
	   content column. The previous 16rem force-pass made the page feel split&lt;br /&gt;
	   and disconnected from the EDFM layout. */&lt;br /&gt;
	--edfm-sidebar-width: 12.25rem;&lt;br /&gt;
	--edfm-sidebar-clear: 13.25rem;&lt;br /&gt;
	/* The gutter is whatever&#039;s left of the workspace (viewport minus the&lt;br /&gt;
	   sidebar) after the capped content width, split evenly, never&lt;br /&gt;
	   negative. On a screen too narrow to fit sidebar+content-max, this&lt;br /&gt;
	   collapses to 0 and content just fills the workspace edge-to-edge --&lt;br /&gt;
	   see &amp;quot;GLOBAL LAYOUT&amp;quot; below for the full explanation. */&lt;br /&gt;
	--edfm-gutter: max( 0px, calc( ( 100vw - var( --edfm-sidebar-clear ) - var( --edfm-content-max ) ) / 2 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-title );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	margin-top: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-top: 3.25rem;&lt;br /&gt;
	margin-bottom: 1.1rem;&lt;br /&gt;
	font-size: var( --edfm-fs-h2 );&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: &#039;// &#039;;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: 46em; /* comfortable reading measure, not the full column */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55em;&lt;br /&gt;
	margin: 0 0 0.5em 0;&lt;br /&gt;
	padding-top: 1.1em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 8px;&lt;br /&gt;
	height: 8px;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	clip-path: polygon( 0 0, 100% 0, 100% 65%, 65% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	max-width: 42em;&lt;br /&gt;
	margin: 0.5em 0 1.7em 0;&lt;br /&gt;
	padding-bottom: 1.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually -- a rule beneath it separates&lt;br /&gt;
   &amp;quot;identity&amp;quot; from &amp;quot;navigation&amp;quot; instead of the nav groups just starting&lt;br /&gt;
   immediately under the logo with no break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding-bottom: 1.1rem;&lt;br /&gt;
	margin-bottom: 0.9rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.7rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
	padding: 0.4em 0.5em;&lt;br /&gt;
	margin: 0.1em -0.5em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Global Frontier/unofficial-project disclaimer (rendered via $wgSiteNotice,&lt;br /&gt;
   #siteNotice sits inside #content right before #firstHeading on every&lt;br /&gt;
   page). Previously inherited plain prose styling and read like the start&lt;br /&gt;
   of the article; restyled as a thin, quiet info line -- small text, a&lt;br /&gt;
   bottom rule, no italic-paragraph treatment -- so it reads as global&lt;br /&gt;
   utility chrome rather than article content, without moving or removing&lt;br /&gt;
   it (still the very first thing in the article surface, still contains&lt;br /&gt;
   the real &amp;quot;Full notice&amp;quot; link). */&lt;br /&gt;
#siteNotice {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice em, #siteNotice i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips -- intentionally quiet so table rows still&lt;br /&gt;
   read like data rows, not card/list hybrids. */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 30px;&lt;br /&gt;
	height: 30px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 3px;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.2;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=543</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=543"/>
		<updated>2026-08-10T01:27:51Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Force wider desktop sidebar navigation internals&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Polish-pass bump from 1280px -- article read as slightly too narrow&lt;br /&gt;
	   on large desktop displays, and future reference tables (engineering,&lt;br /&gt;
	   ship stats, colonisation data) will want the room. Still centred&lt;br /&gt;
	   within the workspace via --edfm-gutter below, not stretched&lt;br /&gt;
	   edge-to-edge. */&lt;br /&gt;
	--edfm-content-max: 1320px;&lt;br /&gt;
	/* Vector legacy&#039;s stock sidebar clear is 11em, but the EDFM navigation&lt;br /&gt;
	   labels and larger logo need more room than stock Vector. Keep the&lt;br /&gt;
	   clear as an explicit token so article/header centring, tab offsets,&lt;br /&gt;
	   and footer alignment all move together with the wider sidebar. */&lt;br /&gt;
	--edfm-sidebar-width: 16rem;&lt;br /&gt;
	--edfm-sidebar-clear: 17.5rem;&lt;br /&gt;
	/* The gutter is whatever&#039;s left of the workspace (viewport minus the&lt;br /&gt;
	   sidebar) after the capped content width, split evenly, never&lt;br /&gt;
	   negative. On a screen too narrow to fit sidebar+content-max, this&lt;br /&gt;
	   collapses to 0 and content just fills the workspace edge-to-edge --&lt;br /&gt;
	   see &amp;quot;GLOBAL LAYOUT&amp;quot; below for the full explanation. */&lt;br /&gt;
	--edfm-gutter: max( 0px, calc( ( 100vw - var( --edfm-sidebar-clear ) - var( --edfm-content-max ) ) / 2 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-title );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	margin-top: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-top: 3.25rem;&lt;br /&gt;
	margin-bottom: 1.1rem;&lt;br /&gt;
	font-size: var( --edfm-fs-h2 );&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: &#039;// &#039;;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: 46em; /* comfortable reading measure, not the full column */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55em;&lt;br /&gt;
	margin: 0 0 0.5em 0;&lt;br /&gt;
	padding-top: 1.1em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 8px;&lt;br /&gt;
	height: 8px;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	clip-path: polygon( 0 0, 100% 0, 100% 65%, 65% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	max-width: 42em;&lt;br /&gt;
	margin: 0.5em 0 1.7em 0;&lt;br /&gt;
	padding-bottom: 1.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* EDFM sidebar width force-pass 2026-08-10: 16rem panel / 17.5rem clear */&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually -- a rule beneath it separates&lt;br /&gt;
   &amp;quot;identity&amp;quot; from &amp;quot;navigation&amp;quot; instead of the nav groups just starting&lt;br /&gt;
   immediately under the logo with no break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding-bottom: 1.1rem;&lt;br /&gt;
	margin-bottom: 0.9rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
#mw-panel .portal,&lt;br /&gt;
#mw-panel .vector-menu-portal {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-top: 1.7rem;&lt;br /&gt;
	margin-right: 0.75rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type,&lt;br /&gt;
#mw-panel .vector-menu-portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul,&lt;br /&gt;
#mw-panel .vector-menu-content,&lt;br /&gt;
#mw-panel .vector-menu-content-list {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: auto;&lt;br /&gt;
	max-width: none;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-right: 0;&lt;br /&gt;
	padding-left: 0;&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
	padding: 0.4em 0.5em;&lt;br /&gt;
	margin: 0.1em -0.5em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Global Frontier/unofficial-project disclaimer (rendered via $wgSiteNotice,&lt;br /&gt;
   #siteNotice sits inside #content right before #firstHeading on every&lt;br /&gt;
   page). Previously inherited plain prose styling and read like the start&lt;br /&gt;
   of the article; restyled as a thin, quiet info line -- small text, a&lt;br /&gt;
   bottom rule, no italic-paragraph treatment -- so it reads as global&lt;br /&gt;
   utility chrome rather than article content, without moving or removing&lt;br /&gt;
   it (still the very first thing in the article surface, still contains&lt;br /&gt;
   the real &amp;quot;Full notice&amp;quot; link). */&lt;br /&gt;
#siteNotice {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice em, #siteNotice i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 40px;&lt;br /&gt;
	height: 40px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	border: 1px solid var( --edfm-border-strong );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: 0 0 0 1px rgba( 66, 199, 217, 0.14 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.25;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=542</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=542"/>
		<updated>2026-08-10T01:15:20Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Widen desktop sidebar navigation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Polish-pass bump from 1280px -- article read as slightly too narrow&lt;br /&gt;
	   on large desktop displays, and future reference tables (engineering,&lt;br /&gt;
	   ship stats, colonisation data) will want the room. Still centred&lt;br /&gt;
	   within the workspace via --edfm-gutter below, not stretched&lt;br /&gt;
	   edge-to-edge. */&lt;br /&gt;
	--edfm-content-max: 1320px;&lt;br /&gt;
	/* Vector legacy&#039;s stock sidebar clear is 11em, but the EDFM navigation&lt;br /&gt;
	   labels and larger logo need more room than stock Vector. Keep the&lt;br /&gt;
	   clear as an explicit token so article/header centring, tab offsets,&lt;br /&gt;
	   and footer alignment all move together with the wider sidebar. */&lt;br /&gt;
	--edfm-sidebar-width: 13rem;&lt;br /&gt;
	--edfm-sidebar-clear: 14.5rem;&lt;br /&gt;
	/* The gutter is whatever&#039;s left of the workspace (viewport minus the&lt;br /&gt;
	   sidebar) after the capped content width, split evenly, never&lt;br /&gt;
	   negative. On a screen too narrow to fit sidebar+content-max, this&lt;br /&gt;
	   collapses to 0 and content just fills the workspace edge-to-edge --&lt;br /&gt;
	   see &amp;quot;GLOBAL LAYOUT&amp;quot; below for the full explanation. */&lt;br /&gt;
	--edfm-gutter: max( 0px, calc( ( 100vw - var( --edfm-sidebar-clear ) - var( --edfm-content-max ) ) / 2 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-title );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	margin-top: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-top: 3.25rem;&lt;br /&gt;
	margin-bottom: 1.1rem;&lt;br /&gt;
	font-size: var( --edfm-fs-h2 );&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: &#039;// &#039;;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: 46em; /* comfortable reading measure, not the full column */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55em;&lt;br /&gt;
	margin: 0 0 0.5em 0;&lt;br /&gt;
	padding-top: 1.1em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 8px;&lt;br /&gt;
	height: 8px;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	clip-path: polygon( 0 0, 100% 0, 100% 65%, 65% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	max-width: 42em;&lt;br /&gt;
	margin: 0.5em 0 1.7em 0;&lt;br /&gt;
	padding-bottom: 1.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually -- a rule beneath it separates&lt;br /&gt;
   &amp;quot;identity&amp;quot; from &amp;quot;navigation&amp;quot; instead of the nav groups just starting&lt;br /&gt;
   immediately under the logo with no break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	width: var( --edfm-sidebar-width );&lt;br /&gt;
	padding-bottom: 1.1rem;&lt;br /&gt;
	margin-bottom: 0.9rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
#mw-panel .portal {&lt;br /&gt;
	margin-top: 1.7rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
	padding: 0.4em 0.5em;&lt;br /&gt;
	margin: 0.1em -0.5em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Global Frontier/unofficial-project disclaimer (rendered via $wgSiteNotice,&lt;br /&gt;
   #siteNotice sits inside #content right before #firstHeading on every&lt;br /&gt;
   page). Previously inherited plain prose styling and read like the start&lt;br /&gt;
   of the article; restyled as a thin, quiet info line -- small text, a&lt;br /&gt;
   bottom rule, no italic-paragraph treatment -- so it reads as global&lt;br /&gt;
   utility chrome rather than article content, without moving or removing&lt;br /&gt;
   it (still the very first thing in the article surface, still contains&lt;br /&gt;
   the real &amp;quot;Full notice&amp;quot; link). */&lt;br /&gt;
#siteNotice {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice em, #siteNotice i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 40px;&lt;br /&gt;
	height: 40px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	border: 1px solid var( --edfm-border-strong );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: 0 0 0 1px rgba( 66, 199, 217, 0.14 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.25;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=539</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=539"/>
		<updated>2026-08-10T01:06:38Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Fix wikitable header/body column alignment&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Polish-pass bump from 1280px -- article read as slightly too narrow&lt;br /&gt;
	   on large desktop displays, and future reference tables (engineering,&lt;br /&gt;
	   ship stats, colonisation data) will want the room. Still centred&lt;br /&gt;
	   within the workspace via --edfm-gutter below, not stretched&lt;br /&gt;
	   edge-to-edge. */&lt;br /&gt;
	--edfm-content-max: 1320px;&lt;br /&gt;
	/* Vector legacy clears its fixed sidebar with `margin-left: 11em` at&lt;br /&gt;
	   &amp;gt;=982px (skins.vector.styles.legacy/layouts/screen.less) -- reused&lt;br /&gt;
	   here, not reinvented, so the centring maths below lines up exactly&lt;br /&gt;
	   with where the sidebar actually ends. */&lt;br /&gt;
	--edfm-sidebar-clear: 11em;&lt;br /&gt;
	/* The gutter is whatever&#039;s left of the workspace (viewport minus the&lt;br /&gt;
	   sidebar) after the capped content width, split evenly, never&lt;br /&gt;
	   negative. On a screen too narrow to fit sidebar+content-max, this&lt;br /&gt;
	   collapses to 0 and content just fills the workspace edge-to-edge --&lt;br /&gt;
	   see &amp;quot;GLOBAL LAYOUT&amp;quot; below for the full explanation. */&lt;br /&gt;
	--edfm-gutter: max( 0px, calc( ( 100vw - var( --edfm-sidebar-clear ) - var( --edfm-content-max ) ) / 2 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-title );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	margin-top: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-top: 3.25rem;&lt;br /&gt;
	margin-bottom: 1.1rem;&lt;br /&gt;
	font-size: var( --edfm-fs-h2 );&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: &#039;// &#039;;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: 46em; /* comfortable reading measure, not the full column */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	/* Keep real table layout so header cells and body cells share one column grid.&lt;br /&gt;
	   The earlier display:block + tbody display:table overflow hack made sortable&lt;br /&gt;
	   headers size independently from body columns, which visibly misaligned the&lt;br /&gt;
	   Engineer directory after portrait chips were added. */&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
	table-layout: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable th,&lt;br /&gt;
.mw-body table.wikitable td,&lt;br /&gt;
.mw-body table.mw-datatable th,&lt;br /&gt;
.mw-body table.mw-datatable td {&lt;br /&gt;
	vertical-align: middle;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55em;&lt;br /&gt;
	margin: 0 0 0.5em 0;&lt;br /&gt;
	padding-top: 1.1em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 8px;&lt;br /&gt;
	height: 8px;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	clip-path: polygon( 0 0, 100% 0, 100% 65%, 65% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	max-width: 42em;&lt;br /&gt;
	margin: 0.5em 0 1.7em 0;&lt;br /&gt;
	padding-bottom: 1.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually -- a rule beneath it separates&lt;br /&gt;
   &amp;quot;identity&amp;quot; from &amp;quot;navigation&amp;quot; instead of the nav groups just starting&lt;br /&gt;
   immediately under the logo with no break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	padding-bottom: 1.1rem;&lt;br /&gt;
	margin-bottom: 0.9rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
#mw-panel .portal {&lt;br /&gt;
	margin-top: 1.7rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
	padding: 0.4em 0.5em;&lt;br /&gt;
	margin: 0.1em -0.5em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Global Frontier/unofficial-project disclaimer (rendered via $wgSiteNotice,&lt;br /&gt;
   #siteNotice sits inside #content right before #firstHeading on every&lt;br /&gt;
   page). Previously inherited plain prose styling and read like the start&lt;br /&gt;
   of the article; restyled as a thin, quiet info line -- small text, a&lt;br /&gt;
   bottom rule, no italic-paragraph treatment -- so it reads as global&lt;br /&gt;
   utility chrome rather than article content, without moving or removing&lt;br /&gt;
   it (still the very first thing in the article surface, still contains&lt;br /&gt;
   the real &amp;quot;Full notice&amp;quot; link). */&lt;br /&gt;
#siteNotice {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice em, #siteNotice i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 40px;&lt;br /&gt;
	height: 40px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	border: 1px solid var( --edfm-border-strong );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: 0 0 0 1px rgba( 66, 199, 217, 0.14 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.25;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=538</id>
		<title>MediaWiki:Common.css</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=MediaWiki:Common.css&amp;diff=538"/>
		<updated>2026-08-10T01:00:10Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Style Engineer directory portrait thumbnails&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;/* ==========================================================================&lt;br /&gt;
   EDFM site-wide styling -- &amp;quot;Elite Dangerous technical field manual&amp;quot; theme.&lt;br /&gt;
   Original CSS written for this project -- no code or assets copied from&lt;br /&gt;
   runescape.wiki, Elite Dangerous, or any other site/game, and no Frontier&lt;br /&gt;
   logo/branding/proprietary fonts/copied HUD elements. Restrained visual&lt;br /&gt;
   influence only: dark industrial surfaces, subtle angular geometry,&lt;br /&gt;
   orange/cyan accents used sparingly, information hierarchy first. This is&lt;br /&gt;
   a reference site, not a HUD -- no glow, no neon, no glassmorphism, no&lt;br /&gt;
   constant animation.&lt;br /&gt;
&lt;br /&gt;
   SKIN NOTE: the site uses Vector &amp;quot;legacy&amp;quot; (2011), not Vector 2022 -- see&lt;br /&gt;
   the &amp;quot;Why Vector legacy&amp;quot; note in docs/content-style-guide.md (Vector 2022&lt;br /&gt;
   hard-restricts its pinned sidebar to logged-in users; legacy has no such&lt;br /&gt;
   restriction). Several rules below exist specifically to beat core Vector&lt;br /&gt;
   legacy/mediawiki.skinning selectors that are *more specific* than a naive&lt;br /&gt;
   override would be (documented inline at each occurrence) -- this isn&#039;t&lt;br /&gt;
   guesswork, each one was found by reading the actual core .less source and&lt;br /&gt;
   confirmed with a real rendered screenshot, not just computed-style checks&lt;br /&gt;
   (:visited colours in particular are invisible to getComputedStyle by&lt;br /&gt;
   design -- see the tab-bar note below).&lt;br /&gt;
&lt;br /&gt;
   2026-08-07 SECOND PASS: the first redesign pass was judged too close to&lt;br /&gt;
   stock MediaWiki with a colour change -- this pass changes the actual&lt;br /&gt;
   visual composition (centred workspace instead of a huge dead gutter,&lt;br /&gt;
   a two-tier header, a real masthead, a tile-grid TOC, a restructured&lt;br /&gt;
   status module, larger deliberate type scale, depth via surface&lt;br /&gt;
   elevation instead of borders-around-everything) while reusing every&lt;br /&gt;
   working mechanism from the first pass rather than throwing it away --&lt;br /&gt;
   the tab/:visited fix, the external-link specificity fix, the mobile&lt;br /&gt;
   reorder fix, and focus-visible/reduced-motion are all still here,&lt;br /&gt;
   unchanged in mechanism.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. DESIGN TOKENS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
:root {&lt;br /&gt;
	/* Depth system: site (outermost, visible in the sidebar/header/gutters)&lt;br /&gt;
	   -&amp;gt; article surface -&amp;gt; component surfaces, each a deliberate step&lt;br /&gt;
	   brighter so the page reads as having actual depth rather than &amp;quot;one&lt;br /&gt;
	   background colour with slightly lighter boxes everywhere&amp;quot;. */&lt;br /&gt;
	--edfm-bg-deep: #07090b;&lt;br /&gt;
	--edfm-bg-page: #0a0e11;&lt;br /&gt;
	--edfm-surface-1: #10171b;&lt;br /&gt;
	--edfm-surface-2: #161f24;&lt;br /&gt;
	--edfm-surface-3: #1c272d;&lt;br /&gt;
	--edfm-surface-4: #233037;&lt;br /&gt;
&lt;br /&gt;
	--edfm-border: #26333b;&lt;br /&gt;
	--edfm-border-soft: rgba( 255, 255, 255, 0.06 );&lt;br /&gt;
&lt;br /&gt;
	--edfm-text: #edf0f2;&lt;br /&gt;
	--edfm-text-muted: #98a5ad;&lt;br /&gt;
	--edfm-text-dim: #6c7a82;&lt;br /&gt;
&lt;br /&gt;
	/* Accents -- orange is reserved for navigation/selection/emphasis/&lt;br /&gt;
	   section numbering; cyan/blue are for links, verification info, and&lt;br /&gt;
	   secondary interface elements. See &amp;quot;Links&amp;quot; and &amp;quot;Colour system&amp;quot; in&lt;br /&gt;
	   docs/content-style-guide.md for the reasoning. */&lt;br /&gt;
	--edfm-orange: #ff8a00;&lt;br /&gt;
	--edfm-orange-bright: #ffa21a;&lt;br /&gt;
	--edfm-cyan: #42c7d9;&lt;br /&gt;
	--edfm-blue: #4f9fe8;&lt;br /&gt;
&lt;br /&gt;
	/* Derived link colours */&lt;br /&gt;
	--edfm-link: var( --edfm-blue );&lt;br /&gt;
	--edfm-link-visited: #3f7bb3;&lt;br /&gt;
	--edfm-link-hover: #8cc4f7;&lt;br /&gt;
	--edfm-link-external: var( --edfm-cyan );&lt;br /&gt;
	--edfm-link-external-visited: #2f8f9c;&lt;br /&gt;
	--edfm-link-external-hover: #7fe0ec;&lt;br /&gt;
	--edfm-link-new: #e07a7a;&lt;br /&gt;
&lt;br /&gt;
	/* Status semantics (article metadata module) -- text label always&lt;br /&gt;
	   present too, never colour-only. */&lt;br /&gt;
	--edfm-status-positive: var( --edfm-cyan );&lt;br /&gt;
	--edfm-status-attention: var( --edfm-orange );&lt;br /&gt;
	--edfm-status-neutral: var( --edfm-text-dim );&lt;br /&gt;
	--edfm-status-positive-bg: rgba( 66, 199, 217, 0.12 );&lt;br /&gt;
	--edfm-status-attention-bg: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
	--edfm-status-neutral-bg: rgba( 108, 122, 130, 0.12 );&lt;br /&gt;
&lt;br /&gt;
	/* Typography -- explicit desktop scale (2026-08-07 pass 2). Sized in&lt;br /&gt;
	   rem against the root&#039;s real 16px (Vector legacy&#039;s own&lt;br /&gt;
	   @font-size-root is 100%, i.e. browser default -- confirmed by&lt;br /&gt;
	   reading skins.vector.styles.legacy/variables.less, not assumed)&lt;br /&gt;
	   rather than nested em, specifically so component sizes can&#039;t&lt;br /&gt;
	   compound smaller than intended inside whatever ambient size an&lt;br /&gt;
	   ancestor happens to set. */&lt;br /&gt;
	--edfm-fs-title: clamp( 1.9rem, 1.4rem + 2vw, 2.25rem ); /* ~30-36px */&lt;br /&gt;
	--edfm-fs-h2: 1.35rem; /* ~21.6px */&lt;br /&gt;
	--edfm-fs-h3: 1.15rem; /* ~18.4px */&lt;br /&gt;
	--edfm-fs-body: 1rem; /* 16px */&lt;br /&gt;
	--edfm-fs-resource-name: 1.1rem; /* ~17.6px */&lt;br /&gt;
	--edfm-fs-meta: 0.8rem; /* ~12.8px */&lt;br /&gt;
	--edfm-fs-sidebar: 0.9375rem; /* 15px -- polish pass: +1px for readability */&lt;br /&gt;
	--edfm-fs-utility: 0.72rem; /* ~11.5px */&lt;br /&gt;
&lt;br /&gt;
	--edfm-mono: &#039;JetBrains Mono&#039;, &#039;Fira Code&#039;, Consolas, &#039;SF Mono&#039;, Menlo, &#039;Courier New&#039;, monospace;&lt;br /&gt;
	--edfm-sans: -apple-system, BlinkMacSystemFont, &#039;Segoe UI&#039;, Roboto, Helvetica, Arial, sans-serif;&lt;br /&gt;
&lt;br /&gt;
	/* Legacy aliases: earlier revisions of this stylesheet used these names&lt;br /&gt;
	   directly and some inline template output/older docs may still refer&lt;br /&gt;
	   to them; keep pointing at the current tokens rather than duplicate&lt;br /&gt;
	   values that could drift out of sync. */&lt;br /&gt;
	--edfm-orange-hover: var( --edfm-orange-bright );&lt;br /&gt;
	--edfm-orange-active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive: var( --edfm-orange );&lt;br /&gt;
	--color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--color-progressive--focus: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--background-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--background-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive: var( --edfm-orange );&lt;br /&gt;
	--border-color-progressive--hover: var( --edfm-orange-bright );&lt;br /&gt;
	--border-color-progressive--active: var( --edfm-orange-bright );&lt;br /&gt;
&lt;br /&gt;
	/* Geometry / layout */&lt;br /&gt;
	--edfm-corner: 10px;&lt;br /&gt;
	/* Polish-pass bump from 1280px -- article read as slightly too narrow&lt;br /&gt;
	   on large desktop displays, and future reference tables (engineering,&lt;br /&gt;
	   ship stats, colonisation data) will want the room. Still centred&lt;br /&gt;
	   within the workspace via --edfm-gutter below, not stretched&lt;br /&gt;
	   edge-to-edge. */&lt;br /&gt;
	--edfm-content-max: 1320px;&lt;br /&gt;
	/* Vector legacy clears its fixed sidebar with `margin-left: 11em` at&lt;br /&gt;
	   &amp;gt;=982px (skins.vector.styles.legacy/layouts/screen.less) -- reused&lt;br /&gt;
	   here, not reinvented, so the centring maths below lines up exactly&lt;br /&gt;
	   with where the sidebar actually ends. */&lt;br /&gt;
	--edfm-sidebar-clear: 11em;&lt;br /&gt;
	/* The gutter is whatever&#039;s left of the workspace (viewport minus the&lt;br /&gt;
	   sidebar) after the capped content width, split evenly, never&lt;br /&gt;
	   negative. On a screen too narrow to fit sidebar+content-max, this&lt;br /&gt;
	   collapses to 0 and content just fills the workspace edge-to-edge --&lt;br /&gt;
	   see &amp;quot;GLOBAL LAYOUT&amp;quot; below for the full explanation. */&lt;br /&gt;
	--edfm-gutter: max( 0px, calc( ( 100vw - var( --edfm-sidebar-clear ) - var( --edfm-content-max ) ) / 2 ) );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   2. BASE / RESET-ADJACENT&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
html, body {&lt;br /&gt;
	background-color: var( --edfm-bg-page );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
body.mediawiki {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
/* Background treatment: a faint technical grid plus a very soft radial&lt;br /&gt;
   glow centred behind the (now centred) content column, so the composition&lt;br /&gt;
   still has quiet visual interest in the gutters on ultrawide screens&lt;br /&gt;
   instead of just flat colour -- both stay under ~3% opacity, this is&lt;br /&gt;
   texture, not a HUD. Not image assets; pure CSS gradients. */&lt;br /&gt;
body {&lt;br /&gt;
	background-image:&lt;br /&gt;
		radial-gradient( ellipse 1400px 900px at 50% 0%, rgba( 66, 199, 217, 0.05 ), transparent 60% ),&lt;br /&gt;
		linear-gradient( rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px ),&lt;br /&gt;
		linear-gradient( 90deg, rgba( 255, 255, 255, 0.025 ) 1px, transparent 1px );&lt;br /&gt;
	background-size: auto, 48px 48px, 48px 48px;&lt;br /&gt;
	background-repeat: no-repeat, repeat, repeat;&lt;br /&gt;
	background-attachment: fixed, scroll, scroll;&lt;br /&gt;
}&lt;br /&gt;
@media ( prefers-reduced-motion: reduce ) {&lt;br /&gt;
	*, *::before, *::after {&lt;br /&gt;
		animation-duration: 0.001ms !important;&lt;br /&gt;
		animation-iteration-count: 1 !important;&lt;br /&gt;
		transition-duration: 0.001ms !important;&lt;br /&gt;
		scroll-behavior: auto !important;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* Focus visibility: applies to every interactive element, not just links. */&lt;br /&gt;
a:focus-visible,&lt;br /&gt;
button:focus-visible,&lt;br /&gt;
input:focus-visible,&lt;br /&gt;
textarea:focus-visible,&lt;br /&gt;
select:focus-visible,&lt;br /&gt;
[tabindex]:focus-visible {&lt;br /&gt;
	outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
	outline-offset: 2px;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Small reusable angular motif: a corner-cut bracket, used sparingly (see&lt;br /&gt;
   the redesign notes in docs/content-style-guide.md for exactly where) --&lt;br /&gt;
   deliberately not applied everywhere. */&lt;br /&gt;
.edfm-corner-cut {&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - var( --edfm-corner ) ) 0, 100% var( --edfm-corner ), 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TYPOGRAPHY&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* !important justified here: MediaWiki core&#039;s mediawiki.skinning module&lt;br /&gt;
   sets heading colour with equal-specificity plain-tag selectors and kept&lt;br /&gt;
   winning in testing despite this stylesheet loading later -- rather than&lt;br /&gt;
   keep chasing exact cascade/bundling order, force it. This is a&lt;br /&gt;
   correctness/contrast fix, not decoration. */&lt;br /&gt;
.mw-body h1, .mw-body h2, .mw-body h3, .mw-body h4, .mw-body h5, .mw-body h6,&lt;br /&gt;
.mw-heading1, .mw-heading2, .mw-heading3, .mw-heading4, .mw-heading5, .mw-heading6,&lt;br /&gt;
h1, h2, h3, h4, h5, h6 {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.01em;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
#firstHeading {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-title );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	margin-top: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
/* Section headings (h2): &amp;quot;// &amp;quot; prefix in orange, bright heading text, a&lt;br /&gt;
   short orange accent segment over the dim full-width divider core&lt;br /&gt;
   already draws. Substantially more vertical space than a wiki section&lt;br /&gt;
   normally gets, per the &amp;quot;sections feel packed together&amp;quot; fix -- 3.25rem&lt;br /&gt;
   (~52px) above, ~1.1rem gap to the first content component below. If a&lt;br /&gt;
   heading opts into explicit numbering via {{Section number}}, the&lt;br /&gt;
   automatic &amp;quot;// &amp;quot; is suppressed so the two treatments don&#039;t double up. */&lt;br /&gt;
.mw-body h2 {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	padding-bottom: 0.4em;&lt;br /&gt;
	margin-top: 3.25rem;&lt;br /&gt;
	margin-bottom: 1.1rem;&lt;br /&gt;
	font-size: var( --edfm-fs-h2 );&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::before {&lt;br /&gt;
	content: &#039;// &#039;;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2:has( .edfm-section-number )::before {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-body h2::after {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	position: absolute;&lt;br /&gt;
	left: 0;&lt;br /&gt;
	bottom: -1px;&lt;br /&gt;
	width: 3em;&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: 2px;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-number {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.edfm-section-sep {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	margin-right: 0.15em;&lt;br /&gt;
}&lt;br /&gt;
h3, h4 {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: var( --edfm-fs-h3 );&lt;br /&gt;
}&lt;br /&gt;
h3::before {&lt;br /&gt;
	content: &#039;/ &#039;;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 400;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Body text: readable sans-serif, deliberately NOT monospace -- long-form&lt;br /&gt;
   reading in monospace hurts readability, which stays a hard requirement&lt;br /&gt;
   even with a more technical visual language elsewhere. */&lt;br /&gt;
.mw-body p,&lt;br /&gt;
.mw-body li,&lt;br /&gt;
.mw-body dd {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
.mw-body p {&lt;br /&gt;
	margin: 0 0 1.1em 0;&lt;br /&gt;
	max-width: 46em; /* comfortable reading measure, not the full column */&lt;br /&gt;
}&lt;br /&gt;
.mw-body ul,&lt;br /&gt;
.mw-body ol {&lt;br /&gt;
	line-height: 1.7;&lt;br /&gt;
	margin-bottom: 1.1em;&lt;br /&gt;
}&lt;br /&gt;
/* MW 1.46 wraps headings in a `.mw-heading2`/`.mw-heading3` div, so the&lt;br /&gt;
   sibling that immediately follows is that wrapper, not the `h2`/`h3`&lt;br /&gt;
   itself -- matching both forms since a page could still have a bare&lt;br /&gt;
   heading in edge cases (e.g. content generated without the wrapper). */&lt;br /&gt;
.mw-heading2 + p, .mw-body h2 + p,&lt;br /&gt;
.mw-heading3 + p, .mw-body h3 + p,&lt;br /&gt;
.mw-heading2 + div, .mw-body h2 + div,&lt;br /&gt;
.mw-heading3 + div, .mw-body h3 + div {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
hr {&lt;br /&gt;
	background-color: var( --edfm-border );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Quiet, discoverable section-edit controls (logged-in editors only --&lt;br /&gt;
   MediaWiki only renders these for users who can edit). Keeping the&lt;br /&gt;
   functionality/keyboard access intact while making sure they don&#039;t&lt;br /&gt;
   compete visually with the heading they&#039;re attached to: low opacity at&lt;br /&gt;
   rest, full opacity on hover/focus of the heading OR the control itself,&lt;br /&gt;
   brackets hidden (the opacity+letter-spacing treatment already reads as&lt;br /&gt;
   a distinct control without them). */&lt;br /&gt;
.mw-editsection {&lt;br /&gt;
	margin-left: 1em;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.05em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	opacity: 0.45;&lt;br /&gt;
	transition: opacity 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.mw-heading:hover .mw-editsection,&lt;br /&gt;
.mw-heading:focus-within .mw-editsection,&lt;br /&gt;
.mw-editsection:hover,&lt;br /&gt;
.mw-editsection:focus-within {&lt;br /&gt;
	opacity: 1;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection a:hover,&lt;br /&gt;
.mw-editsection a:focus-visible {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-bracket {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
.mw-editsection-divider {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	margin: 0 0.3em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   8. LINKS&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
a { color: var( --edfm-link ); transition: color 0.1s ease; }&lt;br /&gt;
a:visited { color: var( --edfm-link-visited ); }&lt;br /&gt;
a:hover { color: var( --edfm-link-hover ); }&lt;br /&gt;
a.new, .new a { color: var( --edfm-link-new ); }&lt;br /&gt;
a.external { color: var( --edfm-link-external ); }&lt;br /&gt;
/* Core MediaWiki ships `.mw-parser-output a.external`/`a.extiw` (and their&lt;br /&gt;
   :visited/:hover states) at higher specificity (two classes + a tag) than&lt;br /&gt;
   a plain `a.external` rule (one class + a tag), so the line above never&lt;br /&gt;
   actually wins for real article links on its own -- the same underlying&lt;br /&gt;
   &amp;quot;core selector outranks a naive theme override&amp;quot; gotcha as the tab&lt;br /&gt;
   :visited fix further down. Matching the same selector shape here (this&lt;br /&gt;
   stylesheet loads after core skin styles) is what actually applies our&lt;br /&gt;
   colour to external links in article content. */&lt;br /&gt;
.mw-parser-output a.external,&lt;br /&gt;
.mw-parser-output a.extiw {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:visited,&lt;br /&gt;
.mw-parser-output a.extiw:visited {&lt;br /&gt;
	color: var( --edfm-link-external-visited );&lt;br /&gt;
}&lt;br /&gt;
.mw-parser-output a.external:hover,&lt;br /&gt;
.mw-parser-output a.extiw:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a {&lt;br /&gt;
	color: var( --edfm-link );&lt;br /&gt;
}&lt;br /&gt;
.mw-footer a:hover {&lt;br /&gt;
	color: var( --edfm-link-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. GLOBAL LAYOUT -- centred workspace&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* THE fix for &amp;quot;enormous unused region on the right side of wide displays&amp;quot;.&lt;br /&gt;
   Vector legacy&#039;s core layout (skins.vector.styles.legacy/layouts/&lt;br /&gt;
   screen.less) gives `.mw-body` (#content) a left margin to clear the&lt;br /&gt;
   fixed-width sidebar and otherwise lets it run edge-to-edge to the&lt;br /&gt;
   browser&#039;s right side with no max-width at all -- the first redesign&lt;br /&gt;
   pass added a max-width but left the column pinned to the sidebar&#039;s left&lt;br /&gt;
   edge, which is *why* it still read as &amp;quot;a column stuck on the left with&lt;br /&gt;
   dead space on the right&amp;quot; rather than a composed layout.&lt;br /&gt;
&lt;br /&gt;
   Fix: instead of a fixed `margin-left: 11em`, compute how much space is&lt;br /&gt;
   left over in the workspace (viewport minus the sidebar) once the&lt;br /&gt;
   content has its max-width, and split that leftover evenly between the&lt;br /&gt;
   left and right margins (via the --edfm-gutter token above) -- so the&lt;br /&gt;
   article is centred *within the workspace to the right of the sidebar*,&lt;br /&gt;
   not centred in the full viewport (which would ignore the sidebar and&lt;br /&gt;
   look off-centre) and not pinned to its left edge either. On a screen&lt;br /&gt;
   too narrow for sidebar + max-width content, --edfm-gutter naturally&lt;br /&gt;
   evaluates to 0 and this degrades to the old &amp;quot;fill the workspace&amp;quot;&lt;br /&gt;
   behaviour -- no separate narrow-screen override needed.&lt;br /&gt;
&lt;br /&gt;
   The header/tab bar&#039;s own float/absolute-position box (#mw-head) is left&lt;br /&gt;
   at its native full width deliberately -- rewriting *that* mechanism is&lt;br /&gt;
   a different, much higher-risk change (it took several rounds to get&lt;br /&gt;
   right originally) -- but its *contents* (search box, personal tools,&lt;br /&gt;
   namespace/view tabs) get their own right/left offsets pulled in by the&lt;br /&gt;
   same --edfm-gutter below, so they still visually line up with the&lt;br /&gt;
   centred column beneath them instead of hugging the browser edge. */&lt;br /&gt;
.mw-body,&lt;br /&gt;
#mw-data-after-content,&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	max-width: var( --edfm-content-max );&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
}&lt;br /&gt;
/* Tables, code blocks, and preformatted content are still allowed to be&lt;br /&gt;
   wider than a comfortable reading measure (technical data often needs&lt;br /&gt;
   it) -- they scroll horizontally inside the capped column instead of&lt;br /&gt;
   being force-shrunk or breaking the layout. Ordinary images/galleries&lt;br /&gt;
   already respect the column via max-width:100% below. */&lt;br /&gt;
.mw-body table,&lt;br /&gt;
.mw-body pre,&lt;br /&gt;
.mw-body .mw-code {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable,&lt;br /&gt;
.mw-body table.mw-datatable {&lt;br /&gt;
	display: block;&lt;br /&gt;
	overflow-x: auto;&lt;br /&gt;
}&lt;br /&gt;
.mw-body table.wikitable tbody,&lt;br /&gt;
.mw-body table.mw-datatable tbody {&lt;br /&gt;
	display: table;&lt;br /&gt;
	width: 100%;&lt;br /&gt;
}&lt;br /&gt;
.mw-body img {&lt;br /&gt;
	max-width: 100%;&lt;br /&gt;
	height: auto;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   4. ARTICLE MASTHEAD (eyebrow / title / deck)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Eyebrow line is authored as ordinary wikitext (see Template:Article&lt;br /&gt;
   header) and, purely as a placement detail, a small script&lt;br /&gt;
   (MediaWiki:Common.js) moves it directly above #firstHeading on load --&lt;br /&gt;
   see the comment there for why that needs JS rather than CSS/a template&lt;br /&gt;
   (the title is rendered by the skin before the article body in the DOM,&lt;br /&gt;
   so nothing living inside the article body can appear earlier than it&lt;br /&gt;
   without either moving it in the DOM or abandoning the real semantic H1).&lt;br /&gt;
   If JS is unavailable the eyebrow still renders, just directly under the&lt;br /&gt;
   title instead of above it.&lt;br /&gt;
&lt;br /&gt;
   The eyebrow/title/deck aren&#039;t wrapped in one literal bounding box (they&lt;br /&gt;
   live at two different DOM depths -- eyebrow is a sibling of #firstHeading,&lt;br /&gt;
   deck is inside the article body further down -- wrapping them in one&lt;br /&gt;
   real container would need heavier JS than is justified here), so the&lt;br /&gt;
   &amp;quot;designed masthead&amp;quot; read comes from a matching top rule above the&lt;br /&gt;
   eyebrow and bottom rule below the deck, a small angular marker, and the&lt;br /&gt;
   larger title/subtitle type scale, rather than one drawn box. */&lt;br /&gt;
.edfm-eyebrow {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55em;&lt;br /&gt;
	margin: 0 0 0.5em 0;&lt;br /&gt;
	padding-top: 1.1em;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow::before {&lt;br /&gt;
	content: &#039;&#039;;&lt;br /&gt;
	width: 8px;&lt;br /&gt;
	height: 8px;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	clip-path: polygon( 0 0, 100% 0, 100% 65%, 65% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-eyebrow .edfm-orange-mark {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.edfm-deck {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: 1.1rem;&lt;br /&gt;
	line-height: 1.55;&lt;br /&gt;
	max-width: 42em;&lt;br /&gt;
	margin: 0.5em 0 1.7em 0;&lt;br /&gt;
	padding-bottom: 1.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   1. SIDEBAR&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw-panel {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
}&lt;br /&gt;
/* Logo anchors the sidebar visually -- a rule beneath it separates&lt;br /&gt;
   &amp;quot;identity&amp;quot; from &amp;quot;navigation&amp;quot; instead of the nav groups just starting&lt;br /&gt;
   immediately under the logo with no break. */&lt;br /&gt;
#p-logo {&lt;br /&gt;
	padding-bottom: 1.1rem;&lt;br /&gt;
	margin-bottom: 0.9rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
/* Each nav group gets real breathing room from the one before it instead&lt;br /&gt;
   of being packed together like a stock wiki sidebar. */&lt;br /&gt;
#mw-panel .portal {&lt;br /&gt;
	margin-top: 1.7rem;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal:first-of-type {&lt;br /&gt;
	margin-top: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal .body,&lt;br /&gt;
#mw-panel .portal ul {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	display: block;&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	line-height: 1.4;&lt;br /&gt;
	padding: 0.4em 0.5em;&lt;br /&gt;
	margin: 0.1em -0.5em;&lt;br /&gt;
	border-left: 2px solid transparent;&lt;br /&gt;
	border-radius: 0;&lt;br /&gt;
}&lt;br /&gt;
#mw-panel .portal a:hover {&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;You are here&amp;quot; -- MediaWiki&#039;s sidebar has no built-in current-page&lt;br /&gt;
   indication; MediaWiki:Common.js adds the .edfm-nav-current class to the&lt;br /&gt;
   matching list item by comparing hrefs to the current URL. Orange is&lt;br /&gt;
   reserved for exactly this kind of &amp;quot;important navigation / selected&lt;br /&gt;
   state&amp;quot; per the colour system, which is why the rest of the sidebar is&lt;br /&gt;
   deliberately muted rather than orange throughout (an all-orange sidebar&lt;br /&gt;
   would both fight this indicator and read as visually dominant). */&lt;br /&gt;
.edfm-nav-current &amp;gt; a {&lt;br /&gt;
	color: var( --edfm-orange ) !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border-left-color: var( --edfm-orange );&lt;br /&gt;
	border-left-width: 3px;&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	border-left: 2px solid var( --edfm-orange );&lt;br /&gt;
	padding-left: 0.5em;&lt;br /&gt;
	margin-left: -0.5em;&lt;br /&gt;
	margin-bottom: 0.4em;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   3. TOP BAR -- two-tier chrome&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy&#039;s #mw-head naturally has ~2.5em of empty space above the&lt;br /&gt;
   tabs row (core: `#left-navigation/#right-navigation { margin-top:2.5em }`),&lt;br /&gt;
   originally reserved just for #p-personal to float in. Painting that same&lt;br /&gt;
   box with a background gradient that stays transparent for that top&lt;br /&gt;
   band and then switches to a surface colour for the tabs band creates a&lt;br /&gt;
   real two-tier read -- &amp;quot;primary chrome&amp;quot; (personal tools/search, over the&lt;br /&gt;
   page&#039;s own background) above &amp;quot;wiki authoring controls&amp;quot; (the tabs, on&lt;br /&gt;
   their own distinct strip) below -- without touching #mw-head&#039;s own&lt;br /&gt;
   position/width mechanics, which is the same fragile absolute-position&lt;br /&gt;
   system the very first pass of this project had to debug carefully to&lt;br /&gt;
   get the persistent sidebar working at all. Not worth re-risking that&lt;br /&gt;
   for a background change. */&lt;br /&gt;
#mw-head {&lt;br /&gt;
	background-image: linear-gradient(&lt;br /&gt;
		to bottom,&lt;br /&gt;
		transparent 0,&lt;br /&gt;
		transparent 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 2.35em,&lt;br /&gt;
		var( --edfm-surface-2 ) 100%&lt;br /&gt;
	);&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
#mw-page-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	background-image: none;&lt;br /&gt;
}&lt;br /&gt;
#mw-head-base {&lt;br /&gt;
	background-color: var( --edfm-bg-deep );&lt;br /&gt;
	/* Polish pass: thinned from 2px -- at 2px this competed visually with&lt;br /&gt;
	   the masthead&#039;s own orange marker/rule directly below it; a single&lt;br /&gt;
	   thinner accent line still reads as &amp;quot;site identity colour&amp;quot; without&lt;br /&gt;
	   the repetition. */&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Personal tools (login/logout) and the search box are the &amp;quot;primary&lt;br /&gt;
   chrome&amp;quot; tier -- pulled in by the same gutter used to centre the article,&lt;br /&gt;
   so on wide screens they visually line up with the centred column&lt;br /&gt;
   instead of hugging the browser edge, and given noticeably more visual&lt;br /&gt;
   weight than the tabs below them. */&lt;br /&gt;
#p-personal {&lt;br /&gt;
	right: calc( 0.75em + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
#p-personal a {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.3em 0.2em;&lt;br /&gt;
}&lt;br /&gt;
#p-personal a:hover {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
#right-navigation {&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
}&lt;br /&gt;
#left-navigation {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
}&lt;br /&gt;
/* Polish pass: core caps this at `width:20vw; max-width:20em`, which read&lt;br /&gt;
   as cramped next to the rest of the (now larger-scale) interface --&lt;br /&gt;
   given more room on desktop, still capped so it can&#039;t dominate the bar. */&lt;br /&gt;
.vector-search-box-inner {&lt;br /&gt;
	width: 22vw;&lt;br /&gt;
	max-width: 24em;&lt;br /&gt;
}&lt;br /&gt;
.vector-search-box-inner input,&lt;br /&gt;
#searchInput {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
	padding: 0.5em 0.7em;&lt;br /&gt;
	transition: border-color 0.15s ease, box-shadow 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
#searchInput:focus {&lt;br /&gt;
	border-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: 0 0 0 2px rgba( 66, 199, 217, 0.22 );&lt;br /&gt;
	outline: none;&lt;br /&gt;
}&lt;br /&gt;
#searchInput::placeholder {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Namespace tabs (Main Page / Discussion, left) and view tabs&lt;br /&gt;
   (Read / Edit / View history, right) both use Vector legacy&#039;s&lt;br /&gt;
   .vector-menu-tabs-legacy markup. Core skin CSS paints every tab `li`&lt;br /&gt;
   with a gradient fading to white and forces the selected tab to pure&lt;br /&gt;
   white -- neither is touched by recolouring the link text alone, which is&lt;br /&gt;
   why these stayed light before this stylesheet covered the `li`&lt;br /&gt;
   background too. Core also has an `a:visited` rule (higher specificity&lt;br /&gt;
   than a plain `a` rule, since a pseudo-class counts the same as a class)&lt;br /&gt;
   that reasserts a near-black &amp;quot;visited&amp;quot; colour meant for a white&lt;br /&gt;
   background; since these tabs point at pages you&#039;ve almost always&lt;br /&gt;
   already visited, without an explicit `:visited` override here the text&lt;br /&gt;
   goes dark-on-dark. This can&#039;t be caught by reading getComputedStyle() in&lt;br /&gt;
   an automated check -- browsers deliberately report the *unvisited*&lt;br /&gt;
   colour to JS for privacy reasons, so it only shows up on an actual&lt;br /&gt;
   screen; verified with real rendered screenshots, including after&lt;br /&gt;
   genuinely visiting the linked pages first.&lt;br /&gt;
&lt;br /&gt;
   These are the &amp;quot;wiki authoring controls&amp;quot; utility tier -- deliberately&lt;br /&gt;
   smaller (--edfm-fs-utility) and quieter than personal-tools/search&lt;br /&gt;
   above them, sitting on their own background strip (see #mw-head above).&lt;br /&gt;
   Selected state stays orange (it&#039;s still real navigation, just&lt;br /&gt;
   secondary); unselected rests dim so the *selected* tab is the one that&lt;br /&gt;
   reads clearly. */&lt;br /&gt;
.vector-menu-tabs-legacy li {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected {&lt;br /&gt;
	background-image: none;&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	/* Polish pass: a small underline makes the selected tab unambiguous at&lt;br /&gt;
	   a glance instead of relying on the text colour change alone. */&lt;br /&gt;
	box-shadow: inset 0 -2px 0 var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited {&lt;br /&gt;
	background-color: transparent;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li a:hover,&lt;br /&gt;
.vector-menu-tabs-legacy li a:visited:hover {&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a,&lt;br /&gt;
.vector-menu-tabs-legacy li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-tabs-legacy li.new a,&lt;br /&gt;
.vector-menu-tabs-legacy li.new a:visited {&lt;br /&gt;
	color: var( --edfm-link-new );&lt;br /&gt;
}&lt;br /&gt;
/* &amp;quot;More&amp;quot; actions dropdown (#p-cactions) sits in the same tab row; same&lt;br /&gt;
   :visited gotcha applies to its menu items. */&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	border-left: none;&lt;br /&gt;
	padding-left: 8px;&lt;br /&gt;
	margin-left: 0;&lt;br /&gt;
	margin-bottom: 0;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:hover,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-heading:focus {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content a:visited {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-size: var( --edfm-fs-sidebar );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a,&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li.selected a:visited {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
.vector-menu-dropdown .vector-menu-content li:hover {&lt;br /&gt;
	background-color: var( --edfm-surface-4 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   CONTENT / ARTICLE SURFACE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-body,&lt;br /&gt;
.parsoid-body {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-sans );&lt;br /&gt;
}&lt;br /&gt;
#content {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Global Frontier/unofficial-project disclaimer (rendered via $wgSiteNotice,&lt;br /&gt;
   #siteNotice sits inside #content right before #firstHeading on every&lt;br /&gt;
   page). Previously inherited plain prose styling and read like the start&lt;br /&gt;
   of the article; restyled as a thin, quiet info line -- small text, a&lt;br /&gt;
   bottom rule, no italic-paragraph treatment -- so it reads as global&lt;br /&gt;
   utility chrome rather than article content, without moving or removing&lt;br /&gt;
   it (still the very first thing in the article surface, still contains&lt;br /&gt;
   the real &amp;quot;Full notice&amp;quot; link). */&lt;br /&gt;
#siteNotice {&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	line-height: 1.5;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-style: normal;&lt;br /&gt;
	padding-bottom: 0.7em;&lt;br /&gt;
	margin-bottom: 1.4rem;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice em, #siteNotice i {&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	font-style: italic;&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a {&lt;br /&gt;
	color: var( --edfm-link-external );&lt;br /&gt;
}&lt;br /&gt;
#siteNotice a:hover {&lt;br /&gt;
	color: var( --edfm-link-external-hover );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   10. JUMP NAVIGATION (table of contents)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A compact navigation strip/tile-grid rather than a traditional TOC box&lt;br /&gt;
   of small text links -- real MediaWiki anchors/markup untouched, this is&lt;br /&gt;
   all presentation. &amp;quot;Contents&amp;quot; is kept in the DOM for screen readers/&lt;br /&gt;
   no-JS/no-CSS fallback (more standard wording there anyway) and visually&lt;br /&gt;
   replaced with &amp;quot;Jump to&amp;quot; via ::before on the wrapper, with the real&lt;br /&gt;
   heading text hidden via font-size rather than display:none so it&lt;br /&gt;
   remains in the accessibility tree. */&lt;br /&gt;
#toc, .toc {&lt;br /&gt;
	background: none;&lt;br /&gt;
	border: none;&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	margin: 1.8rem 0;&lt;br /&gt;
}&lt;br /&gt;
.toctitle {&lt;br /&gt;
	position: relative;&lt;br /&gt;
	margin-bottom: 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.toctitle::before {&lt;br /&gt;
	content: &#039;Jump to&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.12em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
}&lt;br /&gt;
/* Core ships `.toc h2 { font-size: 100%; ... }` (mediawiki.skinning/toc/&lt;br /&gt;
   screen.less) at the exact same specificity (one class + one tag) as a&lt;br /&gt;
   plain `.toctitle h2` rule -- same &amp;quot;tie that doesn&#039;t resolve the way&lt;br /&gt;
   naive source order would suggest&amp;quot; gotcha documented elsewhere in this&lt;br /&gt;
   file. #toc&#039;s own ID makes this one unambiguous instead of relying on&lt;br /&gt;
   cascade order. */&lt;br /&gt;
#toc .toctitle h2,&lt;br /&gt;
.toc .toctitle h2 {&lt;br /&gt;
	font-size: 0 !important;&lt;br /&gt;
	line-height: 0;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	border: none;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: inline;&lt;br /&gt;
}&lt;br /&gt;
.toctitle h2::before,&lt;br /&gt;
.toctitle h2::after {&lt;br /&gt;
	content: none;&lt;br /&gt;
}&lt;br /&gt;
.toctogglelabel::before {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
}&lt;br /&gt;
/* Desktop: a real grid of clickable tiles (3 columns suits this site&#039;s&lt;br /&gt;
   typical 5-8 top-level sections well: commonly 2-3 rows) instead of one&lt;br /&gt;
   long line of small text. Each tile has its own surface, a visible&lt;br /&gt;
   boundary via the accent rail (not a full border -- see &amp;quot;stop using a&lt;br /&gt;
   border around everything&amp;quot;), and an obvious hover state. */&lt;br /&gt;
.toc &amp;gt; ul {&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: repeat( 4, 1fr );&lt;br /&gt;
	gap: 0.45rem;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
}&lt;br /&gt;
.toc li {&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08 density pass: reverted to side-by-side number/label (from the&lt;br /&gt;
   earlier &amp;quot;stacked number-above-label&amp;quot; polish pass) specifically to cut&lt;br /&gt;
   per-tile height -- with 12 sections on articles like The Dweller, the&lt;br /&gt;
   stacked layout meant the jump nav alone filled most of the first&lt;br /&gt;
   viewport. Row layout plus tighter padding/font-size gets noticeably&lt;br /&gt;
   more sections above the fold without dropping the numbering or shrinking&lt;br /&gt;
   tap targets below a comfortable size -- see the dedicated mobile padding&lt;br /&gt;
   bump further down for keeping touch targets safe on small screens&lt;br /&gt;
   specifically. Whole tile stays one real &amp;lt;a&amp;gt;, so it&#039;s still a single&lt;br /&gt;
   click/focus target and keyboard tab stop either way. */&lt;br /&gt;
.toc a {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.5em;&lt;br /&gt;
	height: 100%;&lt;br /&gt;
	box-sizing: border-box;&lt;br /&gt;
	padding: 0.5em 0.75em 0.5em 0.7em;&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	/* Left accent rail: matches the orange section numbers and gives each&lt;br /&gt;
	   jump tile a stronger EDFM navigation affordance without boxing the&lt;br /&gt;
	   entire card. */&lt;br /&gt;
	border-left: 4px solid var( --edfm-orange );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 255, 162, 26, 0.35 );&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	text-decoration: none;&lt;br /&gt;
	transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease, color 0.15s ease, transform 0.15s ease;&lt;br /&gt;
}&lt;br /&gt;
.toc a:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 );&lt;br /&gt;
	border-left-color: var( --edfm-cyan );&lt;br /&gt;
	box-shadow: inset 1px 0 0 rgba( 66, 199, 217, 0.45 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	transform: translateY( -1px );&lt;br /&gt;
}&lt;br /&gt;
/* Nested sub-levels (rare on this site so far) drop back to a plain&lt;br /&gt;
   indented block list inside their parent tile&#039;s grid cell rather than&lt;br /&gt;
   trying to stay gridded themselves. */&lt;br /&gt;
.toc ul ul {&lt;br /&gt;
	grid-column: unset;&lt;br /&gt;
	list-style: none;&lt;br /&gt;
	margin: 0.3em 0 0 1.2em;&lt;br /&gt;
	padding: 0;&lt;br /&gt;
	display: block;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul a {&lt;br /&gt;
	flex-direction: row;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	background: none;&lt;br /&gt;
	border-left-width: 1px;&lt;br /&gt;
	padding: 0.3em 0.6em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .tocnumber {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.toc ul ul .toctext {&lt;br /&gt;
	font-size: 0.85em;&lt;br /&gt;
}&lt;br /&gt;
.tocnumber {&lt;br /&gt;
	color: var( --edfm-orange );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: 1.05rem;&lt;br /&gt;
	line-height: 1;&lt;br /&gt;
}&lt;br /&gt;
.toctext {&lt;br /&gt;
	color: inherit;&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	line-height: 1.3;&lt;br /&gt;
}&lt;br /&gt;
/* 2026-08-08: rebalanced for the 4-column desktop default above -- was&lt;br /&gt;
   &amp;gt;1150px = 3 cols -&amp;gt; &amp;lt;=1150px = 2 cols -&amp;gt; &amp;lt;=560px = 1 col. A page with&lt;br /&gt;
   12 sections (e.g. The Dweller) now gets 3 rows at desktop width instead&lt;br /&gt;
   of 4, so a new &amp;lt;=860px step was added rather than dropping straight&lt;br /&gt;
   from 3 to 2 columns at 1150px, which left the same &amp;quot;Star systems,&lt;br /&gt;
   navigation and exploration&amp;quot;-style long labels cramped in the 1024px&lt;br /&gt;
   range this breakpoint set was originally tuned for. Order stays widest&lt;br /&gt;
   condition first, narrowest last, so cascade order matches the max-width&lt;br /&gt;
   overlap correctly at every width. */&lt;br /&gt;
@media ( max-width: 1150px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 3, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 860px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: repeat( 2, 1fr );&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 560px ) {&lt;br /&gt;
	.toc &amp;gt; ul {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* Single-column tiles are already full-width here, so there&#039;s no&lt;br /&gt;
	   density pressure left -- restore closer to the pre-2026-08-08&lt;br /&gt;
	   padding instead of the tighter desktop value, keeping tap targets&lt;br /&gt;
	   comfortable rather than compacting mobile just because desktop&lt;br /&gt;
	   compacted. */&lt;br /&gt;
	.toc a {&lt;br /&gt;
		padding: 0.7em 0.95em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   6. PANELS / CALLOUTS, and 11. ARTICLE METADATA / STATUS MODULE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Deliberately NOT defined here. .edfm-box / .edfm-panel* / .edfm-status* /&lt;br /&gt;
   .edfm-inline-flag / .edfm-related* are used exclusively by the&lt;br /&gt;
   editorial templates (see Template:Article status, Template:Draft&lt;br /&gt;
   warning, Template:Related articles, etc.), which already load&lt;br /&gt;
   Template:EDFM style/styles.css themselves via &amp;lt;templatestyles&amp;gt;.&lt;br /&gt;
   Defining the same class names in both this file and that one would&lt;br /&gt;
   leave their relative precedence dependent on unclear/unstable ordering&lt;br /&gt;
   between a ResourceLoader &amp;quot;site&amp;quot; stylesheet and a TemplateStyles-injected&lt;br /&gt;
   &amp;lt;style&amp;gt; tag -- rather than rely on that, there is exactly one definition&lt;br /&gt;
   of each, living in Template:EDFM style/styles.css. That file freely uses&lt;br /&gt;
   the --edfm-* custom properties defined above; custom properties resolve&lt;br /&gt;
   through the DOM regardless of which stylesheet declared vs references&lt;br /&gt;
   them, so this split costs nothing. */&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   7. TABLES (wikitables, and Special: pages&#039; tables)&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
table.wikitable,&lt;br /&gt;
table.mw-datatable {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-size: var( --edfm-fs-body );&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; th,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; th {&lt;br /&gt;
	background-color: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	text-align: left;&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
table.wikitable &amp;gt; tr &amp;gt; td,&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr &amp;gt; td {&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.6em 0.8em;&lt;br /&gt;
}&lt;br /&gt;
/* Subtle alternating row treatment -- helps scanning wide/dense reference&lt;br /&gt;
   tables without turning them into cards. */&lt;br /&gt;
table.wikitable &amp;gt; tbody &amp;gt; tr:nth-child( even ),&lt;br /&gt;
table.wikitable &amp;gt; * &amp;gt; tr:nth-child( even ) {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   15. FOOTER&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* A real branded footer: a small wordmark line (pure CSS generated&lt;br /&gt;
   content -- decorative branding only, redundant with the sidebar logo&lt;br /&gt;
   already visible, so nothing load-bearing depends on it being&lt;br /&gt;
   selectable), a top rule with more separation from the article above it,&lt;br /&gt;
   and MediaWiki&#039;s real info/places/icon links laid out on a clean grid&lt;br /&gt;
   with the badges aligned as a group rather than floating alone. */&lt;br /&gt;
.mw-footer {&lt;br /&gt;
	margin-left: calc( var( --edfm-sidebar-clear ) + var( --edfm-gutter ) );&lt;br /&gt;
	margin-right: var( --edfm-gutter );&lt;br /&gt;
	margin-top: 2.5rem;&lt;br /&gt;
	padding-top: 1.6rem;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border );&lt;br /&gt;
	display: grid;&lt;br /&gt;
	grid-template-columns: 1fr auto;&lt;br /&gt;
	grid-template-areas: &amp;quot;brand brand&amp;quot; &amp;quot;info icons&amp;quot; &amp;quot;places icons&amp;quot;;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	column-gap: 2em;&lt;br /&gt;
	row-gap: 0.4rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer::before {&lt;br /&gt;
	grid-area: brand;&lt;br /&gt;
	content: &#039;EDFM // Elite Dangerous Field Manual&#039;;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: 0.85rem;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	color: var( --edfm-text-muted );&lt;br /&gt;
	margin-bottom: 0.5rem;&lt;br /&gt;
}&lt;br /&gt;
.mw-footer,&lt;br /&gt;
.mw-footer li,&lt;br /&gt;
#footer-info,&lt;br /&gt;
#footer-info li {&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	border-color: var( --edfm-border-soft );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
}&lt;br /&gt;
#footer-info {&lt;br /&gt;
	grid-area: info;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	line-height: 1.6;&lt;br /&gt;
}&lt;br /&gt;
#footer-places {&lt;br /&gt;
	grid-area: places;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
}&lt;br /&gt;
/* Same &amp;quot;small uppercase label&amp;quot; treatment used for tags/meta text&lt;br /&gt;
   elsewhere, so these read as deliberate EDFM navigation rather than&lt;br /&gt;
   default MediaWiki footer links. */&lt;br /&gt;
#footer-places li {&lt;br /&gt;
	display: inline-block;&lt;br /&gt;
	margin-right: 1.4em;&lt;br /&gt;
}&lt;br /&gt;
#footer-places a {&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	letter-spacing: 0.03em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	font-size: 0.78rem;&lt;br /&gt;
}&lt;br /&gt;
/* A left rule ties the badges to the rest of the footer instead of&lt;br /&gt;
   letting them read as detached/floating in their own space. */&lt;br /&gt;
#footer-icons {&lt;br /&gt;
	grid-area: icons;&lt;br /&gt;
	align-self: center;&lt;br /&gt;
	display: flex;&lt;br /&gt;
	gap: 0.75em;&lt;br /&gt;
	margin: 0;&lt;br /&gt;
	padding-left: 1.6em;&lt;br /&gt;
	border-left: 1px solid var( --edfm-border-soft );&lt;br /&gt;
}&lt;br /&gt;
#footer-icons img {&lt;br /&gt;
	background: var( --edfm-text );&lt;br /&gt;
	border-radius: 2px;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		grid-template-areas: &amp;quot;brand&amp;quot; &amp;quot;info&amp;quot; &amp;quot;places&amp;quot; &amp;quot;icons&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	#footer-icons {&lt;br /&gt;
		margin-top: 0.7em;&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
		border-left: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
		padding-top: 0.7em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   MISC MediaWiki UI chrome that ships with light backgrounds by default&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.catlinks {&lt;br /&gt;
	background: none !important;&lt;br /&gt;
	border: none !important;&lt;br /&gt;
	border-top: 1px solid var( --edfm-border-soft ) !important;&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	padding: 0.9em 0 0 0 !important;&lt;br /&gt;
	margin-top: 1.8rem !important;&lt;br /&gt;
}&lt;br /&gt;
div.thumbinner {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.thumbimage {&lt;br /&gt;
	background-color: var( --edfm-surface-1 );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* Code / preformatted text (syntaxhighlight uses its own Pygments theme,&lt;br /&gt;
   set via $wgPygmentsStyle in LocalSettings.php; this covers plain&lt;br /&gt;
   &amp;lt;pre&amp;gt;/&amp;lt;code&amp;gt; that isn&#039;t Pygments-highlighted). */&lt;br /&gt;
pre, code, .mw-code {&lt;br /&gt;
	background-color: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	border-color: var( --edfm-border );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   GENERIC INFOBOX -- see Template:Infobox&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.edfm-infobox {&lt;br /&gt;
	float: right;&lt;br /&gt;
	clear: right;&lt;br /&gt;
	width: 310px;&lt;br /&gt;
	margin: 0 0 1.2em 1.2em;&lt;br /&gt;
	border: 1px solid var( --edfm-border );&lt;br /&gt;
	border-top: 2px solid var( --edfm-orange );&lt;br /&gt;
	background: var( --edfm-surface-2 );&lt;br /&gt;
	color: var( --edfm-text );&lt;br /&gt;
	font-size: 0.92rem;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-title {&lt;br /&gt;
	background: var( --edfm-orange );&lt;br /&gt;
	color: var( --edfm-bg-deep );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	letter-spacing: 0.04em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em 0.6em;&lt;br /&gt;
	clip-path: polygon( 0 0, calc( 100% - 14px ) 0, 100% 14px, 100% 100%, 0 100% );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image {&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.6em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-image-placeholder {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	justify-content: center;&lt;br /&gt;
	height: 160px;&lt;br /&gt;
	border: 1px dashed var( --edfm-border );&lt;br /&gt;
	background: var( --edfm-surface-1 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	letter-spacing: 0.06em;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
	padding: 0.5em;&lt;br /&gt;
}&lt;br /&gt;
/* Optional section label (Template:Infobox&#039;s |groupN=) splitting a long&lt;br /&gt;
   infobox into scannable groups, e.g. Engineer infoboxes into &amp;quot;ENGINEER&amp;quot;&lt;br /&gt;
   and &amp;quot;ACCESS&amp;quot; (2026-08-08, part of the Engineer article layout pass). A&lt;br /&gt;
   shaded band with a bottom rule rather than a full boxed sub-header --&lt;br /&gt;
   consistent with .edfm-infobox-row&#039;s own bottom-rule-only separator, not&lt;br /&gt;
   a new visual language. */&lt;br /&gt;
.edfm-infobox-group {&lt;br /&gt;
	background: var( --edfm-surface-3 );&lt;br /&gt;
	color: var( --edfm-text-dim );&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-size: var( --edfm-fs-utility );&lt;br /&gt;
	letter-spacing: 0.08em;&lt;br /&gt;
	text-transform: uppercase;&lt;br /&gt;
	padding: 0.35em 0.7em;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row {&lt;br /&gt;
	display: flex;&lt;br /&gt;
	border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	padding: 0.45em 0.7em;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-row:last-child {&lt;br /&gt;
	border-bottom: none;&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-label {&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-size: var( --edfm-fs-meta );&lt;br /&gt;
	width: 40%;&lt;br /&gt;
	flex-shrink: 0;&lt;br /&gt;
	color: var( --edfm-cyan );&lt;br /&gt;
}&lt;br /&gt;
.edfm-infobox-value {&lt;br /&gt;
	width: 60%;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 640px ) {&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		float: none;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		margin: 1em 0;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   14. MOBILE&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
/* Vector legacy has NO built-in responsive breakpoint at all (unlike&lt;br /&gt;
   Vector 2022) -- its entire header region (#mw-head, tabs, search,&lt;br /&gt;
   personal tools/login) is built with absolute positioning and floats&lt;br /&gt;
   that all assume a fixed-width sidebar reserving 10-11em on the left,&lt;br /&gt;
   AND the page&#039;s actual DOM order is content-then-navigation-then-footer&lt;br /&gt;
   (the absolute positioning was doing double duty: both moving the header&lt;br /&gt;
   visually to the top AND compensating for that DOM order). Simply&lt;br /&gt;
   removing the positioning stacks things in DOM order, which reads oddly&lt;br /&gt;
   on a phone (article text, then the nav/sidebar, then the footer).&lt;br /&gt;
   Confirmed the actual DOM structure directly (not guessed): &amp;lt;body&amp;gt;&#039;s&lt;br /&gt;
   real children are #mw-page-base, #mw-head-base, #content,&lt;br /&gt;
   #mw-navigation (which itself contains #mw-head then #mw-panel, already&lt;br /&gt;
   in the right relative order), #footer. Since all four major regions are&lt;br /&gt;
   direct children of &amp;lt;body&amp;gt;, flexbox `order` on &amp;lt;body&amp;gt; can reorder them&lt;br /&gt;
   properly without needing to touch the DOM itself.&lt;br /&gt;
   Result: header/search/tabs, then sidebar nav, then content, then&lt;br /&gt;
   footer -- a plain stacked mobile layout, not a collapsible hamburger&lt;br /&gt;
   menu, but a correct and readable order. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-direction: column;&lt;br /&gt;
	}&lt;br /&gt;
	/* #mw-head-base ships with `margin-top: -5em` in Vector legacy&#039;s own&lt;br /&gt;
	   CSS -- a trick to sit it behind the absolutely-positioned header.&lt;br /&gt;
	   Now that the header is a normal flex sibling, that negative margin&lt;br /&gt;
	   drags everything after it upward. Neutralize both decorative&lt;br /&gt;
	   strips. */&lt;br /&gt;
	#mw-page-base,&lt;br /&gt;
	#mw-head-base {&lt;br /&gt;
		order: 0;&lt;br /&gt;
		height: 0;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		min-height: 0;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		order: 1;&lt;br /&gt;
	}&lt;br /&gt;
	#content {&lt;br /&gt;
		order: 2;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		order: 3;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		background-image: none;&lt;br /&gt;
		background-color: var( --edfm-surface-2 );&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		clear: both;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation {&lt;br /&gt;
		margin-top: 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	/* Core Vector legacy floats each tab/dropdown portlet&lt;br /&gt;
	   (.vector-menu-tabs-legacy for Page/Discussion and Read/View&lt;br /&gt;
	   source/View history, .vector-menu-dropdown for the More menu) AND&lt;br /&gt;
	   floats every &amp;lt;li&amp;gt; inside their &amp;lt;ul&amp;gt;, with no wrapping at all -- at&lt;br /&gt;
	   narrow widths the labels just overflow and overlap each other&lt;br /&gt;
	   (confirmed with a real screenshot: &amp;quot;View source&amp;quot; and &amp;quot;More&amp;quot;&lt;br /&gt;
	   overlapped instead of wrapping to a new line). Switching the&lt;br /&gt;
	   portlets to inline-block and their tab lists to flex-wrap lets them&lt;br /&gt;
	   reflow onto as many rows as needed instead. */&lt;br /&gt;
	#left-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-tabs-legacy,&lt;br /&gt;
	#right-navigation .vector-menu-dropdown {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
		vertical-align: top;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		float: none;&lt;br /&gt;
		display: flex;&lt;br /&gt;
		flex-wrap: wrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li {&lt;br /&gt;
		float: none;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		position: static;&lt;br /&gt;
		text-align: right;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		right: auto !important;&lt;br /&gt;
		top: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal ul {&lt;br /&gt;
		padding-left: 0;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box {&lt;br /&gt;
		float: none;&lt;br /&gt;
		margin: 0.5em 1em;&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-search-box-inner {&lt;br /&gt;
		width: auto;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: static;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0.5em 1em;&lt;br /&gt;
		float: none;&lt;br /&gt;
		border-top: 1px solid var( --edfm-border );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body,&lt;br /&gt;
	#mw-data-after-content,&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		margin-left: 0 !important;&lt;br /&gt;
		margin-right: 0 !important;&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		margin-top: 0;&lt;br /&gt;
		border-width: 0;&lt;br /&gt;
		padding: 1em;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-status-details {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
	}&lt;br /&gt;
	/* .toc &amp;gt; ul column count is NOT overridden here -- the dedicated&lt;br /&gt;
	   1150px/560px breakpoints above already cover every width down to&lt;br /&gt;
	   the smallest phones; duplicating a rule here previously fought&lt;br /&gt;
	   those (same specificity, this position in the cascade would have&lt;br /&gt;
	   won and wrongly forced 1 column as low as 561px). */&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: 1.6rem;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		margin-top: 2.25rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-eyebrow {&lt;br /&gt;
		padding-top: 0.9em;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   16. OOUI DIALOGS -- VisualEditor&#039;s save dialog, and any other OOUI&lt;br /&gt;
   dialog (delete/move/protect confirmations, special-page dialogs).&lt;br /&gt;
   These render via OOUI&#039;s own bundled WikimediaUI theme stylesheet,&lt;br /&gt;
   entirely outside the .edfm-* component system this file otherwise&lt;br /&gt;
   covers, so without this they show up starkly white against the rest of&lt;br /&gt;
   the dark-themed site regardless of any variable/token used elsewhere in&lt;br /&gt;
   this file. !important is justified the same way as the h1-h6 fix above:&lt;br /&gt;
   OOUI&#039;s own stylesheet loads with equal-or-higher effective specificity,&lt;br /&gt;
   and this is a correctness/contrast fix, not decoration.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-window-frame {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog {&lt;br /&gt;
	background: rgba( 7, 9, 11, 0.75 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-navigation,&lt;br /&gt;
.oo-ui-window-head,&lt;br /&gt;
.oo-ui-window-foot {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-processDialog-title,&lt;br /&gt;
.oo-ui-labelElement-label,&lt;br /&gt;
.oo-ui-fieldLayout-header,&lt;br /&gt;
.oo-ui-fieldLayout .oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-inputWidget-input {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.ve-ui-mwSaveDialog-options,&lt;br /&gt;
.oo-ui-panelLayout,&lt;br /&gt;
.oo-ui-window-body {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-popupWidget-popup {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-buttonElement:not( .oo-ui-flaggedElement-primary ) &amp;gt; .oo-ui-buttonElement-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   17. OOUI TOOLBAR -- VisualEditor&#039;s persistent editing toolbar and its&lt;br /&gt;
   dropdown menus (Cite, Insert, paragraph style, etc.), and the equivalent&lt;br /&gt;
   toolbar/popups used when editing a single section. Same root cause as&lt;br /&gt;
   16. OOUI DIALOGS above (OOUI&#039;s own bundled theme, not touched by&lt;br /&gt;
   anything else in this file), found separately because it&#039;s a different&lt;br /&gt;
   set of OOUI classes (toolbar chrome, not dialog chrome). Icons are not&lt;br /&gt;
   overridden here and don&#039;t need to be -- they&#039;re currentColor-based, so&lt;br /&gt;
   they pick up the text colour set below automatically.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-toolbar-bar,&lt;br /&gt;
.oo-ui-toolGroup-tools,&lt;br /&gt;
.oo-ui-popupToolGroup-tools {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-tool-title,&lt;br /&gt;
.oo-ui-tool-link,&lt;br /&gt;
.oo-ui-toolGroup-tools .oo-ui-optionWidget,&lt;br /&gt;
.oo-ui-menuOptionWidget,&lt;br /&gt;
.oo-ui-labelElement-label {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-optionWidget.oo-ui-optionWidget-selected,&lt;br /&gt;
.oo-ui-optionWidget:hover,&lt;br /&gt;
.oo-ui-tool:hover .oo-ui-tool-link {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   18. OOUI GENERIC MENUS -- .oo-ui-menuSelectWidget is OOUI&#039;s general&lt;br /&gt;
   dropdown/autocomplete menu class (paragraph-style picker, citation-type&lt;br /&gt;
   picker, link/media search suggestions, etc.) -- a different class from&lt;br /&gt;
   the toolbar-specific popups in 17. above, confirmed separately via&lt;br /&gt;
   computed-style inspection to default to the same white OOUI theme&lt;br /&gt;
   background.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-menuSelectWidget {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.oo-ui-menuOptionWidget.oo-ui-optionWidget-highlighted,&lt;br /&gt;
.oo-ui-menuOptionWidget:hover {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   19. OOUI ICONS -- the toolbar/menu icons themselves (Bold, link, list,&lt;br /&gt;
   Cite, undo/redo, etc.) are rendered as background-image SVGs with a&lt;br /&gt;
   colour baked into the SVG markup, not currentColor-based masks -- so&lt;br /&gt;
   16-18 above (which only recolour backgrounds/text) left them dark and&lt;br /&gt;
   low-contrast against the now-dark surfaces. OOUI ships its own fix for&lt;br /&gt;
   exactly this, gated behind a narrow accessibility media query&lt;br /&gt;
   (forced-colors + prefers-color-scheme: dark) that doesn&#039;t apply to this&lt;br /&gt;
   site&#039;s own always-on dark theme -- reusing that exact technique&lt;br /&gt;
   unconditionally rather than inventing a different one. `:not(&lt;br /&gt;
   .oo-ui-image-invert )` is OOUI&#039;s own exclusion for icons already meant&lt;br /&gt;
   to render light (e.g. on the orange primary-button background) --&lt;br /&gt;
   inverting those too would flip them back to dark.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.oo-ui-iconElement-icon:not( .oo-ui-image-invert ),&lt;br /&gt;
.oo-ui-indicatorElement-indicator:not( .oo-ui-image-invert ) {&lt;br /&gt;
	filter: invert( 1 ) hue-rotate( 180deg );&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   20. EDIT SOURCE FORM -- MediaWiki core + WikiEditor + CodeMirror&lt;br /&gt;
&lt;br /&gt;
   The source editor is not covered by the article/component selectors above:&lt;br /&gt;
   `action=edit` loads core edit-form CSS, WikiEditor chrome, and sometimes&lt;br /&gt;
   CodeMirror with their own light neutral surfaces. Force the same EDFM dark&lt;br /&gt;
   surface stack here so the source page no longer flashes as a white island.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
.mw-editform,&lt;br /&gt;
#editform,&lt;br /&gt;
#toolbar,&lt;br /&gt;
.editOptions,&lt;br /&gt;
.mw-editTools,&lt;br /&gt;
.mw-summary-preview,&lt;br /&gt;
.mw-datatable,&lt;br /&gt;
.wikiEditor-ui,&lt;br /&gt;
.wikiEditor-ui-view,&lt;br /&gt;
.wikiEditor-ui-text,&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-top,&lt;br /&gt;
.wikiEditor-ui-controls,&lt;br /&gt;
.wikiEditor-ui-tabs,&lt;br /&gt;
.wikiEditor-ui-buttons,&lt;br /&gt;
.CodeMirror,&lt;br /&gt;
.CodeMirror-scroll {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-editform textarea,&lt;br /&gt;
#wpTextbox1,&lt;br /&gt;
#wpSummary,&lt;br /&gt;
#wpSummaryWidget input,&lt;br /&gt;
#editform input[type=&#039;text&#039;],&lt;br /&gt;
#editform input[type=&#039;search&#039;],&lt;br /&gt;
#editform textarea,&lt;br /&gt;
.wikiEditor-ui-text textarea,&lt;br /&gt;
.CodeMirror-code,&lt;br /&gt;
.CodeMirror-lines,&lt;br /&gt;
.CodeMirror pre {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	caret-color: var( --edfm-orange-bright );&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar,&lt;br /&gt;
.wikiEditor-ui-toolbar .group,&lt;br /&gt;
.wikiEditor-ui-toolbar .tabs,&lt;br /&gt;
.wikiEditor-ui-toolbar .page,&lt;br /&gt;
.wikiEditor-ui-toolbar .sections,&lt;br /&gt;
.wikiEditor-ui-toolbar .section,&lt;br /&gt;
.wikiEditor-ui-toolbar .options,&lt;br /&gt;
.wikiEditor-ui-toolbar .booklet,&lt;br /&gt;
.wikiEditor-ui-toolbar .pages,&lt;br /&gt;
.CodeMirror-gutters {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text-muted ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar a,&lt;br /&gt;
.wikiEditor-ui-toolbar .label,&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a,&lt;br /&gt;
.mw-editTools a,&lt;br /&gt;
.editOptions label,&lt;br /&gt;
.mw-editform label,&lt;br /&gt;
.CodeMirror-linenumber {&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab a:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-button:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .tool-select:hover,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table th,&lt;br /&gt;
.wikiEditor-ui-toolbar .page-table td,&lt;br /&gt;
.CodeMirror-activeline-background {&lt;br /&gt;
	background: var( --edfm-surface-3 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
}&lt;br /&gt;
.wikiEditor-ui-toolbar .tab.current a,&lt;br /&gt;
.wikiEditor-ui-toolbar .section-main,&lt;br /&gt;
.CodeMirror-selected {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-cursor {&lt;br /&gt;
	border-left-color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.CodeMirror-matchingbracket {&lt;br /&gt;
	color: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   21. FILE PAGE CHROME -- #filetoc (the File / File history / File usage /&lt;br /&gt;
   Metadata nav on File: description pages) is defined in MediaWiki core&#039;s&lt;br /&gt;
   mediawiki.action.view.filepage.less, entirely separate from both the&lt;br /&gt;
   .edfm-* system and the OOUI fixes in 16-19 above -- a different&lt;br /&gt;
   subsystem again, only loaded on File: pages, which is why it was never&lt;br /&gt;
   touched by anything else in this file. Link colour inside it already&lt;br /&gt;
   correctly inherits the site&#039;s normal link blue; only the light neutral&lt;br /&gt;
   background/border needed overriding.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#filetoc {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
/* ==========================================================================&lt;br /&gt;
   22. FILE PAGE: METADATA TABLE + MEDIA VIEWER BUTTON -- #mw_metadata is&lt;br /&gt;
   the EXIF-style metadata table (separate from the File history table&lt;br /&gt;
   above -- that one already carries the .wikitable class and picked up&lt;br /&gt;
   dark styling from 7. TABLES automatically; this one doesn&#039;t have that&lt;br /&gt;
   class, so it never matched). The &amp;quot;Open in Media Viewer&amp;quot; button is a&lt;br /&gt;
   Codex component (MultimediaViewer extension) -- a third distinct&lt;br /&gt;
   styling subsystem from OOUI and MediaWiki core skinning, again never&lt;br /&gt;
   touched by anything else in this file.&lt;br /&gt;
   ========================================================================== */&lt;br /&gt;
#mw_metadata th,&lt;br /&gt;
#mw_metadata td {&lt;br /&gt;
	background: var( --edfm-surface-2 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-mmv-view-expanded.cdx-button {&lt;br /&gt;
	background: var( --edfm-surface-4 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   23. RUNE-WIKI-INSPIRED MOBILE APP SHELL&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
/* Inspired by RuneScape.wiki&#039;s mobile ergonomics -- persistent top app bar,&lt;br /&gt;
   large touch targets, off-canvas navigation, search-forward layout, and&lt;br /&gt;
   single-column readable article flow -- while preserving EDFM&#039;s dark field&lt;br /&gt;
   manual identity and not copying RuneScape.wiki assets/CSS. */&lt;br /&gt;
.edfm-mobile-appbar,&lt;br /&gt;
.edfm-mobile-scrim {&lt;br /&gt;
	display: none;&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	html {&lt;br /&gt;
		-webkit-text-size-adjust: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	body {&lt;br /&gt;
		background: var( --edfm-bg-page );&lt;br /&gt;
		overflow-x: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open {&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-appbar {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: 48px 1fr 48px;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1200;&lt;br /&gt;
		min-height: 56px;&lt;br /&gt;
		padding: 0 0.35rem;&lt;br /&gt;
		background:&lt;br /&gt;
			linear-gradient( 90deg, rgba( 255, 138, 0, 0.18 ), transparent 38% ),&lt;br /&gt;
			var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 0 10px 24px rgba( 0, 0, 0, 0.35 );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		min-width: 0;&lt;br /&gt;
		color: var( --edfm-text ) !important;&lt;br /&gt;
		font-family: var( --edfm-mono );&lt;br /&gt;
		font-weight: 800;&lt;br /&gt;
		letter-spacing: 0.05em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		overflow: hidden;&lt;br /&gt;
		text-overflow: ellipsis;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM // &#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button,&lt;br /&gt;
	.edfm-mobile-search-button,&lt;br /&gt;
	.edfm-mobile-close-button {&lt;br /&gt;
		appearance: none;&lt;br /&gt;
		-webkit-appearance: none;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		justify-content: center;&lt;br /&gt;
		min-width: 44px;&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-radius: 0;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
		font: 700 1.5rem/1 var( --edfm-mono );&lt;br /&gt;
		cursor: pointer;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-search-button:focus-visible,&lt;br /&gt;
	.edfm-mobile-close-button:focus-visible {&lt;br /&gt;
		outline: 2px solid var( --edfm-cyan );&lt;br /&gt;
		outline-offset: -4px;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-menu-button::before {&lt;br /&gt;
		content: &#039;☰&#039;;&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-search-button::before {&lt;br /&gt;
		content: &#039;⌕&#039;;&lt;br /&gt;
		font-size: 1.85rem;&lt;br /&gt;
		color: var( --edfm-cyan );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-close-button::before {&lt;br /&gt;
		content: &#039;×&#039;;&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-scrim {&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		inset: 0;&lt;br /&gt;
		z-index: 1000;&lt;br /&gt;
		background: rgba( 0, 0, 0, 0.58 );&lt;br /&gt;
		opacity: 0;&lt;br /&gt;
		pointer-events: none;&lt;br /&gt;
		transition: opacity 0.18s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open .edfm-mobile-scrim {&lt;br /&gt;
		opacity: 1;&lt;br /&gt;
		pointer-events: auto;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-navigation {&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		box-shadow: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head {&lt;br /&gt;
		position: relative;&lt;br /&gt;
		z-index: 1100;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box {&lt;br /&gt;
		display: none;&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.65rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-top: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head .vector-search-box {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head .vector-search-box-inner,&lt;br /&gt;
	#mw-head #searchform {&lt;br /&gt;
		width: 100%;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-head #searchInput {&lt;br /&gt;
		min-height: 44px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		width: 100%;&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
	}&lt;br /&gt;
	#left-navigation,&lt;br /&gt;
	#right-navigation {&lt;br /&gt;
		padding: 0 0.45rem 0.35rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy ul {&lt;br /&gt;
		flex-wrap: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.vector-menu-tabs-legacy li a,&lt;br /&gt;
	.vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	.vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 36px;&lt;br /&gt;
		display: inline-flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
	}&lt;br /&gt;
	#p-personal {&lt;br /&gt;
		display: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel {&lt;br /&gt;
		position: fixed;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		left: 0;&lt;br /&gt;
		z-index: 1300;&lt;br /&gt;
		width: min( 82vw, 22rem );&lt;br /&gt;
		height: 100dvh;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0;&lt;br /&gt;
		background: var( --edfm-surface-1 );&lt;br /&gt;
		border: 0;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border );&lt;br /&gt;
		box-shadow: 18px 0 36px rgba( 0, 0, 0, 0.45 );&lt;br /&gt;
		overflow-y: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		transform: translateX( -105% );&lt;br /&gt;
		transition: transform 0.2s ease;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-menu-open #mw-panel {&lt;br /&gt;
		transform: translateX( 0 );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel::before {&lt;br /&gt;
		content: &#039;EDFM Navigation&#039;;&lt;br /&gt;
		display: block;&lt;br /&gt;
		position: sticky;&lt;br /&gt;
		top: 0;&lt;br /&gt;
		z-index: 1;&lt;br /&gt;
		padding: 1rem 3.4rem 1rem 1rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border );&lt;br /&gt;
		color: var( --edfm-orange );&lt;br /&gt;
		font: 800 0.86rem/1.2 var( --edfm-mono );&lt;br /&gt;
		letter-spacing: 0.08em;&lt;br /&gt;
		text-transform: uppercase;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-mobile-close-button {&lt;br /&gt;
		position: absolute;&lt;br /&gt;
		top: 0.3rem;&lt;br /&gt;
		right: 0.35rem;&lt;br /&gt;
		z-index: 2;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .portal,&lt;br /&gt;
	#mw-panel .vector-menu-portal {&lt;br /&gt;
		margin: 0;&lt;br /&gt;
		padding: 0.75rem 0;&lt;br /&gt;
		border-bottom: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-heading {&lt;br /&gt;
		margin: 0.25rem 1rem 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:visited {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: center;&lt;br /&gt;
		min-height: 46px;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
		padding: 0.55rem 1rem;&lt;br /&gt;
		border-left: 3px solid transparent;&lt;br /&gt;
		color: var( --edfm-text-muted );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		text-decoration: none;&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:hover,&lt;br /&gt;
	#mw-panel .vector-menu-content-list li a:focus {&lt;br /&gt;
		background: var( --edfm-surface-3 );&lt;br /&gt;
		border-left-color: var( --edfm-cyan );&lt;br /&gt;
		color: var( --edfm-text );&lt;br /&gt;
	}&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a,&lt;br /&gt;
	#mw-panel .edfm-nav-current &amp;gt; a:visited {&lt;br /&gt;
		background: rgba( 255, 138, 0, 0.12 );&lt;br /&gt;
		border-left-color: var( --edfm-orange );&lt;br /&gt;
		color: var( --edfm-orange ) !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body {&lt;br /&gt;
		padding: clamp( 1rem, 4vw, 1.35rem );&lt;br /&gt;
		font-size: 1rem;&lt;br /&gt;
		line-height: 1.68;&lt;br /&gt;
	}&lt;br /&gt;
	#siteNotice {&lt;br /&gt;
		margin-bottom: 1rem;&lt;br /&gt;
		padding-bottom: 0.85rem;&lt;br /&gt;
	}&lt;br /&gt;
	#firstHeading {&lt;br /&gt;
		font-size: clamp( 1.65rem, 8vw, 2.25rem );&lt;br /&gt;
		line-height: 1.1;&lt;br /&gt;
		letter-spacing: -0.015em;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body h2 {&lt;br /&gt;
		font-size: 1.18rem;&lt;br /&gt;
		line-height: 1.25;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body p,&lt;br /&gt;
	.mw-body li {&lt;br /&gt;
		max-width: none;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body img,&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .thumbinner,&lt;br /&gt;
	.mw-body .thumbimage {&lt;br /&gt;
		max-width: 100% !important;&lt;br /&gt;
		height: auto !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-body .thumb,&lt;br /&gt;
	.mw-body .tright,&lt;br /&gt;
	.mw-body .tleft {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		clear: both;&lt;br /&gt;
		width: auto !important;&lt;br /&gt;
		margin: 1rem 0 !important;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		max-width: 100%;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		white-space: nowrap;&lt;br /&gt;
	}&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.wikitable td,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable th,&lt;br /&gt;
	.mw-parser-output &amp;gt; table.mw-datatable td {&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		min-width: 8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox {&lt;br /&gt;
		font-size: 0.95rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		display: grid;&lt;br /&gt;
		grid-template-columns: minmax( 7.5rem, 40% ) 1fr;&lt;br /&gt;
		gap: 0.5rem;&lt;br /&gt;
		padding: 0.65rem 0.8rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-label,&lt;br /&gt;
	.edfm-infobox-value {&lt;br /&gt;
		width: auto;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tbody,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type tr,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th,&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		display: block;&lt;br /&gt;
		width: 100% !important;&lt;br /&gt;
		box-sizing: border-box;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type {&lt;br /&gt;
		overflow: visible;&lt;br /&gt;
		white-space: normal;&lt;br /&gt;
		background: transparent;&lt;br /&gt;
		border: 0;&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type th {&lt;br /&gt;
		margin-top: 0.75rem;&lt;br /&gt;
		border-left: 3px solid var( --edfm-orange );&lt;br /&gt;
	}&lt;br /&gt;
	body.page-Main_Page .mw-parser-output &amp;gt; table.wikitable:first-of-type td {&lt;br /&gt;
		margin-bottom: 0.75rem;&lt;br /&gt;
		background: var( --edfm-surface-2 );&lt;br /&gt;
		border-left: 3px solid var( --edfm-border );&lt;br /&gt;
	}&lt;br /&gt;
	.mw-footer {&lt;br /&gt;
		padding: 1rem;&lt;br /&gt;
		margin-top: 1.5rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
@media ( max-width: 430px ) {&lt;br /&gt;
	.edfm-mobile-brand::before {&lt;br /&gt;
		content: &#039;EDFM&#039;;&lt;br /&gt;
		margin-right: 0.45rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-mobile-brand {&lt;br /&gt;
		font-size: 0.88rem;&lt;br /&gt;
	}&lt;br /&gt;
	.edfm-infobox-row {&lt;br /&gt;
		grid-template-columns: 1fr;&lt;br /&gt;
		gap: 0.2rem;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* 22a. Mobile action tabs refinement: keep Vector&#039;s page/discussion/read/&lt;br /&gt;
   source/history controls available, but put them on one compact horizontal&lt;br /&gt;
   action rail so the first phone viewport feels like a real mobile app shell&lt;br /&gt;
   instead of two stacked desktop tab bars. */&lt;br /&gt;
@media ( max-width: 800px ) {&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #mw-head {&lt;br /&gt;
		display: flex;&lt;br /&gt;
		align-items: stretch;&lt;br /&gt;
		gap: 0;&lt;br /&gt;
		overflow-x: auto;&lt;br /&gt;
		overflow-y: hidden;&lt;br /&gt;
		-webkit-overflow-scrolling: touch;&lt;br /&gt;
		scrollbar-width: thin;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #left-navigation,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) #right-navigation {&lt;br /&gt;
		flex: 0 0 auto;&lt;br /&gt;
		clear: none !important;&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		width: auto;&lt;br /&gt;
		padding: 0 0.25rem;&lt;br /&gt;
		margin: 0 !important;&lt;br /&gt;
		border-right: 1px solid var( --edfm-border-soft );&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown {&lt;br /&gt;
		float: none !important;&lt;br /&gt;
		display: inline-block;&lt;br /&gt;
	}&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-tabs-legacy li a:visited,&lt;br /&gt;
	body:not( .edfm-mobile-search-open ) .vector-menu-dropdown .vector-menu-heading {&lt;br /&gt;
		min-height: 40px;&lt;br /&gt;
		padding-left: 0.55rem;&lt;br /&gt;
		padding-right: 0.55rem;&lt;br /&gt;
		font-size: 0.68rem;&lt;br /&gt;
	}&lt;br /&gt;
	body.edfm-mobile-search-open #mw-head {&lt;br /&gt;
		display: block;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   24. HARD OVERRIDE: JUMP TILE LEFT RAIL&lt;br /&gt;
&lt;br /&gt;
   The earlier border-left rail can be swallowed by ResourceLoader/cascade or&lt;br /&gt;
   visually read as part of the tile edge. Draw the rail as a high-specificity&lt;br /&gt;
   gradient on the actual top-level TOC anchors so it is unmistakable on the&lt;br /&gt;
   live jump grid.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-orange ) 0, var( --edfm-orange ) 6px, transparent 6px ) !important;&lt;br /&gt;
	border-left: 0 !important;&lt;br /&gt;
	padding-left: 1rem !important;&lt;br /&gt;
}&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
#toc.toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output #toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:hover,&lt;br /&gt;
.mw-parser-output .toc &amp;gt; ul &amp;gt; li &amp;gt; a:focus-visible {&lt;br /&gt;
	background-image: linear-gradient( 90deg, var( --edfm-cyan ) 0, var( --edfm-cyan ) 6px, transparent 6px ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
/* ===========================================================================&lt;br /&gt;
   25. SOURCE EDIT CONFLICT / WIKITEXT DIFF THEME&lt;br /&gt;
&lt;br /&gt;
   Source-edit conflict review uses MediaWiki&#039;s diff table classes, not the&lt;br /&gt;
   normal edit textarea/WikiEditor chrome. Without this, unchanged rows and&lt;br /&gt;
   inline change pills fall back to stark white/yellow/blue defaults. Keep the&lt;br /&gt;
   old/new meaning, but render it in EDFM&#039;s dark surfaces with restrained&lt;br /&gt;
   orange/cyan accents.&lt;br /&gt;
   =========================================================================== */&lt;br /&gt;
.mw-parser-output table.diff,&lt;br /&gt;
table.diff,&lt;br /&gt;
.diff {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-collapse: separate !important;&lt;br /&gt;
	border-spacing: 0 0.12rem !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-title,&lt;br /&gt;
.diff-otitle,&lt;br /&gt;
.diff-ntitle,&lt;br /&gt;
#mw-diff-otitle1,&lt;br /&gt;
#mw-diff-ntitle1 {&lt;br /&gt;
	background: var( --edfm-bg-deep ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
}&lt;br /&gt;
td.diff-lineno,&lt;br /&gt;
.diff-lineno {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	border: 0 !important;&lt;br /&gt;
	padding: 0.35rem 0.5rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-marker,&lt;br /&gt;
.diff-marker {&lt;br /&gt;
	background: transparent !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	padding: 0.25rem 0.45rem !important;&lt;br /&gt;
	text-align: center;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context,&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-context,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-context,&lt;br /&gt;
.mw-diff-inline-added,&lt;br /&gt;
.mw-diff-inline-deleted,&lt;br /&gt;
.mw-diff-inline-changed,&lt;br /&gt;
.mw-diff-inline-moved {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	font-family: var( --edfm-mono );&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-context:empty,&lt;br /&gt;
td.diff-addedline:empty,&lt;br /&gt;
td.diff-deletedline:empty,&lt;br /&gt;
.diff-context:empty,&lt;br /&gt;
.diff-addedline:empty,&lt;br /&gt;
.diff-deletedline:empty {&lt;br /&gt;
	/* Empty diff cells are alignment placeholders. Keep their card boundary so&lt;br /&gt;
	   the two-column source-conflict diff does not look broken, but make them&lt;br /&gt;
	   compact and neutral instead of tall blank blocks. */&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
	box-shadow: none !important;&lt;br /&gt;
	min-height: 0;&lt;br /&gt;
	padding-top: 0.08rem !important;&lt;br /&gt;
	padding-bottom: 0.08rem !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-deletedline,&lt;br /&gt;
.diff-deletedline,&lt;br /&gt;
.mw-diff-inline-deleted {&lt;br /&gt;
	background: rgba( 255, 138, 0, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 255, 138, 0, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-orange ) !important;&lt;br /&gt;
}&lt;br /&gt;
td.diff-addedline,&lt;br /&gt;
.diff-addedline,&lt;br /&gt;
.mw-diff-inline-added {&lt;br /&gt;
	background: rgba( 66, 199, 217, 0.08 ) !important;&lt;br /&gt;
	border-color: rgba( 66, 199, 217, 0.6 ) !important;&lt;br /&gt;
	border-left-color: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diffchange,&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	border-radius: 3px !important;&lt;br /&gt;
	padding: 0.08rem 0.22rem !important;&lt;br /&gt;
	font-weight: 700;&lt;br /&gt;
	text-decoration: none !important;&lt;br /&gt;
	color: var( --edfm-bg-deep ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-deletedline .diffchange,&lt;br /&gt;
.mw-diff-inline-deleted del,&lt;br /&gt;
.mw-diff-inline-changed del,&lt;br /&gt;
.mw-diff-inline-moved del {&lt;br /&gt;
	background: var( --edfm-orange-bright ) !important;&lt;br /&gt;
}&lt;br /&gt;
.diff-addedline .diffchange,&lt;br /&gt;
.mw-diff-inline-added ins,&lt;br /&gt;
.mw-diff-inline-changed ins,&lt;br /&gt;
.mw-diff-inline-moved ins {&lt;br /&gt;
	background: var( --edfm-cyan ) !important;&lt;br /&gt;
}&lt;br /&gt;
.mw-explainconflict,&lt;br /&gt;
#wpTextbox2,&lt;br /&gt;
textarea#wpTextbox2,&lt;br /&gt;
textarea.mw-textarea-oldrev {&lt;br /&gt;
	background: var( --edfm-surface-1 ) !important;&lt;br /&gt;
	color: var( --edfm-text ) !important;&lt;br /&gt;
	border-color: var( --edfm-border ) !important;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
/* Engineer directory portrait chips */&lt;br /&gt;
.edfm-engineer-entry {&lt;br /&gt;
	display: inline-flex;&lt;br /&gt;
	align-items: center;&lt;br /&gt;
	gap: 0.55rem;&lt;br /&gt;
	min-width: max-content;&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry .mw-file-element {&lt;br /&gt;
	width: 40px;&lt;br /&gt;
	height: 40px;&lt;br /&gt;
	object-fit: cover;&lt;br /&gt;
	border-radius: 4px;&lt;br /&gt;
	border: 1px solid var( --edfm-border-strong );&lt;br /&gt;
	background: var( --edfm-surface-0 );&lt;br /&gt;
	box-shadow: 0 0 0 1px rgba( 66, 199, 217, 0.14 );&lt;br /&gt;
}&lt;br /&gt;
.edfm-engineer-entry__name {&lt;br /&gt;
	line-height: 1.25;&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Engineers&amp;diff=537</id>
		<title>Engineers</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Engineers&amp;diff=537"/>
		<updated>2026-08-10T01:00:08Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Show available Engineer portraits beside names in directory tables&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Article header|eyebrow=EDFM // Engineering|deck=Directory of every currently available Engineer, ship and Odyssey, with location, specialty, and a brief unlock summary.}}&lt;br /&gt;
{{Article status|status=Needs review|mode=Both|version=Current roster as documented by Inara and cross-referenced community unlock-chain guides, checked 2026-08-07; no specific game patch number independently confirmed|reviewed=2026-08-07|reviewer=Desk research from community sources, not yet confirmed by direct in-game testing — see Sources|source_quality=Roster and locations cross-referenced across two independent sources (Inara and a community wiki); unlock summaries drawn primarily from one comprehensive community chain guide, corroborated for Colonia Engineers via two independent searches — see Sources|uncertainty=Maximum Engineering Grade is not yet confirmed for any Engineer below. Several Odyssey unlock summaries and a handful of ship Engineer prerequisite relationships are single-sourced — see the individual notes in each table and Known gaps on [[Elite Dangerous Field Manual:Engineering Architecture]]}}&lt;br /&gt;
&lt;br /&gt;
Engineers are commanders and specialists scattered around the galaxy who can modify ship modules, and — separately — suits and handheld weapons, beyond their factory specification. Each Engineer has their own specialties, their own requirements to reach and unlock, and their own maximum Engineering grade. This directory exists to answer &amp;quot;who can do what, and where are they&amp;quot; at a glance; the practical unlock walkthrough and full blueprint list for each one lives on their own article.&lt;br /&gt;
&lt;br /&gt;
Ship Engineering and Odyssey (suit/weapon) Engineering are two separate systems with separate Engineers — they&#039;re kept in separate tables below rather than mixed together, and Odyssey Engineering does not exist in Legacy.&lt;br /&gt;
&lt;br /&gt;
{{Draft warning}}&lt;br /&gt;
Individual Engineer articles are being populated in stages — see [[Elite Dangerous Field Manual:Pages Needing Review]] for which ones currently have full research behind them versus a stub. Unlock summaries below are intentionally brief; full walkthroughs, blueprint tables, and sourcing live on each Engineer&#039;s own page.&lt;br /&gt;
&lt;br /&gt;
{{Related articles|label=Browse Engineering|[[Engineer Unlock Guide]] [[Engineering Blueprints]] [[Experimental Effects]] [[Engineering Materials]]}}&lt;br /&gt;
&lt;br /&gt;
== Ship Engineers ==&lt;br /&gt;
25 Engineers currently modify ship modules: 20 in the core bubble, 4 based in the Colonia region, and 1 (Chloe Sedesi) added via the Witch Head Nebula &amp;quot;Enclave&amp;quot; community goal.&amp;lt;ref name=&amp;quot;inara-list&amp;quot;&amp;gt;[https://inara.cz/elite/engineers/ Engineers], Inara, accessed 2026-08-07.&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Engineer !! Location !! Major specialties !! Maximum grade !! Unlock summary&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Felicity Farseer&amp;quot; | {{Engineer table entry|Felicity Farseer|Felicityfarseer.png}} || Farseer Inc, Deciat || Frame Shift Drives, Power Plants, Sensors, Shield Boosters, Thrusters || Not yet confirmed || No prerequisite. Exploration rank Scout+. Deliver 1 Meta-Alloy.&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Elvira Martuuk&amp;quot; | {{Engineer table entry|Elvira Martuuk|Elviramartuuk.png}} || Long Sight Base, Khun || Frame Shift Drives || Not yet confirmed || Requires access through Felicity Farseer. Deliver 3 Soontil Relics.&lt;br /&gt;
|-&lt;br /&gt;
| [[Marco Qwent]] || Qwent Research Base, Sirius || Power Plants || Not yet confirmed || Requires access through Elvira Martuuk and Sirius Corporation permit. Deliver 25 Modular Terminals.&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Professor Palin&amp;quot; | {{Engineer table entry|Professor Palin|Professorpalin.png}} || Abel Laboratory, Arque || Thrusters || Not yet confirmed || Requires access through Marco Qwent. Travel 5,000 Ly from start. Deliver 25 Sensor Fragments.&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;The Dweller&amp;quot; | {{Engineer table entry|The Dweller|Dweller.png}} || Black Hide, Wyrd || Power Distributors || Not yet confirmed || Prerequisite not independently confirmed this pass (community sources suggest Professor Palin). Sell to 5 black markets. Pay 500,000 CR.&lt;br /&gt;
|-&lt;br /&gt;
| [[Lei Cheung]] || Trader&#039;s Rest, Laksak || Shields || Not yet confirmed || Requires access through The Dweller. Trade at 50+ markets. Donate 200t Gold.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tod &amp;quot;The Blaster&amp;quot; McQuinn]] || Trophy Camp, Wolf 397 || Cannons and Rail Guns || Not yet confirmed || No prerequisite confirmed. 15+ bounty vouchers, then deliver bounty vouchers worth 100,000 CR.&lt;br /&gt;
|-&lt;br /&gt;
| [[Selene Jean]] || Prospector&#039;s Rest, Kuk || Armour and hull reinforcement || Not yet confirmed || Requires access through Tod McQuinn. Mine/refine 500+t ore. Deliver 10 Painite.&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Bill Turner&amp;quot; | {{Engineer table entry|Bill Turner|Billturner.png}} || Turner Metallics Inc, Alioth || Cargo systems || Not yet confirmed || Requires access through Selene Jean. Friendly Alliance standing (Alioth permit). Donate 50t Bromellite.&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Didi Vatermann&amp;quot; | {{Engineer table entry|Didi Vatermann|Didivatermann.png}} || Vatermann LLC, Leesti || Shield Boosters || Not yet confirmed || Requires access through Selene Jean. Trade rank Merchant+. Deliver 50 units Lavian Brandy.&lt;br /&gt;
|-&lt;br /&gt;
| [[Zacariah Nemo]] || Nemo Cyber Party Base, Yoru || Fragment Cannons || Not yet confirmed || Prerequisite not independently confirmed this pass. Deliver 25 Xihe Companions.&lt;br /&gt;
|-&lt;br /&gt;
| [[Liz Ryder]] || Demolition Unlimited, Eurybia || Missiles, mines, torpedoes, armour || Not yet confirmed || No prerequisite. Cordial/Friendly with Eurybia Blue Mafia. Deliver 200 Landmines.&lt;br /&gt;
|-&lt;br /&gt;
| [[Hera Tani]] || The Jet&#039;s Hole, Kuwemaki || Power Plants, Power Distributors, Sensors || Not yet confirmed || Requires access through Liz Ryder. Empire rank Outsider+. Deliver 50 Kamitra Cigars.&lt;br /&gt;
|-&lt;br /&gt;
| [[Broo Tarquin]] || Broo&#039;s Legacy, Muang || Beam, Burst, and Pulse Lasers || Not yet confirmed || Requires access through Hera Tani. Combat rank Competent+. Deliver 50 Fujin Tea.&lt;br /&gt;
|-&lt;br /&gt;
| [[Tiana Fortune]] || Fortune&#039;s Loss, Achenar || Scanners and limpets || Not yet confirmed || Prerequisite reported as Hera Tani, not independently confirmed this pass. Deliver 50 Decoded Emission Data.&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Juri Ishmaak&amp;quot; | {{Engineer table entry|Juri Ishmaak|Juriishmaak.png}} || Pater&#039;s Memorial, Giryak || Mining tools, mine launchers || Not yet confirmed || Requires access through Felicity Farseer. 50+ combat bonds, then deliver combat bonds worth 100,000–1,000,000 CR.&lt;br /&gt;
|-&lt;br /&gt;
| [[The Sarge]] || The Beach, Beta-3 Tucani || Limpet controllers || Not yet confirmed || Prerequisite reported as Juri Ishmaak, not independently confirmed this pass. Deliver 50 Aberrant Shield Pattern Analysis.&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Colonel Bris Dekker&amp;quot; | {{Engineer table entry|Colonel Bris Dekker|Brisdekker.png}} || Dekker&#039;s Yard, Sol || Frame Shift Drive Interdictors || Not yet confirmed || Prerequisite reported as Juri Ishmaak, not independently confirmed this pass. Deliver Federal Combat Bonds worth 1,000,000–10,000,000 CR.&lt;br /&gt;
|-&lt;br /&gt;
| [[Ram Tah]] || Phoenix Base, Meene || Defensive/utility modules || Not yet confirmed || Prerequisite reported as Lei Cheung, not independently confirmed this pass. Deliver 50 Classified Scan Databanks.&lt;br /&gt;
|-&lt;br /&gt;
| [[Lori Jameson]] || Jameson Base, Shinrarta Dezhra || Scanners and utility modules || Not yet confirmed || Reported to require Elite ranking in some activity; not independently confirmed this pass. Deliver 25 Kongga Ale.&lt;br /&gt;
|-&lt;br /&gt;
| [[Mel Brandon]] || The Brig, Luchtaine (Colonia) || Lasers and Shields || Not yet confirmed || Requires access through Elvira Martuuk. Colonia Council invite (sell exploration data at Dove Enigma). Deliver Bounty Vouchers worth 100,000 CR.&lt;br /&gt;
|-&lt;br /&gt;
| [[Petra Olmanova]] || Sanctuary, Asura (Colonia) || Defensive modules || Not yet confirmed || Requires access through Tod McQuinn. Combat rank Expert+. Deliver 200 units Progenitor Cells.&lt;br /&gt;
|-&lt;br /&gt;
| [[Etienne Dorn]] || Kraken&#039;s Retreat, Los (Colonia) || Power systems, core internals || Not yet confirmed || Requires access through Liz Ryder. Trade rank Dealer+. Deliver 25 Occupied Escape Pods.&lt;br /&gt;
|-&lt;br /&gt;
| [[Marsha Hicks]] || The Watchtower, Tir (Colonia) || Kinetic weapons || Not yet confirmed || Requires access through The Dweller. Exploration rank Surveyor+. Deliver 10t mined Osmium.&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Chloe Sedesi&amp;quot; | {{Engineer table entry|Chloe Sedesi|Chloesedesi.png}} || Cinder Dock, Shenve (Witch Head Nebula) || Frame Shift Drives, Thrusters || Not yet confirmed || Requires access through Marco Qwent. Travel 5,000 Ly from start. Deliver 25 Sensor Fragments — same requirement as Professor Palin.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Odyssey Engineers ==&lt;br /&gt;
13 Engineers currently modify suits and handheld weapons: 9 added with the Odyssey expansion in the core bubble, and 4 more added to the Colonia region.&amp;lt;ref name=&amp;quot;inara-list&amp;quot; /&amp;gt; Odyssey Engineering exists only in Live — it has no Legacy equivalent.&lt;br /&gt;
&lt;br /&gt;
{{Draft warning}}&lt;br /&gt;
Discovery/invitation/unlock detail for most Odyssey Engineers below has not yet been independently researched to the same depth as the ship roster above — see the Unlock summary column and each Engineer&#039;s own article status.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;&lt;br /&gt;
! Engineer !! Location !! Suit/weapon specialties !! Discovery or invitation requirement !! Unlock requirement&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Jude Navarro&amp;quot; | {{Engineer table entry|Jude Navarro|Judenavarro.png}} || Marshall&#039;s Drift, Aurai || Weapon upgrades || One of the two starting Odyssey Engineers; no referral needed || Reported as 10 power-station restore/reactivate support missions; not independently confirmed this pass&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Domino Green&amp;quot; | {{Engineer table entry|Domino Green|Dominogreen.png}} || The Jackrabbit, Orishis || Environmental/suit enhancements || One of the two starting Odyssey Engineers; no referral needed || Reported as 100 Ly of on-foot shuttle travel; not independently confirmed this pass&lt;br /&gt;
|-&lt;br /&gt;
| [[Kit Fowler]] || The Last Call, Capoya || Ammunition and reload || Referral from Domino Green || Reported as 5 &amp;quot;PUSH&amp;quot; analgesic items; not independently confirmed this pass&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Hero Ferrari&amp;quot; | {{Engineer table entry|Hero Ferrari|Heroferrari.png}} || Nevermore Terrace, Siris || Handling and mobility || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| [[Wellington Beck]] || Beck Facility, Jolapa || Tactical equipment || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| [[Terra Velasquez]] || Rascal&#039;s Choice, Shou Xing || Mobility and evasion || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| [[Uma Laszlo]] || Laszlo&#039;s Resolve, Xuane || Combat effectiveness || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| [[Yarden Bond]] || Salamander Bank, Bayan || Movement and stealth || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| [[Oden Geiger]] || Ankh&#039;s Promise, Candiaei || Accuracy and optics || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Baltanos&amp;quot; | {{Engineer table entry|Baltanos|Baltanos.png}} || The Divine Apparatus, Deriso || Physical performance || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| [[Rosa Dayette]] || Rosa&#039;s Shop, Kojeara (Colonia) || Range and targeting || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| data-sort-value=&amp;quot;Eleanor Bresa&amp;quot; | {{Engineer table entry|Eleanor Bresa|Eleanorbresa.png}} || Bresa Modifications, Desy (Colonia) || Weapon performance || Not yet researched || Not yet researched&lt;br /&gt;
|-&lt;br /&gt;
| [[Yi Shen]] || Eidolon Hold, Einheriar (Colonia) || Stealth and perception || Not yet researched || Not yet researched&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Browsing Engineers ==&lt;br /&gt;
This directory currently supports browsing by name, location, and specialty directly (both tables above are sortable — click a column header). Browsing by maximum grade, region grouping, and unlock chain isn&#039;t populated yet since that data isn&#039;t confirmed for most Engineers — see [[Engineer Unlock Guide]] for the chain relationships that have been confirmed so far.&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Engineering nav}}&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
	<entry>
		<id>https://edfieldmanual.com/index.php?title=Template:Engineer_table_entry&amp;diff=536</id>
		<title>Template:Engineer table entry</title>
		<link rel="alternate" type="text/html" href="https://edfieldmanual.com/index.php?title=Template:Engineer_table_entry&amp;diff=536"/>
		<updated>2026-08-10T01:00:08Z</updated>

		<summary type="html">&lt;p&gt;EDFM Content Maintenance: Add reusable engineer table portrait entry template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&amp;lt;span class=&amp;quot;edfm-engineer-entry&amp;quot;&amp;gt;[[File:{{{2}}}|40x40px|link={{{1}}}|alt={{{1}}} portrait|class=edfm-engineer-entry__portrait]] &amp;lt;span class=&amp;quot;edfm-engineer-entry__name&amp;quot;&amp;gt;[[{{{1}}}]]&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
== Usage ==&lt;br /&gt;
Formats an Engineer name with a small portrait for sortable directory tables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;{{Engineer table entry|Felicity Farseer|Felicityfarseer.png}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use the table cell&#039;s &amp;lt;code&amp;gt;data-sort-value&amp;lt;/code&amp;gt; attribute so the row still sorts by the Engineer&#039;s name instead of the file name.&lt;br /&gt;
[[Category:Templates]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>EDFM Content Maintenance</name></author>
	</entry>
</feed>