Jump to content

MediaWiki:Common.css: Difference between revisions

From λ LUMENWARD
No edit summary
No edit summary
 
(44 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* =========================================================
/* =========================================================
   Lumenward: force neutral link + logo colors (no layout changes)
   Vector 2022: Center header search WITHOUT moving user tools
   ========================================================= */
   ========================================================= */


/* Logo text: always black */
/* Use Vector's real header row as the layout context */
.vector-header {
  position: relative !important;
  display: flex !important;
  align-items: center !important;
}
 
/* Force the right-side tools to remain FAR RIGHT */
.vector-header-end {
  margin-left: auto !important;
  display: flex !important;
  align-items: center !important;
  justify-content: flex-end !important;
}
 
/* Center ONLY the actual search box (do NOT touch wrappers like [role="search"]) */
.vector-header .vector-search-box,
.vector-header .vector-search-box-vue,
.vector-header #p-search {
  position: absolute !important;
  left: 38.7% !important;
  top: 50% !important;
  transform: translate(-50%, -50%) !important;
  margin: 0 !important;
  z-index: 1 !important;
 
  width: min(620px, calc(100vw - 760px)) !important;
}
 
/* Keep user tools clickable above any overlap */
.vector-header-end,
.vector-user-links,
.vector-user-menu,
#p-personal {
  position: relative !important;
  z-index: 2 !important;
}
 
/* Mobile: revert to normal flow */
@media (max-width: 900px) {
  .vector-header .vector-search-box,
  .vector-header .vector-search-box-vue,
  .vector-header #p-search {
    position: static !important;
    transform: none !important;
    width: 100% !important;
    margin-top: 8px !important;
  }
}
 
/* =========================================================
  Lumenward visual policy (grayscale-only)
  ========================================================= */
 
/* Logo text always black */
.mw-logo a,
.mw-logo a,
.mw-logo a:visited,
.mw-logo a:visited,
Line 12: Line 66:
}
}


/* All links: black (including visited) */
/* Links: grayscale only */
a,
a { color: #111 !important; }
a:visited {
a:visited { color: #333 !important; }
  color: #111 !important;
}


/* Hover: underline only (no color shift) */
a:hover,
a:hover,
a:focus {
a:focus {
Line 25: Line 76:
}
}


/* Contents / TOC links specifically (these are the ones showing purple) */
/* TOC links specifically */
.vector-toc a,
.vector-toc a,
.vector-toc a:visited,
.vector-toc a:visited,
Line 31: Line 82:
#toc a:visited {
#toc a:visited {
   color: #111 !important;
   color: #111 !important;
}
/* Footer centered on every page */
#footer { text-align: center !important; }
#footer ul,
#footer-info,
#footer-places,
#footer-icons {
  float: none !important;
  display: inline-block !important;
  text-align: center !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
#footer li {
  float: none !important;
  display: inline !important;
  margin: 0 8px !important;
}
}


/* =========================================================
/* =========================================================
   Lumenward: prevent GitHub/Discord from wrapping/truncating
   Lumenward – Person Infobox (clean card style)
  (targets the wrapper you added via Common.js)
   ========================================================= */
   ========================================================= */
#lumenward-header-links {
 
   white-space: nowrap !important;
/* Main infobox card */
   flex-wrap: nowrap !important;
.infobox {
  float: right;
  clear: right;
  width: 270px;
  margin: 4.5em 4.5em 1.5em 1.5em;  /* aligns with first paragraph */
  background: #fafafa;
  border: 1px solid #e5e5e5;
  border-radius: 10px;
  box-shadow: 0 4px 18px rgba(0,0,0,0.04);
  font-size: 0.92em;
}
 
/* Title header */
.infobox th[colspan] {
  background: #f2f2f2;
  font-weight: 600;
  text-align: center;
  padding: 10px 8px;
  border-bottom: 1px solid #e0e0e0;
  border-radius: 10px 10px 0 0;
}
 
/* Image row container */
.infobox .infobox-image,
.infobox td[colspan]:has(img) {
  padding: 12px;
  background: #f8f8f8;
  border-bottom: 1px solid #e6e6e6;
}
 
/* Image itself */
.infobox img {
  display: block;
  margin: 0 auto;
  max-width: 100%;
  height: auto;
  border-radius: 6px;
}
 
/* Data rows */
.infobox th {
  text-align: left;
  font-weight: 600;          /* titles bold */
  padding: 6px 10px;
  vertical-align: top;
  width: 40%;
   white-space: nowrap;
}
 
