MediaWiki:Common.css: Difference between revisions
From FusionGirl Wiki
Jump to navigationJump to search
(Add infobox CSS styles) |
(FusionGirl wiki theme — dark default, amber/gun-metal palette, light toggle [Mecha Jono]) |
||
| Line 1: | Line 1: | ||
/* ============================================================ | /* ================================================================ | ||
FusionGirl Wiki Theme | |||
============================================================ */ | Color schema: Gun Metal · Amber/Ember · Black/White | ||
Matched to https://fusiongirl.app | |||
Dark mode default, light mode toggle via Common.js | |||
================================================================ */ | |||
/* ── Google Fonts ── */ | |||
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600&family=Space+Grotesk:wght@500;600;700&display=swap'); | |||
/* ================================================================ | |||
CSS CUSTOM PROPERTIES — DARK THEME (DEFAULT) | |||
================================================================ */ | |||
:root { | |||
/* ── Backgrounds ── */ | |||
--fg-bg-primary: #0a0a0a; /* page body — near-black */ | |||
--fg-bg-secondary: #111111; /* content area */ | |||
--fg-bg-surface: #1a1a1a; /* cards, panels, infoboxes */ | |||
--fg-bg-elevated: #222222; /* hover states, elevated panels */ | |||
--fg-bg-input: #0d0d0d; /* input fields, search box */ | |||
--fg-bg-header: #0a0a0a; /* sticky header / top bar */ | |||
--fg-bg-sidebar: #0a0a0a; /* sidebar / navigation */ | |||
/* ── Gun Metal ── */ | |||
--fg-gunmetal: #2a3439; | |||
--fg-gunmetal-light: #3a4449; | |||
--fg-gunmetal-dark: #1a2024; | |||
/* ── Amber / Orange Accent (from fusiongirl.app: #FF8C00) ── */ | |||
--fg-accent: #FF8C00; | |||
--fg-accent-hover: #FFa030; | |||
--fg-accent-muted: #cc7000; | |||
--fg-accent-gold: #FFD700; | |||
--fg-accent-glow: rgba(255, 140, 0, 0.12); | |||
--fg-accent-glow-strong: rgba(255, 140, 0, 0.25); | |||
/* ── Text ── */ | |||
--fg-text-primary: rgba(255, 255, 255, 0.87); /* body text */ | |||
--fg-text-secondary: rgba(255, 255, 255, 0.50); /* dimmed / meta */ | |||
--fg-text-heading: #ffffff; /* headings */ | |||
--fg-text-link: #FF8C00; /* links = amber */ | |||
--fg-text-link-new: #ff6568; /* red-links (missing) */ | |||
--fg-text-link-visited: #cc7000; | |||
--fg-text-link-hover: #FFD700; | |||
/* ── Borders ── */ | |||
--fg-border: #2a3439; /* gun metal border */ | |||
--fg-border-light: #3a4449; | |||
--fg-border-accent: #FF8C00; | |||
--fg-border-subtle: rgba(255, 255, 255, 0.08); | |||
/* ── Code ── */ | |||
--fg-code-bg: #0d0d0d; | |||
--fg-code-text: #FF8C00; | |||
--fg-code-border: #2a3439; | |||
/* ── Shadows ── */ | |||
--fg-shadow: 0 2px 8px rgba(0, 0, 0, 0.4); | |||
--fg-shadow-accent: 0 0 12px rgba(255, 140, 0, 0.15); | |||
/* ── Transitions ── */ | |||
--fg-transition: 0.2s ease; | |||
} | |||
/* ================================================================ | |||
CSS CUSTOM PROPERTIES — LIGHT THEME (toggled) | |||
================================================================ */ | |||
html.fg-light-mode { | |||
--fg-bg-primary: #f4f0eb; | |||
--fg-bg-secondary: #faf8f5; | |||
--fg-bg-surface: #ffffff; | |||
--fg-bg-elevated: #f0ece7; | |||
--fg-bg-input: #ffffff; | |||
--fg-bg-header: #f4f0eb; | |||
--fg-bg-sidebar: #ede9e4; | |||
--fg-gunmetal: #c8cdd0; | |||
--fg-gunmetal-light: #dde0e3; | |||
--fg-gunmetal-dark: #b0b5b8; | |||
--fg-accent: #cc7000; | |||
--fg-accent-hover: #a85c00; | |||
--fg-accent-muted: #995200; | |||
--fg-accent-gold: #b8960a; | |||
--fg-accent-glow: rgba(204, 112, 0, 0.08); | |||
--fg-accent-glow-strong: rgba(204, 112, 0, 0.15); | |||
--fg-text-primary: #1a1a1a; | |||
--fg-text-secondary: #666666; | |||
--fg-text-heading: #0a0a0a; | |||
--fg-text-link: #cc7000; | |||
--fg-text-link-new: #ba0000; | |||
--fg-text-link-visited: #995200; | |||
--fg-text-link-hover: #a85c00; | |||
--fg-border: #d5d0cb; | |||
--fg-border-light: #e5e0db; | |||
--fg-border-accent: #cc7000; | |||
--fg-border-subtle: rgba(0, 0, 0, 0.06); | |||
--fg-code-bg: #f0ece7; | |||
--fg-code-text: #995200; | |||
--fg-code-border: #d5d0cb; | |||
--fg-shadow: 0 2px 8px rgba(0, 0, 0, 0.08); | |||
--fg-shadow-accent: 0 0 12px rgba(204, 112, 0, 0.1); | |||
} | |||
/* ================================================================ | |||
GLOBAL RESETS & TYPOGRAPHY | |||
================================================================ */ | |||
body { | |||
background-color: var(--fg-bg-primary) !important; | |||
color: var(--fg-text-primary) !important; | |||
font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, | |||
BlinkMacSystemFont, 'Segoe UI', Roboto, | |||
'Helvetica Neue', Arial, sans-serif !important; | |||
-webkit-font-smoothing: antialiased; | |||
-moz-osx-font-smoothing: grayscale; | |||
transition: background-color var(--fg-transition), | |||
color var(--fg-transition); | |||
} | |||
/* ================================================================ | |||
CONTENT AREA | |||
================================================================ */ | |||
.mw-body, | |||
.vector-body, | |||
.mw-page-container { | |||
background-color: var(--fg-bg-secondary) !important; | |||
color: var(--fg-text-primary) !important; | |||
transition: background-color var(--fg-transition); | |||
} | |||
.mw-body-content { | |||
color: var(--fg-text-primary); | |||
line-height: 1.7; | |||
} | |||
/* Vector 2022 main column background */ | |||
.mw-page-container-inner { | |||
background-color: var(--fg-bg-secondary) !important; | |||
} | |||
/* ================================================================ | |||
HEADINGS | |||
================================================================ */ | |||
.mw-body h1, | |||
.mw-body h2, | |||
.mw-body h3, | |||
.mw-body h4, | |||
.mw-body h5, | |||
.mw-body h6, | |||
.mw-first-heading { | |||
font-family: 'Space Grotesk', 'Inter', ui-sans-serif, system-ui, sans-serif !important; | |||
color: var(--fg-text-heading) !important; | |||
font-weight: 700; | |||
letter-spacing: -0.01em; | |||
transition: color var(--fg-transition); | |||
} | |||
.mw-body h1, | |||
.mw-first-heading { | |||
font-size: 2em; | |||
border-bottom: 2px solid var(--fg-accent) !important; | |||
padding-bottom: 0.3em; | |||
} | |||
.mw-body h2 { | |||
font-size: 1.5em; | |||
border-bottom: 1px solid var(--fg-border-accent) !important; | |||
padding-bottom: 0.2em; | |||
} | |||
.mw-body h3 { font-size: 1.25em; } | |||
.mw-body h4 { font-size: 1.1em; } | |||
/* Section edit links */ | |||
.mw-editsection a { | |||
color: var(--fg-text-secondary) !important; | |||
} | |||
.mw-editsection a:hover { | |||
color: var(--fg-accent) !important; | |||
} | |||
/* ================================================================ | |||
LINKS | |||
================================================================ */ | |||
/* Normal links */ | |||
.mw-body a:not(.mw-ui-button):not(.new):not(.external), | |||
.mw-body-content a:not(.new):not(.external) { | |||
color: var(--fg-text-link) !important; | |||
text-decoration: none; | |||
transition: color var(--fg-transition); | |||
} | |||
.mw-body a:not(.mw-ui-button):visited { | |||
color: var(--fg-text-link-visited) !important; | |||
} | |||
.mw-body a:not(.mw-ui-button):hover { | |||
color: var(--fg-text-link-hover) !important; | |||
text-decoration: underline; | |||
} | |||
/* Red links (missing pages) */ | |||
.mw-body a.new, | |||
.mw-body-content a.new { | |||
color: var(--fg-text-link-new) !important; | |||
} | |||
/* External links */ | |||
.mw-body a.external { | |||
color: var(--fg-text-link) !important; | |||
} | |||
.mw-body a.external:hover { | |||
color: var(--fg-text-link-hover) !important; | |||
} | |||
/* ================================================================ | |||
SIDEBAR / NAVIGATION | |||
================================================================ */ | |||
/* Vector 2022 sidebar */ | |||
.vector-column-start, | |||
.vector-main-menu, | |||
nav.vector-menu-portal, | |||
.vector-main-menu-container { | |||
background-color: var(--fg-bg-sidebar) !important; | |||
transition: background-color var(--fg-transition); | |||
} | |||
/* Sidebar headings */ | |||
.vector-menu-portal .vector-menu-heading, | |||
.vector-menu-heading { | |||
color: var(--fg-accent) !important; | |||
font-family: 'Space Grotesk', 'Inter', sans-serif !important; | |||
font-weight: 600; | |||
text-transform: uppercase; | |||
font-size: 0.75em; | |||
letter-spacing: 0.08em; | |||
} | |||
/* Sidebar links */ | |||
.vector-menu-portal .vector-menu-content li a, | |||
.vector-menu-content-list a { | |||
color: var(--fg-text-secondary) !important; | |||
transition: color var(--fg-transition); | |||
} | |||
.vector-menu-portal .vector-menu-content li a:hover, | |||
.vector-menu-content-list a:hover { | |||
color: var(--fg-accent-hover) !important; | |||
} | |||
/* ================================================================ | |||
HEADER / TOP BAR | |||
================================================================ */ | |||
.vector-header, | |||
.vector-sticky-header, | |||
.vector-header-container { | |||
background-color: var(--fg-bg-header) !important; | |||
border-bottom: 1px solid var(--fg-border) !important; | |||
transition: background-color var(--fg-transition); | |||
} | |||
/* Logo text */ | |||
.mw-logo-wordmark, | |||
.vector-header a.mw-logo-wordmark { | |||
color: var(--fg-accent) !important; | |||
} | |||
/* Tab bar */ | |||
.vector-menu-tabs .selected a, | |||
.vector-menu-tabs li.selected a { | |||
color: var(--fg-accent) !important; | |||
border-bottom-color: var(--fg-accent) !important; | |||
} | |||
.vector-menu-tabs li a { | |||
color: var(--fg-text-secondary) !important; | |||
} | |||
.vector-menu-tabs li a:hover { | |||
color: var(--fg-accent-hover) !important; | |||
} | |||
/* User menu */ | |||
.vector-user-links a, | |||
#pt-userpage a, | |||
#pt-anonuserpage { | |||
color: var(--fg-text-secondary) !important; | |||
} | |||
/* ================================================================ | |||
SEARCH BOX | |||
================================================================ */ | |||
.cdx-text-input__input, | |||
.vector-search-box-vue input, | |||
.vector-search-box input[type="search"], | |||
#searchInput { | |||
background-color: var(--fg-bg-input) !important; | |||
color: var(--fg-text-primary) !important; | |||
border: 1px solid var(--fg-border) !important; | |||
border-radius: 6px !important; | |||
transition: border-color var(--fg-transition), | |||
background-color var(--fg-transition); | |||
} | |||
.cdx-text-input__input:focus, | |||
#searchInput:focus { | |||
border-color: var(--fg-accent) !important; | |||
box-shadow: 0 0 0 2px var(--fg-accent-glow) !important; | |||
outline: none !important; | |||
} | |||
/* Search suggestions dropdown */ | |||
.cdx-menu, | |||
.suggestions, | |||
.suggestions-results { | |||
background-color: var(--fg-bg-surface) !important; | |||
border: 1px solid var(--fg-border) !important; | |||
color: var(--fg-text-primary) !important; | |||
} | |||
.cdx-menu-item--highlighted, | |||
.suggestions-result-current { | |||
background-color: var(--fg-accent-glow) !important; | |||
} | |||
/* ================================================================ | |||
TABLE OF CONTENTS | |||
================================================================ */ | |||
.vector-toc, | |||
.sidebar-toc, | |||
.vector-toc-landmark { | |||
background-color: var(--fg-bg-sidebar) !important; | |||
border-right: 1px solid var(--fg-border-subtle) !important; | |||
} | |||
.sidebar-toc .sidebar-toc-header { | |||
color: var(--fg-accent) !important; | |||
font-family: 'Space Grotesk', sans-serif !important; | |||
font-weight: 600; | |||
} | |||
.sidebar-toc .sidebar-toc-link { | |||
color: var(--fg-text-secondary) !important; | |||
} | |||
.sidebar-toc .sidebar-toc-link:hover { | |||
color: var(--fg-accent) !important; | |||
} | |||
.sidebar-toc .sidebar-toc-list-item-active > .sidebar-toc-link { | |||
color: var(--fg-accent) !important; | |||
border-left-color: var(--fg-accent) !important; | |||
} | |||
/* ================================================================ | |||
CODE & PRE | |||
================================================================ */ | |||
pre, | |||
code, | |||
.mw-code, | |||
tt, | |||
kbd, | |||
samp { | |||
font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular, | |||
Menlo, Monaco, Consolas, 'Liberation Mono', | |||
'Courier New', monospace !important; | |||
font-size: 0.9em; | |||
} | |||
pre, | |||
.mw-code { | |||
background-color: var(--fg-code-bg) !important; | |||
color: var(--fg-code-text) !important; | |||
border: 1px solid var(--fg-code-border) !important; | |||
border-radius: 6px; | |||
padding: 1em !important; | |||
overflow-x: auto; | |||
} | |||
code { | |||
background-color: var(--fg-code-bg) !important; | |||
color: var(--fg-code-text) !important; | |||
padding: 0.15em 0.4em; | |||
border-radius: 3px; | |||
border: 1px solid var(--fg-code-border) !important; | |||
} | |||
/* ================================================================ | |||
TABLES | |||
================================================================ */ | |||
table.wikitable { | |||
background-color: var(--fg-bg-surface) !important; | |||
color: var(--fg-text-primary) !important; | |||
border: 1px solid var(--fg-border) !important; | |||
border-collapse: collapse; | |||
margin: 1em 0; | |||
width: auto; | |||
} | |||
table.wikitable > tr > th, | |||
table.wikitable > * > tr > th { | |||
background-color: var(--fg-gunmetal) !important; | |||
color: var(--fg-accent) !important; | |||
border: 1px solid var(--fg-border-light) !important; | |||
padding: 0.5em 0.8em; | |||
font-family: 'Space Grotesk', 'Inter', sans-serif !important; | |||
font-weight: 600; | |||
text-align: left; | |||
} | |||
table.wikitable > tr > td, | |||
table.wikitable > * > tr > td { | |||
border: 1px solid var(--fg-border) !important; | |||
padding: 0.4em 0.8em; | |||
} | |||
/* Alternating row striping */ | |||
table.wikitable > tr:nth-child(even), | |||
table.wikitable > tbody > tr:nth-child(even) { | |||
background-color: var(--fg-bg-elevated) !important; | |||
} | |||
/* ================================================================ | |||
INFOBOXES (merged from setup_wiki_infobox.py) | |||
================================================================ */ | |||
.infobox { | .infobox { | ||
border: 1px solid var(--fg-border-accent) !important; | |||
border-spacing: 3px; | |||
background-color: var(--fg-bg-surface) !important; | |||
color: var(--fg-text-primary) !important; | |||
margin: 0.5em 0 0.5em 1em; | |||
padding: 0.2em; | |||
float: right; | |||
clear: right; | |||
font-size: 88%; | |||
line-height: 1.5em; | |||
width: 22em; | |||
box-shadow: var(--fg-shadow-accent); | |||
border-radius: 4px; | |||
} | } | ||
.infobox .infobox-title { | .infobox .infobox-title { | ||
font-size: 125%; | |||
font-weight: bold; | |||
text-align: center; | |||
padding: 0.5em 0.3em; | |||
background: linear-gradient(135deg, var(--fg-gunmetal-dark), var(--fg-gunmetal)) !important; | |||
color: var(--fg-accent) !important; | |||
font-family: 'Space Grotesk', 'Inter', sans-serif !important; | |||
border-radius: 3px 3px 0 0; | |||
} | } | ||
.infobox .infobox-above { | .infobox .infobox-above { | ||
text-align: center; | |||
padding: 0.3em; | |||
font-style: italic; | |||
color: var(--fg-text-secondary); | |||
} | } | ||
.infobox .infobox-subheader { | .infobox .infobox-subheader { | ||
text-align: center; | |||
padding: 0.2em; | |||
font-size: 95%; | |||
color: var(--fg-text-secondary); | |||
} | } | ||
.infobox .infobox-image { | .infobox .infobox-image { | ||
text-align: center; | |||
padding: 0.4em 0.2em; | |||
} | } | ||
.infobox .infobox-caption { | .infobox .infobox-caption { | ||
font-size: 90%; | |||
color: var(--fg-text-secondary); | |||
padding-top: 0.2em; | |||
text-align: center; | |||
} | } | ||
.infobox .infobox-header { | .infobox .infobox-header { | ||
text-align: center; | |||
background-color: var(--fg-gunmetal) !important; | |||
color: var(--fg-accent) !important; | |||
font-weight: bold; | |||
padding: 0.3em; | |||
font-family: 'Space Grotesk', 'Inter', sans-serif !important; | |||
} | } | ||
.infobox .infobox-label { | .infobox .infobox-label { | ||
vertical-align: top; | |||
text-align: left; | |||
padding: 0.2em 0.4em 0.2em 0.2em; | |||
font-weight: bold; | |||
white-space: nowrap; | |||
width: 35%; | |||
color: var(--fg-text-secondary); | |||
} | } | ||
.infobox .infobox-data { | .infobox .infobox-data { | ||
vertical-align: top; | |||
text-align: left; | |||
padding: 0.2em; | |||
} | } | ||
.infobox .infobox-data-full { | .infobox .infobox-data-full { | ||
text-align: center; | |||
} | } | ||
.infobox .infobox-below { | .infobox .infobox-below { | ||
text-align: center; | |||
padding: 0.3em; | |||
border-top: 1px solid var(--fg-border) !important; | |||
font-size: 90%; | |||
color: var(--fg-text-secondary); | |||
} | } | ||
.infobox-fusiongirl .infobox-title { | .infobox-fusiongirl .infobox-title { | ||
background: linear-gradient(135deg, var(--fg-gunmetal-dark), var(--fg-gunmetal)) !important; | |||
color: var(--fg-accent) !important; | |||
} | } | ||
.infobox-fusiongirl .infobox-header { | .infobox-fusiongirl .infobox-header { | ||
background-color: var(--fg-gunmetal) !important; | |||
color: var(--fg-accent) !important; | |||
} | } | ||
@media (max-width: 720px) { | @media (max-width: 720px) { | ||
.infobox { | |||
float: none; | |||
margin: 0.5em auto; | |||
width: 100%; | |||
max-width: 22em; | |||
} | } | ||
} | |||
/* ================================================================ | |||
BLOCKQUOTES | |||
================================================================ */ | |||
blockquote { | |||
border-left: 3px solid var(--fg-accent) !important; | |||
background-color: var(--fg-bg-elevated) !important; | |||
color: var(--fg-text-primary); | |||
padding: 0.8em 1.2em; | |||
margin: 1em 0; | |||
border-radius: 0 4px 4px 0; | |||
font-style: italic; | |||
} | |||
/* ================================================================ | |||
CATEGORIES / FOOTER | |||
================================================================ */ | |||
.catlinks { | |||
background-color: var(--fg-bg-surface) !important; | |||
border: 1px solid var(--fg-border) !important; | |||
color: var(--fg-text-secondary) !important; | |||
border-radius: 4px; | |||
padding: 0.5em 1em; | |||
margin-top: 1.5em; | |||
} | |||
.catlinks a { | |||
color: var(--fg-accent-muted) !important; | |||
} | |||
.catlinks a:hover { | |||
color: var(--fg-accent) !important; | |||
} | |||
#footer, | |||
.vector-footer { | |||
background-color: var(--fg-bg-primary) !important; | |||
color: var(--fg-text-secondary) !important; | |||
border-top: 1px solid var(--fg-border) !important; | |||
} | |||
#footer a { | |||
color: var(--fg-text-secondary) !important; | |||
} | |||
#footer a:hover { | |||
color: var(--fg-accent) !important; | |||
} | |||
/* ================================================================ | |||
SPECIAL PAGES & FORMS | |||
================================================================ */ | |||
/* Fieldsets */ | |||
fieldset { | |||
border-color: var(--fg-border) !important; | |||
} | |||
legend { | |||
color: var(--fg-accent) !important; | |||
} | |||
/* Form inputs */ | |||
input[type="text"], | |||
input[type="password"], | |||
input[type="email"], | |||
textarea, | |||
select { | |||
background-color: var(--fg-bg-input) !important; | |||
color: var(--fg-text-primary) !important; | |||
border: 1px solid var(--fg-border) !important; | |||
border-radius: 4px; | |||
} | |||
input[type="text"]:focus, | |||
input[type="password"]:focus, | |||
textarea:focus { | |||
border-color: var(--fg-accent) !important; | |||
box-shadow: 0 0 0 2px var(--fg-accent-glow) !important; | |||
} | |||
/* Buttons */ | |||
.mw-ui-button, | |||
input[type="submit"], | |||
button { | |||
background-color: var(--fg-gunmetal) !important; | |||
color: var(--fg-text-primary) !important; | |||
border: 1px solid var(--fg-border-light) !important; | |||
border-radius: 4px; | |||
transition: all var(--fg-transition); | |||
} | |||
.mw-ui-button:hover, | |||
input[type="submit"]:hover, | |||
button:hover { | |||
background-color: var(--fg-gunmetal-light) !important; | |||
border-color: var(--fg-accent) !important; | |||
color: var(--fg-accent) !important; | |||
} | |||
.mw-ui-button.mw-ui-progressive, | |||
.cdx-button--action-progressive { | |||
background-color: var(--fg-accent) !important; | |||
color: #000 !important; | |||
border-color: var(--fg-accent) !important; | |||
font-weight: 600; | |||
} | |||
.mw-ui-button.mw-ui-progressive:hover { | |||
background-color: var(--fg-accent-hover) !important; | |||
} | |||
/* ================================================================ | |||
DIFF / HISTORY / SPECIAL CONTENT | |||
================================================================ */ | |||
.diff-context { | |||
background-color: var(--fg-bg-surface) !important; | |||
color: var(--fg-text-primary) !important; | |||
} | |||
.diff-addedline { | |||
background-color: rgba(0, 180, 0, 0.15) !important; | |||
} | |||
.diff-deletedline { | |||
background-color: rgba(220, 0, 0, 0.15) !important; | |||
} | |||
/* Recent changes */ | |||
.mw-changeslist-line { | |||
border-bottom: 1px solid var(--fg-border-subtle); | |||
} | |||
/* ================================================================ | |||
CONTENT NOTICES / AMBOX | |||
================================================================ */ | |||
.ambox { | |||
background-color: var(--fg-bg-surface) !important; | |||
border-color: var(--fg-border-accent) !important; | |||
} | |||
/* ================================================================ | |||
THEME TOGGLE BUTTON STYLES | |||
================================================================ */ | |||
#fg-theme-toggle { | |||
cursor: pointer; | |||
padding: 5px 14px; | |||
border: 1px solid var(--fg-accent); | |||
border-radius: 20px; | |||
background: transparent; | |||
color: var(--fg-accent); | |||
font-family: 'Inter', sans-serif; | |||
font-size: 0.82em; | |||
font-weight: 500; | |||
letter-spacing: 0.02em; | |||
transition: all var(--fg-transition); | |||
white-space: nowrap; | |||
line-height: 1.4; | |||
vertical-align: middle; | |||
} | |||
#fg-theme-toggle:hover { | |||
background: var(--fg-accent-glow-strong); | |||
color: var(--fg-accent-hover); | |||
box-shadow: var(--fg-shadow-accent); | |||
} | |||
/* ================================================================ | |||
SCROLLBAR STYLING (Webkit) | |||
================================================================ */ | |||
::-webkit-scrollbar { | |||
width: 8px; | |||
height: 8px; | |||
} | |||
::-webkit-scrollbar-track { | |||
background: var(--fg-bg-primary); | |||
} | |||
::-webkit-scrollbar-thumb { | |||
background: var(--fg-gunmetal); | |||
border-radius: 4px; | |||
} | |||
::-webkit-scrollbar-thumb:hover { | |||
background: var(--fg-gunmetal-light); | |||
} | |||
/* ================================================================ | |||
SELECTION HIGHLIGHT | |||
================================================================ */ | |||
::selection { | |||
background: var(--fg-accent-glow-strong); | |||
color: var(--fg-text-heading); | |||
} | |||
/* ================================================================ | |||
IMAGE / THUMBNAIL THEMING | |||
================================================================ */ | |||
/* Don't invert images — they should stay as-is */ | |||
.mw-body img { | |||
border-radius: 2px; | |||
} | |||
/* Thumbnail containers */ | |||
.thumb, | |||
.thumbinner { | |||
background-color: var(--fg-bg-surface) !important; | |||
border: 1px solid var(--fg-border) !important; | |||
border-radius: 4px; | |||
} | |||
.thumbcaption { | |||
color: var(--fg-text-secondary) !important; | |||
font-size: 0.9em; | |||
} | |||
/* Gallery */ | |||
li.gallerybox div.thumb { | |||
background-color: var(--fg-bg-surface) !important; | |||
border-color: var(--fg-border) !important; | |||
} | |||
/* ================================================================ | |||
TRANSITION SMOOTHING (whole page) | |||
================================================================ */ | |||
*, | |||
*::before, | |||
*::after { | |||
transition-property: background-color, color, border-color, box-shadow; | |||
transition-duration: 0.15s; | |||
transition-timing-function: ease; | |||
} | |||
/* Exclude images, videos, animations from transition */ | |||
img, video, canvas, svg, .mw-gallery-traditional { | |||
transition: none !important; | |||
} | |||
/* ================================================================ | |||
PRINT STYLES — Strip theming for print | |||
================================================================ */ | |||
@media print { | |||
:root { | |||
--fg-bg-primary: #fff; | |||
--fg-bg-secondary: #fff; | |||
--fg-bg-surface: #fff; | |||
--fg-text-primary: #000; | |||
--fg-text-heading: #000; | |||
--fg-text-link: #0645AD; | |||
--fg-border: #ccc; | |||
--fg-accent: #000; | |||
} | |||
#fg-theme-toggle { display: none !important; } | |||
} | } | ||
Revision as of 00:40, 15 March 2026
/* ================================================================
FusionGirl Wiki Theme
Color schema: Gun Metal · Amber/Ember · Black/White
Matched to https://fusiongirl.app
Dark mode default, light mode toggle via Common.js
================================================================ */
/* ── Google Fonts ── */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;600&family=Space+Grotesk:wght@500;600;700&display=swap');
/* ================================================================
CSS CUSTOM PROPERTIES — DARK THEME (DEFAULT)
================================================================ */
:root {
/* ── Backgrounds ── */
--fg-bg-primary: #0a0a0a; /* page body — near-black */
--fg-bg-secondary: #111111; /* content area */
--fg-bg-surface: #1a1a1a; /* cards, panels, infoboxes */
--fg-bg-elevated: #222222; /* hover states, elevated panels */
--fg-bg-input: #0d0d0d; /* input fields, search box */
--fg-bg-header: #0a0a0a; /* sticky header / top bar */
--fg-bg-sidebar: #0a0a0a; /* sidebar / navigation */
/* ── Gun Metal ── */
--fg-gunmetal: #2a3439;
--fg-gunmetal-light: #3a4449;
--fg-gunmetal-dark: #1a2024;
/* ── Amber / Orange Accent (from fusiongirl.app: #FF8C00) ── */
--fg-accent: #FF8C00;
--fg-accent-hover: #FFa030;
--fg-accent-muted: #cc7000;
--fg-accent-gold: #FFD700;
--fg-accent-glow: rgba(255, 140, 0, 0.12);
--fg-accent-glow-strong: rgba(255, 140, 0, 0.25);
/* ── Text ── */
--fg-text-primary: rgba(255, 255, 255, 0.87); /* body text */
--fg-text-secondary: rgba(255, 255, 255, 0.50); /* dimmed / meta */
--fg-text-heading: #ffffff; /* headings */
--fg-text-link: #FF8C00; /* links = amber */
--fg-text-link-new: #ff6568; /* red-links (missing) */
--fg-text-link-visited: #cc7000;
--fg-text-link-hover: #FFD700;
/* ── Borders ── */
--fg-border: #2a3439; /* gun metal border */
--fg-border-light: #3a4449;
--fg-border-accent: #FF8C00;
--fg-border-subtle: rgba(255, 255, 255, 0.08);
/* ── Code ── */
--fg-code-bg: #0d0d0d;
--fg-code-text: #FF8C00;
--fg-code-border: #2a3439;
/* ── Shadows ── */
--fg-shadow: 0 2px 8px rgba(0, 0, 0, 0.4);
--fg-shadow-accent: 0 0 12px rgba(255, 140, 0, 0.15);
/* ── Transitions ── */
--fg-transition: 0.2s ease;
}
/* ================================================================
CSS CUSTOM PROPERTIES — LIGHT THEME (toggled)
================================================================ */
html.fg-light-mode {
--fg-bg-primary: #f4f0eb;
--fg-bg-secondary: #faf8f5;
--fg-bg-surface: #ffffff;
--fg-bg-elevated: #f0ece7;
--fg-bg-input: #ffffff;
--fg-bg-header: #f4f0eb;
--fg-bg-sidebar: #ede9e4;
--fg-gunmetal: #c8cdd0;
--fg-gunmetal-light: #dde0e3;
--fg-gunmetal-dark: #b0b5b8;
--fg-accent: #cc7000;
--fg-accent-hover: #a85c00;
--fg-accent-muted: #995200;
--fg-accent-gold: #b8960a;
--fg-accent-glow: rgba(204, 112, 0, 0.08);
--fg-accent-glow-strong: rgba(204, 112, 0, 0.15);
--fg-text-primary: #1a1a1a;
--fg-text-secondary: #666666;
--fg-text-heading: #0a0a0a;
--fg-text-link: #cc7000;
--fg-text-link-new: #ba0000;
--fg-text-link-visited: #995200;
--fg-text-link-hover: #a85c00;
--fg-border: #d5d0cb;
--fg-border-light: #e5e0db;
--fg-border-accent: #cc7000;
--fg-border-subtle: rgba(0, 0, 0, 0.06);
--fg-code-bg: #f0ece7;
--fg-code-text: #995200;
--fg-code-border: #d5d0cb;
--fg-shadow: 0 2px 8px rgba(0, 0, 0, 0.08);
--fg-shadow-accent: 0 0 12px rgba(204, 112, 0, 0.1);
}
/* ================================================================
GLOBAL RESETS & TYPOGRAPHY
================================================================ */
body {
background-color: var(--fg-bg-primary) !important;
color: var(--fg-text-primary) !important;
font-family: 'Inter', ui-sans-serif, system-ui, -apple-system,
BlinkMacSystemFont, 'Segoe UI', Roboto,
'Helvetica Neue', Arial, sans-serif !important;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
transition: background-color var(--fg-transition),
color var(--fg-transition);
}
/* ================================================================
CONTENT AREA
================================================================ */
.mw-body,
.vector-body,
.mw-page-container {
background-color: var(--fg-bg-secondary) !important;
color: var(--fg-text-primary) !important;
transition: background-color var(--fg-transition);
}
.mw-body-content {
color: var(--fg-text-primary);
line-height: 1.7;
}
/* Vector 2022 main column background */
.mw-page-container-inner {
background-color: var(--fg-bg-secondary) !important;
}
/* ================================================================
HEADINGS
================================================================ */
.mw-body h1,
.mw-body h2,
.mw-body h3,
.mw-body h4,
.mw-body h5,
.mw-body h6,
.mw-first-heading {
font-family: 'Space Grotesk', 'Inter', ui-sans-serif, system-ui, sans-serif !important;
color: var(--fg-text-heading) !important;
font-weight: 700;
letter-spacing: -0.01em;
transition: color var(--fg-transition);
}
.mw-body h1,
.mw-first-heading {
font-size: 2em;
border-bottom: 2px solid var(--fg-accent) !important;
padding-bottom: 0.3em;
}
.mw-body h2 {
font-size: 1.5em;
border-bottom: 1px solid var(--fg-border-accent) !important;
padding-bottom: 0.2em;
}
.mw-body h3 { font-size: 1.25em; }
.mw-body h4 { font-size: 1.1em; }
/* Section edit links */
.mw-editsection a {
color: var(--fg-text-secondary) !important;
}
.mw-editsection a:hover {
color: var(--fg-accent) !important;
}
/* ================================================================
LINKS
================================================================ */
/* Normal links */
.mw-body a:not(.mw-ui-button):not(.new):not(.external),
.mw-body-content a:not(.new):not(.external) {
color: var(--fg-text-link) !important;
text-decoration: none;
transition: color var(--fg-transition);
}
.mw-body a:not(.mw-ui-button):visited {
color: var(--fg-text-link-visited) !important;
}
.mw-body a:not(.mw-ui-button):hover {
color: var(--fg-text-link-hover) !important;
text-decoration: underline;
}
/* Red links (missing pages) */
.mw-body a.new,
.mw-body-content a.new {
color: var(--fg-text-link-new) !important;
}
/* External links */
.mw-body a.external {
color: var(--fg-text-link) !important;
}
.mw-body a.external:hover {
color: var(--fg-text-link-hover) !important;
}
/* ================================================================
SIDEBAR / NAVIGATION
================================================================ */
/* Vector 2022 sidebar */
.vector-column-start,
.vector-main-menu,
nav.vector-menu-portal,
.vector-main-menu-container {
background-color: var(--fg-bg-sidebar) !important;
transition: background-color var(--fg-transition);
}
/* Sidebar headings */
.vector-menu-portal .vector-menu-heading,
.vector-menu-heading {
color: var(--fg-accent) !important;
font-family: 'Space Grotesk', 'Inter', sans-serif !important;
font-weight: 600;
text-transform: uppercase;
font-size: 0.75em;
letter-spacing: 0.08em;
}
/* Sidebar links */
.vector-menu-portal .vector-menu-content li a,
.vector-menu-content-list a {
color: var(--fg-text-secondary) !important;
transition: color var(--fg-transition);
}
.vector-menu-portal .vector-menu-content li a:hover,
.vector-menu-content-list a:hover {
color: var(--fg-accent-hover) !important;
}
/* ================================================================
HEADER / TOP BAR
================================================================ */
.vector-header,
.vector-sticky-header,
.vector-header-container {
background-color: var(--fg-bg-header) !important;
border-bottom: 1px solid var(--fg-border) !important;
transition: background-color var(--fg-transition);
}
/* Logo text */
.mw-logo-wordmark,
.vector-header a.mw-logo-wordmark {
color: var(--fg-accent) !important;
}
/* Tab bar */
.vector-menu-tabs .selected a,
.vector-menu-tabs li.selected a {
color: var(--fg-accent) !important;
border-bottom-color: var(--fg-accent) !important;
}
.vector-menu-tabs li a {
color: var(--fg-text-secondary) !important;
}
.vector-menu-tabs li a:hover {
color: var(--fg-accent-hover) !important;
}
/* User menu */
.vector-user-links a,
#pt-userpage a,
#pt-anonuserpage {
color: var(--fg-text-secondary) !important;
}
/* ================================================================
SEARCH BOX
================================================================ */
.cdx-text-input__input,
.vector-search-box-vue input,
.vector-search-box input[type="search"],
#searchInput {
background-color: var(--fg-bg-input) !important;
color: var(--fg-text-primary) !important;
border: 1px solid var(--fg-border) !important;
border-radius: 6px !important;
transition: border-color var(--fg-transition),
background-color var(--fg-transition);
}
.cdx-text-input__input:focus,
#searchInput:focus {
border-color: var(--fg-accent) !important;
box-shadow: 0 0 0 2px var(--fg-accent-glow) !important;
outline: none !important;
}
/* Search suggestions dropdown */
.cdx-menu,
.suggestions,
.suggestions-results {
background-color: var(--fg-bg-surface) !important;
border: 1px solid var(--fg-border) !important;
color: var(--fg-text-primary) !important;
}
.cdx-menu-item--highlighted,
.suggestions-result-current {
background-color: var(--fg-accent-glow) !important;
}
/* ================================================================
TABLE OF CONTENTS
================================================================ */
.vector-toc,
.sidebar-toc,
.vector-toc-landmark {
background-color: var(--fg-bg-sidebar) !important;
border-right: 1px solid var(--fg-border-subtle) !important;
}
.sidebar-toc .sidebar-toc-header {
color: var(--fg-accent) !important;
font-family: 'Space Grotesk', sans-serif !important;
font-weight: 600;
}
.sidebar-toc .sidebar-toc-link {
color: var(--fg-text-secondary) !important;
}
.sidebar-toc .sidebar-toc-link:hover {
color: var(--fg-accent) !important;
}
.sidebar-toc .sidebar-toc-list-item-active > .sidebar-toc-link {
color: var(--fg-accent) !important;
border-left-color: var(--fg-accent) !important;
}
/* ================================================================
CODE & PRE
================================================================ */
pre,
code,
.mw-code,
tt,
kbd,
samp {
font-family: 'JetBrains Mono', ui-monospace, SFMono-Regular,
Menlo, Monaco, Consolas, 'Liberation Mono',
'Courier New', monospace !important;
font-size: 0.9em;
}
pre,
.mw-code {
background-color: var(--fg-code-bg) !important;
color: var(--fg-code-text) !important;
border: 1px solid var(--fg-code-border) !important;
border-radius: 6px;
padding: 1em !important;
overflow-x: auto;
}
code {
background-color: var(--fg-code-bg) !important;
color: var(--fg-code-text) !important;
padding: 0.15em 0.4em;
border-radius: 3px;
border: 1px solid var(--fg-code-border) !important;
}
/* ================================================================
TABLES
================================================================ */
table.wikitable {
background-color: var(--fg-bg-surface) !important;
color: var(--fg-text-primary) !important;
border: 1px solid var(--fg-border) !important;
border-collapse: collapse;
margin: 1em 0;
width: auto;
}
table.wikitable > tr > th,
table.wikitable > * > tr > th {
background-color: var(--fg-gunmetal) !important;
color: var(--fg-accent) !important;
border: 1px solid var(--fg-border-light) !important;
padding: 0.5em 0.8em;
font-family: 'Space Grotesk', 'Inter', sans-serif !important;
font-weight: 600;
text-align: left;
}
table.wikitable > tr > td,
table.wikitable > * > tr > td {
border: 1px solid var(--fg-border) !important;
padding: 0.4em 0.8em;
}
/* Alternating row striping */
table.wikitable > tr:nth-child(even),
table.wikitable > tbody > tr:nth-child(even) {
background-color: var(--fg-bg-elevated) !important;
}
/* ================================================================
INFOBOXES (merged from setup_wiki_infobox.py)
================================================================ */
.infobox {
border: 1px solid var(--fg-border-accent) !important;
border-spacing: 3px;
background-color: var(--fg-bg-surface) !important;
color: var(--fg-text-primary) !important;
margin: 0.5em 0 0.5em 1em;
padding: 0.2em;
float: right;
clear: right;
font-size: 88%;
line-height: 1.5em;
width: 22em;
box-shadow: var(--fg-shadow-accent);
border-radius: 4px;
}
.infobox .infobox-title {
font-size: 125%;
font-weight: bold;
text-align: center;
padding: 0.5em 0.3em;
background: linear-gradient(135deg, var(--fg-gunmetal-dark), var(--fg-gunmetal)) !important;
color: var(--fg-accent) !important;
font-family: 'Space Grotesk', 'Inter', sans-serif !important;
border-radius: 3px 3px 0 0;
}
.infobox .infobox-above {
text-align: center;
padding: 0.3em;
font-style: italic;
color: var(--fg-text-secondary);
}
.infobox .infobox-subheader {
text-align: center;
padding: 0.2em;
font-size: 95%;
color: var(--fg-text-secondary);
}
.infobox .infobox-image {
text-align: center;
padding: 0.4em 0.2em;
}
.infobox .infobox-caption {
font-size: 90%;
color: var(--fg-text-secondary);
padding-top: 0.2em;
text-align: center;
}
.infobox .infobox-header {
text-align: center;
background-color: var(--fg-gunmetal) !important;
color: var(--fg-accent) !important;
font-weight: bold;
padding: 0.3em;
font-family: 'Space Grotesk', 'Inter', sans-serif !important;
}
.infobox .infobox-label {
vertical-align: top;
text-align: left;
padding: 0.2em 0.4em 0.2em 0.2em;
font-weight: bold;
white-space: nowrap;
width: 35%;
color: var(--fg-text-secondary);
}
.infobox .infobox-data {
vertical-align: top;
text-align: left;
padding: 0.2em;
}
.infobox .infobox-data-full {
text-align: center;
}
.infobox .infobox-below {
text-align: center;
padding: 0.3em;
border-top: 1px solid var(--fg-border) !important;
font-size: 90%;
color: var(--fg-text-secondary);
}
.infobox-fusiongirl .infobox-title {
background: linear-gradient(135deg, var(--fg-gunmetal-dark), var(--fg-gunmetal)) !important;
color: var(--fg-accent) !important;
}
.infobox-fusiongirl .infobox-header {
background-color: var(--fg-gunmetal) !important;
color: var(--fg-accent) !important;
}
@media (max-width: 720px) {
.infobox {
float: none;
margin: 0.5em auto;
width: 100%;
max-width: 22em;
}
}
/* ================================================================
BLOCKQUOTES
================================================================ */
blockquote {
border-left: 3px solid var(--fg-accent) !important;
background-color: var(--fg-bg-elevated) !important;
color: var(--fg-text-primary);
padding: 0.8em 1.2em;
margin: 1em 0;
border-radius: 0 4px 4px 0;
font-style: italic;
}
/* ================================================================
CATEGORIES / FOOTER
================================================================ */
.catlinks {
background-color: var(--fg-bg-surface) !important;
border: 1px solid var(--fg-border) !important;
color: var(--fg-text-secondary) !important;
border-radius: 4px;
padding: 0.5em 1em;
margin-top: 1.5em;
}
.catlinks a {
color: var(--fg-accent-muted) !important;
}
.catlinks a:hover {
color: var(--fg-accent) !important;
}
#footer,
.vector-footer {
background-color: var(--fg-bg-primary) !important;
color: var(--fg-text-secondary) !important;
border-top: 1px solid var(--fg-border) !important;
}
#footer a {
color: var(--fg-text-secondary) !important;
}
#footer a:hover {
color: var(--fg-accent) !important;
}
/* ================================================================
SPECIAL PAGES & FORMS
================================================================ */
/* Fieldsets */
fieldset {
border-color: var(--fg-border) !important;
}
legend {
color: var(--fg-accent) !important;
}
/* Form inputs */
input[type="text"],
input[type="password"],
input[type="email"],
textarea,
select {
background-color: var(--fg-bg-input) !important;
color: var(--fg-text-primary) !important;
border: 1px solid var(--fg-border) !important;
border-radius: 4px;
}
input[type="text"]:focus,
input[type="password"]:focus,
textarea:focus {
border-color: var(--fg-accent) !important;
box-shadow: 0 0 0 2px var(--fg-accent-glow) !important;
}
/* Buttons */
.mw-ui-button,
input[type="submit"],
button {
background-color: var(--fg-gunmetal) !important;
color: var(--fg-text-primary) !important;
border: 1px solid var(--fg-border-light) !important;
border-radius: 4px;
transition: all var(--fg-transition);
}
.mw-ui-button:hover,
input[type="submit"]:hover,
button:hover {
background-color: var(--fg-gunmetal-light) !important;
border-color: var(--fg-accent) !important;
color: var(--fg-accent) !important;
}
.mw-ui-button.mw-ui-progressive,
.cdx-button--action-progressive {
background-color: var(--fg-accent) !important;
color: #000 !important;
border-color: var(--fg-accent) !important;
font-weight: 600;
}
.mw-ui-button.mw-ui-progressive:hover {
background-color: var(--fg-accent-hover) !important;
}
/* ================================================================
DIFF / HISTORY / SPECIAL CONTENT
================================================================ */
.diff-context {
background-color: var(--fg-bg-surface) !important;
color: var(--fg-text-primary) !important;
}
.diff-addedline {
background-color: rgba(0, 180, 0, 0.15) !important;
}
.diff-deletedline {
background-color: rgba(220, 0, 0, 0.15) !important;
}
/* Recent changes */
.mw-changeslist-line {
border-bottom: 1px solid var(--fg-border-subtle);
}
/* ================================================================
CONTENT NOTICES / AMBOX
================================================================ */
.ambox {
background-color: var(--fg-bg-surface) !important;
border-color: var(--fg-border-accent) !important;
}
/* ================================================================
THEME TOGGLE BUTTON STYLES
================================================================ */
#fg-theme-toggle {
cursor: pointer;
padding: 5px 14px;
border: 1px solid var(--fg-accent);
border-radius: 20px;
background: transparent;
color: var(--fg-accent);
font-family: 'Inter', sans-serif;
font-size: 0.82em;
font-weight: 500;
letter-spacing: 0.02em;
transition: all var(--fg-transition);
white-space: nowrap;
line-height: 1.4;
vertical-align: middle;
}
#fg-theme-toggle:hover {
background: var(--fg-accent-glow-strong);
color: var(--fg-accent-hover);
box-shadow: var(--fg-shadow-accent);
}
/* ================================================================
SCROLLBAR STYLING (Webkit)
================================================================ */
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-track {
background: var(--fg-bg-primary);
}
::-webkit-scrollbar-thumb {
background: var(--fg-gunmetal);
border-radius: 4px;
}
::-webkit-scrollbar-thumb:hover {
background: var(--fg-gunmetal-light);
}
/* ================================================================
SELECTION HIGHLIGHT
================================================================ */
::selection {
background: var(--fg-accent-glow-strong);
color: var(--fg-text-heading);
}
/* ================================================================
IMAGE / THUMBNAIL THEMING
================================================================ */
/* Don't invert images — they should stay as-is */
.mw-body img {
border-radius: 2px;
}
/* Thumbnail containers */
.thumb,
.thumbinner {
background-color: var(--fg-bg-surface) !important;
border: 1px solid var(--fg-border) !important;
border-radius: 4px;
}
.thumbcaption {
color: var(--fg-text-secondary) !important;
font-size: 0.9em;
}
/* Gallery */
li.gallerybox div.thumb {
background-color: var(--fg-bg-surface) !important;
border-color: var(--fg-border) !important;
}
/* ================================================================
TRANSITION SMOOTHING (whole page)
================================================================ */
*,
*::before,
*::after {
transition-property: background-color, color, border-color, box-shadow;
transition-duration: 0.15s;
transition-timing-function: ease;
}
/* Exclude images, videos, animations from transition */
img, video, canvas, svg, .mw-gallery-traditional {
transition: none !important;
}
/* ================================================================
PRINT STYLES — Strip theming for print
================================================================ */
@media print {
:root {
--fg-bg-primary: #fff;
--fg-bg-secondary: #fff;
--fg-bg-surface: #fff;
--fg-text-primary: #000;
--fg-text-heading: #000;
--fg-text-link: #0645AD;
--fg-border: #ccc;
--fg-accent: #000;
}
#fg-theme-toggle { display: none !important; }
}