MediaWiki:Common.css: Difference between revisions

MediaWiki interface page
mNo edit summary
(Generalize interior figure sizing and table containment)
 
(52 intermediate revisions by the same user not shown)
Line 1: Line 1:
/* ============================================================
/* ============================================================
   Sinfar Wiki Visual System v2.0
   Sinfar Wiki Visual System v3.0
   Used by redesigned player-resource / mechanics pages.
   Unified Common.css Framework
  Scope doctrine:
  - New/refit pages use: <div class="sf-page">
  - Legacy pages may still use .sinfar-page / .sf-card / .sf-heading
   ============================================================ */
   ============================================================ */


/* ---------- Core Page Shell ---------- */


/* ============================================================
  1. DESIGN TOKENS
  ============================================================ */
:root {
  --sf-bg-page: #0f141b;
  --sf-bg-shell: #11161d;
  --sf-bg-panel: rgba(18, 14, 12, .78);
  --sf-bg-panel-solid: #181214;
  --sf-bg-panel-soft: rgba(216, 180, 106, .08);
  --sf-bg-hero: linear-gradient(135deg, #21150f, #3a2417);
  --sf-border: rgba(216, 180, 106, .28);
  --sf-border-strong: rgba(216, 180, 106, .48);
  --sf-border-muted: rgba(244, 239, 230, .09);
  --sf-text: #f4efe6;
  --sf-text-muted: #c9bda9;
  --sf-gold: #d8b46a;
  --sf-gold-bright: #f0d28a;
  --sf-link: #8fc6ff;
  --sf-link-hover: #b8d6ff;
  --sf-red: #9f4b3e;
  --sf-green: #2f5d3a;
  --sf-blue: #334e7a;
  --sf-purple: #60456f;
  --sf-radius-sm: 7px;
  --sf-radius-md: 10px;
  --sf-gap: 8px;
}
/* ============================================================
  2. SOVEREIGN PAGE SHELL
  ============================================================ */
.sf-page,
.sinfar-page {
.sinfar-page {
background: #0b090a;
  background: var(--sf-bg-shell);
border: 1px solid #6f5730;
  color: var(--sf-text);
color: #f4efe6;
  border: 1px solid var(--sf-border);
padding: 16px;
  border-radius: var(--sf-radius-md);
box-shadow: 0 0 22px rgba(0,0,0,0.35);
  padding: 16px;
font-size: 14px;
  line-height: 1.45;
line-height: 1.5;
  font-size: 14px;
  box-shadow: 0 0 22px rgba(0,0,0,.35);
}
}


.sinfar-page a {
 
color: #8fc6ff;
.sf-page *,
.sinfar-page * {
  box-sizing: border-box;
}
}


.sinfar-page code {
 
background: #120d10;
.sf-page a,
color: #f0d28a;
.sf-page a:visited,
border: 1px solid #6f5730;
.sf-page a.external,
padding: 1px 4px;
.sf-page a.external:visited,
.sinfar-page a,
.sinfar-page a:visited,
.sinfar-page a.external,
.sinfar-page a.external:visited {
  color: var(--sf-link);
}
}


/* ---------- Hero / Title Banner ---------- */


.sf-hero {
.sf-page a:hover,
text-align: center;
.sinfar-page a:hover {
border: 1px solid #8b6b3a;
  color: var(--sf-link-hover);
background: linear-gradient(180deg,#181214,#0b090a);
  text-decoration: underline;
padding: 12px 14px;
margin-bottom: 10px;
}
}


.sf-title {
 
font-family: Georgia, serif;
.sf-page code,
font-size: 30px;
.sinfar-page code {
letter-spacing: 3px;
  background: #120d10;
color: #d8b46a;
  color: var(--sf-gold-bright);
text-shadow: 0 0 10px rgba(143,36,50,0.55);
  border: 1px solid var(--sf-border);
  border-radius: 4px;
  padding: 1px 4px;
}
}


.sf-subtitle {
 
margin-top: 5px;
 
color: #f4efe6;
 
/* ============================================================
  3. TYPOGRAPHY
  ============================================================ */
 
 
.sf-page h1,
.sf-page h2,
.sf-page h3,
.sinfar-page h1,
.sinfar-page h2,
.sinfar-page h3 {
  color: var(--sf-gold-bright);
}
}


/* ---------- Headings ---------- */


.sf-section-title,
.sf-heading {
.sf-heading {
font-family: Georgia, serif;
  color: var(--sf-gold-bright);
font-size: 21px;
  border-bottom: 1px solid var(--sf-border-strong);
color: #d8b46a;
  margin: 18px 0 8px;
border-bottom: 1px solid #6f5730;
  padding-bottom: 3px;
padding-bottom: 4px;
  font-size: 1.45rem;
margin: 9px 0 5px 0;
  line-height: 1.2;
}
}


.sf-heading:first-of-type {
 
margin-top: 8px;
.sf-subheading {
  color: var(--sf-gold-bright);
  margin: 10px 0 6px;
  font-size: 1.15rem;
}
}


.sf-heading--gold { color: #d8b46a; border-bottom-color: #6f5730; }
.sf-heading--green { color: #91d38f; border-bottom-color: #446b35; }
.sf-heading--blue { color: #8fc6ff; border-bottom-color: #34577a; }
.sf-heading--red { color: #ff9c8f; border-bottom-color: #7a342f; }
.sf-heading--purple { color: #c49cff; border-bottom-color: #5b3b78; }


.sf-subheading {
.sf-muted {
font-family: Georgia, serif;
  color: var(--sf-text-muted);
font-size: 18px;
color: #f0d28a;
margin-bottom: 6px;
}
}


/* ---------- Cards / Callouts ---------- */


.sf-card {
.sf-label,
background: #181214;
.sf-name {
border: 1px solid #6f5730;
  color: var(--sf-gold-bright);
color: #f4efe6;
  font-weight: 700;
padding: 10px 12px;
margin-bottom: 8px;
}
}


.sf-card--gold {
 
background: #181214;
.sf-center {
border-color: #6f5730;
  text-align: center;
}
}


.sf-card--green {
 
background: #111a12;
 
border-color: #446b35;
 
/* ============================================================
  4. HEROES
  ============================================================ */
 
 
.sf-hero,
.sf-hero-compact {
  background: var(--sf-bg-hero);
  border: 1px solid var(--sf-border-strong);
  border-radius: var(--sf-radius-md);
  padding: 14px 18px;
  margin: 0 0 12px;
  text-align: center;
}
}


.sf-card--blue {
 
background: #101820;
.sf-hero h1,
border-color: #34577a;
.sf-hero-compact h1,
.sf-title {
  color: var(--sf-gold-bright);
  margin: 0 0 4px;
  font-size: 1.85rem;
  line-height: 1.15;
}
}


.sf-card--red {
 
background: #1a1010;
.sf-hero p,
border-color: #7a342f;
.sf-hero-compact p,
.sf-subtitle {
  color: var(--sf-text);
  margin: 0;
}
}


.sf-card--purple {
 
background: #19111d;
.sf-eyebrow {
border-color: #5b3b78;
  color: var(--sf-gold);
  text-transform: uppercase;
  font-size: .75rem;
  letter-spacing: .08em;
  font-weight: 800;
}
}


.sf-note {
 
background: #120d10;
.sf-hero-main {
border-left: 4px solid #d8b46a;
  padding: 22px;
color: #f4efe6;
padding: 8px 10px;
margin: 8px 0;
}
}


.sf-note--red {
 
border-left-color: #8f2432;
.sf-hero-main h1 {
  font-size: 2.35rem;
}
}


.sf-label {
color: #f0d28a;
font-weight: bold;
}


.sf-muted {
color: #c9bda9;
}


/* ---------- Grids ---------- */
 
/* ============================================================
  5. GRIDS / STATUS TILES
  ============================================================ */
 


.sf-grid-2,
.sf-grid-2,
.sf-grid-3,
.sf-grid-3,
.sf-grid-4,
.sf-grid-4,
.sf-grid-5 {
.sf-grid-5,
display: grid;
.sf-status-grid,
gap: 8px;
.sf-start-status {
margin-bottom: 8px;
  display: grid;
  gap: var(--sf-gap);
  margin-bottom: 14px;
}
}


.sf-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.sf-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.sf-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.sf-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.sf-grid-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.sf-grid-4,
.sf-status-grid,
.sf-start-status { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.sf-grid-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.sf-grid-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.sf-status-grid > div,
.sf-start-status > div {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  padding: 8px 10px;
}
.sf-status-grid b,
.sf-start-status b {
  color: var(--sf-gold-bright);
}
.sf-status-grid span,
.sf-start-status span {
  color: var(--sf-text);
}
/* ============================================================
  6. QUICKBARS / INDEX GRIDS
  ============================================================ */
.sf-quickbar,
.sf-index-grid {
  display: grid;
  gap: var(--sf-gap);
  margin: 0 0 14px;
}
.sf-quickbar {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}
.sf-index-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
.sf-quickbar > div,
.sf-index-grid > div,
.sf-pathline {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-left: 4px solid var(--sf-gold);
  border-radius: var(--sf-radius-sm);
  padding: 8px 10px;
  color: var(--sf-text);
}
.sf-quickbar b,
.sf-index-grid b {
  color: var(--sf-gold-bright);
}
/*
============================================================
  6A. REFERENCE MANUAL LAYOUT
  Reusable side directory for long technical documentation.
  ============================================================ */
.sf-manual-layout {
  display: grid;
  grid-template-columns: 240px minmax(0, 1fr);
  gap: 16px;
  align-items: start;
}
.sf-manual-content {
  min-width: 0;
}
.sf-manual-content [id] {
  scroll-margin-top: 18px;
}
.sf-manual-toc {
  position: sticky;
  top: 12px;
  max-height: calc(100vh - 24px);
  overflow-y: auto;
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-md);
  padding: 12px;
}
.sf-manual-toc-title {
  color: var(--sf-gold-bright);
  font-size: 1rem;
  font-weight: 900;
  margin: 0 0 8px;
  padding-bottom: 7px;
  border-bottom: 1px solid var(--sf-border-strong);
}
.sf-manual-toc-group {
  color: var(--sf-gold);
  font-size: .72rem;
  font-weight: 900;
  letter-spacing: .06em;
  text-transform: uppercase;
  margin: 12px 0 4px;
}
.sf-manual-toc a,
.sf-manual-toc a:visited {
  display: block;
  padding: 5px 1px;
  color: var(--sf-link);
  border-bottom: 1px solid var(--sf-border-muted);
  font-size: .88rem;
  font-weight: 700;
  line-height: 1.25;
  text-decoration: none;
}
.sf-manual-toc a:hover {
  color: var(--sf-link-hover);
  text-decoration: none;
}
.sf-manual-example {
  background: rgba(216,180,106,.06);
  border: 1px solid var(--sf-border);
  border-left: 4px solid var(--sf-gold);
  border-radius: var(--sf-radius-sm);
  padding: 10px 12px;
  margin: 7px 0 9px;
}
.sf-manual-example > :first-child {
  margin-top: 0;
}
.sf-manual-example > :last-child {
  margin-bottom: 0;
}
.sf-color-swatch {
  display: inline-block;
  width: 22px;
  height: 14px;
  margin-right: 7px;
  border: 1px solid rgba(255,255,255,.28);
  border-radius: 3px;
  vertical-align: -2px;
}


@media screen and (max-width: 900px) {
@media screen and (max-width: 900px) {
.sf-grid-4,
  .sf-manual-layout {
.sf-grid-5 {
    grid-template-columns: 1fr;
grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
 
 
  .sf-manual-toc {
    position: static;
    max-height: none;
  }
}
}
/*
===========================================================
  7. DECISION PANELS
  ============================================================ */


@media screen and (max-width: 650px) {
 
.sf-grid-2,
.sf-decision-grid {
.sf-grid-3,
  display: grid;
.sf-grid-4,
  grid-template-columns: 1.25fr 1fr 1fr;
.sf-grid-5 {
  gap: var(--sf-gap);
grid-template-columns: 1fr;
  margin-bottom: 14px;
}
}
}


/* ---------- Lists ---------- */


.sinfar-page ul,
.sf-decision,
.sinfar-page ol {
.sf-card,
margin: 6px 0 8px 0;
.sf-panel {
padding-left: 22px;
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-md);
  color: var(--sf-text);
  padding: 12px;
}
 
 
.sf-decision-primary {
  border-color: rgba(240,210,138,.58);
  background: linear-gradient(135deg, rgba(60,38,20,.88), rgba(18,14,12,.78));
}
 
 
.sf-decision-kicker {
  color: var(--sf-gold);
  text-transform: uppercase;
  font-size: .72rem;
  letter-spacing: .07em;
  font-weight: 800;
}
 
 
.sf-decision h3 {
  color: var(--sf-gold-bright);
  margin: 4px 0 6px;
}
 
 
.sf-decision p {
  margin: 0 0 10px;
  color: var(--sf-text);
}
 
 
 
 
/* ============================================================
  8. ACTION LISTS / BUTTONS
  ============================================================ */
 
 
.sf-action-list {
  list-style: none;
  margin: 12px 0 0 0;
  padding: 0;
  display: grid;
  gap: 8px;
}
 
 
.sf-action-list li {
  margin: 0;
  padding: 0;
}
 
 
.sf-action-list a,
.sf-action-list a:visited,
.sf-action-list a.external,
.sf-action-list a.external:visited {
  display: block;
  width: 100%;
  background: rgba(216,180,106,.10);
  border: 1px solid rgba(216,180,106,.32);
  border-radius: 7px;
  padding: 8px 11px;
  color: #8fc6ff;
  font-weight: 800;
  text-align: left;
  text-decoration: none;
}
}


.sinfar-page li {
 
margin: 2px 0;
.sf-action-list a:hover,
.sf-action-list a.external:hover {
  background: rgba(216,180,106,.16);
  border-color: rgba(240,210,138,.48);
  color: #b8d6ff;
  text-decoration: none;
}
}


/* ---------- Tables ---------- */
 
 
 
/* ============================================================
  9. TABLES
  ============================================================ */
 


.sf-table {
.sf-table {
width: 100%;
  width: 100%;
border-collapse: collapse;
  border-collapse: collapse;
color: #f4efe6;
  table-layout: fixed;
margin-bottom: 8px;
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  color: var(--sf-text);
  margin-bottom: 12px;
}
}


.sf-table th {
.sf-table th {
color: #d8b46a;
  color: var(--sf-gold-bright);
padding: 7px 8px;
  background: rgba(216,180,106,.14);
text-align: center;
  border-bottom: 1px solid var(--sf-border-strong);
  padding: 8px 10px;
  text-align: left;
}
}


.sf-table td {
.sf-table td {
padding: 6px 8px;
  color: var(--sf-text);
  border-bottom: 1px solid var(--sf-border-muted);
  padding: 7px 10px;
  vertical-align: top;
}
 
 
.sf-table tr:last-child td {
  border-bottom: 0;
}
 
 
.sf-table-scroll {
  width: 100%;
  overflow-x: auto;
  margin-bottom: 12px;
}
 
 
.sf-table-scroll .sf-table {
  min-width: 760px;
  margin-bottom: 0;
}
 
 
.sf-value,
.sf-good {
  text-align: center;
}
 
 
.sf-value {
  color: #f4c96b;
}
 
 
.sf-good {
  color: #9fe6bd;
}
 
 
 
 
/* Standard table column helpers */
.sf-channel-table th:nth-child(1),
.sf-channel-table td:nth-child(1) { width: 14%; }
 
 
.sf-channel-table th:nth-child(2),
.sf-channel-table td:nth-child(2) { width: 31%; }
 
 
.sf-channel-table th:nth-child(3),
.sf-channel-table td:nth-child(3) { width: 37%; }
 
 
.sf-channel-table th:nth-child(4),
.sf-channel-table td:nth-child(4) { width: 18%; }
 
 
.sf-setup-table th:nth-child(1),
.sf-setup-table td:nth-child(1) { width: 24%; }
 
 
.sf-setup-table th:nth-child(2),
.sf-setup-table td:nth-child(2) { width: 52%; }
 
 
.sf-setup-table th:nth-child(3),
.sf-setup-table td:nth-child(3) { width: 24%; }
 
 
 
 
/* ============================================================
  10. BADGES
  ============================================================ */
 
 
.sf-badge {
  display: inline-block;
  border-radius: 999px;
  padding: 2px 7px;
  margin: 1px 2px 1px 0;
  font-size: .78rem;
  font-weight: 800;
  white-space: nowrap;
}
}


.sf-table--gold {
 
background: #181214;
.sf-badge-ic { background: #2f5d3a; color: #eaffef; }
border: 1px solid #6f5730;
.sf-badge-ooc { background: #334e7a; color: #eef4ff; }
.sf-badge-dm { background: #6f3b3b; color: #fff0f0; }
.sf-badge-range { background: #5f4c27; color: #fff2c2; }
.sf-badge-area { background: #60456f; color: #f7eaff; }
.sf-badge-support { background: #4e5563; color: #f0f3f8; }
.sf-badge-best { background: #6a5423; color: #fff0bd; }
 
 
 
 
/* ============================================================
  11. ALERTS / NOTES / RULES
  ============================================================ */
 
 
.sf-note,
.sf-alert,
.sf-warning,
.sf-rule {
  color: var(--sf-text);
  border-radius: var(--sf-radius-sm);
  padding: 8px 11px;
  margin: 8px 0;
}
 
 
.sf-note {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-left: 4px solid var(--sf-gold);
}
 
 
.sf-alert,
.sf-warning {
  background: rgba(94,63,18,.35);
  border: 1px solid rgba(216,180,106,.24);
  border-left: 4px solid #d8a447;
}
 
 
.sf-alert b,
.sf-warning b {
  display: block;
  color: var(--sf-gold-bright);
  margin-bottom: 3px;
}
 
 
.sf-alert-info {
  background: rgba(38,58,92,.34);
  border-left-color: #6fa8dc;
}
 
 
.sf-alert-warning {
  background: rgba(94,63,18,.35);
  border-left-color: #d8a447;
}
 
 
.sf-alert-danger,
.sf-note--red {
  background: rgba(80,30,25,.30);
  border-left-color: var(--sf-red);
}
 
 
.sf-rule {
  border-left: 4px solid var(--sf-red);
  background: rgba(80,30,25,.30);
}
 
 
 
 
/* ============================================================
  12. PROGRESS LINES
  ============================================================ */
 
 
.sf-progress-line {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: var(--sf-gap);
  margin: 0 0 14px;
}
 
 
.sf-progress-line div {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  padding: 8px;
  text-align: center;
}
 
 
.sf-progress-line b {
  display: inline-block;
  width: 24px;
  height: 24px;
  border-radius: 999px;
  line-height: 24px;
  background: rgba(216,180,106,.24);
  color: var(--sf-gold-bright);
  margin-bottom: 4px;
}
 
 
.sf-progress-line span {
  display: block;
  color: var(--sf-text);
  font-size: .88rem;
}
 
 
 
 
/* ============================================================
  13. CODE / SCRIPTING DOCS
  ============================================================ */
 
 
.sf-codeblock,
.sf-codebox,
.sf-page pre,
.sinfar-page pre {
  background: #120d10;
  color: var(--sf-text);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  padding: 10px 12px;
  overflow-x: auto;
  line-height: 1.45;
}
}


.sf-table--gold th {
 
background: #2a2113;
.sf-codeblock code,
border-bottom: 1px solid #6f5730;
.sf-codebox code,
.sf-page pre code,
.sinfar-page pre code {
  background: transparent;
  border: 0;
  padding: 0;
  color: var(--sf-text);
}
}


.sf-table--green {
 
background: #111a12;
 
border: 1px solid #446b35;
 
/*
============================================================
  14. IMAGES / SCREENSHOTS
  ============================================================ */
 
 
.sf-img-frame {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  padding: 6px;
  margin: 8px 0 12px;
}
}


.sf-table--green th {
 
background: #183618;
.sf-img-frame img {
border-bottom: 1px solid #446b35;
  max-width: 100%;
  height: auto;
  display: block;
  border-radius: 4px;
}
}
/*


.sf-table--blue {
 
background: #101820;
 
border: 1px solid #34577a;
 
============================================================
  MAIN PAGE IMAGE SLOTS
  ============================================================ */
 
 
.sf-img-slot{
    position:relative;
    display:block;
    width:100%;
    overflow:hidden;
 
 
    border-radius:8px;
    border:1px solid var(--sf-border);
 
 
    background:#120d10;
}
}


.sf-table--blue th {
 
background: #17324a;
.sf-main-page .sf-journey-img{
border-bottom: 1px solid #34577a;
    aspect-ratio:16/9;
    margin:0 0 14px;
}
}


.sf-table--red {
 
background: #1a1010;
.sf-main-page .sf-feature-img{
border: 1px solid #7a342f;
    aspect-ratio:16/9;
    margin:0 0 12px;
}
}


.sf-table--red th {
 
background: #4a1717;
.sf-img-slot img{
border-bottom: 1px solid #7a342f;
    display:block;
    width:100%;
    height:100%;
    object-fit:cover;
}
}


.sf-table--purple {
 
background: #19111d;
 
border: 1px solid #5b3b78;
 
/* ============================================================
  15. CHAT CHANNEL COLOR LOCKS
  Match in-game channel color identity.
  ============================================================ */
 
 
.sf-chan {
  font-weight: 900;
  text-shadow: 0 1px 2px rgba(0,0,0,.8);
}
}


.sf-table--purple th {
 
background: #301842;
.sf-chan-shout  { color: #feef50; }
border-bottom: 1px solid #5b3b78;
.sf-chan-dm      { color: #f67271; }
.sf-chan-event  { color: #ab23f2; }
.sf-chan-action  { color: #b56a23; }
.sf-chan-ooc    { color: #b1a2bd; }
.sf-chan-pvp    { color: #fe5f2e; }
.sf-chan-sex    { color: #f520e1; }
.sf-chan-build  { color: #b7f520; }
.sf-chan-ffa    { color: #20bff0; }
 
 
.sf-chan-talk    { color: #fefefe; }
.sf-chan-whisper { color: #b0b0b0; }
.sf-chan-quiet  { color: #777777; }
.sf-chan-silent  { color: #666666; }
.sf-chan-yell    { color: #d92324; }
.sf-chan-party  { color: #fefefe; }
 
 
 
 
/* ============================================================
  16. FOOTERS
  ============================================================ */
 
 
.sf-footerlinks,
.sf-footer {
  margin-top: 14px;
  padding-top: 10px;
  border-top: 1px solid var(--sf-border);
  color: var(--sf-gold);
}
}


.sf-name {
 
color: #f0d28a;
.sf-footer {
  text-align: center;
  background: #120d10;
  padding: 12px 14px;
}
}


.sf-value {
 
color: #f4c96b;
 
text-align: center;
 
/* ============================================================
  17. LEGACY COMPATIBILITY
  Keeps older remaster pages readable without preserving chaos.
  ============================================================ */
 
 
.sf-card--gold,
.sf-table--gold {
  background: var(--sf-bg-panel);
  border-color: var(--sf-border);
}
}


.sf-good {
 
color: #9fe6bd;
.sf-card--green,
text-align: center;
.sf-table--green {
  background: rgba(17,26,18,.82);
  border-color: rgba(68,107,53,.72);
}
}


.sf-center {
 
text-align: center;
.sf-card--blue,
.sf-table--blue {
  background: rgba(16,24,32,.82);
  border-color: rgba(52,87,122,.72);
}
}


/* Standard PP table column widths */
 
.sf-pp-table col.sf-col-name {
.sf-card--red,
width: 42%;
.sf-table--red {
  background: rgba(26,16,16,.82);
  border-color: rgba(122,52,47,.72);
}
}


.sf-pp-table col.sf-col-pp {
 
width: 8%;
.sf-card--purple,
.sf-table--purple {
  background: rgba(25,17,29,.82);
  border-color: rgba(91,59,120,.72);
}
}


/* Armor / property table column helpers */
.sf-armor-pp col.sf-col-armor-name { width: 30%; }
.sf-armor-pp col.sf-col-armor-type { width: 20%; }
.sf-armor-pp col.sf-col-armor-ac { width: 15%; }
.sf-armor-pp col.sf-col-armor-dex { width: 20%; }
.sf-armor-pp col.sf-col-armor-pp { width: 15%; }


.sf-property-table col.sf-col-property { width: 42%; }
.sf-heading--gold { color: var(--sf-gold-bright); border-bottom-color: var(--sf-border); }
.sf-property-table col.sf-col-bonus { width: 18%; }
.sf-heading--green { color: #91d38f; border-bottom-color: #446b35; }
.sf-property-table col.sf-col-max { width: 20%; }
.sf-heading--blue { color: #8fc6ff; border-bottom-color: #34577a; }
.sf-property-table col.sf-col-cost { width: 20%; }
.sf-heading--red { color: #ff9c8f; border-bottom-color: #7a342f; }
.sf-heading--purple { color: #c49cff; border-bottom-color: #5b3b78; }


/* ---------- Collapsible Dockets ---------- */


.sf-docket {
.sf-docket {
width: 100%;
  width: 100%;
background: #181214;
  background: var(--sf-bg-panel);
color: #f4efe6;
  color: var(--sf-text);
border: 1px solid #6f5730;
  border: 1px solid var(--sf-border);
margin: 9px 0 8px 0;
  border-radius: var(--sf-radius-sm);
  margin: 9px 0 8px;
}
}


.sf-docket th {
.sf-docket th {
background: #2a2113;
  background: rgba(216,180,106,.14);
color: #d8b46a;
  color: var(--sf-gold-bright);
font-family: Georgia, serif;
  text-align: left;
font-size: 21px;
  padding: 9px 12px;
text-align: left;
  border-bottom: 1px solid var(--sf-border);
padding: 9px 12px;
border-bottom: 1px solid #6f5730;
}
}


.sf-docket td {
.sf-docket td {
background: #0f0b0d;
  background: rgba(18,14,12,.72);
color: #f4efe6;
  color: var(--sf-text);
padding: 10px 12px;
  padding: 10px 12px;
}
}


.sf-docket--green {
 
border-color: #446b35;
 
 
/* ============================================================
  18. LISTS
  ============================================================ */
 
 
.sf-page ul,
.sf-page ol,
.sinfar-page ul,
.sinfar-page ol {
  margin: 6px 0 8px;
  padding-left: 22px;
}
}


.sf-docket--green th {
 
background: #183618;
.sf-page li,
border-bottom-color: #446b35;
.sinfar-page li {
  margin: 2px 0;
}
}


.sf-docket--blue {
 
border-color: #34577a;
 
 
/* ============================================================
  19. MOBILE RULES
  ============================================================ */
 
 
@media screen and (max-width: 900px) {
  .sf-grid-4,
  .sf-grid-5,
  .sf-status-grid,
  .sf-start-status {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
 
 
  .sf-decision-grid,
  .sf-index-grid {
    grid-template-columns: 1fr;
  }
}
 
 
@media screen and (max-width: 720px) {
  .sf-page,
  .sinfar-page {
    padding: 12px;
  }
 
 
  .sf-quickbar,
  .sf-grid-2,
  .sf-grid-3,
  .sf-grid-4,
  .sf-grid-5,
  .sf-status-grid,
  .sf-start-status,
  .sf-progress-line {
    grid-template-columns: 1fr;
  }
 
 
  .sf-table {
    table-layout: auto;
    font-size: .92rem;
  }
 
 
  .sf-channel-table th:nth-child(n),
  .sf-channel-table td:nth-child(n),
  .sf-setup-table th:nth-child(n),
  .sf-setup-table td:nth-child(n) {
    width: auto;
  }
}
/* ============================================================
  Sinfar Main Page Module v1.0
  Purpose: cinematic front-door layout for Main Page only.
  Requires wrapper: <div class="sf-page sf-main-page">
  ============================================================ */
 
 
.sf-main-page {
  max-width: 1320px;
  margin: 0 auto;
}
 
 
/* ---------- Cinematic Main Hero ---------- */
 
.sf-main-page .sf-hero-main {
  position: relative;
  isolation: isolate;
 
  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;
 
  width: 100%;
  aspect-ratio: 16 / 9;
  min-height: 0;
 
  margin: 0 0 18px;
  padding: 64px 48px;
  overflow: hidden;
 
  border-radius: 12px;
  background: #0b0d11;
  text-align: center;
}
 
 
/* ---------- Main Page Hero Artwork ---------- */
 
.sf-main-page .sf-hero-art-slot {
  position: absolute;
  inset: 0;
  z-index: 0;
 
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
 
  border: 0;
  border-radius: inherit;
  background: #0b0d11;
}
 
.sf-main-page .sf-hero-art-slot > a,
.sf-main-page .sf-hero-art-slot > span,
.sf-main-page .sf-hero-art-slot .mw-file-element {
  display: block;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
}
 
.sf-main-page .sf-hero-art-slot img {
  display: block;
  width: 100%;
  height: 100%;
  max-width: none;
  margin: 0;
  padding: 0;
 
  object-fit: cover;
  object-position: center center;
}
 
/* Flat dark overlay for text readability. */
 
.sf-main-page .sf-hero-art-slot::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
 
  background: rgba(5, 8, 12, .48);
  pointer-events: none;
}
 
 
/* Keep hero text above the artwork and overlay. */
 
.sf-main-page .sf-hero-main > :not(.sf-hero-art-slot) {
  position: relative;
  z-index: 2;
}
}


.sf-docket--blue th {
 
background: #17324a;
.sf-main-page .sf-hero-main h1 {
border-bottom-color: #34577a;
  margin: 0 0 6px;
  color: var(--sf-gold-bright);
 
  font-size: 3.15rem;
  line-height: 1.08;
  letter-spacing: .08em;
  text-transform: uppercase;
 
  text-shadow:
    0 2px 3px rgba(0,0,0,.95),
    0 0 14px rgba(0,0,0,.78);
}
}


.sf-docket--red {
 
border-color: #7a342f;
.sf-main-page .sf-hero-main .sf-eyebrow,
.sf-main-page .sf-hero-main p {
  text-shadow: 0 2px 4px rgba(0,0,0,.95);
}
}


.sf-docket--red th {
 
background: #4a1717;
.sf-main-page .sf-hero-main p {
border-bottom-color: #7a342f;
  max-width: 680px;
  margin: 0 0 12px;
  font-size: 1.08rem;
}
}


.sf-docket--purple {
 
border-color: #5b3b78;
/* ---------- Main Page Journey Cards ---------- */
 
 
.sf-main-page .sf-decision-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
  margin-bottom: 24px;
}
}


.sf-docket--purple th {
 
background: #301842;
.sf-main-page .sf-decision {
border-bottom-color: #5b3b78;
  min-height: 300px;
  padding: 22px;
}
}


/* ---------- Footer ---------- */


.sf-footer {
.sf-main-page .sf-decision h3 {
margin-top: 14px;
  font-size: 1.45rem;
padding: 12px 14px;
}
text-align: center;
 
background: #120d10;
 
border-top: 1px solid #6f5730;
/* ---------- Main Page Feature Cards ---------- */
color: #f4efe6;
 
 
.sf-main-page .sf-grid-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
  margin-bottom: 24px;
}
 
 
.sf-main-page .sf-card {
  min-height: 190px;
  padding: 20px;
}
 
 
.sf-main-page .sf-card h3 {
  color: var(--sf-gold-bright);
  margin: 0 0 8px;
  font-size: 1.25rem;
}
 
 
.sf-main-page .sf-card p {
  margin: 0 0 10px;
}
 
 
/* ---------- Main Page Action Links ---------- */
 
 
.sf-main-page .sf-action-links {
  margin-top: 12px;
  padding: 0;
  background: transparent;
  border: 0;
  box-shadow: none;
  line-height: 1.8;
}
 
 
.sf-main-page .sf-action-links a,
.sf-main-page .sf-action-links a:visited,
.sf-main-page .sf-action-links a.external,
.sf-main-page .sf-action-links a.external:visited {
  background: transparent;
  border: 0;
  padding: 0;
  color: var(--sf-link);
  font-weight: 800;
  text-decoration: none;
}
 
 
.sf-main-page .sf-action-links a:hover,
.sf-main-page .sf-action-links a.external:hover {
  color: var(--sf-link-hover);
  text-decoration: underline;
}
 
 
/* ---------- Community Strip ---------- */
 
 
.sf-main-page .sf-quickbar {
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
}
 
 
/* ---------- Main Page Responsive Layout ---------- */
 
/* Split desktop, tablets, landscape */
@media screen and (min-width: 721px) and (max-width: 860px) {
 
  .sf-main-page .sf-decision-grid,
  .sf-main-page .sf-grid-3 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
  }
 
  .sf-main-page .sf-quickbar {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }
 
  .sf-main-page .sf-decision,
  .sf-main-page .sf-card {
    min-height: 0;
    padding: 16px;
  }
 
  .sf-main-page .sf-hero-main {
    aspect-ratio: 16 / 9;
    min-height: 0;
    padding: 32px 20px;
  }
 
  .sf-main-page .sf-hero-main h1 {
    font-size: 2.35rem;
  }
}
 
 
/* Phones */
@media screen and (max-width: 720px) {
 
  .sf-main-page .sf-decision-grid,
  .sf-main-page .sf-grid-3,
  .sf-main-page .sf-quickbar {
    grid-template-columns: 1fr;
  }
 
  .sf-main-page .sf-hero-main {
    aspect-ratio: 16 / 9;
    min-height: 0;
    padding: 24px 16px;
  }
 
  .sf-main-page .sf-hero-main h1 {
    font-size: 2.1rem;
  }
}
 
 
/* Small phones */
@media screen and (max-width: 520px) {
 
  .sf-main-page .sf-hero-main {
    padding: 18px 14px;
  }
 
  .sf-main-page .sf-hero-main .sf-eyebrow {
    font-size: .66rem;
  }
 
  .sf-main-page .sf-hero-main h1 {
    margin-bottom: 4px;
    font-size: 1.85rem;
  }
 
  .sf-main-page .sf-hero-main p {
    margin-bottom: 7px;
    font-size: .9rem;
  }
}
 
/* =========================================================
  MAIN PAGE COMMUNITY LINKS — DISCORD / PATREON
  ========================================================= */
 
.sf-main-page .community-link-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;
 
  width: 100%;
  max-width: 100%;
  margin: 8px 0 16px;
}
 
.sf-main-page .community-link {
  display: flex;
  align-items: center;
  justify-content: center;
 
  width: 100%;
  min-width: 0;
  min-height: 58px;
  padding: 8px 16px;
  overflow: hidden;
 
  border: 0;
  border-radius: 6px;
  box-sizing: border-box;
}
 
/* Control MediaWiki-generated wrappers around file images. */
 
.sf-main-page .community-link > p,
.sf-main-page .community-link > span,
.sf-main-page .community-link > a,
.sf-main-page .community-link .mw-file-description {
  display: flex;
  align-items: center;
  justify-content: center;
 
  width: 100%;
  min-width: 0;
  margin: 0;
  padding: 0;
}
 
.sf-main-page .community-link img,
.sf-main-page .community-link .mw-file-element {
  display: block;
 
  width: auto;
  height: 30px;
  max-width: 82%;
  margin: 0 auto;
 
  object-fit: contain;
}
 
.sf-main-page .community-link--discord {
  background-color: #5865f2;
}
 
.sf-main-page .community-link--patreon {
  background-color: #ff424d;
}
 
@media screen and (max-width: 520px) {
  .sf-main-page .community-link-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}
/* ============================================================
  MAIN PAGE — COLORED CARD SYSTEM
  Static layered gradients only. No glow, blur, or filters.
  ============================================================ */
 
 
/* ---------- Shared Card Construction ---------- */
 
 
.sf-main-page .sf-journey-card,
.sf-main-page .sf-feature-card {
  position: relative;
  overflow: hidden;
  isolation: isolate;
 
 
  background-color: #181214;
  background-image:
    linear-gradient(
      135deg,
      rgba(255,255,255,.025) 0%,
      transparent 34%,
      rgba(0,0,0,.12) 70%,
      rgba(0,0,0,.24) 100%
    ),
    repeating-linear-gradient(
      118deg,
      rgba(255,255,255,.014) 0,
      rgba(255,255,255,.014) 1px,
      transparent 1px,
      transparent 7px
    );
 
 
  border: 1px solid var(--sf-card-border, var(--sf-border));
}
 
 
/* Subtle inner line without glow or shadow. */
.sf-main-page .sf-journey-card::after,
.sf-main-page .sf-feature-card::after {
  content: "";
  position: absolute;
  inset: 4px;
  z-index: -1;
 
 
  pointer-events: none;
  border: 1px solid rgba(244,239,230,.035);
  border-radius: 6px;
}
 
 
/* ---------- Card Header ---------- */
 
 
.sf-main-page .sf-card-head {
  display: flex;
  align-items: center;
  gap: 10px;
 
 
  min-height: 48px;
  margin: -22px -22px 14px;
  padding: 10px 16px;
 
 
  background-color: var(--sf-card-head, rgba(216,180,106,.10));
  background-image:
    linear-gradient(
      90deg,
      rgba(255,255,255,.035),
      transparent 48%,
      rgba(0,0,0,.16)
    ),
    repeating-linear-gradient(
      120deg,
      rgba(255,255,255,.012) 0,
      rgba(255,255,255,.012) 1px,
      transparent 1px,
      transparent 6px
    );
 
 
  border-bottom: 1px solid var(--sf-card-border, var(--sf-border));
}
 
 
.sf-main-page .sf-card-head h3 {
  flex: 1;
  min-width: 0;
  margin: 0;
 
 
  color: var(--sf-gold-bright);
  font-size: 1.25rem;
  line-height: 1.15;
}
 
 
/* ---------- Header Icon Slot ---------- */
 
 
.sf-main-page .sf-card-icon {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;
 
 
  width: 38px;
  height: 38px;
}
 
 
.sf-main-page .sf-card-icon img,
.sf-main-page .sf-card-icon .mw-file-element {
  display: block;
  width: 100%;
  height: 100%;
  max-width: 100%;
 
 
  object-fit: contain;
}
 
 
/* ---------- Journey Cards ---------- */
 
 
.sf-main-page .sf-journey-card {
  --sf-card-border: rgba(216,180,106,.42);
  min-height: 100%;
}
 
 
/* ---------- Featured System Cards ---------- */
 
 
.sf-main-page .sf-feature-card {
  --sf-card-border: rgba(216,180,106,.34);
 
 
  display: flex;
  flex-direction: column;
  min-height: 100%;
  padding: 14px;
}
 
 
.sf-main-page .sf-feature-card .sf-card-head {
  min-height: 40px;
  margin: -14px -14px 12px;
  padding: 8px 11px;
  gap: 8px;
}
 
 
.sf-main-page .sf-feature-card .sf-card-head h3 {
  font-size: 1.02rem;
}
 
 
.sf-main-page .sf-feature-card .sf-card-icon {
  width: 23px;
  height: 23px;
}
 
 
.sf-main-page .sf-feature-card .sf-action-links {
  margin-top: auto;
  padding-top: 8px;
}
 
 
/* ============================================================
  CATEGORY THEMES
  ============================================================ */
 
 
/* New arrivals — crimson */
.sf-main-page .sf-theme-crimson {
  --sf-card-head: rgba(83,20,20,.92);
  --sf-card-border: rgba(155,69,57,.70);
  background-color: #1b1011;
}
 
 
/* Player resources — midnight blue */
.sf-main-page .sf-theme-blue {
  --sf-card-head: rgba(18,46,74,.94);
  --sf-card-border: rgba(62,104,143,.72);
  background-color: #101922;
}
 
 
/* Builder resources — forest green */
.sf-main-page .sf-theme-green {
  --sf-card-head: rgba(29,65,38,.94);
  --sf-card-border: rgba(65,110,67,.72);
  background-color: #111a14;
}
 
 
/* Community — royal purple */
.sf-main-page .sf-theme-purple {
  --sf-card-head: rgba(67,32,79,.94);
  --sf-card-border: rgba(104,68,124,.72);
  background-color: #19121d;
}
 
 
/* Housing — slate blue */
.sf-main-page .sf-theme-slate {
  --sf-card-head: rgba(40,57,72,.94);
  --sf-card-border: rgba(76,102,123,.72);
  background-color: #141a1f;
}
 
 
/* Businesses — warm tavern bronze */
.sf-main-page .sf-theme-bronze {
  --sf-card-head: rgba(83,52,24,.94);
  --sf-card-border: rgba(133,89,43,.72);
  background-color: #1d1610;
}
 
 
/* Character development — arcane violet */
.sf-main-page .sf-theme-arcane {
  --sf-card-head: rgba(68,42,88,.94);
  --sf-card-border: rgba(104,70,132,.72);
  background-color: #19131e;
}
 
 
/* Dungeon running — deep teal */
.sf-main-page .sf-theme-teal {
  --sf-card-head: rgba(21,62,66,.94);
  --sf-card-border: rgba(48,104,108,.72);
  background-color: #101b1c;
}
 
 
/* PvP — battle red */
.sf-main-page .sf-theme-battle {
  --sf-card-head: rgba(92,31,26,.94);
  --sf-card-border: rgba(145,65,54,.74);
  background-color: #1c1110;
}
 
 
/* Custom scripting — dark builder green */
.sf-main-page .sf-theme-script {
  --sf-card-head: rgba(37,67,42,.94);
  --sf-card-border: rgba(71,111,73,.72);
  background-color: #121a13;
}
/* ============================================================
  REFERENCE MANUAL — DEFINITIVE WIDTH CONTAINMENT
  Keeps later source examples from widening the entire manual.
  ============================================================ */
 
 
.sf-manual-page,
.sf-manual-layout,
.sf-manual-content,
.sf-manual-toc {
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}
 
 
.sf-manual-layout {
  width: 100%;
}
 
 
.sf-manual-content {
  width: 100%;
  overflow: hidden;
}
 
 
/* Every direct manual component must be permitted to shrink. */
.sf-manual-content > *,
.sf-manual-example,
.sf-manual-page .sf-card,
.sf-manual-page .sf-note,
.sf-manual-page .sf-alert,
.sf-manual-page .sf-quickbar,
.sf-manual-page .sf-start-status,
.sf-manual-page .sf-progress-line,
.sf-manual-page .sf-img-frame,
.sf-manual-page .sf-footerlinks {
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}
 
 
/* Ordinary prose and callout content must wrap. */
.sf-manual-page p,
.sf-manual-page li,
.sf-manual-page dd,
.sf-manual-page span,
.sf-manual-page .sf-note,
.sf-manual-page .sf-alert {
  overflow-wrap: anywhere;
  word-break: normal;
}
 
 
/* Preformatted source remains intact, but scrolls only
  inside its own code box. */
.sf-manual-page pre,
.sf-manual-page .sf-codeblock,
.sf-manual-page .sf-codebox {
  display: block;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  box-sizing: border-box;
 
 
  white-space: pre;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
}
 
 
/* Inline code inside tables and paragraphs may wrap. */
.sf-manual-page :not(pre) > code {
  white-space: normal;
  overflow-wrap: anywhere;
  word-break: break-word;
}
 
 
/* Tables may never establish the width of the whole page. */
.sf-manual-page .sf-table {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  table-layout: fixed;
}
 
 
.sf-manual-page .sf-table th,
.sf-manual-page .sf-table td {
  min-width: 0;
  max-width: 100%;
  overflow-wrap: anywhere;
  word-break: break-word;
}
 
 
/* Explicit wrapper for tables that genuinely need more width. */
.sf-manual-page .sf-table-scroll {
  display: block;
  width: 100%;
  max-width: 100%;
  min-width: 0;
 
 
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
}
 
 
/* Desktop manual layout. */
@media screen and (min-width: 901px) {
  .sf-manual-layout {
    grid-template-columns: 240px minmax(0, 1fr);
  }
}
 
 
/* Mobile and narrow-tablet layout. */
@media screen and (max-width: 900px) {
  .sf-manual-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    width: 100%;
    max-width: 100%;
  }
 
 
  .sf-manual-toc {
    position: static;
    width: 100%;
    max-width: 100%;
    max-height: none;
    overflow-x: hidden;
  }
 
 
  .sf-manual-content {
    width: 100%;
    max-width: 100%;
    overflow: hidden;
  }
 
 
  .sf-manual-page .sf-table th,
  .sf-manual-page .sf-table td {
    padding-left: 7px;
    padding-right: 7px;
  }
 
 
  /* Only deliberately wide tables scroll horizontally. */
  .sf-manual-page .sf-table-scroll .sf-table {
    width: 760px;
    min-width: 760px;
    max-width: none;
  }
}
 
 
 
 
/* ================================================================
  SINFAR WIKI MAIN v3.2 — RESPONSIVE PRODUCTION-READINESS PASS
  Complete premium-module replacement. Scoped to .sf-hub.
  ================================================================ */
 
.sf-hub {
  --hub-void: #07090e;
  --hub-void-2: #0b0f17;
  --hub-plate: #0f131d;
  --hub-plate-2: #141923;
  --hub-brass: #c8a25c;
  --hub-brass-bright: #e6c987;
  --hub-line: rgba(200,162,92,.28);
  --hub-line-strong: rgba(200,162,92,.5);
  --hub-verdigris: #57b7a3;
  --hub-parchment: #ece1c9;
  --hub-slate: #9ba3b4;
  --hub-rose: #e0788a;
  --hub-display: "Trajan Pro 3", "Cinzel", "Palatino Linotype", Palatino, Georgia, serif;
  --hub-reading: system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  --hub-mono: "Cascadia Code", "Cascadia Mono", Consolas, monospace;
  container: sf-hub / inline-size;
  overflow: clip;
  background:
    radial-gradient(circle at 50% 0, rgba(87,183,163,.04), transparent 34rem),
    var(--hub-void-2);
  color: var(--hub-parchment);
  font-family: var(--hub-reading);
}
 
.sf-hub *, .sf-hub *::before, .sf-hub *::after { box-sizing: border-box; }
.sf-hub p, .sf-hub h1, .sf-hub h2, .sf-hub h3 { margin-block-start: 0; }
.sf-hub a, .sf-hub a:visited { color: inherit; text-decoration: none; }
.sf-hub a:hover { color: var(--hub-brass-bright); }
 
/* Masthead */
.sf-hub-masthead {
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  grid-template-areas: "brand search" "nav nav";
  margin-inline: -12px;
  border-block: 1px solid var(--hub-line);
  background: rgba(7,9,14,.98);
}
 
.sf-hub-brand {
  grid-area: brand;
  display: flex;
  align-items: center;
  min-width: 0;
  min-height: 70px;
  padding: 11px 14px;
  border-right: 1px solid var(--hub-line);
}
 
.sf-hub-stewards { display: grid; width: 100%; min-width: 0; gap: 6px; }
.sf-hub-stewards-label { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--hub-verdigris); font: 700 .52rem/1.2 var(--hub-mono); letter-spacing: .15em; text-transform: uppercase; }
.sf-hub-stewards-label strong { flex: none; color: var(--hub-rose); font-size: .49rem; letter-spacing: .12em; }
.sf-hub-stewards-list { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); border: 1px solid var(--hub-line); background: rgba(200,162,92,.025); }
.sf-hub-stewards-list > div { display: grid; min-width: 0; gap: 2px; padding: 6px 5px 5px; border-right: 1px solid var(--hub-line); text-align: center; }
.sf-hub-stewards-list > div:last-child { border-right: 0; }
.sf-hub-stewards-list strong { overflow: hidden; color: var(--hub-brass-bright); font: 600 .6rem/1.15 var(--hub-mono); letter-spacing: .08em; text-overflow: ellipsis; text-transform: uppercase; }
.sf-hub-stewards-list small { color: var(--hub-slate); font: 500 .46rem/1.2 var(--hub-reading); letter-spacing: .03em; }
 
.sf-hub-search {
  grid-area: search;
  display: grid;
  place-items: center;
  padding: 10px 12px;
}
.sf-hub-search a {
  display: grid;
  min-height: 38px;
  padding: 0 13px;
  place-items: center;
  border: 1px solid var(--hub-line-strong);
  border-radius: 3px;
  color: var(--hub-brass-bright) !important;
  font-size: .72rem;
  font-weight: 700;
}
 
.sf-hub-nav {
  grid-area: nav;
  display: grid;
  grid-template-columns: repeat(2,minmax(0,1fr));
  border-top: 1px solid var(--hub-line);
}
.sf-hub-nav-item { min-width: 0; border-right: 1px solid var(--hub-line); border-bottom: 1px solid var(--hub-line); }
.sf-hub-nav-item:nth-child(2n), .sf-hub-nav-item:last-child { border-right: 0; }
.sf-hub-nav-item:last-child:nth-child(odd) { grid-column: 1 / -1; }
.sf-hub-nav a {
  display: grid;
  min-height: 40px;
  padding: 8px;
  place-items: center;
  color: var(--hub-brass-bright) !important;
  font-size: .74rem;
  font-weight: 700;
  letter-spacing: .025em;
}
.sf-hub-nav a::after {
  display: block;
  width: 30px;
  height: 1px;
  margin-top: 7px;
  background: linear-gradient(90deg,transparent,var(--hub-brass-bright),transparent);
  opacity: .72;
  content: "";
}
.sf-hub-nav a:hover::after, .sf-hub-nav a:focus-visible::after { width: 46px; opacity: 1; }
.sf-hub-nav a:hover, .sf-hub-nav a:focus-visible { background: rgba(200,162,92,.08); }
 
/* Hero */
.sf-hub-hero {
  position: relative;
  display: grid;
  min-height: clamp(290px,74vw,410px);
  margin: 10px 0 0;
  overflow: hidden;
  border: 1px solid var(--hub-line-strong);
  border-radius: 5px;
  background: var(--hub-void);
  isolation: isolate;
}
.sf-hub-hero-art, .sf-hub-hero-art > a, .sf-hub-hero-art > span,
.sf-hub-hero-art [typeof~="mw:File"], .sf-hub-hero-art .mw-file-description { position: absolute; inset: 0; display: block; }
.sf-hub-hero-art img, .sf-hub-hero-art .mw-file-element { width: 100%; height: 100%; object-fit: cover; object-position: center; }
.sf-hub-hero::after {
  position: absolute;
  inset: 0;
  z-index: 1;
  content: "";
  background: linear-gradient(180deg,rgba(7,9,14,.08),rgba(7,9,14,.18) 40%,rgba(7,9,14,.82));
  pointer-events: none;
}
.sf-hub-hero-copy {
  position: static;
  align-self: center;
  justify-self: center;
  width: min(92%,720px);
  padding: 26px 16px 24px;
  text-align: center;
}
.sf-hub-hero-lockup, .sf-hub-hero-copy > p, .sf-hub-primary { position: relative; z-index: 2; }
.sf-hub-hero-lockup { width: clamp(15rem,38vw,27rem); margin: 9px auto 7px; line-height: 0; }
.sf-hub-hero-lockup img { display: block; width: 100%; height: auto; filter: drop-shadow(0 3px 5px rgba(0,0,0,.94)) drop-shadow(0 0 13px rgba(230,201,135,.22)); }
.sf-hub-kicker, .sf-hub-heading-label {
  color: var(--hub-verdigris);
  font: 700 .68rem/1.3 var(--hub-mono);
  letter-spacing: .2em;
  text-transform: uppercase;
}
.sf-hub-hero .sf-hub-kicker {
  position: absolute;
  top: clamp(18px,3vw,30px);
  left: 50%;
  z-index: 3;
  display: inline-flex;
  justify-content: center;
  max-width: calc(100% - 24px);
  padding: 5px 12px 4px;
  border: 1px solid var(--hub-line);
  background: rgba(7,9,14,.72);
  color: var(--hub-brass-bright);
  text-shadow: 0 1px 4px #000;
  transform: translateX(-50%);
  white-space: nowrap;
}
.sf-hub-hero h1 {
  margin: 7px 0 5px;
  color: var(--hub-brass-bright);
  font: 400 clamp(2.35rem,12vw,4.6rem)/.95 var(--hub-display);
  letter-spacing: .1em;
  text-shadow: 0 2px 8px #000;
  text-transform: uppercase;
}
.sf-hub-hero-copy > p { margin: 0 auto 15px; color: var(--hub-parchment); font-size: clamp(.86rem,2.8vw,1rem); }
.sf-hub-primary { display: inline-block; }
.sf-hub-primary a {
  display: grid;
  min-height: 42px;
  padding: 0 20px;
  place-items: center;
  border: 1px solid var(--hub-brass);
  background: rgba(7,9,14,.84);
  color: var(--hub-brass-bright) !important;
  font: 700 .74rem/1 var(--hub-display);
  letter-spacing: .08em;
  text-transform: uppercase;
}
 
/* Shared sections */
.sf-hub-section { padding: 34px 0 0; }
.sf-hub-heading { display: grid; gap: 6px; margin-bottom: 16px; }
.sf-hub-heading h2 {
  margin: 0;
  color: var(--hub-brass-bright);
  font: 400 clamp(1.35rem,5vw,1.85rem)/1.12 var(--hub-display);
  letter-spacing: .035em;
}
.sf-hub-heading h2::after {
  display: block;
  width: 56px;
  height: 1px;
  margin-top: 10px;
  background: linear-gradient(90deg,var(--hub-brass),transparent);
  content: "";
}
 
/* Tasks */
.sf-task-grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 7px; }
.sf-task {
  display: grid;
  grid-template-columns: 44px minmax(0,1fr);
  align-items: center;
  min-height: 70px;
  border: 1px solid var(--hub-line);
  background: linear-gradient(180deg,rgba(15,19,29,.88),rgba(9,12,19,.94));
}
.sf-task-icon, .sf-access-icon {
  display: grid;
  width: 100%;
  height: 100%;
  place-items: center;
  border-right: 1px solid var(--hub-line);
  color: var(--hub-brass-bright);
  font: 400 1.05rem/1 var(--hub-display);
}
.sf-task > span:last-child, .sf-access > span:last-child { display: grid; gap: 4px; min-width: 0; padding: 11px 12px; }
.sf-task strong, .sf-access strong { color: var(--hub-parchment); font-size: .88rem; }
.sf-task small, .sf-access small { color: var(--hub-slate); font-size: .76rem; line-height: 1.45; }
.sf-task:hover, .sf-task:focus-within { border-color: var(--hub-line-strong); background: rgba(200,162,92,.06); }
 
/* Downloads and access */
.sf-access-grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 7px; }
.sf-access {
  display: grid;
  grid-template-columns: 46px minmax(0,1fr);
  min-height: 72px;
  border: 1px solid var(--hub-line);
  background: linear-gradient(135deg,rgba(200,162,92,.07),rgba(15,19,29,.72));
}
.sf-access:hover, .sf-access:focus-within { border-color: var(--hub-line-strong); background: rgba(200,162,92,.08); }
 
/* Resource directories */
.sf-directory-grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 10px; }
.sf-directory { --directory-accent: var(--hub-brass); min-width: 0; border: 1px solid var(--hub-line); border-top: 2px solid var(--directory-accent); background: linear-gradient(160deg,color-mix(in srgb,var(--directory-accent) 6%,var(--hub-plate)),var(--hub-void)); }
.sf-directory--blue { --directory-accent: #5e91b8; }
.sf-directory--green { --directory-accent: #6c9f62; }
.sf-directory-head { display: grid; grid-template-columns: 42px minmax(0,1fr); align-items: center; min-height: 62px; border-bottom: 1px solid var(--hub-line); }
.sf-directory-head > span { display: grid; height: 100%; place-items: center; border-right: 1px solid var(--hub-line); color: var(--hub-brass-bright); }
.sf-directory h3 { margin: 0; padding: 10px 12px; color: var(--hub-brass-bright); font: 400 1rem/1.2 var(--hub-display); }
.sf-directory-links { display: grid; grid-template-columns: minmax(0,1fr); gap: 0; padding: 7px 14px 12px; color: var(--hub-parchment); font-size: .8rem; line-height: 1.7; }
.sf-directory-links br { display: none; }
.sf-directory-links a { padding: 3px 0; text-decoration: underline; text-decoration-color: var(--hub-line-strong); text-underline-offset: 3px; }
 
/* Living world */
.sf-community-grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 7px; }
.sf-community { display: grid; gap: 5px; min-width: 0; padding: 14px 15px; border: 1px solid var(--hub-line); border-left: 2px solid #9a6cac; background: rgba(15,19,29,.65); }
.sf-community strong { color: var(--hub-parchment); font-size: .88rem; }
.sf-community small { color: var(--hub-slate); font-size: .76rem; line-height: 1.45; }
 
/* Category registry */
.sf-category-list { display: grid; grid-template-columns: minmax(0,1fr); border-top: 1px solid var(--hub-line); }
.sf-category-list > div { display: grid; gap: 4px; min-width: 0; padding: 13px 14px; border-right: 1px solid var(--hub-line); border-bottom: 1px solid var(--hub-line); background: rgba(15,19,29,.45); }
.sf-category-list strong { color: var(--hub-parchment); font-size: .84rem; }
.sf-category-list small { color: var(--hub-slate); font-size: .75rem; line-height: 1.45; }
 
/* Footer */
.sf-hub-footer {
  display: grid;
  gap: 16px;
  margin-top: 36px;
  padding: 22px 0 8px;
  border-top: 1px solid var(--hub-line-strong);
  color: var(--hub-slate);
  font-size: .75rem;
  line-height: 1.7;
}
.sf-hub-footer-brand { display: grid; gap: 2px; }
.sf-hub-footer strong { color: var(--hub-brass-bright); font: 400 1rem/1.2 var(--hub-display); }
.sf-hub-footer small { color: var(--hub-slate); }
.sf-hub-footer a { color: var(--hub-parchment) !important; }
 
/* Responsive compositions */
@container sf-hub (min-width: 506px) {
  .sf-task-grid, .sf-community-grid, .sf-category-list { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .sf-access-grid, .sf-directory-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .sf-access:last-child:nth-child(odd), .sf-directory:last-child:nth-child(odd) { grid-column: 1 / -1; }
}
 
@container sf-hub (min-width: 666px) {
  .sf-hub-masthead { margin-inline: -16px; }
  .sf-hub-nav { grid-template-columns: repeat(5,minmax(0,1fr)); }
  .sf-hub-nav-item, .sf-hub-nav-item:nth-child(2n) { border-right: 1px solid var(--hub-line); border-bottom: 0; }
  .sf-hub-nav-item:last-child:nth-child(odd) { grid-column: auto; border-right: 0; }
  .sf-hub-nav a { min-height: 48px; }
  .sf-hub-hero { min-height: clamp(390px,50vw,550px); margin-top: 8px; }
  .sf-access-grid, .sf-directory-grid, .sf-community-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
  .sf-access:last-child:nth-child(odd), .sf-directory:last-child:nth-child(odd) { grid-column: auto; }
  .sf-hub-footer { grid-template-columns: minmax(190px,.7fr) minmax(0,2fr); align-items: end; }
  .sf-hub-footer-links { text-align: right; }
}
 
@container sf-hub (min-width: 910px) {
  .sf-task-grid { grid-template-columns: repeat(4,minmax(0,1fr)); }
  .sf-directory-links { grid-template-columns: repeat(2,minmax(0,1fr)); column-gap: 14px; }
}
 
@container sf-hub (min-width: 1138px) {
  .sf-hub-masthead {
    grid-template-columns: minmax(210px,.78fr) minmax(0,2.8fr) auto;
    grid-template-areas: "brand nav search";
  }
  .sf-hub-brand { min-height: 64px; padding-block: 8px; }
  .sf-hub-nav { border-top: 0; }
  .sf-hub-nav-item { border-left: 1px solid var(--hub-line); }
  .sf-hub-nav a { min-height: 64px; font-size: .78rem; }
  .sf-hub-hero { min-height: 520px; }
  .sf-hub-hero-copy { padding-block: 28px; }
}
 
/* Accessibility and static-motion lock */
.sf-hub a:focus-visible { outline: 2px solid var(--hub-verdigris); outline-offset: -3px; }
.sf-hub .sf-task, .sf-hub .sf-access, .sf-hub .sf-directory,
.sf-hub .sf-community, .sf-hub .sf-category-list > div, .sf-hub img, .sf-hub a { transform: none !important; transition: none !important; }
 
@media (prefers-reduced-motion: reduce) {
  .sf-hub *, .sf-hub *::before, .sf-hub *::after { scroll-behavior: auto !important; animation: none !important; transition: none !important; }
}
 
@supports not (container-type: inline-size) {
  @media screen and (min-width: 720px) {
    .sf-hub-nav { grid-template-columns: repeat(5,minmax(0,1fr)); }
    .sf-hub-nav-item:last-child:nth-child(odd) { grid-column: auto; border-right: 0; }
    .sf-task-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
    .sf-access-grid, .sf-directory-grid, .sf-community-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
    .sf-category-list { grid-template-columns: repeat(2,minmax(0,1fr)); }
  }
  @media screen and (min-width: 1200px) {
    .sf-hub-masthead { grid-template-columns: minmax(210px,.78fr) minmax(0,2.8fr) auto; grid-template-areas: "brand nav search"; }
    .sf-hub-nav { border-top: 0; }
    .sf-hub-nav a { min-height: 64px; }
    .sf-task-grid { grid-template-columns: repeat(4,minmax(0,1fr)); }
    .sf-directory-links { grid-template-columns: repeat(2,minmax(0,1fr)); column-gap: 14px; }
  }
}
}


/* ============================================================
/* ============================================================
   Sinfar Wiki Visual System v2.1 Utility Patch
   Sinfar Wiki Interior Pages v1.0
   Add below v2.0. Keeps Feat Changes as baseline.
  Additive extension for the existing Visual System v3.0.
 
   Required outer wrapper:
  <div class="sf-page sf-article-page"> ... </div>
 
  This module intentionally reuses the existing sf-page, sf-hero,
  sf-section-title, sf-table, sf-note, sf-quickbar and sf-footerlinks
  components. It does not replace the main-page module.
   ============================================================ */
   ============================================================ */


/* ---------- Link Consistency ---------- */
.sf-article-page {
  width: 100%;
  max-width: 1180px;
  min-width: 0;
  margin: 0 auto;
  overflow-wrap: anywhere;
}
 
.sf-article-page > *,
.sf-article-page .sf-table-scroll,
.sf-article-page .sf-figure-grid,
.sf-article-page .sf-figure {
  min-width: 0;
  max-width: 100%;
}
 
.sf-article-page .sf-hero {
  position: relative;
  overflow: hidden;
  padding: clamp(20px, 4vw, 38px);
  text-align: left;
  background:
    linear-gradient(110deg, rgba(8, 11, 15, .95), rgba(22, 18, 17, .86)),
    var(--sf-bg-hero);
}
 
.sf-article-page .sf-hero::after {
  content: "";
  position: absolute;
  inset: auto 22px 18px auto;
  width: 88px;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--sf-gold));
  opacity: .7;
}
 
.sf-article-page .sf-hero h1 {
  margin: 4px 0 6px;
  color: var(--sf-gold-bright);
  font-family: Georgia, "Times New Roman", serif;
  font-size: clamp(2rem, 5vw, 3.35rem);
  line-height: 1.05;
  font-weight: 500;
}
 
.sf-article-page .sf-hero p {
  max-width: 760px;
  margin: 0;
  color: var(--sf-text-muted);
  font-size: 1rem;
}
 
.sf-article-meta,
.sf-summary-grid,
.sf-route-grid,
.sf-figure-grid {
  display: grid;
  gap: var(--sf-gap);
  margin: 0 0 16px;
}
 
.sf-article-meta {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
 
.sf-article-meta > div,
.sf-summary-grid > div,
.sf-route-grid > div {
  min-width: 0;
  padding: 11px 13px;
  border: 1px solid var(--sf-border);
  background: rgba(8, 11, 15, .52);
}
 
.sf-article-meta b,
.sf-summary-grid b,
.sf-route-grid b {
  color: var(--sf-gold-bright);
}
 
.sf-article-meta span,
.sf-summary-grid span {
  color: var(--sf-text-muted);
}
 
.sf-summary-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
 
.sf-route-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}
 
.sf-route-grid > div {
  border-top-color: var(--sf-border-strong);
}
 
.sf-article-page .sf-prose {
  max-width: 900px;
}
 
.sf-article-page .sf-lead {
  color: var(--sf-text);
  font-size: 1.05rem;
  line-height: 1.65;
}
 
.sf-article-page .sf-note {
  border: 1px solid var(--sf-border-strong);
  border-left: 3px solid var(--sf-gold);
  background: rgba(216, 180, 106, .08);
}
 
.sf-article-page .sf-note--teal {
  border-color: rgba(83, 202, 188, .42);
  border-left-color: #53cabc;
  background: rgba(83, 202, 188, .07);
}
 
.sf-article-page .sf-note--red {
  border-color: rgba(159, 75, 62, .6);
  border-left-color: #c46858;
  background: rgba(159, 75, 62, .12);
}
 
.sf-article-page .sf-code {
  display: block;
  overflow-wrap: anywhere;
  padding: 9px 11px;
  border: 1px solid var(--sf-border);
  background: #090c11;
  color: #dbe5f0;
  font-family: Consolas, "Cascadia Mono", monospace;
  font-size: .9rem;
}
 
.sf-article-page .sf-table th {
  color: var(--sf-gold-bright);
  background: rgba(216, 180, 106, .1);
  text-align: left;
}


.sinfar-page a,
.sf-article-page .sf-table th,
.sinfar-page a:visited,
.sf-article-page .sf-table td {
.sinfar-page a.external,
  padding: 9px 11px;
.sinfar-page a.external:visited {
  border: 1px solid var(--sf-border);
color: #72a7ff;
  vertical-align: top;
}
 
.sf-article-page .sf-table td:first-child {
  color: var(--sf-text);
}
 
.sf-figure-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}
 
.sf-figure {
  display: block;
  width: fit-content;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
  margin: 12px auto 20px;
  padding: 7px;
  border: 1px solid var(--sf-border);
  background: rgba(8, 11, 15, .56);
}
 
.sf-figure-grid .sf-figure,
.sf-figure--wide {
  width: 100%;
  margin: 0;
}
 
.sf-figure > p,
.sf-figure span[typeof~="mw:File"],
.sf-figure a.image,
.sf-figure a.mw-file-description {
  display: block;
  max-width: 100%;
  margin: 0;
}
 
.sf-article-page img,
.sf-figure img,
.sf-figure .mw-file-element {
  display: block;
  max-width: 100%;
  height: auto;
}
 
.sf-figure img,
.sf-figure .mw-file-element {
  width: auto;
  max-width: 100%;
  margin: 0 auto;
}
 
.sf-figure-grid .sf-figure img,
.sf-figure-grid .sf-figure .mw-file-element,
.sf-figure--wide img,
.sf-figure--wide .mw-file-element {
  width: 100%;
}
 
.sf-figure figcaption,
.sf-caption {
  display: block;
  padding: 7px 4px 2px;
  color: var(--sf-text-muted);
  font-size: .86rem;
  line-height: 1.4;
}
}


.sinfar-page a:hover {
/* Interior tables fit their article by default. Only genuinely dense tables
color: #9fc4ff;
  opt into the explicit --wide modifier and retain a local scrollbar. */
text-decoration: underline;
.sf-article-page .sf-table-scroll .sf-table {
  width: 100%;
  min-width: 0;
  max-width: 100%;
  table-layout: fixed;
}
}


/* ---------- Utility Panels ---------- */
.sf-article-page .sf-table-scroll--wide .sf-table {
  width: 760px;
  min-width: 760px;
  max-width: none;
}


.sf-panel {
.sf-issue {
background: #181214;
  margin: 0 0 10px;
border: 1px solid #6f5730;
  padding: 14px;
color: #f4efe6;
  border: 1px solid var(--sf-border);
padding: 12px 14px;
  background: rgba(8, 11, 15, .48);
margin-bottom: 8px;
line-height: 1.55;
}
}


.sf-panel--intro {
.sf-issue h3 {
border-left: 4px solid #8f2432;
  margin: 0 0 6px;
  color: var(--sf-gold-bright);
}
}


.sf-warning {
.sf-issue > :last-child {
background: #120d10;
  margin-bottom: 0;
border: 1px solid #8f2432;
color: #f4efe6;
padding: 12px 14px;
margin-bottom: 8px;
line-height: 1.55;
}
}


.sf-codebox {
.sf-steps {
background: #21171a;
  margin: 8px 0 0;
border: 1px solid #6f5730;
  padding-left: 1.4rem;
color: #f4efe6;
font-family: monospace;
padding: 8px 10px;
margin: 8px 0;
overflow-wrap: anywhere;
}
}


/* ---------- Compact Landing Utility ---------- */
.sf-steps li {
  margin: 0 0 5px;
  padding-left: .2rem;
}


.sf-card-title {
.sf-article-page .sf-footerlinks {
color: #f0d28a;
  line-height: 1.8;
font-weight: bold;
}
}


.sf-card-link {
@media (max-width: 900px) {
margin-top: 10px;
  .sf-article-meta,
  .sf-summary-grid,
  .sf-route-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
 
  .sf-figure-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}
}


/* ---------- Performance Preference ---------- */
@media (max-width: 560px) {
  .sf-article-page {
    padding: 10px;
  }
 
  .sf-article-page .sf-hero {
    padding: 18px 14px;
  }
 
  .sf-article-meta,
  .sf-summary-grid,
  .sf-route-grid,
  .sf-figure-grid {
    grid-template-columns: 1fr;
  }
 
  .sf-article-page .sf-table-scroll {
    margin-right: -2px;
    padding-bottom: 4px;
  }
 
  .sf-article-page .sf-table th,
  .sf-article-page .sf-table td {
    padding: 8px;
    font-size: .9rem;
  }
}


.sinfar-page * {
@media (prefers-reduced-motion: reduce) {
box-sizing: border-box;
  .sf-article-page *,
  .sf-article-page *::before,
  .sf-article-page *::after {
    scroll-behavior: auto !important;
    transition-duration: .01ms !important;
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
  }
}
}

Latest revision as of 23:07, 16 August 2026

/* ============================================================
   Sinfar Wiki Visual System v3.0
   Unified Common.css Framework
   Scope doctrine:
   - New/refit pages use: <div class="sf-page">
   - Legacy pages may still use .sinfar-page / .sf-card / .sf-heading
   ============================================================ */




/* ============================================================
   1. DESIGN TOKENS
   ============================================================ */


:root {
  --sf-bg-page: #0f141b;
  --sf-bg-shell: #11161d;
  --sf-bg-panel: rgba(18, 14, 12, .78);
  --sf-bg-panel-solid: #181214;
  --sf-bg-panel-soft: rgba(216, 180, 106, .08);
  --sf-bg-hero: linear-gradient(135deg, #21150f, #3a2417);


  --sf-border: rgba(216, 180, 106, .28);
  --sf-border-strong: rgba(216, 180, 106, .48);
  --sf-border-muted: rgba(244, 239, 230, .09);


  --sf-text: #f4efe6;
  --sf-text-muted: #c9bda9;
  --sf-gold: #d8b46a;
  --sf-gold-bright: #f0d28a;
  --sf-link: #8fc6ff;
  --sf-link-hover: #b8d6ff;


  --sf-red: #9f4b3e;
  --sf-green: #2f5d3a;
  --sf-blue: #334e7a;
  --sf-purple: #60456f;


  --sf-radius-sm: 7px;
  --sf-radius-md: 10px;
  --sf-gap: 8px;
}




/* ============================================================
   2. SOVEREIGN PAGE SHELL
   ============================================================ */


.sf-page,
.sinfar-page {
  background: var(--sf-bg-shell);
  color: var(--sf-text);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-md);
  padding: 16px;
  line-height: 1.45;
  font-size: 14px;
  box-shadow: 0 0 22px rgba(0,0,0,.35);
}


.sf-page *,
.sinfar-page * {
  box-sizing: border-box;
}


.sf-page a,
.sf-page a:visited,
.sf-page a.external,
.sf-page a.external:visited,
.sinfar-page a,
.sinfar-page a:visited,
.sinfar-page a.external,
.sinfar-page a.external:visited {
  color: var(--sf-link);
}


.sf-page a:hover,
.sinfar-page a:hover {
  color: var(--sf-link-hover);
  text-decoration: underline;
}


.sf-page code,
.sinfar-page code {
  background: #120d10;
  color: var(--sf-gold-bright);
  border: 1px solid var(--sf-border);
  border-radius: 4px;
  padding: 1px 4px;
}




/* ============================================================
   3. TYPOGRAPHY
   ============================================================ */


.sf-page h1,
.sf-page h2,
.sf-page h3,
.sinfar-page h1,
.sinfar-page h2,
.sinfar-page h3 {
  color: var(--sf-gold-bright);
}


.sf-section-title,
.sf-heading {
  color: var(--sf-gold-bright);
  border-bottom: 1px solid var(--sf-border-strong);
  margin: 18px 0 8px;
  padding-bottom: 3px;
  font-size: 1.45rem;
  line-height: 1.2;
}


.sf-subheading {
  color: var(--sf-gold-bright);
  margin: 10px 0 6px;
  font-size: 1.15rem;
}


.sf-muted {
  color: var(--sf-text-muted);
}


.sf-label,
.sf-name {
  color: var(--sf-gold-bright);
  font-weight: 700;
}


.sf-center {
  text-align: center;
}




/* ============================================================
   4. HEROES
   ============================================================ */


.sf-hero,
.sf-hero-compact {
  background: var(--sf-bg-hero);
  border: 1px solid var(--sf-border-strong);
  border-radius: var(--sf-radius-md);
  padding: 14px 18px;
  margin: 0 0 12px;
  text-align: center;
}


.sf-hero h1,
.sf-hero-compact h1,
.sf-title {
  color: var(--sf-gold-bright);
  margin: 0 0 4px;
  font-size: 1.85rem;
  line-height: 1.15;
}


.sf-hero p,
.sf-hero-compact p,
.sf-subtitle {
  color: var(--sf-text);
  margin: 0;
}


.sf-eyebrow {
  color: var(--sf-gold);
  text-transform: uppercase;
  font-size: .75rem;
  letter-spacing: .08em;
  font-weight: 800;
}


.sf-hero-main {
  padding: 22px;
}


.sf-hero-main h1 {
  font-size: 2.35rem;
}




/* ============================================================
   5. GRIDS / STATUS TILES
   ============================================================ */


.sf-grid-2,
.sf-grid-3,
.sf-grid-4,
.sf-grid-5,
.sf-status-grid,
.sf-start-status {
  display: grid;
  gap: var(--sf-gap);
  margin-bottom: 14px;
}


.sf-grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.sf-grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.sf-grid-4,
.sf-status-grid,
.sf-start-status { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.sf-grid-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }


.sf-status-grid > div,
.sf-start-status > div {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  padding: 8px 10px;
}


.sf-status-grid b,
.sf-start-status b {
  color: var(--sf-gold-bright);
}


.sf-status-grid span,
.sf-start-status span {
  color: var(--sf-text);
}




/* ============================================================
   6. QUICKBARS / INDEX GRIDS
   ============================================================ */


.sf-quickbar,
.sf-index-grid {
  display: grid;
  gap: var(--sf-gap);
  margin: 0 0 14px;
}


.sf-quickbar {
  grid-template-columns: repeat(2, minmax(0, 1fr));
}


.sf-index-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}


.sf-quickbar > div,
.sf-index-grid > div,
.sf-pathline {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-left: 4px solid var(--sf-gold);
  border-radius: var(--sf-radius-sm);
  padding: 8px 10px;
  color: var(--sf-text);
}


.sf-quickbar b,
.sf-index-grid b {
  color: var(--sf-gold-bright);
}




/*
============================================================
   6A. REFERENCE MANUAL LAYOUT
   Reusable side directory for long technical documentation.
   ============================================================ */


.sf-manual-layout {
  display: grid;
  grid-template-columns: 240px minmax(0, 1fr);
  gap: 16px;
  align-items: start;
}


.sf-manual-content {
  min-width: 0;
}


.sf-manual-content [id] {
  scroll-margin-top: 18px;
}


.sf-manual-toc {
  position: sticky;
  top: 12px;


  max-height: calc(100vh - 24px);
  overflow-y: auto;


  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-md);
  padding: 12px;
}


.sf-manual-toc-title {
  color: var(--sf-gold-bright);
  font-size: 1rem;
  font-weight: 900;
  margin: 0 0 8px;
  padding-bottom: 7px;
  border-bottom: 1px solid var(--sf-border-strong);
}


.sf-manual-toc-group {
  color: var(--sf-gold);
  font-size: .72rem;
  font-weight: 900;
  letter-spacing: .06em;
  text-transform: uppercase;


  margin: 12px 0 4px;
}


.sf-manual-toc a,
.sf-manual-toc a:visited {
  display: block;
  padding: 5px 1px;


  color: var(--sf-link);
  border-bottom: 1px solid var(--sf-border-muted);


  font-size: .88rem;
  font-weight: 700;
  line-height: 1.25;
  text-decoration: none;
}


.sf-manual-toc a:hover {
  color: var(--sf-link-hover);
  text-decoration: none;
}


.sf-manual-example {
  background: rgba(216,180,106,.06);
  border: 1px solid var(--sf-border);
  border-left: 4px solid var(--sf-gold);
  border-radius: var(--sf-radius-sm);


  padding: 10px 12px;
  margin: 7px 0 9px;
}


.sf-manual-example > :first-child {
  margin-top: 0;
}


.sf-manual-example > :last-child {
  margin-bottom: 0;
}


.sf-color-swatch {
  display: inline-block;
  width: 22px;
  height: 14px;


  margin-right: 7px;
  border: 1px solid rgba(255,255,255,.28);
  border-radius: 3px;


  vertical-align: -2px;
}


@media screen and (max-width: 900px) {
  .sf-manual-layout {
    grid-template-columns: 1fr;
  }


  .sf-manual-toc {
    position: static;
    max-height: none;
  }
}
/*
===========================================================
   7. DECISION PANELS
   ============================================================ */


.sf-decision-grid {
  display: grid;
  grid-template-columns: 1.25fr 1fr 1fr;
  gap: var(--sf-gap);
  margin-bottom: 14px;
}


.sf-decision,
.sf-card,
.sf-panel {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-md);
  color: var(--sf-text);
  padding: 12px;
}


.sf-decision-primary {
  border-color: rgba(240,210,138,.58);
  background: linear-gradient(135deg, rgba(60,38,20,.88), rgba(18,14,12,.78));
}


.sf-decision-kicker {
  color: var(--sf-gold);
  text-transform: uppercase;
  font-size: .72rem;
  letter-spacing: .07em;
  font-weight: 800;
}


.sf-decision h3 {
  color: var(--sf-gold-bright);
  margin: 4px 0 6px;
}


.sf-decision p {
  margin: 0 0 10px;
  color: var(--sf-text);
}




/* ============================================================
   8. ACTION LISTS / BUTTONS
   ============================================================ */


.sf-action-list {
  list-style: none;
  margin: 12px 0 0 0;
  padding: 0;
  display: grid;
  gap: 8px;
}


.sf-action-list li {
  margin: 0;
  padding: 0;
}


.sf-action-list a,
.sf-action-list a:visited,
.sf-action-list a.external,
.sf-action-list a.external:visited {
  display: block;
  width: 100%;
  background: rgba(216,180,106,.10);
  border: 1px solid rgba(216,180,106,.32);
  border-radius: 7px;
  padding: 8px 11px;
  color: #8fc6ff;
  font-weight: 800;
  text-align: left;
  text-decoration: none;
}


.sf-action-list a:hover,
.sf-action-list a.external:hover {
  background: rgba(216,180,106,.16);
  border-color: rgba(240,210,138,.48);
  color: #b8d6ff;
  text-decoration: none;
}




/* ============================================================
   9. TABLES
   ============================================================ */


.sf-table {
  width: 100%;
  border-collapse: collapse;
  table-layout: fixed;
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  color: var(--sf-text);
  margin-bottom: 12px;
}


.sf-table th {
  color: var(--sf-gold-bright);
  background: rgba(216,180,106,.14);
  border-bottom: 1px solid var(--sf-border-strong);
  padding: 8px 10px;
  text-align: left;
}


.sf-table td {
  color: var(--sf-text);
  border-bottom: 1px solid var(--sf-border-muted);
  padding: 7px 10px;
  vertical-align: top;
}


.sf-table tr:last-child td {
  border-bottom: 0;
}


.sf-table-scroll {
  width: 100%;
  overflow-x: auto;
  margin-bottom: 12px;
}


.sf-table-scroll .sf-table {
  min-width: 760px;
  margin-bottom: 0;
}


.sf-value,
.sf-good {
  text-align: center;
}


.sf-value {
  color: #f4c96b;
}


.sf-good {
  color: #9fe6bd;
}




/* Standard table column helpers */
.sf-channel-table th:nth-child(1),
.sf-channel-table td:nth-child(1) { width: 14%; }


.sf-channel-table th:nth-child(2),
.sf-channel-table td:nth-child(2) { width: 31%; }


.sf-channel-table th:nth-child(3),
.sf-channel-table td:nth-child(3) { width: 37%; }


.sf-channel-table th:nth-child(4),
.sf-channel-table td:nth-child(4) { width: 18%; }


.sf-setup-table th:nth-child(1),
.sf-setup-table td:nth-child(1) { width: 24%; }


.sf-setup-table th:nth-child(2),
.sf-setup-table td:nth-child(2) { width: 52%; }


.sf-setup-table th:nth-child(3),
.sf-setup-table td:nth-child(3) { width: 24%; }




/* ============================================================
   10. BADGES
   ============================================================ */


.sf-badge {
  display: inline-block;
  border-radius: 999px;
  padding: 2px 7px;
  margin: 1px 2px 1px 0;
  font-size: .78rem;
  font-weight: 800;
  white-space: nowrap;
}


.sf-badge-ic { background: #2f5d3a; color: #eaffef; }
.sf-badge-ooc { background: #334e7a; color: #eef4ff; }
.sf-badge-dm { background: #6f3b3b; color: #fff0f0; }
.sf-badge-range { background: #5f4c27; color: #fff2c2; }
.sf-badge-area { background: #60456f; color: #f7eaff; }
.sf-badge-support { background: #4e5563; color: #f0f3f8; }
.sf-badge-best { background: #6a5423; color: #fff0bd; }




/* ============================================================
   11. ALERTS / NOTES / RULES
   ============================================================ */


.sf-note,
.sf-alert,
.sf-warning,
.sf-rule {
  color: var(--sf-text);
  border-radius: var(--sf-radius-sm);
  padding: 8px 11px;
  margin: 8px 0;
}


.sf-note {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-left: 4px solid var(--sf-gold);
}


.sf-alert,
.sf-warning {
  background: rgba(94,63,18,.35);
  border: 1px solid rgba(216,180,106,.24);
  border-left: 4px solid #d8a447;
}


.sf-alert b,
.sf-warning b {
  display: block;
  color: var(--sf-gold-bright);
  margin-bottom: 3px;
}


.sf-alert-info {
  background: rgba(38,58,92,.34);
  border-left-color: #6fa8dc;
}


.sf-alert-warning {
  background: rgba(94,63,18,.35);
  border-left-color: #d8a447;
}


.sf-alert-danger,
.sf-note--red {
  background: rgba(80,30,25,.30);
  border-left-color: var(--sf-red);
}


.sf-rule {
  border-left: 4px solid var(--sf-red);
  background: rgba(80,30,25,.30);
}




/* ============================================================
   12. PROGRESS LINES
   ============================================================ */


.sf-progress-line {
  display: grid;
  grid-template-columns: repeat(5, minmax(0, 1fr));
  gap: var(--sf-gap);
  margin: 0 0 14px;
}


.sf-progress-line div {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  padding: 8px;
  text-align: center;
}


.sf-progress-line b {
  display: inline-block;
  width: 24px;
  height: 24px;
  border-radius: 999px;
  line-height: 24px;
  background: rgba(216,180,106,.24);
  color: var(--sf-gold-bright);
  margin-bottom: 4px;
}


.sf-progress-line span {
  display: block;
  color: var(--sf-text);
  font-size: .88rem;
}




/* ============================================================
   13. CODE / SCRIPTING DOCS
   ============================================================ */


.sf-codeblock,
.sf-codebox,
.sf-page pre,
.sinfar-page pre {
  background: #120d10;
  color: var(--sf-text);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  padding: 10px 12px;
  overflow-x: auto;
  line-height: 1.45;
}


.sf-codeblock code,
.sf-codebox code,
.sf-page pre code,
.sinfar-page pre code {
  background: transparent;
  border: 0;
  padding: 0;
  color: var(--sf-text);
}




/* 
============================================================
   14. IMAGES / SCREENSHOTS
   ============================================================ */


.sf-img-frame {
  background: var(--sf-bg-panel);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  padding: 6px;
  margin: 8px 0 12px;
}


.sf-img-frame img {
  max-width: 100%;
  height: auto;
  display: block;
  border-radius: 4px;
}
/* 




============================================================
   MAIN PAGE IMAGE SLOTS
   ============================================================ */


.sf-img-slot{
    position:relative;
    display:block;
    width:100%;
    overflow:hidden;


    border-radius:8px;
    border:1px solid var(--sf-border);


    background:#120d10;
}


.sf-main-page .sf-journey-img{
    aspect-ratio:16/9;
    margin:0 0 14px;
}


.sf-main-page .sf-feature-img{
    aspect-ratio:16/9;
    margin:0 0 12px;
}


.sf-img-slot img{
    display:block;
    width:100%;
    height:100%;
    object-fit:cover;
}




/* ============================================================
   15. CHAT CHANNEL COLOR LOCKS
   Match in-game channel color identity.
   ============================================================ */


.sf-chan {
  font-weight: 900;
  text-shadow: 0 1px 2px rgba(0,0,0,.8);
}


.sf-chan-shout   { color: #feef50; }
.sf-chan-dm      { color: #f67271; }
.sf-chan-event   { color: #ab23f2; }
.sf-chan-action  { color: #b56a23; }
.sf-chan-ooc     { color: #b1a2bd; }
.sf-chan-pvp     { color: #fe5f2e; }
.sf-chan-sex     { color: #f520e1; }
.sf-chan-build   { color: #b7f520; }
.sf-chan-ffa     { color: #20bff0; }


.sf-chan-talk    { color: #fefefe; }
.sf-chan-whisper { color: #b0b0b0; }
.sf-chan-quiet   { color: #777777; }
.sf-chan-silent  { color: #666666; }
.sf-chan-yell    { color: #d92324; }
.sf-chan-party   { color: #fefefe; }




/* ============================================================
   16. FOOTERS
   ============================================================ */


.sf-footerlinks,
.sf-footer {
  margin-top: 14px;
  padding-top: 10px;
  border-top: 1px solid var(--sf-border);
  color: var(--sf-gold);
}


.sf-footer {
  text-align: center;
  background: #120d10;
  padding: 12px 14px;
}




/* ============================================================
   17. LEGACY COMPATIBILITY
   Keeps older remaster pages readable without preserving chaos.
   ============================================================ */


.sf-card--gold,
.sf-table--gold {
  background: var(--sf-bg-panel);
  border-color: var(--sf-border);
}


.sf-card--green,
.sf-table--green {
  background: rgba(17,26,18,.82);
  border-color: rgba(68,107,53,.72);
}


.sf-card--blue,
.sf-table--blue {
  background: rgba(16,24,32,.82);
  border-color: rgba(52,87,122,.72);
}


.sf-card--red,
.sf-table--red {
  background: rgba(26,16,16,.82);
  border-color: rgba(122,52,47,.72);
}


.sf-card--purple,
.sf-table--purple {
  background: rgba(25,17,29,.82);
  border-color: rgba(91,59,120,.72);
}


.sf-heading--gold { color: var(--sf-gold-bright); border-bottom-color: var(--sf-border); }
.sf-heading--green { color: #91d38f; border-bottom-color: #446b35; }
.sf-heading--blue { color: #8fc6ff; border-bottom-color: #34577a; }
.sf-heading--red { color: #ff9c8f; border-bottom-color: #7a342f; }
.sf-heading--purple { color: #c49cff; border-bottom-color: #5b3b78; }


.sf-docket {
  width: 100%;
  background: var(--sf-bg-panel);
  color: var(--sf-text);
  border: 1px solid var(--sf-border);
  border-radius: var(--sf-radius-sm);
  margin: 9px 0 8px;
}


.sf-docket th {
  background: rgba(216,180,106,.14);
  color: var(--sf-gold-bright);
  text-align: left;
  padding: 9px 12px;
  border-bottom: 1px solid var(--sf-border);
}


.sf-docket td {
  background: rgba(18,14,12,.72);
  color: var(--sf-text);
  padding: 10px 12px;
}




/* ============================================================
   18. LISTS
   ============================================================ */


.sf-page ul,
.sf-page ol,
.sinfar-page ul,
.sinfar-page ol {
  margin: 6px 0 8px;
  padding-left: 22px;
}


.sf-page li,
.sinfar-page li {
  margin: 2px 0;
}




/* ============================================================
   19. MOBILE RULES
   ============================================================ */


@media screen and (max-width: 900px) {
  .sf-grid-4,
  .sf-grid-5,
  .sf-status-grid,
  .sf-start-status {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }


  .sf-decision-grid,
  .sf-index-grid {
    grid-template-columns: 1fr;
  }
}


@media screen and (max-width: 720px) {
  .sf-page,
  .sinfar-page {
    padding: 12px;
  }


  .sf-quickbar,
  .sf-grid-2,
  .sf-grid-3,
  .sf-grid-4,
  .sf-grid-5,
  .sf-status-grid,
  .sf-start-status,
  .sf-progress-line {
    grid-template-columns: 1fr;
  }


  .sf-table {
    table-layout: auto;
    font-size: .92rem;
  }


  .sf-channel-table th:nth-child(n),
  .sf-channel-table td:nth-child(n),
  .sf-setup-table th:nth-child(n),
  .sf-setup-table td:nth-child(n) {
    width: auto;
  }
}
/* ============================================================
   Sinfar Main Page Module v1.0
   Purpose: cinematic front-door layout for Main Page only.
   Requires wrapper: <div class="sf-page sf-main-page">
   ============================================================ */


.sf-main-page {
  max-width: 1320px;
  margin: 0 auto;
}


/* ---------- Cinematic Main Hero ---------- */

.sf-main-page .sf-hero-main {
  position: relative;
  isolation: isolate;

  display: flex;
  flex-direction: column;
  justify-content: center;
  align-items: center;

  width: 100%;
  aspect-ratio: 16 / 9;
  min-height: 0;

  margin: 0 0 18px;
  padding: 64px 48px;
  overflow: hidden;

  border-radius: 12px;
  background: #0b0d11;
  text-align: center;
}


/* ---------- Main Page Hero Artwork ---------- */

.sf-main-page .sf-hero-art-slot {
  position: absolute;
  inset: 0;
  z-index: 0;

  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;

  border: 0;
  border-radius: inherit;
  background: #0b0d11;
}

.sf-main-page .sf-hero-art-slot > a,
.sf-main-page .sf-hero-art-slot > span,
.sf-main-page .sf-hero-art-slot .mw-file-element {
  display: block;
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
}

.sf-main-page .sf-hero-art-slot img {
  display: block;
  width: 100%;
  height: 100%;
  max-width: none;
  margin: 0;
  padding: 0;

  object-fit: cover;
  object-position: center center;
}

/* Flat dark overlay for text readability. */

.sf-main-page .sf-hero-art-slot::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;

  background: rgba(5, 8, 12, .48);
  pointer-events: none;
}


/* Keep hero text above the artwork and overlay. */

.sf-main-page .sf-hero-main > :not(.sf-hero-art-slot) {
  position: relative;
  z-index: 2;
}


.sf-main-page .sf-hero-main h1 {
  margin: 0 0 6px;
  color: var(--sf-gold-bright);

  font-size: 3.15rem;
  line-height: 1.08;
  letter-spacing: .08em;
  text-transform: uppercase;

  text-shadow:
    0 2px 3px rgba(0,0,0,.95),
    0 0 14px rgba(0,0,0,.78);
}


.sf-main-page .sf-hero-main .sf-eyebrow,
.sf-main-page .sf-hero-main p {
  text-shadow: 0 2px 4px rgba(0,0,0,.95);
}


.sf-main-page .sf-hero-main p {
  max-width: 680px;
  margin: 0 0 12px;
  font-size: 1.08rem;
}


/* ---------- Main Page Journey Cards ---------- */


.sf-main-page .sf-decision-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
  margin-bottom: 24px;
}


.sf-main-page .sf-decision {
  min-height: 300px;
  padding: 22px;
}


.sf-main-page .sf-decision h3 {
  font-size: 1.45rem;
}


/* ---------- Main Page Feature Cards ---------- */


.sf-main-page .sf-grid-3 {
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 24px;
  margin-bottom: 24px;
}


.sf-main-page .sf-card {
  min-height: 190px;
  padding: 20px;
}


.sf-main-page .sf-card h3 {
  color: var(--sf-gold-bright);
  margin: 0 0 8px;
  font-size: 1.25rem;
}


.sf-main-page .sf-card p {
  margin: 0 0 10px;
}


/* ---------- Main Page Action Links ---------- */


.sf-main-page .sf-action-links {
  margin-top: 12px;
  padding: 0;
  background: transparent;
  border: 0;
  box-shadow: none;
  line-height: 1.8;
}


.sf-main-page .sf-action-links a,
.sf-main-page .sf-action-links a:visited,
.sf-main-page .sf-action-links a.external,
.sf-main-page .sf-action-links a.external:visited {
  background: transparent;
  border: 0;
  padding: 0;
  color: var(--sf-link);
  font-weight: 800;
  text-decoration: none;
}


.sf-main-page .sf-action-links a:hover,
.sf-main-page .sf-action-links a.external:hover {
  color: var(--sf-link-hover);
  text-decoration: underline;
}


/* ---------- Community Strip ---------- */


.sf-main-page .sf-quickbar {
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
}


/* ---------- Main Page Responsive Layout ---------- */

/* Split desktop, tablets, landscape */
@media screen and (min-width: 721px) and (max-width: 860px) {

  .sf-main-page .sf-decision-grid,
  .sf-main-page .sf-grid-3 {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
  }

  .sf-main-page .sf-quickbar {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
  }

  .sf-main-page .sf-decision,
  .sf-main-page .sf-card {
    min-height: 0;
    padding: 16px;
  }

  .sf-main-page .sf-hero-main {
    aspect-ratio: 16 / 9;
    min-height: 0;
    padding: 32px 20px;
  }

  .sf-main-page .sf-hero-main h1 {
    font-size: 2.35rem;
  }
}


/* Phones */
@media screen and (max-width: 720px) {

  .sf-main-page .sf-decision-grid,
  .sf-main-page .sf-grid-3,
  .sf-main-page .sf-quickbar {
    grid-template-columns: 1fr;
  }

  .sf-main-page .sf-hero-main {
    aspect-ratio: 16 / 9;
    min-height: 0;
    padding: 24px 16px;
  }

  .sf-main-page .sf-hero-main h1 {
    font-size: 2.1rem;
  }
}


/* Small phones */
@media screen and (max-width: 520px) {

  .sf-main-page .sf-hero-main {
    padding: 18px 14px;
  }

  .sf-main-page .sf-hero-main .sf-eyebrow {
    font-size: .66rem;
  }

  .sf-main-page .sf-hero-main h1 {
    margin-bottom: 4px;
    font-size: 1.85rem;
  }

  .sf-main-page .sf-hero-main p {
    margin-bottom: 7px;
    font-size: .9rem;
  }
}

/* =========================================================
   MAIN PAGE COMMUNITY LINKS — DISCORD / PATREON
   ========================================================= */

.sf-main-page .community-link-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: 8px;

  width: 100%;
  max-width: 100%;
  margin: 8px 0 16px;
}

.sf-main-page .community-link {
  display: flex;
  align-items: center;
  justify-content: center;

  width: 100%;
  min-width: 0;
  min-height: 58px;
  padding: 8px 16px;
  overflow: hidden;

  border: 0;
  border-radius: 6px;
  box-sizing: border-box;
}

/* Control MediaWiki-generated wrappers around file images. */

.sf-main-page .community-link > p,
.sf-main-page .community-link > span,
.sf-main-page .community-link > a,
.sf-main-page .community-link .mw-file-description {
  display: flex;
  align-items: center;
  justify-content: center;

  width: 100%;
  min-width: 0;
  margin: 0;
  padding: 0;
}

.sf-main-page .community-link img,
.sf-main-page .community-link .mw-file-element {
  display: block;

  width: auto;
  height: 30px;
  max-width: 82%;
  margin: 0 auto;

  object-fit: contain;
}

.sf-main-page .community-link--discord {
  background-color: #5865f2;
}

.sf-main-page .community-link--patreon {
  background-color: #ff424d;
}

@media screen and (max-width: 520px) {
  .sf-main-page .community-link-grid {
    grid-template-columns: minmax(0, 1fr);
  }
}
/* ============================================================
   MAIN PAGE — COLORED CARD SYSTEM
   Static layered gradients only. No glow, blur, or filters.
   ============================================================ */


/* ---------- Shared Card Construction ---------- */


.sf-main-page .sf-journey-card,
.sf-main-page .sf-feature-card {
  position: relative;
  overflow: hidden;
  isolation: isolate;


  background-color: #181214;
  background-image:
    linear-gradient(
      135deg,
      rgba(255,255,255,.025) 0%,
      transparent 34%,
      rgba(0,0,0,.12) 70%,
      rgba(0,0,0,.24) 100%
    ),
    repeating-linear-gradient(
      118deg,
      rgba(255,255,255,.014) 0,
      rgba(255,255,255,.014) 1px,
      transparent 1px,
      transparent 7px
    );


  border: 1px solid var(--sf-card-border, var(--sf-border));
}


/* Subtle inner line without glow or shadow. */
.sf-main-page .sf-journey-card::after,
.sf-main-page .sf-feature-card::after {
  content: "";
  position: absolute;
  inset: 4px;
  z-index: -1;


  pointer-events: none;
  border: 1px solid rgba(244,239,230,.035);
  border-radius: 6px;
}


/* ---------- Card Header ---------- */


.sf-main-page .sf-card-head {
  display: flex;
  align-items: center;
  gap: 10px;


  min-height: 48px;
  margin: -22px -22px 14px;
  padding: 10px 16px;


  background-color: var(--sf-card-head, rgba(216,180,106,.10));
  background-image:
    linear-gradient(
      90deg,
      rgba(255,255,255,.035),
      transparent 48%,
      rgba(0,0,0,.16)
    ),
    repeating-linear-gradient(
      120deg,
      rgba(255,255,255,.012) 0,
      rgba(255,255,255,.012) 1px,
      transparent 1px,
      transparent 6px
    );


  border-bottom: 1px solid var(--sf-card-border, var(--sf-border));
}


.sf-main-page .sf-card-head h3 {
  flex: 1;
  min-width: 0;
  margin: 0;


  color: var(--sf-gold-bright);
  font-size: 1.25rem;
  line-height: 1.15;
}


/* ---------- Header Icon Slot ---------- */


.sf-main-page .sf-card-icon {
  flex: 0 0 auto;
  display: flex;
  align-items: center;
  justify-content: center;


  width: 38px;
  height: 38px;
}


.sf-main-page .sf-card-icon img,
.sf-main-page .sf-card-icon .mw-file-element {
  display: block;
  width: 100%;
  height: 100%;
  max-width: 100%;


  object-fit: contain;
}


/* ---------- Journey Cards ---------- */


.sf-main-page .sf-journey-card {
  --sf-card-border: rgba(216,180,106,.42);
  min-height: 100%;
}


/* ---------- Featured System Cards ---------- */


.sf-main-page .sf-feature-card {
  --sf-card-border: rgba(216,180,106,.34);


  display: flex;
  flex-direction: column;
  min-height: 100%;
  padding: 14px;
}


.sf-main-page .sf-feature-card .sf-card-head {
  min-height: 40px;
  margin: -14px -14px 12px;
  padding: 8px 11px;
  gap: 8px;
}


.sf-main-page .sf-feature-card .sf-card-head h3 {
  font-size: 1.02rem;
}


.sf-main-page .sf-feature-card .sf-card-icon {
  width: 23px;
  height: 23px;
}


.sf-main-page .sf-feature-card .sf-action-links {
  margin-top: auto;
  padding-top: 8px;
}


/* ============================================================
   CATEGORY THEMES
   ============================================================ */


/* New arrivals — crimson */
.sf-main-page .sf-theme-crimson {
  --sf-card-head: rgba(83,20,20,.92);
  --sf-card-border: rgba(155,69,57,.70);
  background-color: #1b1011;
}


/* Player resources — midnight blue */
.sf-main-page .sf-theme-blue {
  --sf-card-head: rgba(18,46,74,.94);
  --sf-card-border: rgba(62,104,143,.72);
  background-color: #101922;
}


/* Builder resources — forest green */
.sf-main-page .sf-theme-green {
  --sf-card-head: rgba(29,65,38,.94);
  --sf-card-border: rgba(65,110,67,.72);
  background-color: #111a14;
}


/* Community — royal purple */
.sf-main-page .sf-theme-purple {
  --sf-card-head: rgba(67,32,79,.94);
  --sf-card-border: rgba(104,68,124,.72);
  background-color: #19121d;
}


/* Housing — slate blue */
.sf-main-page .sf-theme-slate {
  --sf-card-head: rgba(40,57,72,.94);
  --sf-card-border: rgba(76,102,123,.72);
  background-color: #141a1f;
}


/* Businesses — warm tavern bronze */
.sf-main-page .sf-theme-bronze {
  --sf-card-head: rgba(83,52,24,.94);
  --sf-card-border: rgba(133,89,43,.72);
  background-color: #1d1610;
}


/* Character development — arcane violet */
.sf-main-page .sf-theme-arcane {
  --sf-card-head: rgba(68,42,88,.94);
  --sf-card-border: rgba(104,70,132,.72);
  background-color: #19131e;
}


/* Dungeon running — deep teal */
.sf-main-page .sf-theme-teal {
  --sf-card-head: rgba(21,62,66,.94);
  --sf-card-border: rgba(48,104,108,.72);
  background-color: #101b1c;
}


/* PvP — battle red */
.sf-main-page .sf-theme-battle {
  --sf-card-head: rgba(92,31,26,.94);
  --sf-card-border: rgba(145,65,54,.74);
  background-color: #1c1110;
}


/* Custom scripting — dark builder green */
.sf-main-page .sf-theme-script {
  --sf-card-head: rgba(37,67,42,.94);
  --sf-card-border: rgba(71,111,73,.72);
  background-color: #121a13;
}
/* ============================================================
   REFERENCE MANUAL — DEFINITIVE WIDTH CONTAINMENT
   Keeps later source examples from widening the entire manual.
   ============================================================ */


.sf-manual-page,
.sf-manual-layout,
.sf-manual-content,
.sf-manual-toc {
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}


.sf-manual-layout {
  width: 100%;
}


.sf-manual-content {
  width: 100%;
  overflow: hidden;
}


/* Every direct manual component must be permitted to shrink. */
.sf-manual-content > *,
.sf-manual-example,
.sf-manual-page .sf-card,
.sf-manual-page .sf-note,
.sf-manual-page .sf-alert,
.sf-manual-page .sf-quickbar,
.sf-manual-page .sf-start-status,
.sf-manual-page .sf-progress-line,
.sf-manual-page .sf-img-frame,
.sf-manual-page .sf-footerlinks {
  min-width: 0;
  max-width: 100%;
  box-sizing: border-box;
}


/* Ordinary prose and callout content must wrap. */
.sf-manual-page p,
.sf-manual-page li,
.sf-manual-page dd,
.sf-manual-page span,
.sf-manual-page .sf-note,
.sf-manual-page .sf-alert {
  overflow-wrap: anywhere;
  word-break: normal;
}


/* Preformatted source remains intact, but scrolls only
   inside its own code box. */
.sf-manual-page pre,
.sf-manual-page .sf-codeblock,
.sf-manual-page .sf-codebox {
  display: block;
  width: 100%;
  max-width: 100%;
  min-width: 0;
  box-sizing: border-box;


  white-space: pre;
  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
}


/* Inline code inside tables and paragraphs may wrap. */
.sf-manual-page :not(pre) > code {
  white-space: normal;
  overflow-wrap: anywhere;
  word-break: break-word;
}


/* Tables may never establish the width of the whole page. */
.sf-manual-page .sf-table {
  width: 100%;
  max-width: 100%;
  min-width: 0;
  table-layout: fixed;
}


.sf-manual-page .sf-table th,
.sf-manual-page .sf-table td {
  min-width: 0;
  max-width: 100%;
  overflow-wrap: anywhere;
  word-break: break-word;
}


/* Explicit wrapper for tables that genuinely need more width. */
.sf-manual-page .sf-table-scroll {
  display: block;
  width: 100%;
  max-width: 100%;
  min-width: 0;


  overflow-x: auto;
  overflow-y: hidden;
  -webkit-overflow-scrolling: touch;
}


/* Desktop manual layout. */
@media screen and (min-width: 901px) {
  .sf-manual-layout {
    grid-template-columns: 240px minmax(0, 1fr);
  }
}


/* Mobile and narrow-tablet layout. */
@media screen and (max-width: 900px) {
  .sf-manual-layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    width: 100%;
    max-width: 100%;
  }


  .sf-manual-toc {
    position: static;
    width: 100%;
    max-width: 100%;
    max-height: none;
    overflow-x: hidden;
  }


  .sf-manual-content {
    width: 100%;
    max-width: 100%;
    overflow: hidden;
  }


  .sf-manual-page .sf-table th,
  .sf-manual-page .sf-table td {
    padding-left: 7px;
    padding-right: 7px;
  }


  /* Only deliberately wide tables scroll horizontally. */
  .sf-manual-page .sf-table-scroll .sf-table {
    width: 760px;
    min-width: 760px;
    max-width: none;
  }
}




/* ================================================================
   SINFAR WIKI MAIN v3.2 — RESPONSIVE PRODUCTION-READINESS PASS
   Complete premium-module replacement. Scoped to .sf-hub.
   ================================================================ */

.sf-hub {
  --hub-void: #07090e;
  --hub-void-2: #0b0f17;
  --hub-plate: #0f131d;
  --hub-plate-2: #141923;
  --hub-brass: #c8a25c;
  --hub-brass-bright: #e6c987;
  --hub-line: rgba(200,162,92,.28);
  --hub-line-strong: rgba(200,162,92,.5);
  --hub-verdigris: #57b7a3;
  --hub-parchment: #ece1c9;
  --hub-slate: #9ba3b4;
  --hub-rose: #e0788a;
  --hub-display: "Trajan Pro 3", "Cinzel", "Palatino Linotype", Palatino, Georgia, serif;
  --hub-reading: system-ui, -apple-system, "Segoe UI", Roboto, Arial, sans-serif;
  --hub-mono: "Cascadia Code", "Cascadia Mono", Consolas, monospace;
  container: sf-hub / inline-size;
  overflow: clip;
  background:
    radial-gradient(circle at 50% 0, rgba(87,183,163,.04), transparent 34rem),
    var(--hub-void-2);
  color: var(--hub-parchment);
  font-family: var(--hub-reading);
}

.sf-hub *, .sf-hub *::before, .sf-hub *::after { box-sizing: border-box; }
.sf-hub p, .sf-hub h1, .sf-hub h2, .sf-hub h3 { margin-block-start: 0; }
.sf-hub a, .sf-hub a:visited { color: inherit; text-decoration: none; }
.sf-hub a:hover { color: var(--hub-brass-bright); }

/* Masthead */
.sf-hub-masthead {
  display: grid;
  grid-template-columns: minmax(0,1fr) auto;
  grid-template-areas: "brand search" "nav nav";
  margin-inline: -12px;
  border-block: 1px solid var(--hub-line);
  background: rgba(7,9,14,.98);
}

.sf-hub-brand {
  grid-area: brand;
  display: flex;
  align-items: center;
  min-width: 0;
  min-height: 70px;
  padding: 11px 14px;
  border-right: 1px solid var(--hub-line);
}

.sf-hub-stewards { display: grid; width: 100%; min-width: 0; gap: 6px; }
.sf-hub-stewards-label { display: flex; align-items: center; justify-content: space-between; gap: 8px; color: var(--hub-verdigris); font: 700 .52rem/1.2 var(--hub-mono); letter-spacing: .15em; text-transform: uppercase; }
.sf-hub-stewards-label strong { flex: none; color: var(--hub-rose); font-size: .49rem; letter-spacing: .12em; }
.sf-hub-stewards-list { display: grid; grid-template-columns: repeat(3,minmax(0,1fr)); border: 1px solid var(--hub-line); background: rgba(200,162,92,.025); }
.sf-hub-stewards-list > div { display: grid; min-width: 0; gap: 2px; padding: 6px 5px 5px; border-right: 1px solid var(--hub-line); text-align: center; }
.sf-hub-stewards-list > div:last-child { border-right: 0; }
.sf-hub-stewards-list strong { overflow: hidden; color: var(--hub-brass-bright); font: 600 .6rem/1.15 var(--hub-mono); letter-spacing: .08em; text-overflow: ellipsis; text-transform: uppercase; }
.sf-hub-stewards-list small { color: var(--hub-slate); font: 500 .46rem/1.2 var(--hub-reading); letter-spacing: .03em; }

.sf-hub-search {
  grid-area: search;
  display: grid;
  place-items: center;
  padding: 10px 12px;
}
.sf-hub-search a {
  display: grid;
  min-height: 38px;
  padding: 0 13px;
  place-items: center;
  border: 1px solid var(--hub-line-strong);
  border-radius: 3px;
  color: var(--hub-brass-bright) !important;
  font-size: .72rem;
  font-weight: 700;
}

.sf-hub-nav {
  grid-area: nav;
  display: grid;
  grid-template-columns: repeat(2,minmax(0,1fr));
  border-top: 1px solid var(--hub-line);
}
.sf-hub-nav-item { min-width: 0; border-right: 1px solid var(--hub-line); border-bottom: 1px solid var(--hub-line); }
.sf-hub-nav-item:nth-child(2n), .sf-hub-nav-item:last-child { border-right: 0; }
.sf-hub-nav-item:last-child:nth-child(odd) { grid-column: 1 / -1; }
.sf-hub-nav a {
  display: grid;
  min-height: 40px;
  padding: 8px;
  place-items: center;
  color: var(--hub-brass-bright) !important;
  font-size: .74rem;
  font-weight: 700;
  letter-spacing: .025em;
}
.sf-hub-nav a::after {
  display: block;
  width: 30px;
  height: 1px;
  margin-top: 7px;
  background: linear-gradient(90deg,transparent,var(--hub-brass-bright),transparent);
  opacity: .72;
  content: "";
}
.sf-hub-nav a:hover::after, .sf-hub-nav a:focus-visible::after { width: 46px; opacity: 1; }
.sf-hub-nav a:hover, .sf-hub-nav a:focus-visible { background: rgba(200,162,92,.08); }

/* Hero */
.sf-hub-hero {
  position: relative;
  display: grid;
  min-height: clamp(290px,74vw,410px);
  margin: 10px 0 0;
  overflow: hidden;
  border: 1px solid var(--hub-line-strong);
  border-radius: 5px;
  background: var(--hub-void);
  isolation: isolate;
}
.sf-hub-hero-art, .sf-hub-hero-art > a, .sf-hub-hero-art > span,
.sf-hub-hero-art [typeof~="mw:File"], .sf-hub-hero-art .mw-file-description { position: absolute; inset: 0; display: block; }
.sf-hub-hero-art img, .sf-hub-hero-art .mw-file-element { width: 100%; height: 100%; object-fit: cover; object-position: center; }
.sf-hub-hero::after {
  position: absolute;
  inset: 0;
  z-index: 1;
  content: "";
  background: linear-gradient(180deg,rgba(7,9,14,.08),rgba(7,9,14,.18) 40%,rgba(7,9,14,.82));
  pointer-events: none;
}
.sf-hub-hero-copy {
  position: static;
  align-self: center;
  justify-self: center;
  width: min(92%,720px);
  padding: 26px 16px 24px;
  text-align: center;
}
.sf-hub-hero-lockup, .sf-hub-hero-copy > p, .sf-hub-primary { position: relative; z-index: 2; }
.sf-hub-hero-lockup { width: clamp(15rem,38vw,27rem); margin: 9px auto 7px; line-height: 0; }
.sf-hub-hero-lockup img { display: block; width: 100%; height: auto; filter: drop-shadow(0 3px 5px rgba(0,0,0,.94)) drop-shadow(0 0 13px rgba(230,201,135,.22)); }
.sf-hub-kicker, .sf-hub-heading-label {
  color: var(--hub-verdigris);
  font: 700 .68rem/1.3 var(--hub-mono);
  letter-spacing: .2em;
  text-transform: uppercase;
}
.sf-hub-hero .sf-hub-kicker {
  position: absolute;
  top: clamp(18px,3vw,30px);
  left: 50%;
  z-index: 3;
  display: inline-flex;
  justify-content: center;
  max-width: calc(100% - 24px);
  padding: 5px 12px 4px;
  border: 1px solid var(--hub-line);
  background: rgba(7,9,14,.72);
  color: var(--hub-brass-bright);
  text-shadow: 0 1px 4px #000;
  transform: translateX(-50%);
  white-space: nowrap;
}
.sf-hub-hero h1 {
  margin: 7px 0 5px;
  color: var(--hub-brass-bright);
  font: 400 clamp(2.35rem,12vw,4.6rem)/.95 var(--hub-display);
  letter-spacing: .1em;
  text-shadow: 0 2px 8px #000;
  text-transform: uppercase;
}
.sf-hub-hero-copy > p { margin: 0 auto 15px; color: var(--hub-parchment); font-size: clamp(.86rem,2.8vw,1rem); }
.sf-hub-primary { display: inline-block; }
.sf-hub-primary a {
  display: grid;
  min-height: 42px;
  padding: 0 20px;
  place-items: center;
  border: 1px solid var(--hub-brass);
  background: rgba(7,9,14,.84);
  color: var(--hub-brass-bright) !important;
  font: 700 .74rem/1 var(--hub-display);
  letter-spacing: .08em;
  text-transform: uppercase;
}

/* Shared sections */
.sf-hub-section { padding: 34px 0 0; }
.sf-hub-heading { display: grid; gap: 6px; margin-bottom: 16px; }
.sf-hub-heading h2 {
  margin: 0;
  color: var(--hub-brass-bright);
  font: 400 clamp(1.35rem,5vw,1.85rem)/1.12 var(--hub-display);
  letter-spacing: .035em;
}
.sf-hub-heading h2::after {
  display: block;
  width: 56px;
  height: 1px;
  margin-top: 10px;
  background: linear-gradient(90deg,var(--hub-brass),transparent);
  content: "";
}

/* Tasks */
.sf-task-grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 7px; }
.sf-task {
  display: grid;
  grid-template-columns: 44px minmax(0,1fr);
  align-items: center;
  min-height: 70px;
  border: 1px solid var(--hub-line);
  background: linear-gradient(180deg,rgba(15,19,29,.88),rgba(9,12,19,.94));
}
.sf-task-icon, .sf-access-icon {
  display: grid;
  width: 100%;
  height: 100%;
  place-items: center;
  border-right: 1px solid var(--hub-line);
  color: var(--hub-brass-bright);
  font: 400 1.05rem/1 var(--hub-display);
}
.sf-task > span:last-child, .sf-access > span:last-child { display: grid; gap: 4px; min-width: 0; padding: 11px 12px; }
.sf-task strong, .sf-access strong { color: var(--hub-parchment); font-size: .88rem; }
.sf-task small, .sf-access small { color: var(--hub-slate); font-size: .76rem; line-height: 1.45; }
.sf-task:hover, .sf-task:focus-within { border-color: var(--hub-line-strong); background: rgba(200,162,92,.06); }

/* Downloads and access */
.sf-access-grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 7px; }
.sf-access {
  display: grid;
  grid-template-columns: 46px minmax(0,1fr);
  min-height: 72px;
  border: 1px solid var(--hub-line);
  background: linear-gradient(135deg,rgba(200,162,92,.07),rgba(15,19,29,.72));
}
.sf-access:hover, .sf-access:focus-within { border-color: var(--hub-line-strong); background: rgba(200,162,92,.08); }

/* Resource directories */
.sf-directory-grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 10px; }
.sf-directory { --directory-accent: var(--hub-brass); min-width: 0; border: 1px solid var(--hub-line); border-top: 2px solid var(--directory-accent); background: linear-gradient(160deg,color-mix(in srgb,var(--directory-accent) 6%,var(--hub-plate)),var(--hub-void)); }
.sf-directory--blue { --directory-accent: #5e91b8; }
.sf-directory--green { --directory-accent: #6c9f62; }
.sf-directory-head { display: grid; grid-template-columns: 42px minmax(0,1fr); align-items: center; min-height: 62px; border-bottom: 1px solid var(--hub-line); }
.sf-directory-head > span { display: grid; height: 100%; place-items: center; border-right: 1px solid var(--hub-line); color: var(--hub-brass-bright); }
.sf-directory h3 { margin: 0; padding: 10px 12px; color: var(--hub-brass-bright); font: 400 1rem/1.2 var(--hub-display); }
.sf-directory-links { display: grid; grid-template-columns: minmax(0,1fr); gap: 0; padding: 7px 14px 12px; color: var(--hub-parchment); font-size: .8rem; line-height: 1.7; }
.sf-directory-links br { display: none; }
.sf-directory-links a { padding: 3px 0; text-decoration: underline; text-decoration-color: var(--hub-line-strong); text-underline-offset: 3px; }

/* Living world */
.sf-community-grid { display: grid; grid-template-columns: minmax(0,1fr); gap: 7px; }
.sf-community { display: grid; gap: 5px; min-width: 0; padding: 14px 15px; border: 1px solid var(--hub-line); border-left: 2px solid #9a6cac; background: rgba(15,19,29,.65); }
.sf-community strong { color: var(--hub-parchment); font-size: .88rem; }
.sf-community small { color: var(--hub-slate); font-size: .76rem; line-height: 1.45; }

/* Category registry */
.sf-category-list { display: grid; grid-template-columns: minmax(0,1fr); border-top: 1px solid var(--hub-line); }
.sf-category-list > div { display: grid; gap: 4px; min-width: 0; padding: 13px 14px; border-right: 1px solid var(--hub-line); border-bottom: 1px solid var(--hub-line); background: rgba(15,19,29,.45); }
.sf-category-list strong { color: var(--hub-parchment); font-size: .84rem; }
.sf-category-list small { color: var(--hub-slate); font-size: .75rem; line-height: 1.45; }

/* Footer */
.sf-hub-footer {
  display: grid;
  gap: 16px;
  margin-top: 36px;
  padding: 22px 0 8px;
  border-top: 1px solid var(--hub-line-strong);
  color: var(--hub-slate);
  font-size: .75rem;
  line-height: 1.7;
}
.sf-hub-footer-brand { display: grid; gap: 2px; }
.sf-hub-footer strong { color: var(--hub-brass-bright); font: 400 1rem/1.2 var(--hub-display); }
.sf-hub-footer small { color: var(--hub-slate); }
.sf-hub-footer a { color: var(--hub-parchment) !important; }

/* Responsive compositions */
@container sf-hub (min-width: 506px) {
  .sf-task-grid, .sf-community-grid, .sf-category-list { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .sf-access-grid, .sf-directory-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
  .sf-access:last-child:nth-child(odd), .sf-directory:last-child:nth-child(odd) { grid-column: 1 / -1; }
}

@container sf-hub (min-width: 666px) {
  .sf-hub-masthead { margin-inline: -16px; }
  .sf-hub-nav { grid-template-columns: repeat(5,minmax(0,1fr)); }
  .sf-hub-nav-item, .sf-hub-nav-item:nth-child(2n) { border-right: 1px solid var(--hub-line); border-bottom: 0; }
  .sf-hub-nav-item:last-child:nth-child(odd) { grid-column: auto; border-right: 0; }
  .sf-hub-nav a { min-height: 48px; }
  .sf-hub-hero { min-height: clamp(390px,50vw,550px); margin-top: 8px; }
  .sf-access-grid, .sf-directory-grid, .sf-community-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
  .sf-access:last-child:nth-child(odd), .sf-directory:last-child:nth-child(odd) { grid-column: auto; }
  .sf-hub-footer { grid-template-columns: minmax(190px,.7fr) minmax(0,2fr); align-items: end; }
  .sf-hub-footer-links { text-align: right; }
}

@container sf-hub (min-width: 910px) {
  .sf-task-grid { grid-template-columns: repeat(4,minmax(0,1fr)); }
  .sf-directory-links { grid-template-columns: repeat(2,minmax(0,1fr)); column-gap: 14px; }
}

@container sf-hub (min-width: 1138px) {
  .sf-hub-masthead {
    grid-template-columns: minmax(210px,.78fr) minmax(0,2.8fr) auto;
    grid-template-areas: "brand nav search";
  }
  .sf-hub-brand { min-height: 64px; padding-block: 8px; }
  .sf-hub-nav { border-top: 0; }
  .sf-hub-nav-item { border-left: 1px solid var(--hub-line); }
  .sf-hub-nav a { min-height: 64px; font-size: .78rem; }
  .sf-hub-hero { min-height: 520px; }
  .sf-hub-hero-copy { padding-block: 28px; }
}

/* Accessibility and static-motion lock */
.sf-hub a:focus-visible { outline: 2px solid var(--hub-verdigris); outline-offset: -3px; }
.sf-hub .sf-task, .sf-hub .sf-access, .sf-hub .sf-directory,
.sf-hub .sf-community, .sf-hub .sf-category-list > div, .sf-hub img, .sf-hub a { transform: none !important; transition: none !important; }

@media (prefers-reduced-motion: reduce) {
  .sf-hub *, .sf-hub *::before, .sf-hub *::after { scroll-behavior: auto !important; animation: none !important; transition: none !important; }
}

@supports not (container-type: inline-size) {
  @media screen and (min-width: 720px) {
    .sf-hub-nav { grid-template-columns: repeat(5,minmax(0,1fr)); }
    .sf-hub-nav-item:last-child:nth-child(odd) { grid-column: auto; border-right: 0; }
    .sf-task-grid { grid-template-columns: repeat(2,minmax(0,1fr)); }
    .sf-access-grid, .sf-directory-grid, .sf-community-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
    .sf-category-list { grid-template-columns: repeat(2,minmax(0,1fr)); }
  }
  @media screen and (min-width: 1200px) {
    .sf-hub-masthead { grid-template-columns: minmax(210px,.78fr) minmax(0,2.8fr) auto; grid-template-areas: "brand nav search"; }
    .sf-hub-nav { border-top: 0; }
    .sf-hub-nav a { min-height: 64px; }
    .sf-task-grid { grid-template-columns: repeat(4,minmax(0,1fr)); }
    .sf-directory-links { grid-template-columns: repeat(2,minmax(0,1fr)); column-gap: 14px; }
  }
}

/* ============================================================
   Sinfar Wiki Interior Pages v1.0
   Additive extension for the existing Visual System v3.0.

   Required outer wrapper:
   <div class="sf-page sf-article-page"> ... </div>

   This module intentionally reuses the existing sf-page, sf-hero,
   sf-section-title, sf-table, sf-note, sf-quickbar and sf-footerlinks
   components. It does not replace the main-page module.
   ============================================================ */

.sf-article-page {
  width: 100%;
  max-width: 1180px;
  min-width: 0;
  margin: 0 auto;
  overflow-wrap: anywhere;
}

.sf-article-page > *,
.sf-article-page .sf-table-scroll,
.sf-article-page .sf-figure-grid,
.sf-article-page .sf-figure {
  min-width: 0;
  max-width: 100%;
}

.sf-article-page .sf-hero {
  position: relative;
  overflow: hidden;
  padding: clamp(20px, 4vw, 38px);
  text-align: left;
  background:
    linear-gradient(110deg, rgba(8, 11, 15, .95), rgba(22, 18, 17, .86)),
    var(--sf-bg-hero);
}

.sf-article-page .sf-hero::after {
  content: "";
  position: absolute;
  inset: auto 22px 18px auto;
  width: 88px;
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--sf-gold));
  opacity: .7;
}

.sf-article-page .sf-hero h1 {
  margin: 4px 0 6px;
  color: var(--sf-gold-bright);
  font-family: Georgia, "Times New Roman", serif;
  font-size: clamp(2rem, 5vw, 3.35rem);
  line-height: 1.05;
  font-weight: 500;
}

.sf-article-page .sf-hero p {
  max-width: 760px;
  margin: 0;
  color: var(--sf-text-muted);
  font-size: 1rem;
}

.sf-article-meta,
.sf-summary-grid,
.sf-route-grid,
.sf-figure-grid {
  display: grid;
  gap: var(--sf-gap);
  margin: 0 0 16px;
}

.sf-article-meta {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.sf-article-meta > div,
.sf-summary-grid > div,
.sf-route-grid > div {
  min-width: 0;
  padding: 11px 13px;
  border: 1px solid var(--sf-border);
  background: rgba(8, 11, 15, .52);
}

.sf-article-meta b,
.sf-summary-grid b,
.sf-route-grid b {
  color: var(--sf-gold-bright);
}

.sf-article-meta span,
.sf-summary-grid span {
  color: var(--sf-text-muted);
}

.sf-summary-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.sf-route-grid {
  grid-template-columns: repeat(4, minmax(0, 1fr));
}

.sf-route-grid > div {
  border-top-color: var(--sf-border-strong);
}

.sf-article-page .sf-prose {
  max-width: 900px;
}

.sf-article-page .sf-lead {
  color: var(--sf-text);
  font-size: 1.05rem;
  line-height: 1.65;
}

.sf-article-page .sf-note {
  border: 1px solid var(--sf-border-strong);
  border-left: 3px solid var(--sf-gold);
  background: rgba(216, 180, 106, .08);
}

.sf-article-page .sf-note--teal {
  border-color: rgba(83, 202, 188, .42);
  border-left-color: #53cabc;
  background: rgba(83, 202, 188, .07);
}

.sf-article-page .sf-note--red {
  border-color: rgba(159, 75, 62, .6);
  border-left-color: #c46858;
  background: rgba(159, 75, 62, .12);
}

.sf-article-page .sf-code {
  display: block;
  overflow-wrap: anywhere;
  padding: 9px 11px;
  border: 1px solid var(--sf-border);
  background: #090c11;
  color: #dbe5f0;
  font-family: Consolas, "Cascadia Mono", monospace;
  font-size: .9rem;
}

.sf-article-page .sf-table th {
  color: var(--sf-gold-bright);
  background: rgba(216, 180, 106, .1);
  text-align: left;
}

.sf-article-page .sf-table th,
.sf-article-page .sf-table td {
  padding: 9px 11px;
  border: 1px solid var(--sf-border);
  vertical-align: top;
}

.sf-article-page .sf-table td:first-child {
  color: var(--sf-text);
}

.sf-figure-grid {
  grid-template-columns: repeat(3, minmax(0, 1fr));
}

.sf-figure {
  display: block;
  width: fit-content;
  min-width: 0;
  max-width: 100%;
  overflow: hidden;
  margin: 12px auto 20px;
  padding: 7px;
  border: 1px solid var(--sf-border);
  background: rgba(8, 11, 15, .56);
}

.sf-figure-grid .sf-figure,
.sf-figure--wide {
  width: 100%;
  margin: 0;
}

.sf-figure > p,
.sf-figure span[typeof~="mw:File"],
.sf-figure a.image,
.sf-figure a.mw-file-description {
  display: block;
  max-width: 100%;
  margin: 0;
}

.sf-article-page img,
.sf-figure img,
.sf-figure .mw-file-element {
  display: block;
  max-width: 100%;
  height: auto;
}

.sf-figure img,
.sf-figure .mw-file-element {
  width: auto;
  max-width: 100%;
  margin: 0 auto;
}

.sf-figure-grid .sf-figure img,
.sf-figure-grid .sf-figure .mw-file-element,
.sf-figure--wide img,
.sf-figure--wide .mw-file-element {
  width: 100%;
}

.sf-figure figcaption,
.sf-caption {
  display: block;
  padding: 7px 4px 2px;
  color: var(--sf-text-muted);
  font-size: .86rem;
  line-height: 1.4;
}

/* Interior tables fit their article by default. Only genuinely dense tables
   opt into the explicit --wide modifier and retain a local scrollbar. */
.sf-article-page .sf-table-scroll .sf-table {
  width: 100%;
  min-width: 0;
  max-width: 100%;
  table-layout: fixed;
}

.sf-article-page .sf-table-scroll--wide .sf-table {
  width: 760px;
  min-width: 760px;
  max-width: none;
}

.sf-issue {
  margin: 0 0 10px;
  padding: 14px;
  border: 1px solid var(--sf-border);
  background: rgba(8, 11, 15, .48);
}

.sf-issue h3 {
  margin: 0 0 6px;
  color: var(--sf-gold-bright);
}

.sf-issue > :last-child {
  margin-bottom: 0;
}

.sf-steps {
  margin: 8px 0 0;
  padding-left: 1.4rem;
}

.sf-steps li {
  margin: 0 0 5px;
  padding-left: .2rem;
}

.sf-article-page .sf-footerlinks {
  line-height: 1.8;
}

@media (max-width: 900px) {
  .sf-article-meta,
  .sf-summary-grid,
  .sf-route-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }

  .sf-figure-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 560px) {
  .sf-article-page {
    padding: 10px;
  }

  .sf-article-page .sf-hero {
    padding: 18px 14px;
  }

  .sf-article-meta,
  .sf-summary-grid,
  .sf-route-grid,
  .sf-figure-grid {
    grid-template-columns: 1fr;
  }

  .sf-article-page .sf-table-scroll {
    margin-right: -2px;
    padding-bottom: 4px;
  }

  .sf-article-page .sf-table th,
  .sf-article-page .sf-table td {
    padding: 8px;
    font-size: .9rem;
  }
}

@media (prefers-reduced-motion: reduce) {
  .sf-article-page *,
  .sf-article-page *::before,
  .sf-article-page *::after {
    scroll-behavior: auto !important;
    transition-duration: .01ms !important;
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
  }
}