.infobox td {
  padding: 6px 10px;
  vertical-align: top;
}
 
/* Remove ugly borders */
.infobox tr {
  border: none;
}
 
/* Subtle row separators */
.infobox tr:not(:last-child) td,
.infobox tr:not(:last-child) th {
  border-bottom: 1px solid #ededed;
}
 
.mw-parser-output .infobox {
  margin-top: 28px !important; /* increase to move it down */
}
 
/* Hide category links at bottom of pages */
.catlinks {
  display: none;
}
 
/* Lumenward: soften category appearance */
#mw-normal-catlinks {
  font-size: 0.9em;
  color: #555;
  border-top: 1px solid #e5e5e5;
  margin-top: 2em;
   padding-top: 0.5em;
}
 
#mw-normal-catlinks a {
  color: #555;
}
 
/* Lumenward: Wikipedia-like category styling */
#mw-normal-catlinks {
  margin-top: 2.5em;
  padding-top: 0.6em;
  border-top: 1px solid #ddd;
  font-size: 0.85em;
  color: #666;
}
 
#mw-normal-catlinks::before {
  content: "Categories: ";
  font-weight: 600;
  color: #444;
}
 
#mw-normal-catlinks a {
  color: #555;
  text-decoration: none;
}
 
#mw-normal-catlinks a:hover {
  text-decoration: underline;
}
}


#lumenward-header-links a {
#lumenward-header-links a {
   white-space: nowrap !important;
   color: #000 !important;
}
 
/* =========================================
  Lumenward header links — match logo hue
  Logo color: #32302f
  ========================================= */
 
#lumenward-header-links a,
#lumenward-header-links a:link,
#lumenward-header-links a:visited,
#lumenward-header-links a:hover,
#lumenward-header-links a:active {
  color: #32302f !important;
  text-decoration: none;
  font-weight: 600;
}
 
/* Optional: subtle hover affordance without color shift */
#lumenward-header-links a:hover {
  text-decoration: underline;
}
}


/* =========================================================
/* =========================================================
   Lumenward: remove magnifying-glass icon inside the search input
   Lumenward: Special pages + OOUI/Codex token overrides
   (Vector 2022 / Codex)
   Put ONLY in MediaWiki:Common.css
   ========================================================= */
   ========================================================= */
.cdx-search-input__icon {
 
   display: none !important;
:root {
  --lw-text: #32302f;
  --lw-muted: #6f6a66;
  --lw-bg: #ffffff;
  --lw-border: #e6e1dc;
  --lw-input-border: #cfc7c0;
  --lw-focus: rgba(50,48,47,.22);
 
  /* Codex-ish tokens (safe if some are unused) */
  --color-base: var(--lw-text);
  --color-subtle: var(--lw-muted);
  --border-color-base: var(--lw-input-border);
  --border-color-subtle: var(--lw-border);
  --background-color-base: var(--lw-bg);
  --background-color-interactive: #fff;
  --background-color-interactive-subtle: #fff;
  --color-progressive: var(--lw-text);
}
 
/* Base on ALL pages (helps backend containers too) */
html, body,
.mw-page-container, .mw-body, .mw-body-content, #content {
  background: var(--lw-bg) !important;
  color: var(--lw-text) !important;
}
 
/* Special pages explicitly */
body.mw-specialpage,
body.mw-specialpage .mw-page-container,
body.mw-specialpage .mw-body,
body.mw-specialpage #content {
  background: var(--lw-bg) !important;
  color: var(--lw-text) !important;
}
 
/* Links on special pages */
body.mw-specialpage a,
body.mw-specialpage a:visited {
  color: var(--lw-text) !important;
}
 
/* Nuke “standard” form look on special pages: target everything form-like */
body.mw-specialpage input,
body.mw-specialpage select,
body.mw-specialpage textarea,
body.mw-specialpage button {
  font: inherit;
}
 
/* Native form elements */
body.mw-specialpage input[type="text"],
body.mw-specialpage input[type="password"],
body.mw-specialpage input[type="email"],
body.mw-specialpage input[type="search"],
body.mw-specialpage textarea,
body.mw-specialpage select {
  background: #fff !important;
  color: var(--lw-text) !important;
  border: 1px solid var(--lw-input-border) !important;
  border-radius: 6px !important;
}
 
body.mw-specialpage input:focus,
body.mw-specialpage textarea:focus,
body.mw-specialpage select:focus {
   outline: none !important;
  box-shadow: 0 0 0 3px var(--lw-focus) !important;
  border-color: var(--lw-text) !important;
}
}
.cdx-search-input__input {
 
   padding-left: 10px !important; /* keep text aligned after icon removal */
/* OOUI widgets */
body.mw-specialpage .oo-ui-inputWidget-input,
body.mw-specialpage .oo-ui-textInputWidget input,
body.mw-specialpage .oo-ui-textInputWidget textarea,
body.mw-specialpage .oo-ui-dropdownWidget .oo-ui-dropdownWidget-handle {
   background: #fff !important;
  color: var(--lw-text) !important;
  border-color: var(--lw-input-border) !important;
  border-radius: 6px !important;
}
}


/* =========================================================
/* Codex widgets (newer MW screens use these) */
  Lumenward: force logo to a single line (Vector 2022 safe)
body.mw-specialpage .cdx-text-input__input,
  ========================================================= */
body.mw-specialpage .cdx-select__handle,
body.mw-specialpage .cdx-text-area__textarea {
  background: #fff !important;
  color: var(--lw-text) !important;
  border-color: var(--lw-input-border) !important;
  border-radius: 6px !important;
}


/* Prevent line breaks in the logo */
/* Labels + help text */
.mw-logo,
body.mw-specialpage label,
.mw-logo a {
body.mw-specialpage .oo-ui-labelElement-label,
   white-space: nowrap !important;
body.mw-specialpage .cdx-label__label {
   display: inline-flex !important;
   color: var(--lw-text) !important;
  align-items: center !important;
}
body.mw-specialpage .mw-htmlform-help,
body.mw-specialpage .oo-ui-fieldLayout-helpText,
body.mw-specialpage .cdx-label__description {
   color: var(--lw-muted) !important;
}
}


/* Ensure lambda + text stay together */
/* Buttons */
.mw-logo a span,
body.mw-specialpage .mw-ui-button,
.mw-logo a {
body.mw-specialpage .oo-ui-buttonElement-button,
   white-space: nowrap !important;
body.mw-specialpage .cdx-button {
   border-radius: 6px !important;
  border-color: var(--lw-input-border) !important;
}
}


/* Optional: tighten spacing if needed */
/* Progressive buttons */
.mw-logo a {
body.mw-specialpage .mw-ui-button.mw-ui-progressive,
   gap: 6px; /* adjust or remove if unnecessary */
body.mw-specialpage .mw-ui-button.mw-ui-primary,
body.mw-specialpage .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive .oo-ui-buttonElement-button,
body.mw-specialpage .cdx-button--action-progressive {
   background: var(--lw-text) !important;
  border-color: var(--lw-text) !important;
  color: #fff !important;
}
}


/* =========================================================
/* =========================================================
   Vector 2022: FORCE 3-zone header layout (SAFE)
   Lumenward — Vector 2022 Special Pages Theme (Codex + OOUI)
   Left = logo/links, Center = search, Right = user icons
   Put at END of MediaWiki:Common.css
   ========================================================= */
   ========================================================= */


.mw-header .vector-header-container,
/* Vector 2022 root scope */
.mw-header .mw-header-container,
body.skin-vector-2022.mw-specialpage {
.mw-header .mw-header {
  /* Lumenward palette */
   display: grid !important;
  --lw-text: #32302f;
   grid-template-columns: auto 1fr auto !important;
  --lw-muted: #6f6a66;
   align-items: center !important;
  --lw-bg: #ffffff;
  --lw-surface: #ffffff;
  --lw-border: #e6e1dc;
  --lw-input-border: #cfc7c0;
  --lw-focus: rgba(50,48,47,.22);
 
  /* Codex tokens (these are what most “standard” special-page UI uses) */
  --color-base: var(--lw-text);
  --color-subtle: var(--lw-muted);
  --color-emphasized: var(--lw-text);
  --color-progressive: var(--lw-text);
 
  --background-color-base: var(--lw-bg);
  --background-color-interactive: #fff;
  --background-color-interactive-subtle: #fff;
  --background-color-neutral: #fff;
 
   --border-color-base: var(--lw-input-border);
   --border-color-subtle: var(--lw-border);
 
   --box-shadow-color-progressive--focus: var(--lw-focus);
}
}


/* Left zone */
/* Base page surfaces (Vector 2022 containers) */
.mw-header .vector-header-start,
body.skin-vector-2022.mw-specialpage,
.mw-header .mw-header-start {
body.skin-vector-2022.mw-specialpage .mw-page-container,
   grid-column: 1 !important;
body.skin-vector-2022.mw-specialpage .mw-body,
body.skin-vector-2022.mw-specialpage #content {
   background: var(--lw-bg) !important;
  color: var(--lw-text) !important;
}
}


/* Right zone */
/* Headings */
.mw-header .vector-header-end,
body.skin-vector-2022.mw-specialpage h1,
.mw-header .mw-header-end,
body.skin-vector-2022.mw-specialpage h2,
.mw-header .mw-header-user,
body.skin-vector-2022.mw-specialpage h3,
.mw-header .vector-user-links,
body.skin-vector-2022.mw-specialpage .mw-first-heading {
.mw-header #p-personal {
   color: var(--lw-text) !important;
   grid-column: 3 !important;
  justify-self: end !important;
}
}


/* Center the search area */
/* Links (Special pages often keep “standard blue” unless forced) */
.mw-header #p-search,
body.skin-vector-2022.mw-specialpage a,
.mw-header .vector-search-box,
body.skin-vector-2022.mw-specialpage a:visited,
.mw-header .vector-search-box-vue,
body.skin-vector-2022.mw-specialpage #content a,
.mw-header form.mw-search,
body.skin-vector-2022.mw-specialpage #content a:visited {
.mw-header [role="search"] {
   color: var(--lw-text) !important;
   grid-column: 2 !important;
  justify-self: center !important;
}
}


/* =========================================================
/* =========================================================
   Lumenward: HARD center the header search (Vector 2022)
   Codex widgets (newer MW UI, commonly used on Special pages)
  - Search is centered on the page
  - User icons remain far right
  - Left header (logo + GitHub/Discord) remains left
   ========================================================= */
   ========================================================= */
body.skin-vector-2022.mw-specialpage .cdx-text-input__input,
body.skin-vector-2022.mw-specialpage .cdx-text-area__textarea,
body.skin-vector-2022.mw-specialpage .cdx-select__handle,
body.skin-vector-2022.mw-specialpage .cdx-checkbox__input,
body.skin-vector-2022.mw-specialpage .cdx-radio__input {
  color: var(--lw-text) !important;
}


/* Make header a positioning context */
body.skin-vector-2022.mw-specialpage .cdx-text-input__input,
.mw-header .vector-header-container,
body.skin-vector-2022.mw-specialpage .cdx-text-area__textarea,
.mw-header .mw-header-container,
body.skin-vector-2022.mw-specialpage .cdx-select__handle {
.mw-header {
   background: #fff !important;
   position: relative !important;
  border-color: var(--lw-input-border) !important;
  border-radius: 6px !important;
}
}


/* Center ONLY the search element */
body.skin-vector-2022.mw-specialpage .cdx-text-input__input:focus,
.mw-header #p-search,
body.skin-vector-2022.mw-specialpage .cdx-text-area__textarea:focus {
.mw-header .vector-search-box,
   outline: none !important;
.mw-header .vector-search-box-vue,
   box-shadow: 0 0 0 3px var(--lw-focus) !important;
.mw-header form.mw-search,
   border-color: var(--lw-text) !important;
.mw-header [role="search"] {
   position: absolute !important;
   left: 50% !important;
  top: 50% !important;
  transform: translate(-50%, -50%) !important;
   z-index: 1 !important;
}
}


/* Keep left/right header UI above it (clickable, not overlapped) */
/* Codex labels/help */
.mw-header .vector-header-start,
body.skin-vector-2022.mw-specialpage .cdx-label__label {
.mw-header .mw-header-start,
  color: var(--lw-text) !important;
.mw-header .vector-header-end,
}
.mw-header .mw-header-end,
body.skin-vector-2022.mw-specialpage .cdx-label__description {
.mw-header .mw-header-user,
   color: var(--lw-muted) !important;
.mw-header .vector-user-links,
.mw-header #p-personal {
   position: relative !important;
  z-index: 2 !important;
}
}


/* Optional: prevent the centered search from getting too wide */
/* Codex buttons */
.mw-header #p-search,
body.skin-vector-2022.mw-specialpage .cdx-button {
.mw-header .vector-search-box,
   border-radius: 6px !important;
.mw-header .vector-search-box-vue,
   border-color: var(--lw-input-border) !important;
.mw-header form.mw-search,
.mw-header [role="search"] {
   max-width: 620px !important;
   width: min(620px, calc(100vw - 520px)) !important; /* leaves room for left+right UI */
}
}
 
body.skin-vector-2022.mw-specialpage .cdx-button--action-progressive {
/* Mobile: don't absolute-center (avoid overlaps) */
   background: var(--lw-text) !important;
@media (max-width: 900px) {
  border-color: var(--lw-text) !important;
  .mw-header #p-search,
  color: #fff !important;
  .mw-header .vector-search-box,
  .mw-header .vector-search-box-vue,
   .mw-header form.mw-search,
  .mw-header [role="search"] {
    position: static !important;
    transform: none !important;
    width: 100% !important;
    max-width: none !important;
  }
}
}


/* =========================================================
/* =========================================================
   Lumenward: Center footer content (Vector 2022)
   OOUI widgets (still used in places like Preferences)
   ========================================================= */
   ========================================================= */
body.skin-vector-2022.mw-specialpage .oo-ui-inputWidget-input,
body.skin-vector-2022.mw-specialpage .oo-ui-textInputWidget input,
body.skin-vector-2022.mw-specialpage .oo-ui-textInputWidget textarea,
body.skin-vector-2022.mw-specialpage .oo-ui-dropdownWidget .oo-ui-dropdownWidget-handle {
  background: #fff !important;
  color: var(--lw-text) !important;
  border-color: var(--lw-input-border) !important;
  border-radius: 6px !important;
}


#footer {
body.skin-vector-2022.mw-specialpage .oo-ui-inputWidget-input:focus,
   text-align: center !important;
body.skin-vector-2022.mw-specialpage .oo-ui-textInputWidget input:focus,
body.skin-vector-2022.mw-specialpage .oo-ui-textInputWidget textarea:focus {
  outline: none !important;
  box-shadow: 0 0 0 3px var(--lw-focus) !important;
  border-color: var(--lw-text) !important;
}
 
body.skin-vector-2022.mw-specialpage .oo-ui-labelElement-label {
   color: var(--lw-text) !important;
}
body.skin-vector-2022.mw-specialpage .oo-ui-fieldLayout-helpText {
  color: var(--lw-muted) !important;
}
}


#footer ul,
body.skin-vector-2022.mw-specialpage .oo-ui-buttonElement-button,
#footer-info,
body.skin-vector-2022.mw-specialpage .mw-ui-button {
#footer-places,
   border-radius: 6px !important;
#footer-icons {
   border-color: var(--lw-input-border) !important;
   float: none !important;
   display: inline-block !important;
  text-align: center !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
}


#footer li {
body.skin-vector-2022.mw-specialpage
   float: none !important;
.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive
   display: inline !important;
.oo-ui-buttonElement-button {
   margin: 0 8px !important;
   background: var(--lw-text) !important;
   border-color: var(--lw-text) !important;
   color: #fff !important;
}
}

Latest revision as of 09:23, 25 December 2025

/* =========================================================
   Vector 2022: Center header search WITHOUT moving user tools
   ========================================================= */

/* Use Vector's real header row as the layout context */
.vector-header {
  position: relative !important;
  display: flex !important;
  align-items: center !important;
}

/* Force the right-side tools to remain FAR RIGHT */
.vector-header-end {
  margin-left: auto !important;
  display: flex !important;
  align-items: center !important;
  justify-content: flex-end !important;
}

/* Center ONLY the actual search box (do NOT touch wrappers like [role="search"]) */
.vector-header .vector-search-box,
.vector-header .vector-search-box-vue,
.vector-header #p-search {
  position: absolute !important;
  left: 38.7% !important;
  top: 50% !important;
  transform: translate(-50%, -50%) !important;
  margin: 0 !important;
  z-index: 1 !important;

  width: min(620px, calc(100vw - 760px)) !important;
}

/* Keep user tools clickable above any overlap */
.vector-header-end,
.vector-user-links,
.vector-user-menu,
#p-personal {
  position: relative !important;
  z-index: 2 !important;
}

/* Mobile: revert to normal flow */
@media (max-width: 900px) {
  .vector-header .vector-search-box,
  .vector-header .vector-search-box-vue,
  .vector-header #p-search {
    position: static !important;
    transform: none !important;
    width: 100% !important;
    margin-top: 8px !important;
  }
}

/* =========================================================
   Lumenward visual policy (grayscale-only)
   ========================================================= */

/* Logo text always black */
.mw-logo a,
.mw-logo a:visited,
.mw-logo a:hover,
.mw-logo a:active {
  color: #000 !important;
  text-decoration: none !important;
}

/* Links: grayscale only */
a { color: #111 !important; }
a:visited { color: #333 !important; }

a:hover,
a:focus {
  color: #111 !important;
  text-decoration: underline !important;
}

/* TOC links specifically */
.vector-toc a,
.vector-toc a:visited,
#toc a,
#toc a:visited {
  color: #111 !important;
}

/* Footer centered on every page */
#footer { text-align: center !important; }

#footer ul,
#footer-info,
#footer-places,
#footer-icons {
  float: none !important;
  display: inline-block !important;
  text-align: center !important;
  margin-left: auto !important;
  margin-right: auto !important;
}

#footer li {
  float: none !important;
  display: inline !important;
  margin: 0 8px !important;
}

/* =========================================================
   Lumenward – Person Infobox (clean card style)
   ========================================================= */

/* Main infobox card */
.infobox {
  float: right;
  clear: right;
  width: 270px;
  margin: 4.5em 4.5em 1.5em 1.5em;   /* aligns with first paragraph */
  background: #fafafa;
  border: 1px solid #e5e5e5;
  border-radius: 10px;
  box-shadow: 0 4px 18px rgba(0,0,0,0.04);
  font-size: 0.92em;
}

/* Title header */
.infobox th[colspan] {
  background: #f2f2f2;
  font-weight: 600;
  text-align: center;
  padding: 10px 8px;
  border-bottom: 1px solid #e0e0e0;
  border-radius: 10px 10px 0 0;
}

/* Image row container */
.infobox .infobox-image,
.infobox td[colspan]:has(img) {
  padding: 12px;
  background: #f8f8f8;
  border-bottom: 1px solid #e6e6e6;
}

/* Image itself */
.infobox img {
  display: block;
  margin: 0 auto;
  max-width: 100%;
  height: auto;
  border-radius: 6px;
}

/* Data rows */
.infobox th {
  text-align: left;
  font-weight: 600;          /* titles bold */
  padding: 6px 10px;
  vertical-align: top;
  width: 40%;
  white-space: nowrap;
}

.infobox td {
  padding: 6px 10px;
  vertical-align: top;
}

/* Remove ugly borders */
.infobox tr {
  border: none;
}

/* Subtle row separators */
.infobox tr:not(:last-child) td,
.infobox tr:not(:last-child) th {
  border-bottom: 1px solid #ededed;
}

.mw-parser-output .infobox {
  margin-top: 28px !important; /* increase to move it down */
}

/* Hide category links at bottom of pages */
.catlinks {
  display: none;
}

/* Lumenward: soften category appearance */
#mw-normal-catlinks {
  font-size: 0.9em;
  color: #555;
  border-top: 1px solid #e5e5e5;
  margin-top: 2em;
  padding-top: 0.5em;
}

#mw-normal-catlinks a {
  color: #555;
}

/* Lumenward: Wikipedia-like category styling */
#mw-normal-catlinks {
  margin-top: 2.5em;
  padding-top: 0.6em;
  border-top: 1px solid #ddd;
  font-size: 0.85em;
  color: #666;
}

#mw-normal-catlinks::before {
  content: "Categories: ";
  font-weight: 600;
  color: #444;
}

#mw-normal-catlinks a {
  color: #555;
  text-decoration: none;
}

#mw-normal-catlinks a:hover {
  text-decoration: underline;
}

#lumenward-header-links a {
  color: #000 !important;
}

/* =========================================
   Lumenward header links — match logo hue
   Logo color: #32302f
   ========================================= */

#lumenward-header-links a,
#lumenward-header-links a:link,
#lumenward-header-links a:visited,
#lumenward-header-links a:hover,
#lumenward-header-links a:active {
  color: #32302f !important;
  text-decoration: none;
  font-weight: 600;
}

/* Optional: subtle hover affordance without color shift */
#lumenward-header-links a:hover {
  text-decoration: underline;
}

/* =========================================================
   Lumenward: Special pages + OOUI/Codex token overrides
   Put ONLY in MediaWiki:Common.css
   ========================================================= */

:root {
  --lw-text: #32302f;
  --lw-muted: #6f6a66;
  --lw-bg: #ffffff;
  --lw-border: #e6e1dc;
  --lw-input-border: #cfc7c0;
  --lw-focus: rgba(50,48,47,.22);

  /* Codex-ish tokens (safe if some are unused) */
  --color-base: var(--lw-text);
  --color-subtle: var(--lw-muted);
  --border-color-base: var(--lw-input-border);
  --border-color-subtle: var(--lw-border);
  --background-color-base: var(--lw-bg);
  --background-color-interactive: #fff;
  --background-color-interactive-subtle: #fff;
  --color-progressive: var(--lw-text);
}

/* Base on ALL pages (helps backend containers too) */
html, body,
.mw-page-container, .mw-body, .mw-body-content, #content {
  background: var(--lw-bg) !important;
  color: var(--lw-text) !important;
}

/* Special pages explicitly */
body.mw-specialpage,
body.mw-specialpage .mw-page-container,
body.mw-specialpage .mw-body,
body.mw-specialpage #content {
  background: var(--lw-bg) !important;
  color: var(--lw-text) !important;
}

/* Links on special pages */
body.mw-specialpage a,
body.mw-specialpage a:visited {
  color: var(--lw-text) !important;
}

/* Nuke “standard” form look on special pages: target everything form-like */
body.mw-specialpage input,
body.mw-specialpage select,
body.mw-specialpage textarea,
body.mw-specialpage button {
  font: inherit;
}

/* Native form elements */
body.mw-specialpage input[type="text"],
body.mw-specialpage input[type="password"],
body.mw-specialpage input[type="email"],
body.mw-specialpage input[type="search"],
body.mw-specialpage textarea,
body.mw-specialpage select {
  background: #fff !important;
  color: var(--lw-text) !important;
  border: 1px solid var(--lw-input-border) !important;
  border-radius: 6px !important;
}

body.mw-specialpage input:focus,
body.mw-specialpage textarea:focus,
body.mw-specialpage select:focus {
  outline: none !important;
  box-shadow: 0 0 0 3px var(--lw-focus) !important;
  border-color: var(--lw-text) !important;
}

/* OOUI widgets */
body.mw-specialpage .oo-ui-inputWidget-input,
body.mw-specialpage .oo-ui-textInputWidget input,
body.mw-specialpage .oo-ui-textInputWidget textarea,
body.mw-specialpage .oo-ui-dropdownWidget .oo-ui-dropdownWidget-handle {
  background: #fff !important;
  color: var(--lw-text) !important;
  border-color: var(--lw-input-border) !important;
  border-radius: 6px !important;
}

/* Codex widgets (newer MW screens use these) */
body.mw-specialpage .cdx-text-input__input,
body.mw-specialpage .cdx-select__handle,
body.mw-specialpage .cdx-text-area__textarea {
  background: #fff !important;
  color: var(--lw-text) !important;
  border-color: var(--lw-input-border) !important;
  border-radius: 6px !important;
}

/* Labels + help text */
body.mw-specialpage label,
body.mw-specialpage .oo-ui-labelElement-label,
body.mw-specialpage .cdx-label__label {
  color: var(--lw-text) !important;
}
body.mw-specialpage .mw-htmlform-help,
body.mw-specialpage .oo-ui-fieldLayout-helpText,
body.mw-specialpage .cdx-label__description {
  color: var(--lw-muted) !important;
}

/* Buttons */
body.mw-specialpage .mw-ui-button,
body.mw-specialpage .oo-ui-buttonElement-button,
body.mw-specialpage .cdx-button {
  border-radius: 6px !important;
  border-color: var(--lw-input-border) !important;
}

/* Progressive buttons */
body.mw-specialpage .mw-ui-button.mw-ui-progressive,
body.mw-specialpage .mw-ui-button.mw-ui-primary,
body.mw-specialpage .oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive .oo-ui-buttonElement-button,
body.mw-specialpage .cdx-button--action-progressive {
  background: var(--lw-text) !important;
  border-color: var(--lw-text) !important;
  color: #fff !important;
}

/* =========================================================
   Lumenward — Vector 2022 Special Pages Theme (Codex + OOUI)
   Put at END of MediaWiki:Common.css
   ========================================================= */

/* Vector 2022 root scope */
body.skin-vector-2022.mw-specialpage {
  /* Lumenward palette */
  --lw-text: #32302f;
  --lw-muted: #6f6a66;
  --lw-bg: #ffffff;
  --lw-surface: #ffffff;
  --lw-border: #e6e1dc;
  --lw-input-border: #cfc7c0;
  --lw-focus: rgba(50,48,47,.22);

  /* Codex tokens (these are what most “standard” special-page UI uses) */
  --color-base: var(--lw-text);
  --color-subtle: var(--lw-muted);
  --color-emphasized: var(--lw-text);
  --color-progressive: var(--lw-text);

  --background-color-base: var(--lw-bg);
  --background-color-interactive: #fff;
  --background-color-interactive-subtle: #fff;
  --background-color-neutral: #fff;

  --border-color-base: var(--lw-input-border);
  --border-color-subtle: var(--lw-border);

  --box-shadow-color-progressive--focus: var(--lw-focus);
}

/* Base page surfaces (Vector 2022 containers) */
body.skin-vector-2022.mw-specialpage,
body.skin-vector-2022.mw-specialpage .mw-page-container,
body.skin-vector-2022.mw-specialpage .mw-body,
body.skin-vector-2022.mw-specialpage #content {
  background: var(--lw-bg) !important;
  color: var(--lw-text) !important;
}

/* Headings */
body.skin-vector-2022.mw-specialpage h1,
body.skin-vector-2022.mw-specialpage h2,
body.skin-vector-2022.mw-specialpage h3,
body.skin-vector-2022.mw-specialpage .mw-first-heading {
  color: var(--lw-text) !important;
}

/* Links (Special pages often keep “standard blue” unless forced) */
body.skin-vector-2022.mw-specialpage a,
body.skin-vector-2022.mw-specialpage a:visited,
body.skin-vector-2022.mw-specialpage #content a,
body.skin-vector-2022.mw-specialpage #content a:visited {
  color: var(--lw-text) !important;
}

/* =========================================================
   Codex widgets (newer MW UI, commonly used on Special pages)
   ========================================================= */
body.skin-vector-2022.mw-specialpage .cdx-text-input__input,
body.skin-vector-2022.mw-specialpage .cdx-text-area__textarea,
body.skin-vector-2022.mw-specialpage .cdx-select__handle,
body.skin-vector-2022.mw-specialpage .cdx-checkbox__input,
body.skin-vector-2022.mw-specialpage .cdx-radio__input {
  color: var(--lw-text) !important;
}

body.skin-vector-2022.mw-specialpage .cdx-text-input__input,
body.skin-vector-2022.mw-specialpage .cdx-text-area__textarea,
body.skin-vector-2022.mw-specialpage .cdx-select__handle {
  background: #fff !important;
  border-color: var(--lw-input-border) !important;
  border-radius: 6px !important;
}

body.skin-vector-2022.mw-specialpage .cdx-text-input__input:focus,
body.skin-vector-2022.mw-specialpage .cdx-text-area__textarea:focus {
  outline: none !important;
  box-shadow: 0 0 0 3px var(--lw-focus) !important;
  border-color: var(--lw-text) !important;
}

/* Codex labels/help */
body.skin-vector-2022.mw-specialpage .cdx-label__label {
  color: var(--lw-text) !important;
}
body.skin-vector-2022.mw-specialpage .cdx-label__description {
  color: var(--lw-muted) !important;
}

/* Codex buttons */
body.skin-vector-2022.mw-specialpage .cdx-button {
  border-radius: 6px !important;
  border-color: var(--lw-input-border) !important;
}
body.skin-vector-2022.mw-specialpage .cdx-button--action-progressive {
  background: var(--lw-text) !important;
  border-color: var(--lw-text) !important;
  color: #fff !important;
}

/* =========================================================
   OOUI widgets (still used in places like Preferences)
   ========================================================= */
body.skin-vector-2022.mw-specialpage .oo-ui-inputWidget-input,
body.skin-vector-2022.mw-specialpage .oo-ui-textInputWidget input,
body.skin-vector-2022.mw-specialpage .oo-ui-textInputWidget textarea,
body.skin-vector-2022.mw-specialpage .oo-ui-dropdownWidget .oo-ui-dropdownWidget-handle {
  background: #fff !important;
  color: var(--lw-text) !important;
  border-color: var(--lw-input-border) !important;
  border-radius: 6px !important;
}

body.skin-vector-2022.mw-specialpage .oo-ui-inputWidget-input:focus,
body.skin-vector-2022.mw-specialpage .oo-ui-textInputWidget input:focus,
body.skin-vector-2022.mw-specialpage .oo-ui-textInputWidget textarea:focus {
  outline: none !important;
  box-shadow: 0 0 0 3px var(--lw-focus) !important;
  border-color: var(--lw-text) !important;
}

body.skin-vector-2022.mw-specialpage .oo-ui-labelElement-label {
  color: var(--lw-text) !important;
}
body.skin-vector-2022.mw-specialpage .oo-ui-fieldLayout-helpText {
  color: var(--lw-muted) !important;
}

body.skin-vector-2022.mw-specialpage .oo-ui-buttonElement-button,
body.skin-vector-2022.mw-specialpage .mw-ui-button {
  border-radius: 6px !important;
  border-color: var(--lw-input-border) !important;
}

body.skin-vector-2022.mw-specialpage
.oo-ui-buttonElement-framed.oo-ui-flaggedElement-progressive
.oo-ui-buttonElement-button {
  background: var(--lw-text) !important;
  border-color: var(--lw-text) !important;
  color: #fff !important;
}