/* NOVA Data Core — census theme, aligned to the NOVA-PC app look.
   Fonts: Orbitron (headings/nav), Spline Sans Mono (body/data),
   Cormorant Garamond (serif accents). */

:root {
  --void: #0a0612;
  --panel: #150e28;
  --panel2: #1d1338;
  --line: rgba(212,175,55,.22);
  --line-solid: #2c1e4d;
  --purple: #5b2a9d;
  --purple-lt: #8b5cf6;
  --gold: #d4af37;
  --gold-lt: #f3d97a;
  --gold-dim: #a8894a;
  --text: #ece6f7;
  --dim: #9a8bb8;
  --danger: #d96a6a;
  --ok: #7fcf9a;
}

* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
  margin: 0;
  background-color: var(--void);
  /* Default (census + all inner pages): clean void with a faint top glow only,
     no prime_radiant photo — keeps dense tables/cards readable. */
  background-image:
    radial-gradient(1200px 700px at 50% -10%, rgba(91,42,157,.28), transparent 60%);
  background-repeat: no-repeat;
  background-attachment: fixed;
  color: var(--text);
  font-family: 'Spline Sans Mono', ui-monospace, Menlo, Consolas, monospace;
  font-size: 15px;
  line-height: 1.55;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
}
/* Login page keeps the full Prime Radiant background. */
body.has-bg {
  background-image:
    radial-gradient(1200px 700px at 50% -10%, rgba(91,42,157,.42), transparent 60%),
    linear-gradient(rgba(10, 6, 18, .70), rgba(10, 6, 18, .84)),
    url('prime_radiant.png');
  background-position: center top, center center, center center;
  background-size: cover, cover, cover;
}

a { color: var(--gold); text-decoration: none; }
a:hover { text-decoration: underline; }
a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible {
  outline: 2px solid var(--gold);
  outline-offset: 2px;
}

/* ---- masthead ---- */
.masthead { padding: 18px 0 0; }
.mast-inner {
  max-width: 1100px; margin: 0 auto; padding: 0 20px;
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
}
.brand { display: flex; align-items: center; gap: 10px; color: var(--text); }
.brand:hover { text-decoration: none; }
.glyph { color: var(--gold); font-size: 22px; }
.brand-text {
  font-family: 'Orbitron', sans-serif; letter-spacing: .16em; font-size: 15px;
  font-weight: 400;
}
.brand-text b { color: var(--gold); font-weight: 700; }
.mast-sub {
  font-family: 'Orbitron', sans-serif; color: var(--dim);
  font-size: 10px; letter-spacing: .28em;
}

/* button-style top nav */
.mast-nav { margin-left: auto; display: flex; align-items: center; gap: 10px; }
.navbtn {
  display: inline-flex; align-items: center; gap: 7px;
  font-family: 'Orbitron', sans-serif; font-size: 11px; font-weight: 700;
  letter-spacing: .12em; text-transform: uppercase;
  color: var(--gold-lt); text-decoration: none;
  padding: 8px 13px; border: 1px solid var(--line);
  border-radius: 4px; background: rgba(212,175,55,.05);
  transition: border-color .14s, background .14s, color .14s;
}
.navbtn:hover {
  color: var(--void); background: linear-gradient(180deg, var(--gold-lt), var(--gold));
  border-color: var(--gold); text-decoration: none;
}
.navbtn .navglyph { font-size: 12px; color: var(--gold); }
.navbtn:hover .navglyph { color: var(--void); }

.mast-rule {
  height: 1px; margin-top: 14px;
  background: linear-gradient(90deg, transparent, var(--gold) 15%, var(--gold) 85%, transparent);
  opacity: .4;
}

/* ---- layout ---- */
.wrap { max-width: 1100px; margin: 0 auto; padding: 28px 20px 40px; width: 100%; flex: 1; }
.foot {
  font-family: 'Orbitron', sans-serif;
  text-align: center; color: var(--dim); font-size: 10px;
  letter-spacing: .22em; padding: 18px 0 26px;
}
.foot-rule { height: 1px; background: var(--line); margin-bottom: 16px; }

/* ---- panels & headings ---- */
.panel {
  background: rgba(21, 14, 40, .90);
  border: 1px solid var(--line);
  border-radius: 8px;
  padding: 20px 22px;
  margin-bottom: 22px;
}
h1, h2, h3, h4 { font-family: 'Orbitron', sans-serif; letter-spacing: .02em; line-height: 1.2; }
h1 { color: #fff; font-weight: 900; font-size: clamp(20px, 3vw, 28px); margin: 0 0 6px;
     text-shadow: 0 0 20px rgba(139,92,246,.45); }
h2 { color: var(--gold-lt); font-weight: 700; font-size: 16px; margin: 26px 0 10px; }
h2::before, h3::before { content: '⬡ '; color: var(--gold); font-weight: 400; }
h3 { font-size: 14px; font-weight: 700; color: var(--text); margin: 22px 0 8px; }
hr { border: 0; height: 1px; background: var(--line); margin: 22px 0; }
code { color: var(--gold-lt); background: var(--panel2); padding: 1px 5px; border-radius: 4px; }

.eyebrow {
  font-family: 'Orbitron', sans-serif;
  color: var(--gold); font-size: 10px; letter-spacing: .3em;
  text-transform: uppercase; margin-bottom: 4px;
}
.meta { color: var(--dim); font-size: 12px; }

/* ---- filter bar ---- */
.filters {
  display: flex; gap: 10px; flex-wrap: wrap; align-items: flex-end;
  background: rgba(20, 12, 38, .92); border: 1px solid var(--line);
  border-radius: 8px; padding: 14px 16px; margin-bottom: 22px;
}
.filters label {
  display: flex; flex-direction: column; gap: 4px;
  font-size: 10px; letter-spacing: .22em; color: var(--gold-dim);
  text-transform: uppercase;
}
.filters select, .filters input {
  background: var(--void); color: var(--text);
  border: 1px solid var(--line); border-radius: 6px;
  font: inherit; font-size: 13px; padding: 7px 10px; min-width: 150px;
}
.filters input[type=date] { color-scheme: dark; }
.btn {
  background: var(--gold); color: #1a1206; border: 0; border-radius: 6px;
  font: inherit; font-weight: 700; font-size: 13px; letter-spacing: .08em;
  padding: 9px 18px; cursor: pointer;
}
.btn:hover { background: #f3d78a; }
.btn-ghost {
  background: transparent; color: var(--gold);
  border: 1px solid var(--gold-dim);
}
.btn-ghost:hover { background: var(--panel2); }

/* ---- results index ---- */
.datehead {
  color: var(--gold-dim); font-size: 12px; letter-spacing: .26em;
  margin: 26px 0 10px; text-transform: uppercase;
}
.datehead::before { content: '⬡ '; }
.rlist { display: grid; gap: 10px; }
.rcard {
  display: grid;
  grid-template-columns: 150px 1fr auto;
  gap: 6px 16px; align-items: center;
  background: rgba(20, 12, 38, .92); border: 1px solid var(--line);
  border-radius: 8px; padding: 13px 16px;
  transition: border-color .15s;
}
.rcard:hover { border-color: var(--gold-dim); text-decoration: none; }
.rcard .cat {
  color: var(--gold); font-size: 11px; letter-spacing: .14em;
  text-transform: uppercase;
}
.rcard .title { color: var(--text); font-weight: 500; }
.rcard .counts { color: var(--dim); font-size: 12px; white-space: nowrap; }
.empty {
  text-align: center; color: var(--dim); padding: 60px 0;
}
.empty .glyph { display: block; font-size: 36px; margin-bottom: 10px; }

/* ---- tables (rendered markdown) ---- */
.tablewrap { overflow-x: auto; margin: 14px 0; }
table { border-collapse: collapse; width: 100%; font-size: 13.5px; }
th, td { padding: 7px 12px; text-align: left; border-bottom: 1px solid var(--line); }
th {
  color: var(--gold); font-size: 11px; letter-spacing: .16em;
  text-transform: uppercase; border-bottom: 1px solid var(--gold-dim);
  white-space: nowrap;
}
tbody tr:nth-child(odd) { background: rgba(255,255,255,.018); }
tbody tr:hover { background: var(--panel2); }
td { color: var(--text); }

/* ---- charts ---- */
.chartblock { margin: 18px 0; }
.chart-warn {
  color: var(--danger); font-size: 12px; line-height: 1.5;
  border: 1px solid var(--danger); border-radius: 4px;
  background: rgba(217,106,106,.08);
  padding: 8px 12px; margin-bottom: 12px; max-width: 720px;
}
.chartblock h3 { margin-bottom: 10px; }
.chartblock canvas {
  width: 100%; height: auto; display: block;
  background: var(--panel2); border: 1px solid var(--line); border-radius: 8px;
}

/* ---- login ---- */
.login-box {
  max-width: 400px; margin: 8vh auto 0;
  background: rgba(20, 12, 38, .94); border: 1px solid var(--line);
  border-radius: 10px; padding: 30px 28px; text-align: center;
}
.login-box .glyph { font-size: 40px; display: block; margin-bottom: 8px; }
.login-box h1 { font-size: 18px; }
.login-box p { color: var(--dim); font-size: 12px; letter-spacing: .1em; }
.login-box input[type=password] {
  width: 100%; margin: 14px 0; padding: 11px 12px;
  background: var(--void); color: var(--text);
  border: 1px solid var(--line); border-radius: 6px;
  font: inherit; text-align: center; letter-spacing: .2em;
}
.login-err { color: var(--danger); font-size: 12px; margin-top: 10px; }

/* ---- summary PNG ---- */
.png-link { margin: 14px 0; }
img.summary { max-width: 100%; border: 1px solid var(--line); border-radius: 8px; }

@media (max-width: 640px) {
  .rcard { grid-template-columns: 1fr; gap: 3px; }
  .filters select, .filters input { min-width: 120px; flex: 1; }
}
@media (prefers-reduced-motion: reduce) {
  * { transition: none !important; }
}


/* iOS: background-attachment fixed is unsupported; fall back gracefully */
@supports (-webkit-touch-callout: none) {
  body { background-attachment: scroll; }
}

/* ---- masthead nav (v1.4.1) ---- */
.mast-nav { margin-left: auto; display: flex; align-items: baseline; gap: 10px; }
.mast-nav .mast-out { margin-left: 0; }
.mast-sep { color: var(--gold-dim); font-size: 11px; }

/* search grouped with the filters on the index page */
.filters-group { display: grid; gap: 10px; margin-bottom: 22px; }
.filters-group .filters { margin-bottom: 0; }
.filters input[type=search] {
  background: var(--void); color: var(--text);
  border: 1px solid var(--line); border-radius: 6px;
  font: inherit; font-size: 13px; padding: 7px 10px; width: 100%;
}

/* ---- AFK board ---- */
.afk-form { display: flex; flex-direction: column; gap: 22px; max-width: 620px; }

.afk-field { display: flex; flex-direction: column; gap: 6px; }
.afk-field > label {
  font-size: 10px; letter-spacing: .22em; color: var(--gold-dim);
  text-transform: uppercase;
}
.afk-field .req { color: var(--dim); letter-spacing: .05em; }
.afk-form input[type=text], .afk-form input[type=date], .afk-form input[type=search] {
  background: var(--void); color: var(--text);
  border: 1px solid var(--line); border-radius: 6px;
  font: inherit; font-size: 14px; padding: 10px 12px; width: 100%;
}
.afk-form input[type=date] { color-scheme: dark; }
.afk-form input:focus { border-color: var(--gold-dim); outline: none; }

.afk-section {
  display: flex; flex-direction: column; gap: 10px;
  padding-top: 4px;
  border-top: 1px solid var(--line);
}
.afk-section-title {
  font-size: 10px; letter-spacing: .22em; color: var(--gold-dim);
  text-transform: uppercase; padding-top: 14px;
}
.afk-section-title .req { color: var(--dim); letter-spacing: .05em; }

.afk-dates { display: flex; gap: 16px; }
.afk-dates .afk-field { flex: 1; gap: 4px; }
.afk-dates .afk-field > label {
  font-size: 11px; letter-spacing: .06em; text-transform: none; color: var(--dim);
}

.afk-opts { display: grid; gap: 10px; }
.afk-opts label {
  display: flex; align-items: center; gap: 12px;
  font-size: 14px; color: var(--text);
  background: var(--panel2); border: 1px solid var(--line);
  border-radius: 8px; padding: 14px 16px; cursor: pointer;
  transition: border-color .12s;
}
.afk-opts label:hover { border-color: var(--gold-dim); }
.afk-opts input { accent-color: var(--gold); width: 17px; height: 17px; flex: none; }

.afk-submit { align-self: flex-start; padding: 11px 22px; margin-top: 4px; }

.afk-now { border-left: 3px solid var(--gold); }
.afk-soon { border-left: 3px solid var(--gold-dim); }
.badge { font-size: 11px; color: var(--gold-dim); letter-spacing: .1em; }
.del-btn { background: none; border: 1px solid var(--line); color: var(--dim);
  border-radius: 5px; font: inherit; font-size: 11px; padding: 3px 9px;
  cursor: pointer; }
.del-btn:hover { color: var(--danger); border-color: var(--danger); }

@media (max-width: 640px) {
  .mast-search { margin-left: 0; width: 100%; }
  .mast-search input { width: 100%; }
}

/* ---- AFK edit affordances (v1.4.2) ---- */
.afk-actions { display: flex; align-items: center; gap: 8px; }
.edit-btn {
  border: 1px solid var(--line); color: var(--gold-dim);
  border-radius: 5px; font-size: 11px; padding: 3px 9px;
  text-decoration: none;
}
.edit-btn:hover { color: var(--gold); border-color: var(--gold-dim); text-decoration: none; }
.afk-editing {
  font-size: 13px; color: var(--gold); margin-bottom: 14px;
  padding-bottom: 12px; border-bottom: 1px solid var(--line);
}
.afk-editing a { color: var(--dim); }

/* ---- Branded PIN modal (v1.4.4) ---- */
.pin-overlay {
  position: fixed; inset: 0; z-index: 100;
  background: rgba(6, 3, 14, .78);
  backdrop-filter: blur(3px);
  display: flex; align-items: center; justify-content: center;
  padding: 20px;
  animation: pin-fade .15s ease;
}
.pin-overlay[hidden] { display: none; }
@keyframes pin-fade { from { opacity: 0; } to { opacity: 1; } }
.pin-box {
  width: 100%; max-width: 360px;
  background: linear-gradient(180deg, var(--panel2), var(--panel));
  border: 1px solid var(--gold-dim);
  border-radius: 12px;
  padding: 28px 26px 24px;
  text-align: center;
  box-shadow: 0 24px 60px rgba(0, 0, 0, .6),
              0 0 0 1px rgba(232, 198, 107, .08);
  animation: pin-rise .18s ease;
}
@keyframes pin-rise { from { transform: translateY(10px); opacity: .4; } to { transform: none; opacity: 1; } }
.pin-glyph { color: var(--gold); font-size: 30px; line-height: 1; margin-bottom: 8px; }
.pin-box h2 {
  color: var(--gold); font-size: 15px; letter-spacing: .16em;
  text-transform: uppercase; margin: 0 0 6px;
}
.pin-box h2::before { content: none; }
.pin-sub { color: var(--dim); font-size: 12.5px; margin: 0 0 16px; }
.pin-box input[type=password] {
  width: 100%; box-sizing: border-box;
  background: var(--void); color: var(--gold);
  border: 1px solid var(--line); border-radius: 8px;
  font: inherit; font-size: 22px; letter-spacing: .5em;
  text-align: center; padding: 12px 10px;
}
.pin-box input[type=password]:focus { outline: none; border-color: var(--gold); }
.pin-err { color: var(--danger); font-size: 12px; margin-top: 10px; }
.pin-actions { display: flex; gap: 10px; margin-top: 18px; }
.pin-actions .btn { flex: 1; }

/* ---- event-week cumulative badge (v1.5) ---- */
.cum-badge { color: var(--gold-dim); font-style: italic; }

/* ---- clickable entity names in result tables (v1.6) ---- */
.entity-link { color: var(--gold-lt); text-decoration: none;
  border-bottom: 1px dotted var(--gold-dim); }
.entity-link:hover { color: #fff; border-bottom-color: var(--gold); text-decoration: none; }

/* ---- result view: compact header (v1.6.1) ---- */
.result-head { margin-bottom: 20px; }
.result-title {
  font-family: 'Spline Sans Mono', ui-monospace, monospace;
  font-size: 13px; color: var(--text); letter-spacing: .02em;
  margin: 2px 0 6px;
}
.result-head .meta { font-size: 12px; color: var(--dim); line-height: 1.7; }
.result-head .eyebrow { margin-bottom: 2px; }

/* ---- migration subsystem (v1.7) ---- */
.lede-serif { font-family: 'Spline Sans Mono', ui-monospace, Menlo, Consolas, monospace;
  font-size: 13px; line-height: 1.65; color: var(--dim); max-width: 720px;
  margin: 0 0 20px; }
.lede-serif p { margin: 0 0 10px; }
.lede-serif p:last-child { margin-bottom: 0; }
.mig-login { display: flex; flex-direction: column; gap: 10px; }
.mig-login label { font-family: 'Orbitron', sans-serif; font-size: 10px;
  letter-spacing: .2em; text-transform: uppercase; color: var(--gold-dim); }
.mig-login input { background: var(--void); color: var(--text);
  border: 1px solid var(--line); border-radius: 6px; font: inherit;
  font-size: 15px; padding: 10px 12px; }

/* live seat grid */
.seatgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 12px; margin-bottom: 8px; }
.seatcard { background: rgba(21,14,40,.9); border: 1px solid var(--line);
  border-radius: 10px; padding: 14px 16px; text-align: center; }
.seatcard.full { border-color: var(--danger); opacity: .85; }
.seat-name { font-family: 'Orbitron', sans-serif; font-size: 13px;
  color: var(--gold-lt); letter-spacing: .06em; }
.seat-range { font-size: 12px; color: var(--dim); margin: 2px 0 8px; }
.seat-count { font-family: 'Orbitron', sans-serif; font-size: 26px; color: #fff; }
.seat-count .of { font-size: 15px; color: var(--dim); }
.seatcard.full .seat-count .left { color: var(--danger); }
.seat-lbl { font-size: 10px; letter-spacing: .18em; text-transform: uppercase;
  color: var(--gold-dim); margin-top: 2px; }

.intent-form { margin-bottom: 18px; }
.intent-select { background: var(--void); color: var(--text);
  border: 1px solid var(--line); border-radius: 6px;
  font: inherit; font-size: 13px; padding: 9px 12px;
  min-width: 320px; max-width: 100%; cursor: pointer; }
.intent-select:focus { outline: none; border-color: var(--gold-dim); }

.mig-player-form, .guild-add { display: flex; flex-direction: column; gap: 14px; }
.mpf-row { display: flex; gap: 16px; flex-wrap: wrap; }
.mpf-field { display: flex; flex-direction: column; gap: 5px; flex: 1; min-width: 160px; }
.mpf-field label { font-family: 'Orbitron', sans-serif; font-size: 10px;
  letter-spacing: .18em; text-transform: uppercase; color: var(--gold-dim); }
.mpf-field .req { color: var(--dim); letter-spacing: 0; }
.mpf-field input, .mpf-field select { background: var(--void); color: var(--text);
  border: 1px solid var(--line); border-radius: 6px; font: inherit;
  font-size: 14px; padding: 9px 11px; }
.cell-in { background: var(--void); color: var(--text); border: 1px solid var(--line);
  border-radius: 5px; font: inherit; font-size: 13px; padding: 5px 8px; width: 110px; }
.row-actions { display: flex; gap: 8px; align-items: center; }
.inline-reset { display: flex; gap: 6px; align-items: center; }
.over { color: var(--danger); font-size: 11px; }

/* migration portal link on census login */
.login-alt { margin-top: 16px; font-size: 12px; color: var(--dim); }
.login-alt a { color: var(--gold-lt); }

/* ---- migration tier colors (match in-game seat chart) (v1.7.3) ---- */
:root {
  --tier-orange: #e08a3c; --tier-orange-bg: rgba(224,138,60,.12);
  --tier-purple: #9b6cf0; --tier-purple-bg: rgba(155,108,240,.12);
  --tier-blue:   #5b9cf0; --tier-blue-bg:   rgba(91,156,240,.12);
  --tier-green:  #5bc47a; --tier-green-bg:  rgba(91,196,122,.12);
  --tier-gray:   #8a7fae; --tier-gray-bg:   rgba(138,127,174,.10);
}
.seatcard.tier-orange { border-color: var(--tier-orange); background: var(--tier-orange-bg); }
.seatcard.tier-purple { border-color: var(--tier-purple); background: var(--tier-purple-bg); }
.seatcard.tier-blue   { border-color: var(--tier-blue);   background: var(--tier-blue-bg); }
.seatcard.tier-green  { border-color: var(--tier-green);  background: var(--tier-green-bg); }
.seatcard.tier-orange .seat-name { color: var(--tier-orange); }
.seatcard.tier-purple .seat-name { color: var(--tier-purple); }
.seatcard.tier-blue   .seat-name { color: var(--tier-blue); }
.seatcard.tier-green  .seat-name { color: var(--tier-green); }
/* full state keeps the danger emphasis on the count only */
.seatcard.full { opacity: .9; }

/* colored dot used in seat headers */
.seat-dot { display: inline-block; width: 9px; height: 9px; border-radius: 50%;
  margin-right: 7px; vertical-align: middle; background: var(--tier-gray); }
.tier-orange .seat-dot, .seat-chip.tier-orange .seat-dot { background: var(--tier-orange); }
.tier-purple .seat-dot, .seat-chip.tier-purple .seat-dot { background: var(--tier-purple); }
.tier-blue   .seat-dot, .seat-chip.tier-blue   .seat-dot { background: var(--tier-blue); }
.tier-green  .seat-dot, .seat-chip.tier-green  .seat-dot { background: var(--tier-green); }

/* seat chip in the roster (icon + label in tier color) */
.seat-chip { display: inline-flex; align-items: center; gap: 0;
  font-size: 12px; padding: 3px 10px 3px 8px; border-radius: 20px;
  border: 1px solid var(--line); font-family: 'Orbitron', sans-serif;
  letter-spacing: .04em; }
.seat-chip.tier-orange { color: var(--tier-orange); border-color: var(--tier-orange); background: var(--tier-orange-bg); }
.seat-chip.tier-purple { color: var(--tier-purple); border-color: var(--tier-purple); background: var(--tier-purple-bg); }
.seat-chip.tier-blue   { color: var(--tier-blue);   border-color: var(--tier-blue);   background: var(--tier-blue-bg); }
.seat-chip.tier-green  { color: var(--tier-green);  border-color: var(--tier-green);  background: var(--tier-green-bg); }

/* ---- migration header + compact count strips (v1.7.4) ---- */
.mig-note { margin: -4px 0 12px; color: var(--gold-dim); font-size: 12px; }

/* seat pills — stacked rows, only as wide as their content */
.seatstrip { display: inline-flex; flex-direction: column; gap: 6px;
  margin-bottom: 20px; }
.seatpill { display: grid;
  grid-template-columns: 10px 96px 92px 64px 46px;
  align-items: center; gap: 10px;
  border: 1px solid var(--line); border-radius: 6px;
  padding: 6px 12px; font-size: 12px; width: max-content; }
.seatpill .seat-dot { width: 8px; height: 8px; margin: 0; flex: none; }
.sp-name { font-family: 'Orbitron', sans-serif; font-size: 11px;
  letter-spacing: .05em; white-space: nowrap; }
.sp-range { color: var(--dim); font-size: 11px; white-space: nowrap; }
.sp-count { font-family: 'Orbitron', sans-serif; text-align: right;
  font-size: 15px; color: #fff; white-space: nowrap; }
.sp-of { font-size: 11px; color: var(--dim); }
.sp-lbl { font-size: 9px; letter-spacing: .16em; text-transform: uppercase;
  color: var(--gold-dim); white-space: nowrap; }
.seatpill.full .sp-count { color: var(--danger); }
.seatpill.full .sp-lbl { color: var(--danger); }
.seatpill.tier-orange { border-color: var(--tier-orange); background: var(--tier-orange-bg); }
.seatpill.tier-purple { border-color: var(--tier-purple); background: var(--tier-purple-bg); }
.seatpill.tier-blue   { border-color: var(--tier-blue);   background: var(--tier-blue-bg); }
.seatpill.tier-green  { border-color: var(--tier-green);  background: var(--tier-green-bg); }
.seatpill.tier-orange .sp-name { color: var(--tier-orange); }
.seatpill.tier-purple .sp-name { color: var(--tier-purple); }
.seatpill.tier-blue   .sp-name { color: var(--tier-blue); }
.seatpill.tier-green  .sp-name { color: var(--tier-green); }
.seatpill.mine { background: transparent; }

/* band autofill flash */
#tier_id.autofilled { border-color: var(--gold); box-shadow: 0 0 0 2px rgba(212,175,55,.18); }

/* ---- derived seat display (power-driven, not selectable) (v1.7.5) ---- */
.band-derived { display: flex; align-items: center; min-height: 40px;
  padding: 4px 0; }
.bd-empty { color: var(--dim); font-size: 12px; font-style: italic; }

/* seat pills: collapse gracefully on narrow screens */
@media (max-width: 560px) {
  .seatstrip { display: flex; width: 100%; }
  .seatpill { width: 100%; grid-template-columns: 10px 1fr auto auto; }
  .seatpill .sp-range { display: none; }
}

/* ---- admin visibility toggle (v1.8) ---- */
.toggle-form { margin: -6px 0 22px; }
.switch-row { display: inline-flex; align-items: center; gap: 10px;
  cursor: pointer; font-size: 13px; color: var(--text);
  background: var(--panel2); border: 1px solid var(--line);
  border-radius: 8px; padding: 10px 14px; }
.switch-row:hover { border-color: var(--gold-dim); }
.switch-row input { accent-color: var(--gold); width: 16px; height: 16px; }
.toggle-hint { margin: 8px 0 0; font-size: 12px; color: var(--dim); }

/* ---- result delete action (v1.9.1) ---- */
.result-actions { display: flex; align-items: center; justify-content: space-between;
  gap: 16px; flex-wrap: wrap; margin-top: 8px; }
.del-result-form { margin: 0; }
.del-result-form .del-btn { font-size: 12px; padding: 6px 12px; }
.muted { color: var(--dim); font-weight: normal; font-size: 12px; }

/* ---- migration seat glyph + tinted rank names (v2.0.6) ----
   The armchair replaces the old colour dot. It's inline SVG filled with
   currentColor, so it inherits whatever tier-* colour its container sets and
   stays in step if a band's colour ever changes. */
.seat-icon { width: 15px; height: 13px; margin-right: 7px; flex: none;
  vertical-align: -2px; }
.seatpill .seat-icon { width: 13px; height: 11px; margin: 0; }
.seat-chip .seat-icon { width: 13px; height: 11px; margin-right: 6px; }

/* the pills only tinted their dot before; tint the rank name too */
.seatpill.tier-orange { color: var(--tier-orange); }
.seatpill.tier-purple { color: var(--tier-purple); }
.seatpill.tier-blue   { color: var(--tier-blue); }
.seatpill.tier-green  { color: var(--tier-green); }
.seatpill.tier-orange .sp-name { color: var(--tier-orange); }
.seatpill.tier-purple .sp-name { color: var(--tier-purple); }
.seatpill.tier-blue   .sp-name { color: var(--tier-blue); }
.seatpill.tier-green  .sp-name { color: var(--tier-green); }
/* keep the range/count legible rather than tinting the whole pill */
.seatpill .sp-range, .seatpill .sp-count, .seatpill .sp-lbl,
.seatpill .sp-of { color: var(--dim); }
.seatpill .sp-count { color: var(--ink, #e8e3f2); }

/* admin: band name cell picks up the tier colour for its icon + input */
td.tier-orange, th.tier-orange { color: var(--tier-orange); }
td.tier-purple, th.tier-purple { color: var(--tier-purple); }
td.tier-blue,   th.tier-blue   { color: var(--tier-blue); }
td.tier-green,  th.tier-green  { color: var(--tier-green); }
td .seat-name, th .seat-name { color: inherit; }
.cell-in.band-name { color: inherit; font-weight: 500; min-width: 8em; }

/* server power tier picker */
.stier-form { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  margin: 0 0 14px; }
.stier-form label { font-family: 'Orbitron', sans-serif; font-size: 11px;
  letter-spacing: .1em; text-transform: uppercase; color: var(--dim); }
.stier-hint { margin: 0; font-size: 11px; }

/* ==========================================================================
   v3.0 THEME — glass, glow, and a widened palette
   Appended rather than rewritten: every existing selector keeps working, and
   this layer restyles the primitives the pages are already built from, so the
   overhaul reaches all of them without editing a single page.
   ========================================================================== */
:root {
  /* core, deepened */
  --void: #08060F;
  --panel:  rgba(28,18,52,.34);
  --panel2: rgba(20,13,40,.50);
  --line:   rgba(217,169,59,.20);
  --line-2: rgba(123,79,216,.26);
  --purple: #7B4FD8;  --purple-lt: #A888F5;
  --gold:   #D9A93B;  --gold-lt:   #F2CE72;  --gold-dim: #8A6A22;
  --text:   #EDE8F7;  --dim:       #9A8FBA;

  /* widened accents, given MEANING rather than decoration:
     power is what an entity IS, contribution is what it DID. */
  --power:  #4FD1C5;  --power-hi:  #8AE8DF;
  --contrib:#E8A33C;  --contrib-hi:#F7C878;
  --rise:   #5FD6A4;  --fall: #E0645F;

  --glass: rgba(28,18,52,.34);
  --blur: saturate(135%) blur(16px);
  --r-lg: 16px; --r-md: 12px; --r-sm: 8px;
}

body {
  background-color: var(--void);
  background-image:
    radial-gradient(1100px 620px at 78% -12%, rgba(123,79,216,.16), transparent 62%),
    radial-gradient(760px 460px at 8% 4%, rgba(217,169,59,.07), transparent 60%);
  background-attachment: fixed;
}
/* an ambient star field, well behind everything */
body::before {
  content: ""; position: fixed; inset: 0; pointer-events: none; z-index: 0; opacity: .5;
  background-image:
    radial-gradient(1px 1px at 12% 22%, rgba(255,255,255,.55), transparent),
    radial-gradient(1px 1px at 68% 14%, rgba(255,255,255,.40), transparent),
    radial-gradient(1px 1px at 34% 68%, rgba(255,255,255,.30), transparent),
    radial-gradient(1px 1px at 84% 76%, rgba(255,255,255,.45), transparent),
    radial-gradient(1px 1px at 52% 42%, rgba(255,255,255,.25), transparent);
}
/* The masthead must sit ABOVE the content, or its dropdown is trapped inside a
   lower stacking context and opens behind the page — clicks land on whatever
   is painted over it. */
.masthead { position: relative; z-index: 90; }
.wrap, .foot { position: relative; z-index: 1; }
.menu-panel { z-index: 120; }

/* --- panels become glass, lit from within ------------------------------- */
.panel, .hubcard, .seatcard {
  border-radius: var(--r-lg);
  border: 1px solid var(--line-2);
  background: var(--glass);
  backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur);
  position: relative; overflow: hidden;
  box-shadow: inset 0 1px 0 rgba(255,255,255,.055),
              0 14px 40px rgba(0,0,0,.32),
              0 0 40px -8px rgba(123,79,216,.40);
}
/* rim light along the top edge, so the pane reads as a physical surface */
.panel::after, .hubcard::after {
  content: ""; position: absolute; left: 14%; right: 14%; top: -1px; height: 1px;
  pointer-events: none;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.30), transparent);
}

/* --- type ---------------------------------------------------------------- */
h1 {
  font-family: 'Cinzel', 'Orbitron', serif; font-weight: 600;
  letter-spacing: .03em; text-shadow: none;
  background: linear-gradient(178deg, #FFF8E4 6%, var(--gold-lt) 52%, var(--gold-dim) 128%);
  -webkit-background-clip: text; background-clip: text; color: transparent;
}
h2 { color: var(--gold-lt); letter-spacing: .16em; }
h2::before, h3::before { color: var(--purple-lt); }
.eyebrow { color: var(--gold); letter-spacing: .34em; }

/* --- tables -------------------------------------------------------------- */
.tablewrap { border-radius: var(--r-md); }
th { border-bottom-color: var(--line); }
td { border-bottom: 1px solid rgba(123,79,216,.12); }
tbody tr { transition: background .16s; }
tbody tr:hover { background: rgba(123,79,216,.07); }

/* --- controls ------------------------------------------------------------ */
.btn {
  border-radius: var(--r-sm);
  background: linear-gradient(180deg, var(--gold-lt), #9a7420);
  box-shadow: 0 0 18px -6px rgba(217,169,59,.7);
}
.btn:hover { filter: brightness(1.08); background: linear-gradient(180deg, var(--gold-lt), #9a7420); }
.menu-btn, .navbtn { border-radius: var(--r-sm); }
.menu-panel { border-radius: var(--r-md); background: rgba(24,15,46,.90);
  backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur); }
.menu-panel a { border-radius: var(--r-sm); }

/* --- the search control in the masthead ---------------------------------- */
.seek-btn {
  width: 34px; height: 34px; border-radius: 50%; cursor: pointer;
  display: grid; place-items: center; background: rgba(123,79,216,.10);
  border: 1px solid var(--line-2); color: var(--dim); transition: .18s;
}
.seek-btn:hover { color: var(--gold-lt); border-color: var(--gold);
  background: rgba(217,169,59,.10); }
.seek-btn svg { width: 16px; height: 16px; fill: none; stroke: currentColor;
  stroke-width: 1.7; stroke-linecap: round; }

/* --- hover cards --------------------------------------------------------- */
.hovercard {
  position: absolute; z-index: 140; min-width: 300px; width: max-content;
  max-width: 460px; padding: 16px 18px;
  border: 1px solid var(--gold); border-radius: var(--r-md);
  background: rgba(24,15,46,.80);
  backdrop-filter: saturate(140%) blur(20px);
  -webkit-backdrop-filter: saturate(140%) blur(20px);
  box-shadow: 0 0 40px rgba(217,169,59,.14), 0 20px 50px rgba(0,0,0,.62);
  opacity: 0; visibility: hidden; transform: translateY(-4px);
  transition: opacity .15s, transform .15s, visibility .15s;
}
.hovercard.on { opacity: 1; visibility: visible; transform: translateY(0); }
.hc-name { display: block; font-family: 'Cinzel','Orbitron',serif; font-size: 19px;
  font-weight: 600; color: var(--gold-lt); line-height: 1.1; }
.hc-full { display: block; font-family: 'Spline Sans Mono', monospace;
  font-size: 11px; letter-spacing: .13em; text-transform: uppercase;
  color: var(--dim); margin-top: 4px; white-space: nowrap; }
.hc-grid { display: flex; flex-wrap: wrap; gap: 12px 18px; margin-top: 13px;
  padding-top: 12px; border-top: 1px solid var(--line); }
.hc-cell { white-space: nowrap; }
.hc-k { display: block; font-family: 'Spline Sans Mono', monospace; font-size: 8.5px;
  letter-spacing: .16em; text-transform: uppercase; color: var(--dim);
  margin-bottom: 5px; white-space: nowrap; }
.hc-v { display: block; font-family: 'Spline Sans Mono', monospace; font-size: 15px;
  color: var(--text); line-height: 1; white-space: nowrap; }
.hc-v.pw { color: var(--power-hi); }
.hc-v.cn { color: var(--contrib-hi); }
.hc-none { display: block; margin-top: 12px; font-family: 'Spline Sans Mono', monospace;
  font-size: 11px; color: var(--dim); }
a.ent { border-bottom: 1px dotted rgba(168,136,245,.45); }

/* --- universal search ---------------------------------------------------- */
.seek { position: fixed; inset: 0; z-index: 200; display: flex;
  justify-content: center; align-items: flex-start; padding: 12vh 22px 22px;
  background: rgba(4,3,10,.62);
  backdrop-filter: blur(5px); -webkit-backdrop-filter: blur(5px); }
.seek[hidden] { display: none; }
.seek-box { width: 100%; max-width: 580px; border: 1px solid var(--gold);
  border-radius: var(--r-lg); overflow: hidden; background: rgba(24,15,46,.86);
  backdrop-filter: saturate(140%) blur(22px);
  -webkit-backdrop-filter: saturate(140%) blur(22px);
  box-shadow: 0 0 54px rgba(217,169,59,.14), 0 26px 64px rgba(0,0,0,.66); }
.seek-in { display: flex; align-items: center; gap: 12px; padding: 16px 18px;
  border-bottom: 1px solid var(--line); }
.seek-ico { width: 17px; height: 17px; fill: none; stroke: var(--gold);
  stroke-width: 1.7; stroke-linecap: round; flex: none; }
.seek-in input { flex: 1; background: none; border: 0; outline: none;
  color: var(--text); font-family: inherit; font-size: 16px; }
.seek-in input::placeholder { color: var(--dim); }
.seek-esc, .seek-foot kbd { font-family: 'Spline Sans Mono', monospace; font-size: 9px;
  letter-spacing: .10em; text-transform: uppercase; color: var(--dim);
  border: 1px solid var(--line-2); border-radius: 4px; padding: 2px 6px; }
.seek-out { max-height: 46vh; overflow: auto; padding: 6px 0; }
.seek-grp { font-family: 'Spline Sans Mono', monospace; font-size: 9px;
  letter-spacing: .26em; text-transform: uppercase; color: var(--gold);
  padding: 12px 18px 6px; }
.seek-row { display: flex; align-items: center; gap: 13px; padding: 9px 18px;
  cursor: pointer; border-left: 2px solid transparent; text-decoration: none; }
.seek-row:hover, .seek-row.sel { background: rgba(123,79,216,.14);
  border-left-color: var(--gold); text-decoration: none; }
.seek-mark { width: 26px; height: 26px; border-radius: 50%; display: grid;
  place-items: center; font-family: 'Spline Sans Mono', monospace; font-size: 10px;
  flex: none; border: 1px solid var(--line-2); color: var(--purple-lt); }
.seek-row.g .seek-mark { color: var(--gold-lt); border-color: rgba(217,169,59,.4); }
.seek-nm { font-size: 14px; color: var(--text); }
.seek-nm b { color: var(--gold-lt); font-weight: 600; }
.seek-meta { margin-left: auto; font-family: 'Spline Sans Mono', monospace;
  font-size: 10.5px; color: var(--dim); white-space: nowrap; }
.seek-none { padding: 24px 18px; font-family: 'Spline Sans Mono', monospace;
  font-size: 12px; color: var(--dim); }
.seek-foot { display: flex; gap: 16px; align-items: center; padding: 10px 18px;
  border-top: 1px solid var(--line); font-family: 'Spline Sans Mono', monospace;
  font-size: 9.5px; letter-spacing: .14em; text-transform: uppercase; color: var(--dim); }
.seek-foot span { display: flex; align-items: center; gap: 5px; }
.seek-foot span:last-child { margin-left: auto; }

/* --- the two measures, never mixed --------------------------------------- */
.is-power   { color: var(--power-hi); }
.is-contrib { color: var(--contrib-hi); }

/* --- charts -------------------------------------------------------------- */
.chartblock canvas { border-radius: var(--r-md); }

@media (prefers-reduced-motion: reduce) {
  .hovercard { transition: none; }
}

/* --- competitive standing tiles ----------------------------------------- */
.tiles { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
@media (max-width: 860px) { .tiles { grid-template-columns: repeat(2, 1fr); } }
@media (max-width: 460px) { .tiles { grid-template-columns: 1fr; } }
.tile { border: 1px solid var(--line-2); border-radius: var(--r-md);
  padding: 15px 16px; background: rgba(28,18,52,.30); }
.t-k { display: block; font-family: 'Spline Sans Mono', monospace; font-size: 9px;
  letter-spacing: .20em; text-transform: uppercase; color: var(--dim);
  margin-bottom: 8px; }
.t-v { display: block; font-family: 'Cinzel', 'Orbitron', serif; font-size: 28px;
  font-weight: 600; line-height: 1; color: var(--text); }
.t-v.cn { color: var(--contrib-hi); }
.t-v.pw { color: var(--power-hi); }
.t-v.up { color: var(--rise); }
.t-of { display: block; font-family: 'Spline Sans Mono', monospace;
  font-size: 10.5px; color: var(--dim); margin-top: 7px; line-height: 1.5; }
.t-bar { display: block; height: 3px; border-radius: 2px;
  background: rgba(255,255,255,.07); margin: 12px 0 6px; overflow: hidden; }
.t-bar i { display: block; height: 100%; border-radius: 2px;
  box-shadow: 0 0 10px currentColor; }
.t-pc { display: block; font-family: 'Spline Sans Mono', monospace;
  font-size: 9.5px; letter-spacing: .08em; color: var(--dim); }
.tile-note { margin: 16px 0 0; font-family: 'Spline Sans Mono', monospace;
  font-size: 10.5px; line-height: 1.7; color: var(--dim);
  border-left: 1px solid var(--line); padding-left: 12px; }
.t-name { min-width: 11em; }

/* ==========================================================================
   v3.2 — the agreed entity treatment, lifted from the approved mock-up
   ========================================================================== */

/* eyebrow trails a rule to the page edge */
.eyebrow { display: flex; align-items: center; gap: 12px; }
.eyebrow::after { content: ""; flex: 1; height: 1px; background: var(--line); }

/* identity line under the title: tag pill, server, record count */
.ident { display: flex; gap: 9px; align-items: center; flex-wrap: wrap;
  margin: 14px 0 0; font-family: 'Spline Sans Mono', monospace;
  font-size: 11.5px; color: var(--dim); }
.ident .sep { color: var(--line-solid); }
.ident .tag { color: var(--purple-lt); border: 1px solid var(--line-2);
  border-radius: var(--r-sm); padding: 3px 10px; letter-spacing: .10em;
  background: rgba(123,79,216,.10); }
.ident .gname { color: var(--dim); letter-spacing: .12em; text-transform: uppercase; }

/* --- the Prime Radiant scale: one tick per record, placed by date --------- */
.radiant { margin: 28px 0 4px; }
.radiant-cap { display: flex; justify-content: space-between;
  font-family: 'Spline Sans Mono', monospace; font-size: 9.5px;
  letter-spacing: .22em; text-transform: uppercase; color: var(--dim);
  margin-bottom: 8px; }
.radiant svg { display: block; width: 100%; height: 58px; overflow: visible; }
.rt .stem { stroke: var(--line); stroke-width: 1; }
.rt .head { fill: var(--void); stroke: var(--gold-dim); stroke-width: 1; }
.rt.pw .head { stroke: var(--power); }
.rt.cn .head { stroke: var(--contrib); }
.rt:hover .head { fill: var(--gold-lt); }
.rt.pw:hover .head { fill: var(--power); }
.rt.cn:hover .head { fill: var(--contrib); }
.rt:hover .stem { stroke: var(--gold); }
.radiant-note { font-family: 'Spline Sans Mono', monospace; font-size: 10px;
  color: var(--dim); margin-top: 2px; }

/* --- the two measures, deliberately never mixed -------------------------- */
.measures { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; margin: 30px 0 0; }
@media (max-width: 760px) { .measures { grid-template-columns: 1fr; } }
.measure { border: 1px solid var(--line-2); border-radius: var(--r-lg);
  padding: 22px 24px; position: relative; overflow: hidden;
  background: var(--glass);
  backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur); }
.measure::before { content: ""; position: absolute; left: 0; top: 18px;
  bottom: 18px; width: 2px; border-radius: 2px; }
.measure::after { content: ""; position: absolute; left: 14%; right: 14%;
  top: -1px; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(255,255,255,.30), transparent); }
.measure.power::before   { background: linear-gradient(180deg, var(--power), transparent); }
.measure.contrib::before { background: linear-gradient(180deg, var(--contrib), transparent); }
.measure.power   { box-shadow: 0 14px 40px rgba(0,0,0,.36), 0 0 36px -6px rgba(79,209,197,.34); }
.measure.contrib { box-shadow: 0 14px 40px rgba(0,0,0,.36), 0 0 36px -6px rgba(232,163,60,.34); }
.m-lab { font-family: 'Spline Sans Mono', monospace; font-size: 9.5px;
  letter-spacing: .26em; text-transform: uppercase; margin-bottom: 12px; }
.measure.power .m-lab   { color: var(--power); }
.measure.contrib .m-lab { color: var(--contrib); }
.m-val { font-family: 'Cinzel', 'Orbitron', serif; font-size: 34px;
  font-weight: 600; line-height: 1; }
.measure.power .m-val   { color: var(--power-hi); }
.measure.contrib .m-val { color: var(--contrib-hi); }
.m-sub { font-family: 'Spline Sans Mono', monospace; font-size: 11px;
  color: var(--dim); margin-top: 10px; line-height: 1.6; }
.m-none { font-family: 'Spline Sans Mono', monospace; font-size: 11px;
  color: var(--dim); margin-top: 10px; line-height: 1.6; }
.delta { display: inline-flex; align-items: center; gap: 5px; font-size: 11px;
  padding: 2px 8px; border-radius: 999px; margin-left: 4px; }
.delta.up   { color: var(--rise); background: rgba(95,214,164,.10); }
.delta.down { color: var(--fall); background: rgba(224,100,95,.10); }
.spark { margin-top: 14px; display: block; width: 100%; height: 40px; overflow: visible; }
.divider-note { margin: 14px 0 0; font-family: 'Spline Sans Mono', monospace;
  font-size: 10.5px; color: var(--dim); line-height: 1.7;
  border-left: 1px solid var(--line); padding-left: 12px; }

/* charts sit on glass like everything else */
.chartblock { border: 1px solid var(--line-2); border-radius: var(--r-lg);
  padding: 20px 22px; background: var(--glass-2, rgba(20,13,40,.46));
  backdrop-filter: var(--blur); -webkit-backdrop-filter: var(--blur);
  position: relative; }
.chartblock h3 { margin-top: 0; }

@media (prefers-reduced-motion: no-preference) {
  .rise-in { animation: riseIn .8s cubic-bezier(.22,.7,.24,1) backwards; }
  @keyframes riseIn { from { transform: scaleY(0); } to { transform: scaleY(1); } }
  .fade-in { animation: fadeIn .9s ease-out backwards; }
  @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
}

/* --- SVG chart engine (v3.5) -------------------------------------------- */
.nchart .nax { font-family: 'Spline Sans Mono', monospace; font-size: 9.5px;
  fill: var(--dim); letter-spacing: .08em; }
.nchart .nlab { font-family: 'Spline Sans Mono', monospace; font-size: 9.5px;
  fill: var(--mut, #9A8FBA); letter-spacing: .04em; }
.nchart .ndot { transition: r .16s; }
.nchart .ndot:hover { r: 5.4; }
.nchart .nbar { transition: opacity .18s, filter .18s; cursor: pointer; }
.nchart .nbar:hover { opacity: 1 !important; filter: brightness(1.25); }
.nchart .now-ring { transform-origin: center; transform-box: fill-box; }

@media (prefers-reduced-motion: no-preference) {
  .nchart .draw { stroke-dasharray: var(--len); stroke-dashoffset: var(--len);
    animation: nDraw 1.5s cubic-bezier(.22,.7,.24,1) forwards; }
  @keyframes nDraw { to { stroke-dashoffset: 0; } }
  .nchart .rise { animation: nRise .85s cubic-bezier(.22,.7,.24,1) backwards; }
  @keyframes nRise { from { transform: scaleY(0); } to { transform: scaleY(1); } }
  .nchart .fade-in { animation: nFade .9s ease-out backwards; }
  @keyframes nFade { from { opacity: 0; } to { opacity: 1; } }
  /* the glow breathes; bars breathe on a different, deliberately non-round
     cycle so the two never fall into lockstep */
  .nchart .glowlayer { animation: nShimmer 7.3s ease-in-out infinite; }
  .nchart .barbreathe { animation: nShimmer 9.1s ease-in-out infinite; }
  @keyframes nShimmer { 0%,100% { opacity: .45; } 38% { opacity: .95; }
                        64% { opacity: .60; } }
  /* holographic projection artefacts */
  .nchart .holo-band { animation: nScan 5.2s linear infinite; }
  @keyframes nScan { from { transform: translateY(-34px); }
                     to   { transform: translateY(210px); } }
  .nchart .holo-scan { animation: nFlick 3.1s steps(12) infinite; }
  @keyframes nFlick { 0%,100% { opacity: .30; } 22% { opacity: .46; }
                      47% { opacity: .24; } 61% { opacity: .52; }
                      78% { opacity: .33; } }
  .nchart .holo-jit { animation: nJit 7.7s ease-in-out infinite; }
  @keyframes nJit { 0%,86%,100% { transform: translateX(0); }
                    88% { transform: translateX(1.4px); }
                    90% { transform: translateX(-1px); }
                    92% { transform: translateX(.6px); } }
  .nchart .mote { animation: nDrift linear infinite; }
  @keyframes nDrift { from { transform: translate(0,0); opacity: 0; }
                      12% { opacity: .75; } 88% { opacity: .65; }
                      to { transform: translate(190px,-26px); opacity: 0; } }
}
.is-pvp { color: #E0574F; }

/* --- sortable headers ---------------------------------------------------- */
th.sortable { cursor: pointer; user-select: none; position: relative;
  padding-right: 20px; transition: color .15s; }
th.sortable:hover, th.sortable:focus-visible { color: var(--gold-lt); }
th.sortable::after { content: "⇅"; position: absolute; right: 6px;
  opacity: .32; font-size: 10px; }
th.sortable.sorted::after { opacity: 1; color: var(--gold-lt); }
th.sortable[data-dir="asc"]::after  { content: "↑"; }
th.sortable[data-dir="desc"]::after { content: "↓"; }
.is-power { color: var(--power-hi); }
tr.me td { background: rgba(217,169,59,.06); }
tr.me td:first-child { box-shadow: inset 2px 0 0 var(--gold); }

/* --- collapsible sections ------------------------------------------------ */
.fold { margin: 26px 0 0; border: 1px solid var(--line-2); border-radius: var(--r-lg);
  background: var(--glass); backdrop-filter: var(--blur);
  -webkit-backdrop-filter: var(--blur); overflow: hidden; }
.fold > summary { cursor: pointer; list-style: none; display: flex;
  align-items: center; gap: 12px; padding: 15px 20px;
  font-family: 'Orbitron', sans-serif; font-size: 13px; letter-spacing: .16em;
  color: var(--gold-lt); transition: background .15s; }
.fold > summary::-webkit-details-marker { display: none; }
.fold > summary::before { content: "⬡"; color: var(--purple-lt); font-size: 11px; }
.fold > summary::after { content: "▾"; margin-left: auto; color: var(--dim);
  font-size: 11px; transition: transform .18s; }
.fold[open] > summary::after { transform: rotate(180deg); }
.fold > summary:hover { background: rgba(123,79,216,.10); }
.fold-n { font-family: 'Spline Sans Mono', monospace; font-size: 10.5px;
  letter-spacing: .06em; color: var(--dim); border: 1px solid var(--line-2);
  border-radius: 999px; padding: 2px 9px; }
.fold-b { padding: 4px 20px 18px; }
.fold-b .tablewrap { margin-top: 0; }

/* --- entity headers ------------------------------------------------------ */
.h1-sep { color: var(--line-solid); font-weight: 400; }
.h1-name { font-size: .62em; letter-spacing: .10em; color: var(--gold-lt);
  -webkit-text-fill-color: var(--gold-lt); }
a.tag { text-decoration: none; transition: .15s; }
a.tag:hover { color: var(--gold-lt); border-color: var(--gold);
  background: rgba(217,169,59,.10); text-decoration: none; }
.srv-tag { color: var(--power-hi); border-color: rgba(79,209,197,.32);
  background: rgba(79,209,197,.08); }

/* ==========================================================================
   v3.8 — ATMOSPHERE
   Seldon's Prime Radiant projected his equations into the air around whoever
   was reading them. That is what this is: a field of psychohistorical notation
   drifting behind the archive, far too faint to read and not meant to be.
   Everything here is inert — aria-hidden, pointer-events:none, and stripped
   out entirely when the reader has asked for reduced motion.
   ========================================================================== */
#radiant{position:fixed;inset:0;z-index:0;pointer-events:none;overflow:hidden}
#radiant text{font-family:'Spline Sans Mono',monospace;fill:var(--gold);
  opacity:.055;user-select:none}
.galdisc{position:fixed;left:50%;top:-42vh;width:135vw;height:135vw;
  transform:translateX(-50%);z-index:0;pointer-events:none;opacity:.45;
  border-radius:50%;filter:blur(38px);
  background:
    radial-gradient(closest-side,rgba(123,79,216,.15),transparent 70%),
    conic-gradient(from 0deg,transparent,rgba(217,169,59,.06),transparent 33%,
                   rgba(123,79,216,.09),transparent 67%,rgba(217,169,59,.04),transparent)}
.starfield{position:fixed;inset:0;z-index:0;pointer-events:none;opacity:.55;
  background-image:
    radial-gradient(1.2px 1.2px at 12% 22%,rgba(255,255,255,.6),transparent),
    radial-gradient(1px 1px at 68% 14%,rgba(255,255,255,.45),transparent),
    radial-gradient(1px 1px at 34% 68%,rgba(255,255,255,.35),transparent),
    radial-gradient(1.4px 1.4px at 84% 76%,rgba(255,255,255,.5),transparent),
    radial-gradient(1px 1px at 52% 42%,rgba(255,255,255,.3),transparent)}
/* two layers of depth that answer to the cursor, a beat behind it */
.plx{position:fixed;inset:-8%;z-index:0;pointer-events:none;will-change:transform}
.plx.a{background-image:
  radial-gradient(1.6px 1.6px at 18% 30%,rgba(255,255,255,.6),transparent),
  radial-gradient(1.5px 1.5px at 74% 20%,rgba(242,206,114,.5),transparent),
  radial-gradient(1.7px 1.7px at 44% 78%,rgba(255,255,255,.55),transparent),
  radial-gradient(1.5px 1.5px at 88% 62%,rgba(168,136,245,.5),transparent)}
.plx.b{background-image:
  radial-gradient(1px 1px at 28% 52%,rgba(255,255,255,.4),transparent),
  radial-gradient(1px 1px at 62% 36%,rgba(255,255,255,.34),transparent),
  radial-gradient(1px 1px at 12% 82%,rgba(255,255,255,.3),transparent),
  radial-gradient(1px 1px at 92% 14%,rgba(255,255,255,.36),transparent)}
/* a ship making the jump, every twenty seconds or so */
#transit{position:fixed;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.streak{position:absolute;height:1px;border-radius:1px;opacity:0;
  background:linear-gradient(90deg,transparent,rgba(242,206,114,.85),
    rgba(255,255,255,.95),rgba(138,232,223,.7),transparent);
  box-shadow:0 0 12px rgba(242,206,114,.55)}
/* HUD brackets — instrumentation, not ornament */
.panel .br{position:absolute;width:15px;height:15px;pointer-events:none;
  border-color:rgba(217,169,59,.40);opacity:.85}
.panel .br.tl{top:8px;left:8px;border-top:1px solid;border-left:1px solid;
  border-top-left-radius:5px}
.panel .br.tr{top:8px;right:8px;border-top:1px solid;border-right:1px solid;
  border-top-right-radius:5px}
.panel .br.bl{bottom:8px;left:8px;border-bottom:1px solid;border-left:1px solid;
  border-bottom-left-radius:5px}
.panel .br.brr{bottom:8px;right:8px;border-bottom:1px solid;border-right:1px solid;
  border-bottom-right-radius:5px}

@media (prefers-reduced-motion:no-preference){
  .galdisc{animation:novaDrift 170s linear infinite}
  @keyframes novaDrift{to{transform:translateX(-50%) rotate(360deg)}}
  #radiant text{animation:novaFloat linear infinite}
  @keyframes novaFloat{from{transform:translateY(0)}to{transform:translateY(-140px)}}
  .streak{animation:novaTransit 1.5s cubic-bezier(.3,0,.5,1) forwards}
  @keyframes novaTransit{
    0%{opacity:0;transform:translateX(-14vw) scaleX(.35)}
    14%{opacity:1} 82%{opacity:1}
    100%{opacity:0;transform:translateX(112vw) scaleX(1.5)}}
  /* panels resolve into place rather than appearing */
  .panel,.hubcard,.fold{animation:novaRise .8s cubic-bezier(.22,.7,.24,1) backwards}
  @keyframes novaRise{from{opacity:0;transform:translateY(12px)}to{opacity:1}}
}

/* --- EMPIRE'S SPOTLIGHT --------------------------------------------------- */
.spot{display:grid;gap:14px}
@media(min-width:780px){.spot{grid-template-columns:1fr 1fr}}
.sc{position:relative;border:1px solid var(--line-2);border-radius:14px;
  padding:17px 19px 17px 21px;background:rgba(26,17,48,.42);overflow:hidden;
  display:flex;gap:15px;align-items:flex-start;transition:.25s;
  text-decoration:none;color:inherit}
.sc:hover{border-color:rgba(217,169,59,.5);transform:translateY(-2px);
  box-shadow:0 0 34px -10px rgba(217,169,59,.5);text-decoration:none}
.sc::before{content:"";position:absolute;left:0;top:14px;bottom:14px;width:2px;
  border-radius:2px;background:linear-gradient(180deg,var(--gold),transparent)}
.sc-em{width:36px;height:36px;flex:none}
.sc-b{flex:1;min-width:0}
.sc-lab{font-family:'Spline Sans Mono',monospace;font-size:8.5px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--dim);display:block;margin-bottom:7px}
.sc-who{font-family:'Cinzel','Orbitron',serif;font-size:20px;font-weight:600;
  color:var(--gold-lt);display:block;line-height:1.1}
.sc-what{font-size:13.5px;color:var(--mut);display:block;margin-top:6px;line-height:1.6}
.sc-what b{color:var(--rise);font-weight:500}
.sc-what i{font-style:normal;color:var(--contrib-hi)}
.sc-go{align-self:center;color:var(--dim);font-size:16px;flex:none;opacity:0;
  transform:translateX(-6px);transition:.22s}
.sc:hover .sc-go{opacity:1;transform:translateX(0);color:var(--gold-lt)}
.sc-em .orb{transform-origin:50% 50%}
@media (prefers-reduced-motion:no-preference){
  .sc-em .orb{animation:novaSpin 18s linear infinite}
  @keyframes novaSpin{to{transform:rotate(360deg)}}
  .sc-em .core{animation:novaTwinkle 3.4s ease-in-out infinite}
  @keyframes novaTwinkle{0%,100%{opacity:.7}50%{opacity:1}}
}

/* --- "Among your own scale" ---------------------------------------------- */
.peerchart{width:100%;height:auto;aspect-ratio:980/400;display:block;overflow:visible}
.peerchart .nax{font-family:'Spline Sans Mono',monospace;font-size:9.5px;
  fill:var(--dim);letter-spacing:.08em}
.peerchart .naxt{font-family:'Spline Sans Mono',monospace;font-size:10px;
  letter-spacing:.16em;text-transform:uppercase}
.peerchart .nnm{font-family:'Spline Sans Mono',monospace;font-size:11px;fill:var(--text);
  paint-order:stroke;stroke:#0A0716;stroke-width:3.5px;stroke-linejoin:round}
.peerchart .nnm.dim{fill:var(--mut)}
.peerchart .nlead{stroke:rgba(237,232,247,.28);stroke-width:1}
.peerchart .pv-dot{cursor:pointer;transition:r .16s}
.peerchart .pv-dot:hover{r:8}
.verdict{display:flex;align-items:center;gap:18px;flex-wrap:wrap;margin:0 0 20px}
.vbadge{font-family:'Cinzel','Orbitron',serif;font-size:21px;font-weight:600;
  padding:9px 20px;border-radius:999px;border:1px solid;white-space:nowrap}
.vbadge.above{color:var(--gold-lt);border-color:var(--gold);
  background:rgba(217,169,59,.10);box-shadow:0 0 28px -8px rgba(217,169,59,.6)}
.vbadge.onpar{color:var(--purple-lt);border-color:var(--line-2);
  background:rgba(123,79,216,.10)}
.vbadge.under{color:#5B9CF0;border-color:rgba(91,156,240,.4);
  background:rgba(91,156,240,.08)}
.vtext{font-size:14.5px;color:var(--mut);line-height:1.65;flex:1;min-width:230px}
.vtext b{color:var(--text);font-weight:500}
.phases{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}
.phase{font-family:'Spline Sans Mono',monospace;font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;padding:8px 15px;border-radius:999px;cursor:pointer;
  background:rgba(123,79,216,.10);border:1px solid var(--line-2);color:var(--mut);
  transition:.15s}
.phase:hover{color:var(--gold-lt);border-color:var(--gold)}
.phase.on{color:#1a1206;border-color:var(--gold);
  background:linear-gradient(180deg,var(--gold-lt),#9a7420)}
@media (prefers-reduced-motion:no-preference){
  .peerchart .pv-halo{transform-origin:center;transform-box:fill-box;
    animation:pvPulse 3s ease-out infinite}
  @keyframes pvPulse{0%{transform:scale(.85);opacity:.8}
    70%{transform:scale(1.9);opacity:0}100%{opacity:0}}
}
.rcard .rg{color:var(--gold-lt);font-weight:600;letter-spacing:.08em}
.rcard .rg-srv{color:var(--power-hi);font-family:'Spline Sans Mono',monospace;font-size:.85em}

/* ==========================================================================
   v3.9 — THE BRIDGE, on census. Same layouts; NOVA-PC's ship.
   ========================================================================== */
:root{
  --void:#03020A; --abyss:#07051A;
  --holo:#A888F5; --holo-hi:#C9B2FF; --holo-lo:#5B3AA0;
  --gold-hi:#F2CE72; --hline:rgba(123,79,216,.30);
  --teal:#4FD1C5; --blue:#5B9CF0; --sky:#4FB0E0; --mint:#8FE8C8; --ok:#5FE0B0;
}
html{color-scheme:dark}
body{background:var(--void)!important}

/* the viewport: nebula, imperial rings, stars */
#space{position:fixed;inset:0;z-index:0;overflow:hidden;pointer-events:none;
  background:radial-gradient(1400px 900px at 50% 120%,#0B0728 0%,var(--void) 60%)}
#nebula{position:absolute;inset:-20%;filter:blur(70px);opacity:.55;background:
  radial-gradient(600px 400px at 70% 30%,rgba(123,79,216,.34),transparent 70%),
  radial-gradient(500px 500px at 25% 70%,rgba(217,169,59,.20),transparent 70%),
  radial-gradient(700px 300px at 55% 85%,rgba(168,136,245,.16),transparent 70%)}
#stars{position:absolute;inset:-10%;background-image:
  radial-gradient(1.4px 1.4px at 8% 14%,#fff,transparent),
  radial-gradient(1px 1px at 22% 48%,rgba(255,255,255,.7),transparent),
  radial-gradient(1.2px 1.2px at 37% 21%,rgba(201,178,255,.9),transparent),
  radial-gradient(1px 1px at 51% 71%,rgba(255,255,255,.55),transparent),
  radial-gradient(1.5px 1.5px at 64% 33%,#fff,transparent),
  radial-gradient(1px 1px at 78% 58%,rgba(242,206,114,.8),transparent),
  radial-gradient(1.3px 1.3px at 89% 17%,rgba(255,255,255,.85),transparent),
  radial-gradient(1.2px 1.2px at 94% 79%,rgba(168,136,245,.8),transparent)}
#rings{position:absolute;left:50%;top:38%;width:160vmax;height:160vmax;
  transform:translate(-50%,-50%);opacity:.16}
#rings circle{fill:none;stroke:var(--gold);stroke-width:.35}
#rings .dash{stroke-dasharray:1 14;stroke-width:1.1}
#rings line{stroke:rgba(217,169,59,.5);stroke-width:.3}
#film{position:fixed;inset:0;z-index:40;pointer-events:none;opacity:.045;
  background:repeating-linear-gradient(180deg,rgba(255,255,255,.6) 0 1px,transparent 1px 3px)}
#vignette{position:fixed;inset:0;z-index:39;pointer-events:none;
  background:radial-gradient(ellipse at 50% 45%,transparent 55%,rgba(0,0,0,.55) 100%)}
.galdisc,.starfield{display:none}

/* masthead as a ribbon */
.masthead{border-bottom:1px solid transparent;
  background:linear-gradient(180deg,rgba(3,2,10,.75),rgba(3,2,10,0))!important;
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important}
.masthead::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;
  background:linear-gradient(90deg,transparent,var(--line) 15%,var(--hline) 50%,var(--line) 85%,transparent)}
.brand .wordmark{font-family:'Cinzel',serif!important;font-weight:700;letter-spacing:.28em;color:var(--gold-hi)}

/* headings as light */
/* The `background` shorthand resets background-clip to border-box, and with
   !important on the shorthand that reset beat the plain `background-clip:text`
   below it — so the gradient filled the whole box while the text stayed
   transparent: a gold bar with no title under it. Both clips are now important. */
h1{font-family:'Cinzel',serif!important;font-weight:700!important;letter-spacing:.06em;
  background:linear-gradient(178deg,#FFFBEF 0%,var(--gold-hi) 40%,#8A6A22 130%)!important;
  -webkit-background-clip:text!important;background-clip:text!important;
  color:transparent!important;-webkit-text-fill-color:transparent;
  filter:drop-shadow(0 0 22px rgba(242,206,114,.25))}
/* elements inside an h1 that must NOT be clipped (chips, server tags) */
h1 .srv-chip,h1 .srv-tag-warn{-webkit-text-fill-color:initial;color:var(--power-hi)!important}
h1 .h1-name{-webkit-text-fill-color:var(--gold-hi)}
h2,.eyebrow,.sector{color:var(--holo)!important;text-shadow:0 0 10px rgba(168,136,245,.45)}
h2::before{color:var(--gold)!important}

/* every panel is a slab: luminous bevel, projection scanlines, refresh sweep,
   corner notches (the HUD brackets become notches) */
.panel,.fold,.measure,.sc,.hubcard,.tile,.qrow,.chartblock{
  position:relative;
  border:1px solid rgba(168,136,245,.30)!important;border-radius:13px!important;
  background:linear-gradient(180deg,rgba(9,7,28,.86),rgba(4,3,14,.92))!important;
  backdrop-filter:blur(14px)!important;-webkit-backdrop-filter:blur(14px)!important;
  box-shadow:0 0 44px -14px rgba(168,136,245,.45),inset 0 1px 0 rgba(255,255,255,.05);
  overflow:hidden}
.panel::before,.fold::before,.measure::before{
  content:"";position:absolute;inset:0;pointer-events:none;opacity:.06;z-index:0;
  background:repeating-linear-gradient(180deg,rgba(201,178,255,.8) 0 1px,transparent 1px 4px)}
.panel>*,.fold>*,.measure>*{position:relative;z-index:1}
/* the projector beam beneath a panel */
.panel::after,.measure::after{content:"";position:absolute;left:12%;right:12%;bottom:-40px;height:60px;
  z-index:-1;pointer-events:none;filter:blur(10px);
  background:radial-gradient(ellipse at 50% 0%,rgba(168,136,245,.22),transparent 70%)}
.panel .br{border-color:transparent!important;background:none!important;width:18px;height:18px}
.panel .br::before,.panel .br::after{content:"";position:absolute;background:var(--holo);opacity:.7;
  box-shadow:0 0 6px var(--holo)}
.panel .br::before{width:18px;height:1px;top:0;left:0}.panel .br::after{width:1px;height:18px;top:0;left:0}
.panel .br.tr{transform:scaleX(-1)}.panel .br.bl{transform:scaleY(-1)}.panel .br.brr{transform:scale(-1)}
.measure.power{box-shadow:0 0 44px -12px rgba(79,209,197,.45)!important}
.measure.contrib{box-shadow:0 0 44px -12px rgba(242,206,114,.45)!important}

/* controls as light */
.btn,button.btn,a.btn,.phase,.fold-btn,.seek-btn,.menu-btn{
  font-family:'Spline Sans Mono',monospace!important;letter-spacing:.2em!important;text-transform:uppercase;
  border-radius:6px!important;border:1px solid rgba(168,136,245,.35)!important;
  background:rgba(168,136,245,.06)!important;color:var(--holo-hi)!important;transition:.2s}
.btn:hover,.phase:hover,.fold-btn:hover,.seek-btn:hover,.menu-btn:hover{
  border-color:var(--holo)!important;box-shadow:0 0 22px rgba(168,136,245,.35)}
.btn-primary,.phase.on{border-color:var(--gold)!important;color:var(--gold-hi)!important;
  background:rgba(217,169,59,.10)!important}
.btn-primary:hover{box-shadow:0 0 26px rgba(242,206,114,.45)!important}
input[type=text],input[type=search],input[type=number],select,textarea{
  background:rgba(168,136,245,.05)!important;color:var(--holo-hi)!important;
  border:1px solid rgba(168,136,245,.24)!important;border-radius:6px!important}
input:focus,select:focus,textarea:focus{outline:none;border-color:var(--holo)!important;
  box-shadow:0 0 0 1px rgba(168,136,245,.3),0 0 18px rgba(168,136,245,.25)}
select option{background:#0c0a1e;color:var(--holo-hi)}

/* chips, tags, pills glow */
.ident .tag,.chip,.pill,.state,.vbadge{box-shadow:0 0 14px -4px currentColor}
a.ent,td a,.rcard .title a{color:var(--holo-hi)}

/* tables: holo rules */
th{color:var(--dim)!important;border-bottom:1px solid var(--line)!important}
td{border-bottom:1px solid rgba(168,136,245,.10)!important}
tbody tr:hover td{background:rgba(168,136,245,.06)!important}

/* the Radiant field stays, dimmer, as psychohistory drifting past the port */
#radiant text{opacity:.04}

@media (prefers-reduced-motion:no-preference){
  #rings{animation:novaTurn 240s linear infinite}
  @keyframes novaTurn{to{transform:translate(-50%,-50%) rotate(360deg)}}
  #nebula{animation:novaBreathe 26s ease-in-out infinite}
  @keyframes novaBreathe{0%,100%{opacity:.5;transform:scale(1)}50%{opacity:.7;transform:scale(1.04)}}
  .panel::before{animation:none}
  .panel .sweep{position:absolute;left:0;right:0;top:0;height:90px;pointer-events:none;z-index:1;
    background:linear-gradient(180deg,transparent,rgba(201,178,255,.08) 50%,transparent);
    animation:novaSweep 8s ease-in-out infinite}
  @keyframes novaSweep{0%{transform:translateY(-100px);opacity:0}15%{opacity:1}85%{opacity:1}
    100%{transform:translateY(600px);opacity:0}}
}

/* ==========================================================================
   v3.11 — ACCOUNTS, TRANSLATION & FILTERS
   Personal registrations, the Command Deck, the masthead language selector
   and the guild/server refinement bar on rankings.
   ========================================================================== */

/* --- Google Translate: widget hidden, banner suppressed ------------------- */
.goog-te-banner-frame, .goog-te-gadget-icon, #goog-gt-tt,
.goog-te-balloon-frame, .skiptranslate iframe { display: none !important; }
body { top: 0 !important; }
font[style*="background-color"] { background-color: transparent !important;
  box-shadow: none !important; }

/* --- masthead language selector ------------------------------------------- */
.langwrap { position: relative; }
.langwrap select { appearance: none; -webkit-appearance: none; cursor: pointer;
  font-family: 'Orbitron', sans-serif; font-size: 10px; letter-spacing: .1em;
  color: var(--gold-lt); background: rgba(123,79,216,.10);
  border: 1px solid var(--line-2); border-radius: var(--r-sm);
  padding: 8px 24px 8px 27px; color-scheme: dark; max-width: 150px; }
.langwrap select:hover { border-color: var(--gold); }
.langwrap select option { background: #100c1a; color: var(--text); }
.langwrap .globe, .langwrap .caret { position: absolute; top: 50%;
  transform: translateY(-50%); color: var(--purple-lt); pointer-events: none;
  font-size: 12px; }
.langwrap .globe { left: 9px; } .langwrap .caret { right: 9px; font-size: 8px; }

/* --- menu identity line ---------------------------------------------------- */
.menu-id { display: flex; align-items: baseline; gap: 8px; padding: 8px 12px 9px; }
.menu-id-name { font-family: 'Cinzel', 'Orbitron', serif; font-size: 14px;
  font-weight: 600; color: var(--gold-lt); }
.menu-id-role { margin-left: auto; font-family: 'Spline Sans Mono', monospace;
  font-size: 9px; letter-spacing: .1em; text-transform: uppercase; color: var(--dim); }

/* --- shared form fields ---------------------------------------------------- */
.field { text-align: left; }
.field label { display: block; font-family: 'Orbitron', sans-serif; font-size: 10px;
  letter-spacing: .16em; text-transform: uppercase; color: var(--gold); margin: 0 0 6px; }
.field label em { font-style: normal; color: var(--dim); letter-spacing: .04em;
  font-family: 'Spline Sans Mono', monospace; text-transform: none; margin-left: 6px; }
.field input, .field select { width: 100%; padding: 11px 12px;
  background: rgba(8,6,15,.72); color: var(--text);
  border: 1px solid var(--line); border-radius: var(--r-sm); font: inherit;
  color-scheme: dark; }
.field input:focus, .field select:focus { outline: none; border-color: var(--gold);
  box-shadow: 0 0 16px -6px rgba(217,169,59,.7); }
.fgrid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px 20px; }
.fgrid .span2 { grid-column: 1 / -1; }
.formfoot { display: flex; gap: 16px; align-items: center; flex-wrap: wrap;
  margin-top: 20px; }
.notice-line { display: block; font-size: 12px; color: var(--dim);
  line-height: 1.55; margin-top: 6px; }
.form-ok { color: var(--rise); }
.form-err { color: var(--danger); }
@media (max-width: 640px) { .fgrid { grid-template-columns: 1fr; } }

/* --- login page additions -------------------------------------------------- */
.login-box .field input { text-align: center; letter-spacing: .12em; margin: 0 0 12px; }
.btn.wide { width: 100%; margin-top: 2px; }
.legacy { margin: 18px 0 4px; border: 1px solid var(--line-2);
  border-radius: var(--r-sm); overflow: hidden; text-align: left; }
.legacy-t { width: 100%; display: flex; justify-content: space-between;
  align-items: center; cursor: pointer; font-family: 'Orbitron', sans-serif;
  font-size: 10px; letter-spacing: .2em; color: var(--dim);
  background: rgba(123,79,216,.06); border: 0; padding: 10px 12px; }
.legacy-t:hover { color: var(--gold-lt); }
.legacy-b { display: none; padding: 12px; border-top: 1px solid var(--line-2); }
.legacy.open .legacy-b { display: block; }
.legacy.open .legacy-t .lcaret { transform: rotate(180deg); }
.legacy-t .lcaret { transition: transform .15s; font-size: 8px; }
.legacy-b input { width: 100%; padding: 10px; margin-bottom: 8px;
  background: var(--void); color: var(--text); border: 1px solid var(--line);
  border-radius: 6px; font: inherit; text-align: center; letter-spacing: .2em; }

/* --- identity & role badges ------------------------------------------------ */
.idrow { display: flex; align-items: center; justify-content: space-between;
  gap: 14px; flex-wrap: wrap; }
.idname { font-family: 'Cinzel', 'Orbitron', serif; font-size: 26px;
  font-weight: 600; color: var(--gold-lt); display: block; }
.idmeta { font-size: 12px; color: var(--dim); letter-spacing: .06em; }
.rolebadge { font-family: 'Orbitron', sans-serif; font-size: 10px;
  font-weight: 700; letter-spacing: .16em; padding: 5px 12px;
  border-radius: 999px; border: 1px solid; white-space: nowrap; }
.r-super_admin { color: var(--gold-lt); border-color: var(--gold);
  background: rgba(217,169,59,.12); box-shadow: 0 0 18px -6px rgba(217,169,59,.8); }
.r-guild_admin { color: var(--purple-lt); border-color: var(--purple);
  background: rgba(123,79,216,.14); }
.r-guild_user { color: var(--power-hi); border-color: rgba(79,209,197,.5);
  background: rgba(79,209,197,.10); }
.r-user, .r-cipher { color: var(--dim); border-color: var(--line-2);
  background: rgba(123,79,216,.06); }

/* --- Command Deck ----------------------------------------------------------- */
.count-pill { display: inline-grid; place-items: center; min-width: 22px;
  height: 22px; border-radius: 999px; font-size: 11px; color: var(--void);
  background: var(--gold); margin-left: 8px; padding: 0 6px; }
.acts { white-space: nowrap; }
.acts .btn, .acts .btn-ghost { font-size: 10px; padding: 6px 10px; margin-right: 6px; }
.btn[disabled] { opacity: .35; cursor: not-allowed; filter: grayscale(.4); }
.chip-warn { color: var(--contrib-hi); font-size: 11px; }
.chip-ok { color: var(--rise); font-size: 11px; }
.rolesel, .userselect { font-family: 'Orbitron', sans-serif; font-size: 10px;
  letter-spacing: .08em; color: var(--purple-lt); background: rgba(123,79,216,.10);
  border: 1px solid var(--line-2); border-radius: 999px; padding: 5px 10px;
  color-scheme: dark; }
.ctlrow { display: flex; justify-content: space-between; align-items: center;
  gap: 18px; padding: 14px 0; border-bottom: 1px solid rgba(123,79,216,.14); }
.ctlrow:last-child { border-bottom: 0; }
.ctlrow b { font-family: 'Orbitron', sans-serif; font-size: 12px;
  letter-spacing: .14em; color: var(--text); }
.toggle { position: relative; flex: none; width: 56px; height: 28px;
  border-radius: 999px; cursor: pointer; background: rgba(123,79,216,.14);
  border: 1px solid var(--line-2); transition: .2s; }
.toggle .knob { position: absolute; top: 3px; left: 3px; width: 20px;
  height: 20px; border-radius: 50%; background: var(--dim); transition: .2s; }
.toggle.on { background: rgba(217,169,59,.22); border-color: var(--gold); }
.toggle.on .knob { left: 31px;
  background: linear-gradient(180deg, var(--gold-lt), #9a7420);
  box-shadow: 0 0 12px rgba(217,169,59,.8); }

/* --- rankings refinement bar ------------------------------------------------ */
.filterbar { display: flex; align-items: flex-end; gap: 16px; flex-wrap: wrap;
  padding: 16px 22px; }
.filterbar .flabel { font-family: 'Orbitron', sans-serif; font-size: 10px;
  letter-spacing: .3em; color: var(--gold); align-self: center; padding-top: 14px; }
.filterbar .field { min-width: 160px; flex: 0 1 auto; }
.filterbar .fnote { font-size: 12px; color: var(--dim); align-self: center;
  padding-top: 14px; }
.filterbar .fnote b { color: var(--gold-lt); }
th.gr-col, td.gr-col { color: var(--gold-lt) !important; font-weight: 700; }
td.gr-col { font-family: 'Orbitron', sans-serif; }

/* ==========================================================================
   v3.11.1 — LOGIN UNIFORMITY, LANGUAGE CONTROL, LIVING GLOW
   ========================================================================== */

/* --- access page: one field style for everything ---------------------------- */
.login-box .login-form input[type=text],
.login-box .login-form input[type=password],
.login-box .login-form input[type=email] {
  width: 100% !important; box-sizing: border-box; margin: 0 0 12px !important;
  padding: 12px 14px !important; height: 46px;
  background: rgba(8,6,15,.78) !important; color: var(--text) !important;
  border: 1px solid var(--line) !important; border-radius: var(--r-sm) !important;
  font: inherit !important; font-size: 14px !important;
  text-align: center; letter-spacing: .14em; }
.login-box .login-form input:focus { outline: none;
  border-color: var(--gold) !important; box-shadow: 0 0 16px -6px rgba(217,169,59,.7); }
.login-box .login-form input::placeholder { color: var(--dim); letter-spacing: .2em; }
.login-box .btn.wide { height: 46px; box-sizing: border-box; }
.login-links { margin: 18px 0 6px; font-family: 'Orbitron', sans-serif;
  font-size: 11px; letter-spacing: .18em; }
.login-links a { color: var(--gold-lt); }
.login-links a:hover { color: var(--gold-hi, #fff2c4); text-decoration: none;
  text-shadow: 0 0 12px rgba(242,206,114,.6); }
.login-links .sep { color: var(--line-2); margin: 0 12px; }
.legacy + .legacy { margin-top: 10px; }
.legacy-b .login-form input { margin-bottom: 10px !important; }
.pub-link { display: inline-flex; align-items: center; gap: 9px;
  font-family: 'Orbitron', sans-serif; font-size: 12px; letter-spacing: .18em;
  color: var(--gold-lt); padding: 10px 16px; border: 1px solid var(--line);
  border-radius: 6px; transition: .15s; margin-bottom: 4px; }
.pub-link .glyph { font-size: 14px; color: var(--gold); display: inline; margin: 0; }
.pub-link:hover { color: var(--void); border-color: var(--gold); text-decoration: none;
  background: linear-gradient(180deg, var(--gold-lt), var(--gold)); }
.pub-link:hover .glyph { color: var(--void); }

/* --- language control: a labelled pill, native select laid over it ---------- */
.langwrap { position: relative; display: inline-flex; align-items: center; gap: 8px;
  height: 34px; padding: 0 12px 0 10px; cursor: pointer;
  border: 1px solid var(--line-2); border-radius: var(--r-sm);
  background: rgba(123,79,216,.10); transition: .15s; }
.langwrap:hover { border-color: var(--gold); box-shadow: 0 0 16px -6px rgba(217,169,59,.6); }
.langwrap .globe { position: static; transform: none; width: 15px; height: 15px;
  fill: none; stroke: var(--purple-lt); stroke-width: 1.3; flex: none; }
.langwrap:hover .globe { stroke: var(--gold-lt); }
.langwrap .lang-cur { font-family: 'Orbitron', sans-serif; font-size: 10px;
  letter-spacing: .12em; color: var(--gold-lt); white-space: nowrap;
  max-width: 110px; overflow: hidden; text-overflow: ellipsis; }
.langwrap .caret { position: static; transform: none; font-size: 8px;
  color: var(--purple-lt); }
.langwrap select { position: absolute; inset: 0; width: 100%; height: 100%;
  opacity: 0; cursor: pointer; margin: 0; padding: 0; border: 0; max-width: none;
  appearance: auto; -webkit-appearance: menulist; }
.langwrap select option { background: #100c1a; color: var(--text); font-size: 14px; }
@media (max-width: 640px) { .langwrap .lang-cur { display: none; }
  .langwrap { padding: 0 9px; gap: 5px; } }

/* --- living glow: panels breathe through the palette --------------------------
   Each slab cycles purple → teal → gold → rose with a slow pulse; neighbours
   are offset so a page never glows one colour at once. */
@keyframes nova-glow {
  0.0% { box-shadow: 0 0 46.0px -12px rgba(168,136,245,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
  2.5% { box-shadow: 0 0 49.5px -12px rgba(166,138,244,0.522), inset 0 1px 0 rgba(255,255,255,.05); }
  5.0% { box-shadow: 0 0 51.7px -12px rgba(159,144,240,0.573), inset 0 1px 0 rgba(255,255,255,.05); }
  7.5% { box-shadow: 0 0 51.7px -12px rgba(149,152,235,0.573), inset 0 1px 0 rgba(255,255,255,.05); }
  10.0% { box-shadow: 0 0 49.5px -12px rgba(137,162,228,0.522), inset 0 1px 0 rgba(255,255,255,.05); }
  12.5% { box-shadow: 0 0 46.0px -12px rgba(124,172,221,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
  15.0% { box-shadow: 0 0 42.5px -12px rgba(110,183,214,0.358), inset 0 1px 0 rgba(255,255,255,.05); }
  17.5% { box-shadow: 0 0 40.3px -12px rgba(98,193,207,0.307), inset 0 1px 0 rgba(255,255,255,.05); }
  20.0% { box-shadow: 0 0 40.3px -12px rgba(88,201,202,0.307), inset 0 1px 0 rgba(255,255,255,.05); }
  22.5% { box-shadow: 0 0 42.5px -12px rgba(81,207,198,0.358), inset 0 1px 0 rgba(255,255,255,.05); }
  25.0% { box-shadow: 0 0 46.0px -12px rgba(79,209,197,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
  27.5% { box-shadow: 0 0 49.5px -12px rgba(84,209,195,0.522), inset 0 1px 0 rgba(255,255,255,.05); }
  30.0% { box-shadow: 0 0 51.7px -12px rgba(96,209,188,0.573), inset 0 1px 0 rgba(255,255,255,.05); }
  32.5% { box-shadow: 0 0 51.7px -12px rgba(114,208,179,0.573), inset 0 1px 0 rgba(255,255,255,.05); }
  35.0% { box-shadow: 0 0 49.5px -12px rgba(136,208,168,0.522), inset 0 1px 0 rgba(255,255,255,.05); }
  37.5% { box-shadow: 0 0 46.0px -12px rgba(160,208,156,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
  40.0% { box-shadow: 0 0 42.5px -12px rgba(185,207,143,0.358), inset 0 1px 0 rgba(255,255,255,.05); }
  42.5% { box-shadow: 0 0 40.3px -12px rgba(207,207,132,0.307), inset 0 1px 0 rgba(255,255,255,.05); }
  45.0% { box-shadow: 0 0 40.3px -12px rgba(225,206,123,0.307), inset 0 1px 0 rgba(255,255,255,.05); }
  47.5% { box-shadow: 0 0 42.5px -12px rgba(237,206,116,0.358), inset 0 1px 0 rgba(255,255,255,.05); }
  50.0% { box-shadow: 0 0 46.0px -12px rgba(242,206,114,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
  52.5% { box-shadow: 0 0 49.5px -12px rgba(241,204,116,0.522), inset 0 1px 0 rgba(255,255,255,.05); }
  55.0% { box-shadow: 0 0 51.7px -12px rgba(240,197,120,0.573), inset 0 1px 0 rgba(255,255,255,.05); }
  57.5% { box-shadow: 0 0 51.7px -12px rgba(238,187,126,0.573), inset 0 1px 0 rgba(255,255,255,.05); }
  60.0% { box-shadow: 0 0 49.5px -12px rgba(236,176,134,0.522), inset 0 1px 0 rgba(255,255,255,.05); }
  62.5% { box-shadow: 0 0 46.0px -12px rgba(233,163,142,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
  65.0% { box-shadow: 0 0 42.5px -12px rgba(230,150,150,0.358), inset 0 1px 0 rgba(255,255,255,.05); }
  67.5% { box-shadow: 0 0 40.3px -12px rgba(228,139,158,0.307), inset 0 1px 0 rgba(255,255,255,.05); }
  70.0% { box-shadow: 0 0 40.3px -12px rgba(226,129,164,0.307), inset 0 1px 0 rgba(255,255,255,.05); }
  72.5% { box-shadow: 0 0 42.5px -12px rgba(225,122,168,0.358), inset 0 1px 0 rgba(255,255,255,.05); }
  75.0% { box-shadow: 0 0 46.0px -12px rgba(224,120,170,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
  77.5% { box-shadow: 0 0 49.5px -12px rgba(222,120,172,0.522), inset 0 1px 0 rgba(255,255,255,.05); }
  80.0% { box-shadow: 0 0 51.7px -12px rgba(218,122,178,0.573), inset 0 1px 0 rgba(255,255,255,.05); }
  82.5% { box-shadow: 0 0 51.7px -12px rgba(212,123,186,0.573), inset 0 1px 0 rgba(255,255,255,.05); }
  85.0% { box-shadow: 0 0 49.5px -12px rgba(204,126,196,0.522), inset 0 1px 0 rgba(255,255,255,.05); }
  87.5% { box-shadow: 0 0 46.0px -12px rgba(196,128,208,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
  90.0% { box-shadow: 0 0 42.5px -12px rgba(188,130,219,0.358), inset 0 1px 0 rgba(255,255,255,.05); }
  92.5% { box-shadow: 0 0 40.3px -12px rgba(180,133,229,0.307), inset 0 1px 0 rgba(255,255,255,.05); }
  95.0% { box-shadow: 0 0 40.3px -12px rgba(174,134,237,0.307), inset 0 1px 0 rgba(255,255,255,.05); }
  97.5% { box-shadow: 0 0 42.5px -12px rgba(170,136,243,0.358), inset 0 1px 0 rgba(255,255,255,.05); }
  100.0% { box-shadow: 0 0 46.0px -12px rgba(168,136,245,0.440), inset 0 1px 0 rgba(255,255,255,.05); }
}
.panel, .fold, .hubcard, .tile, .chartblock, .login-box, .sc, .gcol, .verdict {
  animation: nova-glow 28s linear infinite; }
.panel:nth-of-type(4n+2), .hubcard:nth-of-type(3n+2), .sc:nth-of-type(3n+2),
.gcol:nth-of-type(3n+2), .tile:nth-of-type(3n+2) { animation-delay: -7s; }
.panel:nth-of-type(4n+3), .hubcard:nth-of-type(3n+3), .sc:nth-of-type(3n+3),
.gcol:nth-of-type(3n+3), .tile:nth-of-type(3n+3) { animation-delay: -14s; }
.panel:nth-of-type(4n+4) { animation-delay: -21s; }
.login-box { animation-duration: 20s; }
/* measures keep their semantic colour; motion-sensitive readers get stillness */
.measure.power, .measure.contrib { animation: none; }

/* --- holographic float: hover tilt, click-and-drag to move the slab -------- */
/* v3.22.1: NO scene-level perspective — a parent perspective projects every
   child's rotation from the page's vanishing point, so slabs far from the
   viewport centre sheared wildly (the recorded 'insane movement'). Each slab
   now carries its own perspective inside its transform. */
.holo-scene { perspective: none; }
.holo-float { transform-style: preserve-3d; will-change: transform;
  transition: transform .18s cubic-bezier(.2,.7,.3,1); }
.holo-float.holo-live { transition: transform .09s linear; }
.holo-float.holo-drag { cursor: grabbing; user-select: none; -webkit-user-select: none;
  transition: none; z-index: 5; }
.holo-float.holo-settle { transition: transform .7s cubic-bezier(.16,1,.3,1); }
@media (prefers-reduced-motion: reduce) {
  .panel, .fold, .hubcard, .tile, .chartblock, .login-box, .sc, .gcol, .verdict {
    animation: none; }
  .holo-float { transform: none !important; } }

/* --- v3.11.2: guild codes & invite field ------------------------------------- */
.invite-wrap { display: flex; gap: 10px; align-items: stretch; }
.invite-wrap input { flex: 1; letter-spacing: .12em; text-transform: uppercase; }
.invite-wrap .btn { flex: none; }
.field input.locked { border-color: rgba(79,209,197,.55) !important;
  color: var(--power-hi) !important; background: rgba(79,209,197,.06) !important; }
.invite-code { font-family: 'Spline Sans Mono', monospace; font-size: 13px;
  letter-spacing: .12em; color: var(--gold-lt); background: rgba(217,169,59,.08);
  border: 1px solid rgba(217,169,59,.3); border-radius: 5px; padding: 3px 9px;
  user-select: all; }

/* --- v3.11.4: aligned form rows, holo toggle ------------------------------- */
.fgrid .field { display: flex; flex-direction: column; justify-content: flex-end; }
.fgrid .field label { margin-bottom: 6px; }
.menu-panel .holo-toggle { display: flex; align-items: center; gap: 10px; width: 100%;
  text-align: left; background: none; border: 0; cursor: pointer; font: inherit;
  font-family: 'Orbitron', sans-serif; font-size: 11px; letter-spacing: .16em;
  color: var(--text); padding: 9px 12px; border-radius: 6px; }
.menu-panel .holo-toggle:hover { background: rgba(123,79,216,.12); color: var(--gold-lt); }
.menu-panel .holo-toggle b { color: var(--power-hi); font-weight: 400; }
.menu-panel .holo-toggle.off b { color: var(--dim); }

/* --- v3.12: the Prime Radiant itself ----------------------------------------
   The concentric rings give way to Seldon's device: a cuboctahedron of gold
   filament with its inner lattice, turning slowly about every axis. Drawn on a
   canvas so it costs nothing to load; faint enough to sit behind dense tables. */
#rings { display: none; }
#radiant3d { position: absolute; left: 50%; top: 40%; width: 92vmin; height: 92vmin;
  transform: translate(-50%, -50%); opacity: .26; pointer-events: none;
  filter: drop-shadow(0 0 18px rgba(217,169,59,.18)); }
@media (max-width: 640px) { #radiant3d { width: 120vmin; height: 120vmin; top: 44%; } }

/* --- v3.13.2: ambient motion for short panels ------------------------------
   Every slab already breathes colour; short ones (ten entries or fewer) also
   get a slow holographic refresh sweep and a pulsing heading glyph, so the
   hub reads as live instrumentation rather than a static report. Long lists
   stay still — motion over dense data is noise. Drag/tilt is unaffected. */
@keyframes nova-sweep {
  0%   { transform: translateX(-140%) skewX(-18deg); opacity: 0; }
  6%   { opacity: .9; }
  38%  { opacity: .9; }
  46%  { transform: translateX(160%) skewX(-18deg); opacity: 0; }
  100% { transform: translateX(160%) skewX(-18deg); opacity: 0; }
}
.holo-ambient > .holo-sweep { content: ""; position: absolute; top: -10%; bottom: -10%;
  left: 0; width: 34%; pointer-events: none; z-index: 2; mix-blend-mode: screen;
  background: linear-gradient(90deg, transparent, rgba(242,206,114,.045) 40%,
    rgba(255,255,255,.075) 50%, rgba(168,136,245,.045) 60%, transparent);
  animation: nova-sweep 13s cubic-bezier(.4,0,.6,1) infinite; }
.holo-ambient:nth-of-type(2n) > .holo-sweep { animation-delay: -6.5s; }
.holo-ambient:nth-of-type(3n) > .holo-sweep { animation-duration: 17s; }
@keyframes nova-glyph { 0%,100% { opacity: .55; text-shadow: 0 0 4px rgba(217,169,59,.2); }
  50% { opacity: 1; text-shadow: 0 0 14px rgba(242,206,114,.75); } }
.holo-ambient .hub-glyph, .holo-ambient h2::before { animation: nova-glyph 4.2s ease-in-out infinite; }
@media (prefers-reduced-motion: reduce) { .holo-ambient > .holo-sweep { display: none; }
  .holo-ambient .hub-glyph, .holo-ambient h2::before { animation: none; } }

/* --- v3.13.4: contribution split, measures float, refine bar alignment ------ */
.m-split { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px;
  margin-top: 14px; padding-top: 12px; border-top: 1px solid rgba(123,79,216,.16); }
.m-split > div { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.m-split .m-k { font-family: 'Spline Sans Mono', monospace; font-size: 9px;
  letter-spacing: .18em; text-transform: uppercase; color: var(--dim); }
.m-split .m-v { font-family: 'Spline Sans Mono', monospace; font-size: 15px;
  color: var(--contrib-hi); }
.m-split .m-v.is-pvp { color: #E0574F; }
.m-split .m-b { font-size: 10px; color: var(--dim); }
@media (max-width: 480px) { .m-split { grid-template-columns: 1fr; } }
.measure { position: relative; }
/* refine bar: everything sits on one baseline */
.filterbar { align-items: flex-end; }
.filterbar .field { display: flex; flex-direction: column; justify-content: flex-end; }
.filterbar .flabel, .filterbar .fnote { align-self: flex-end; padding: 0 0 13px; }

/* --- v3.13.5: archive on the current theme ---------------------------------- */
.arch-filters { display: grid; grid-template-columns: 1fr auto; gap: 8px 28px;
  align-items: end; padding: 16px 22px 14px; }
.arch-filters .arch-form { display: flex; gap: 14px; align-items: flex-end; flex-wrap: wrap; }
.arch-filters .arch-search { grid-column: 1 / -1; }
.arch-filters .arch-search .field { flex: 1; min-width: 260px; }
.arch-filters .field { min-width: 150px; display: flex; flex-direction: column;
  justify-content: flex-end; }
.arch-filters .field input, .arch-filters .field select { height: 42px; }
.arch-filters .fbtns { display: flex; gap: 8px; align-items: flex-end; padding-bottom: 0; }
.arch-filters .fbtns .btn { height: 42px; display: inline-flex; align-items: center; }
.arch-filters .flabel, .arch-filters .fnote { align-self: flex-end; padding: 0 0 13px; }
.arch-filters .fnote { grid-column: 2; grid-row: 1; justify-self: end; white-space: nowrap; }
@media (max-width: 760px) { .arch-filters { grid-template-columns: 1fr; }
  .arch-filters .fnote { grid-column: 1; grid-row: auto; justify-self: start; } }

.datehead { display: flex; align-items: baseline; gap: 12px; margin: 30px 0 12px;
  font-family: 'Cinzel', 'Orbitron', serif; font-size: 15px; letter-spacing: .08em;
  text-transform: none; color: var(--gold-lt); }
.datehead::before { content: '⬡'; color: var(--gold); font-size: 12px; align-self: center; }
.datehead .dh-date { font-family: 'Spline Sans Mono', monospace; font-size: 11px;
  letter-spacing: .2em; color: var(--dim); }
.datehead::after { content: ''; flex: 1; height: 1px; margin-left: 6px;
  background: linear-gradient(90deg, rgba(217,169,59,.45), transparent); }
.rlist { gap: 8px; }
.rcard { grid-template-columns: 132px 1fr auto 18px; gap: 6px 18px; padding: 13px 18px;
  background: linear-gradient(180deg, rgba(24,15,46,.88), rgba(14,9,28,.92));
  border: 1px solid rgba(123,79,216,.28); border-radius: var(--r-md, 12px);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.05), 0 0 28px -16px rgba(168,136,245,.45);
  transition: border-color .15s, transform .15s, box-shadow .2s; position: relative; overflow: hidden; }
.rcard::before { content: ''; position: absolute; left: 0; top: 12px; bottom: 12px; width: 2px;
  border-radius: 2px; background: var(--purple-lt); opacity: .55; }
.rcard.t-members::before { background: var(--power-hi); }
.rcard.t-gvg::before, .rcard.t-svs::before, .rcard.t-rankings::before { background: var(--gold); }
.rcard.t-poll::before { background: var(--rise); }
.rcard:hover { border-color: rgba(217,169,59,.55); transform: translateY(-1px);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.07), 0 0 32px -12px rgba(217,169,59,.55); }
.rcard .cat-pill { display: inline-block; font-family: 'Orbitron', sans-serif; font-size: 9px;
  letter-spacing: .18em; text-transform: uppercase; color: var(--gold-lt);
  border: 1px solid rgba(217,169,59,.35); background: rgba(217,169,59,.08);
  border-radius: 999px; padding: 4px 10px; white-space: nowrap; }
.rcard .title { font-family: 'Spline Sans Mono', monospace; font-size: 14px; }
.rcard .counts { font-family: 'Spline Sans Mono', monospace; font-size: 11.5px;
  letter-spacing: .04em; }
.rcard .go { color: var(--dim); font-size: 18px; line-height: 1; text-align: right;
  transition: color .15s, transform .15s; }
.rcard:hover .go { color: var(--gold-lt); transform: translateX(3px); }
@media (max-width: 640px) {
  /* v3.25: flex, not grid — Safari kept honouring the desktop grid's column
     template and squeezed the title into a one-letter column. Flex-wrap has
     no columns to inherit: pill, then full-width title, then counts. */
  .rcard { display: flex !important; flex-wrap: wrap; align-items: center;
    gap: 6px 10px; padding: 12px 14px; grid-template-columns: none; }
  .rcard .cat { flex: 0 0 auto; }
  .rcard .go { flex: 0 0 auto; margin-left: auto; order: 1; }
  .rcard .title { flex: 1 1 100%; order: 2; white-space: normal; overflow-wrap: anywhere;
    font-size: 13.5px; line-height: 1.45; }
  .rcard .counts { flex: 1 1 100%; order: 3; font-size: 11px; }
  .rcard::before { top: 8px; bottom: 8px; }
}

/* --- v3.13.6: four-way contribution split; peer chart legend & notes ------- */
.m-split4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 640px) { .m-split4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.measure .m-split .m-v { font-size: 14px; }

.peerchart { margin: 6px 0 4px; }
.peerchart .nax { fill: var(--dim); }
.legend { display: flex; flex-wrap: wrap; gap: 8px 22px; margin: 14px 0 0;
  padding: 12px 14px; border: 1px solid var(--line-2); border-radius: var(--r-sm);
  background: rgba(123,79,216,.06); font-size: 12px; color: var(--mut); }
.legend span { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; margin-right: 6px; }
.legend .key { margin-right: 2px; }
.legend .key { display: inline-block; width: 11px; height: 11px; border-radius: 50%;
  box-shadow: 0 0 10px -2px currentColor; }
.legend span:last-child .key { width: 7px; height: 7px; margin-right: 2px;
  box-shadow: 0 0 0 2px rgba(138,232,223,.35), 0 0 0 5px rgba(138,232,223,.14); }
.note { display: flex; align-items: center; gap: 10px; margin: 12px 0 0; font-size: 12.5px;
  color: var(--dim); line-height: 1.6; }
.note .info { flex: none; width: 22px; height: 22px; border-radius: 50%; cursor: pointer;
  font: 700 11px/1 'Spline Sans Mono', monospace; color: var(--gold-lt);
  background: rgba(217,169,59,.10); border: 1px solid rgba(217,169,59,.45); padding: 0; }
.note .info:hover, .note .info[aria-expanded="true"] { background: var(--gold); color: var(--void); }
.drawer { margin-top: 12px; padding: 14px 18px; border-left: 2px solid var(--gold);
  background: rgba(217,169,59,.05); border-radius: 0 var(--r-sm) var(--r-sm) 0;
  font-size: 13px; color: var(--mut); line-height: 1.65; }
.drawer h4 { margin: 0 0 6px; font-family: 'Orbitron', sans-serif; font-size: 10px;
  letter-spacing: .2em; color: var(--gold); }
.drawer p { margin: 0 0 8px; } .drawer p:last-child { margin: 0; }
.drawer b { color: var(--text); font-weight: 500; }

/* --- v3.14: deck email privacy --------------------------------------------- */
.mailwrap { display: inline-flex; align-items: center; gap: 7px; }
.mailmask { font-family: 'Spline Sans Mono', monospace; letter-spacing: .04em; }
.mailmask.open { color: var(--gold-lt); }
.mail-eye { flex: none; width: 20px; height: 20px; border-radius: 50%; cursor: pointer;
  padding: 0; font-size: 10px; line-height: 1; color: var(--dim);
  background: rgba(123,79,216,.10); border: 1px solid var(--line-2); }
.mail-eye:hover { color: var(--gold-lt); border-color: var(--gold); }

/* --- v3.14.1: compact buttons outside the actions cell ----------------------
   The v3.10 theme block sets button letter-spacing with !important, so the
   compact variant has to shout too. Matches the .acts cell buttons exactly. */
.btn.btn-sm { font-size: 10px !important; padding: 6px 10px !important;
  letter-spacing: .12em !important; white-space: nowrap; font-weight: 400; }

/* --- v3.15: Discord clearance ------------------------------------------------ */
.btn-discord { background: rgba(88,101,242,.14) !important;
  border-color: rgba(88,101,242,.65) !important; color: #C7CDFB !important; }
.btn-discord:hover { border-color: #8891F2 !important;
  box-shadow: 0 0 22px rgba(88,101,242,.45) !important; }
.or-rule { display: flex; align-items: center; gap: 12px; margin: 14px 0;
  font-family: 'Orbitron', sans-serif; font-size: 9px; letter-spacing: .3em;
  color: var(--dim); }
.or-rule::before, .or-rule::after { content: ''; flex: 1; height: 1px;
  background: linear-gradient(90deg, transparent, rgba(123,79,216,.4), transparent); }

/* --- v3.20.1: discord mark, email fold ------------------------------------- */
.dc-mark { vertical-align: -3px; margin-right: 7px; }
.email-fold { margin-top: 14px; }
.email-fold .legacy-b { padding-top: 14px; }

/* --- v3.22: one quiet motion ------------------------------------------------
   The lean is tiny and identical everywhere; anything the old drag left
   behind is neutralised. */
.holo-float { transition: transform .3s cubic-bezier(.22,.6,.28,1); will-change: transform; }
.holo-drag { transform: none !important; box-shadow: none; }

/* --- v3.24: in-game rank ------------------------------------------------------- */
.rank-chip { display: inline-block; font-family: 'Orbitron', sans-serif; font-size: 10px;
  letter-spacing: .12em; padding: 2px 7px; border-radius: 4px; line-height: 1.4;
  border: 1px solid var(--line-2); color: var(--text); background: rgba(123,79,216,.10); }
.rank-chip.r5 { color: var(--gold-lt); border-color: rgba(217,169,59,.6); background: rgba(217,169,59,.12); }
.rank-chip.r4 { color: var(--holo-hi); border-color: rgba(168,136,245,.6); }
.rank-chip.r3 { color: var(--power-hi); border-color: rgba(138,232,223,.45); }
.rank-chip.r1 { color: var(--dim); }
.rank-chip.unsure { border-style: dashed; }
.rank-chip sup { font-size: 8px; margin-left: 1px; }
.rank-on { font-family: 'Spline Sans Mono', monospace; font-size: 10px; color: var(--dim); margin-left: 6px; }
.tag.rank-tag { display: inline-flex; align-items: center; gap: 4px; }

/* --- v3.24: migration candidates ------------------------------------------- */
.cand-import .cand-sum { cursor: pointer; font-family: 'Orbitron', sans-serif; font-size: 11px;
  letter-spacing: .16em; color: var(--gold-lt); list-style: none; }
.cand-import .cand-sum::-webkit-details-marker { display: none; }
.cand-grid { display: grid; gap: 14px 22px; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
.cand-tiers { display: flex; flex-wrap: wrap; gap: 8px 14px; align-items: center;
  font-family: 'Spline Sans Mono', monospace; font-size: 12px; }
.cand-tiers label { display: inline-flex; gap: 6px; align-items: center; }
.cand-bar { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-bottom: 12px; }
.cand-bar label { display: inline-flex; gap: 8px; align-items: center; font-size: 12px; color: var(--mut); }
table.cand td, table.cand th { white-space: nowrap; }
table.cand tr.st-review td { background: rgba(217,169,59,.05); }
table.cand tr.st-accepted td, table.cand tr.st-dismissed td { opacity: .55; }
.cand-st { font-family: 'Orbitron', sans-serif; font-size: 9px; letter-spacing: .18em; text-transform: uppercase; color: var(--dim); }
tr.st-review .cand-st { color: var(--gold-lt); }
.cand-target { font-size: 11px; padding: 4px 6px; min-width: 70px; }

/* --- v3.20.4 (re-applied in v3.25): deck delete, mobile refinements ---------- */
.btn.btn-danger { color: var(--danger) !important; border-color: rgba(224,87,79,.5) !important;
  background: rgba(224,87,79,.07) !important; }
.btn.btn-danger:hover { border-color: var(--danger) !important;
  box-shadow: 0 0 18px rgba(224,87,79,.35) !important; }
/* iOS/WebKit paint date fields for a light page unless told otherwise — the
   values were near-invisible on the void background */
input[type="date"], input[type="search"], select { color-scheme: dark; }
input[type="date"] { min-height: 42px; }
@media (max-width: 640px) {
  .arch-filters { padding: 14px 16px 12px; gap: 6px 0; }
  .arch-filters .arch-form { gap: 10px; }
  .arch-filters .field { min-width: 100%; flex: 1 1 100%; }
  .arch-filters .fbtns { width: 100%; }
  .arch-filters .fbtns .btn { flex: 1; justify-content: center; }
  .arch-filters .flabel { display: none; }
  .arch-filters .fnote { padding-bottom: 4px; white-space: normal; }
  .datehead { flex-wrap: wrap; }
}

/* --- v3.26: Herald ---------------------------------------------------------- */
.hd-card { padding: 14px 0 12px; border-bottom: 1px solid rgba(123,79,216,.14); }
.hd-card:last-child { border-bottom: 0; }
.hd-card.hd-new { margin-top: 6px; padding-top: 18px; border-top: 1px dashed rgba(217,169,59,.35); border-bottom: 0; }
.hd-acts { display: flex; gap: 8px; margin-top: 10px; }
.hd-persona { display: flex; gap: 16px; align-items: flex-start; }
.hd-persona .hd-av { width: 44px; height: 44px; margin-top: 22px; }
.hd-file { max-width: 200px; font-family: 'Spline Sans Mono', monospace; font-size: 11px; color: var(--mut); }
.hd-file::file-selector-button { font-family: 'Orbitron', sans-serif; font-size: 9px; letter-spacing: .14em;
  padding: 6px 10px; border-radius: 6px; border: 1px solid rgba(168,136,245,.35); background: rgba(168,136,245,.06);
  color: var(--holo-hi); cursor: pointer; margin-right: 8px; }
.fgrid .notice-line.span2 { grid-column: 1 / -1; }
.hd-av { width: 32px; height: 32px; border-radius: 50%; object-fit: cover; display: inline-flex;
  align-items: center; justify-content: center; background: rgba(217,169,59,.12); color: var(--gold);
  border: 1px solid var(--line); flex: none; }
table.hd td, table.hd th { white-space: nowrap; }
table.hd td:first-child { white-space: normal; }
.chip-dim { font-family: 'Orbitron', sans-serif; font-size: 9px; letter-spacing: .18em; color: var(--dim);
  border: 1px solid var(--line); border-radius: 999px; padding: 3px 8px; }
/* Discord-shaped preview */
.hd-preview .dc-msg { display: flex; gap: 14px; background: #313338; border-radius: 10px; padding: 16px; color: #dbdee1;
  font-family: system-ui, sans-serif; }
.dc-avatar { width: 40px; height: 40px; border-radius: 50%; background: var(--gold); color: #08060F;
  display: flex; align-items: center; justify-content: center; font-size: 20px; overflow: hidden; flex: none; }
.dc-avatar img { width: 100%; height: 100%; object-fit: cover; }
.dc-body { min-width: 0; flex: 1; }
.dc-head { font-size: 15px; color: #f2f3f5; margin-bottom: 4px; }
.dc-app { font-size: 10px; background: #5865f2; color: #fff; border-radius: 3px; padding: 1px 5px; margin: 0 6px; vertical-align: 1px; }
.dc-time { font-size: 12px; color: #949ba4; }
.dc-content { margin: 0 0 8px; font-size: 15px; }
.dc-embed { position: relative; background: #2b2d31; border-left: 4px solid var(--gold); border-radius: 4px;
  padding: 12px 16px 12px 14px; max-width: 520px; }
.dc-author { display: flex; align-items: center; gap: 8px; font-size: 12px; font-weight: 600; margin-bottom: 6px; }
.dc-author img { width: 20px; height: 20px; border-radius: 50%; }
.dc-thumb { position: absolute; right: 16px; top: 16px; width: 72px; height: 72px; border-radius: 6px; object-fit: cover; }
.dc-title { font-size: 16px; font-weight: 600; color: #00a8fc; margin-bottom: 6px; padding-right: 88px; }
.dc-desc { font-size: 14px; line-height: 1.5; margin-bottom: 10px; white-space: pre-wrap; }
.dc-fields { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 8px 12px; margin-bottom: 10px; }
.dc-fields b { display: block; font-size: 12px; color: #f2f3f5; } .dc-fields span { font-size: 13px; color: #949ba4; }
.dc-image { display: block; width: 100%; max-width: 480px; border-radius: 6px; margin: 4px 0 10px; }
.dc-footer { display: flex; align-items: center; gap: 6px; font-size: 12px; color: #949ba4; }
.dc-footer img { width: 16px; height: 16px; border-radius: 50%; }

/* --- v3.26.2: Herald — quiet by default ---------------------------------------- */
h2 .hd-add { margin-left: 14px; vertical-align: middle; font-size: 10px !important; padding: 6px 10px !important; }
.hd-who { display: inline-flex; align-items: center; gap: 10px; }
.hd-who .hd-av { width: 28px; height: 28px; }
.hd-swatch { display: inline-block; width: 14px; height: 14px; border-radius: 4px; vertical-align: -2px;
  border: 1px solid rgba(255,255,255,.18); margin-right: 4px; }

/* --- v3.28: colour pickers ------------------------------------------------------ */
.colorpick { display: flex; gap: 8px; align-items: center; }
.colorpick input[type="color"] { width: 44px; height: 42px; padding: 3px; border-radius: 8px; flex: none;
  border: 1px solid var(--line); background: rgba(24,15,46,.7); cursor: pointer; }
.colorpick input[type="color"]::-webkit-color-swatch { border: 0; border-radius: 5px; }
.colorpick input[type="text"] { flex: 1; min-width: 0; font-family: 'Spline Sans Mono', monospace; text-transform: uppercase; }

/* --- v3.31: Herald switches ---------------------------------------------------- */
.hd-switch { display: inline-flex; align-items: center; gap: 12px; cursor: pointer; font-size: 13px; color: var(--text);
  background: var(--panel2); border: 1px solid var(--line); border-radius: 8px; padding: 10px 14px; max-width: 100%; }
.hd-switch input { position: absolute; opacity: 0; width: 0; height: 0; }
.hd-switch .track { position: relative; flex: none; width: 46px; height: 24px; border-radius: 999px;
  background: rgba(123,79,216,.14); border: 1px solid var(--line-2); transition: .2s; }
.hd-switch .knob { position: absolute; top: 2px; left: 2px; width: 18px; height: 18px; border-radius: 50%; background: var(--dim); transition: .2s; }
.hd-switch input:checked + .track { background: rgba(217,169,59,.22); border-color: var(--gold); }
.hd-switch input:checked + .track .knob { left: 24px; background: linear-gradient(180deg, var(--gold-lt), #9a7420); box-shadow: 0 0 10px rgba(217,169,59,.8); }
.hd-switch input:focus-visible + .track { outline: 2px solid var(--gold); outline-offset: 2px; }
.hd-switch .lbl { line-height: 1.4; }

/* --- v3.35: migration — ledger, cards, roster ---------------------------------- */
.mg-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin: 6px 0 18px; }
.mg-stat { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 12px 16px; }
.mg-lab { display: block; font-family: 'Orbitron', sans-serif; font-size: 9.5px; letter-spacing: .18em; color: var(--dim); }
.mg-val { display: block; font-family: 'Spline Sans Mono', monospace; font-size: 30px; line-height: 1.15; margin-top: 4px; }
.tone-ink { color: var(--text); } .tone-gold { color: var(--gold-lt); } .tone-green { color: var(--rise); }
.tone-red { color: var(--danger); } .tone-purple { color: var(--holo-hi); } .tone-amber { color: #E8A33C; } .tone-gray { color: var(--dim); }
.mg-tabs { margin: 0 0 12px; }
.mg-tabs-lab { display: block; font-family: 'Orbitron', sans-serif; font-size: 9.5px; letter-spacing: .18em; color: var(--dim); margin-bottom: 8px; }
.mg-tabs-row { display: flex; flex-wrap: wrap; gap: 8px; }
.mg-tab { font-family: 'Orbitron', sans-serif; font-size: 10.5px; letter-spacing: .14em; padding: 7px 14px; border-radius: 999px;
  border: 1px solid var(--line); color: var(--dim); background: rgba(123,79,216,.06); text-decoration: none; }
.mg-tab em { font-style: normal; color: var(--gold-lt); }
.mg-tab.on { color: var(--gold-lt); border-color: var(--gold); background: rgba(217,169,59,.12); }
.mg-ledger { padding: 18px 22px 8px; }
.mg-ledger-head { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 24px; margin-bottom: 14px; }
.mg-h { font-family: 'Orbitron', sans-serif; font-size: 12px; letter-spacing: .2em; color: var(--gold); }
.mg-note { font-family: 'Spline Sans Mono', monospace; font-size: 11px; color: var(--dim); }
.mg-row { display: grid; grid-template-columns: 210px 1fr 200px 120px; gap: 0 22px; align-items: center; padding: 12px 0;
  border-top: 1px solid rgba(123,79,216,.12); }
.mg-row:first-of-type { border-top: 0; }
.mg-band { display: grid; grid-template-columns: 26px 1fr; grid-template-rows: auto auto; column-gap: 8px; align-items: center; }
.mg-band svg, .mg-band .seat-icon { grid-row: 1 / 3; width: 20px; height: 20px; }
.mg-bname { font-family: 'Orbitron', sans-serif; font-size: 12.5px; letter-spacing: .1em; }
.mg-brange { font-family: 'Spline Sans Mono', monospace; font-size: 11px; color: var(--dim); }
.mg-bar { position: relative; height: 20px; border-radius: 10px; background: rgba(123,79,216,.18); overflow: hidden; }
.mg-fill { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 10px; min-width: 4px; opacity: .9; }
.mg-mine { position: absolute; left: 0; top: 0; bottom: 0; border-radius: 10px; background: rgba(255,255,255,.35); mix-blend-mode: screen; }
.mg-bar i { position: absolute; top: 0; bottom: 0; width: 2px; background: rgba(8,6,15,.85); }
.mg-bar.over::after { content: ''; position: absolute; right: 0; top: -3px; bottom: -3px; width: 16px; background: var(--danger); border-radius: 6px; }
.mg-nums { font-family: 'Spline Sans Mono', monospace; }
.mg-used { font-size: 26px; color: var(--text); }
.mg-of { font-size: 12px; color: var(--dim); margin-left: 6px; }
.mg-minelab { display: block; font-size: 11px; color: var(--gold-lt); }
.mg-left { font-family: 'Orbitron', sans-serif; font-size: 15px; letter-spacing: .06em; text-align: right; }
.mg-left.is-ok { color: var(--rise); } .mg-left.is-over, .is-over { color: var(--danger); } .mg-left.is-full { color: var(--danger); }
.mg-guilds { display: grid; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); gap: 14px; }
.mg-guild { padding: 18px 20px 14px; display: grid; gap: 8px; }
.mg-gname { font-size: 18px; }
.mg-gtag { font-family: 'Spline Sans Mono', monospace; font-size: 13px; color: var(--gold-lt); }
.mg-gcount { display: flex; align-items: baseline; gap: 8px; margin-top: 4px; }
.mg-big { font-family: 'Spline Sans Mono', monospace; font-size: 30px; color: var(--text); }
.mg-mini { display: flex; gap: 2px; height: 12px; }
.mg-mini span { border-radius: 4px; min-width: 6px; }
.mg-mini-empty { flex: 1; border-radius: 4px; background: rgba(123,79,216,.18); }
.mg-gacts { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; margin-top: 4px; }
.mg-more summary { list-style: none; display: inline-block; cursor: pointer; }
.mg-more summary::-webkit-details-marker { display: none; }
.mg-more[open] { display: contents; }
.mg-inline { display: inline-flex; gap: 6px; align-items: center; margin: 6px 6px 0 0; }
.mg-chip { display: inline-block; font-family: 'Orbitron', sans-serif; font-size: 9.5px; letter-spacing: .14em; padding: 4px 10px; border-radius: 999px;
  --c: var(--dim); color: var(--c); border: 1px solid color-mix(in srgb, var(--c) 70%, transparent); background: color-mix(in srgb, var(--c) 14%, transparent); }
.mg-chip.tone-green { --c: var(--rise); } .mg-chip.tone-amber { --c: #E8A33C; } .mg-chip.tone-gray { --c: var(--dim); } .mg-chip.tone-gold { --c: var(--gold-lt); }
button.mg-chip { cursor: pointer; } button.mg-f.on { box-shadow: 0 0 0 1px var(--c), 0 0 14px color-mix(in srgb, var(--c) 40%, transparent); }
.mg-filters { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; padding: 12px 16px; }
.mg-filters .mg-tabs-lab { margin: 0 4px 0 0; }
.mg-search { margin-left: auto; min-width: 200px; height: 34px; }
table.mg-roster td { vertical-align: middle; padding: 10px 12px; }
table.mg-roster tr { --spine: var(--dim); }
table.mg-roster td:first-child { border-left: 4px solid var(--spine); }
.mg-pname { font-size: 15px; font-weight: 500; }
.mg-gcell { font-family: 'Spline Sans Mono', monospace; color: var(--gold-lt); }
.mg-pow { font-family: 'Spline Sans Mono', monospace; font-size: 15px; color: var(--power-hi); }
.mg-seat { font-family: 'Spline Sans Mono', monospace; }
.mg-config { margin-top: 26px; }
.mg-config > summary { cursor: pointer; list-style: none; display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 18px;
  padding: 14px 20px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel); }
.mg-config > summary::-webkit-details-marker { display: none; }
.mg-config > summary::before { content: '▸'; color: var(--gold); margin-right: 4px; }
.mg-config[open] > summary::before { content: '▾'; }
/* portal */
.mg-h1sub { font-size: 60%; color: var(--dim); font-family: 'Spline Sans Mono', monospace; letter-spacing: .04em; }
.mg-intent { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; margin: -6px 0 12px; }
.mg-quiet { margin-left: auto; font-family: 'Spline Sans Mono', monospace; font-size: 11px; color: var(--dim); }
.mg-lede { max-width: 820px; color: var(--mut); margin: 0 0 16px; }
.mg-two { display: grid; grid-template-columns: 1.3fr 1fr; gap: 16px; margin-top: 16px; }
.mg-yrow { display: grid; grid-template-columns: 200px 1fr auto; gap: 4px 18px; align-items: center; padding: 12px 0; border-top: 1px solid rgba(123,79,216,.12); }
.mg-yrow:first-of-type { border-top: 0; }
.mg-ycount { grid-column: 2; font-family: 'Spline Sans Mono', monospace; font-size: 12px; color: var(--text); }
.mg-ynames { color: var(--mut); font-size: 13.5px; }
.mg-yleft { font-family: 'Spline Sans Mono', monospace; font-size: 11.5px; text-align: right; }
.mg-yleft.is-ok { color: var(--rise); }
.mg-lands { margin: 6px 0 12px; padding: 12px 14px; border-radius: 10px; --c: var(--dim);
  border: 1px solid color-mix(in srgb, var(--c) 60%, transparent); background: color-mix(in srgb, var(--c) 10%, transparent); }
.mg-lands-t { display: block; font-family: 'Orbitron', sans-serif; font-size: 11px; letter-spacing: .16em; color: var(--c); }
.mg-lands-s { display: block; font-family: 'Spline Sans Mono', monospace; font-size: 12px; color: var(--text); margin-top: 4px; }
.mg-lands-n { display: block; font-family: 'Spline Sans Mono', monospace; font-size: 10px; color: var(--dim); margin-top: 4px; }
.bd-empty { font-family: 'Spline Sans Mono', monospace; font-size: 12px; color: var(--dim); }
@media (max-width: 900px) {
  .mg-row { grid-template-columns: 1fr 1fr; grid-template-rows: auto auto; }
  .mg-row .mg-bar { grid-column: 1 / -1; grid-row: 2; }
  .mg-two { grid-template-columns: 1fr; }
  .mg-yrow { grid-template-columns: 1fr; } .mg-yleft { text-align: left; }
  .mg-search { margin-left: 0; width: 100%; }
}

/* --- v3.36: purge --------------------------------------------------------------- */
.purge-box { margin-top: 22px; border-color: rgba(224,87,79,.35) !important; }
.purge-sum { cursor: pointer; list-style: none; font-family: 'Orbitron', sans-serif; font-size: 11px; letter-spacing: .16em; color: var(--danger); }
.purge-sum::-webkit-details-marker { display: none; }
.purge-form { margin-top: 12px; }
.purge-scope { display: grid; gap: 8px; margin: 8px 0 12px; }

/* --- v3.37: migration roster status --------------------------------------------- */
.mg-flags { display: flex; flex-wrap: wrap; gap: 8px; margin: 4px 0 10px; }
.mg-uid { width: 120px; min-width: 0; height: 32px; padding: 4px 8px; font-family: 'Spline Sans Mono', monospace; font-size: 12px; }
.mg-uidcell { font-family: 'Spline Sans Mono', monospace; font-size: 12.5px; color: var(--mut); }
.mg-flagcell { text-align: center; }
.mg-flag { width: 18px; height: 18px; accent-color: var(--gold); cursor: pointer; }
.mg-status { display: none; }

/* --- v3.39: priority allocation ------------------------------------------------- */
.mg-bar.stacked { display: flex; overflow: visible; }
.mg-seg { display: block; height: 100%; min-width: 3px; border-right: 2px solid rgba(8,6,15,.85); box-sizing: border-box; }
.mg-seg:last-child { border-right: 0; border-radius: 0 10px 10px 0; }
.mg-seg:first-child { border-radius: 10px 0 0 10px; }
.mg-seg.is-over { background-image: repeating-linear-gradient(135deg, rgba(8,6,15,.55) 0 4px, transparent 4px 9px) !important; opacity: .9; }
.mg-seg.reserved { background: repeating-linear-gradient(135deg, rgba(154,143,186,.55) 0 3px, rgba(154,143,186,.25) 3px 8px); }
.mg-seg.mine { box-shadow: inset 0 0 0 2px rgba(255,255,255,.55); }
.mg-bar i.cap { position: absolute; top: -6px; bottom: -6px; width: 3px; background: var(--danger); border-radius: 2px; box-shadow: 0 0 8px var(--danger); }
.mg-legend { display: flex; flex-wrap: wrap; gap: 8px 18px; padding: 12px 0 6px; font-family: 'Spline Sans Mono', monospace; font-size: 11px; color: var(--dim); }
.mg-legend span { display: inline-flex; align-items: center; gap: 6px; }
.mg-legend i { display: inline-block; width: 14px; height: 10px; border-radius: 3px; }
.mg-legend i.lg-over { background: repeating-linear-gradient(135deg, rgba(8,6,15,.7) 0 3px, var(--dim) 3px 6px); }
.mg-legend i.lg-reserved { background: repeating-linear-gradient(135deg, rgba(154,143,186,.55) 0 3px, rgba(154,143,186,.25) 3px 6px); }
.mg-minelab.reserved { color: var(--dim); }
.mg-pbadge { display: inline-block; font-family: 'Orbitron', sans-serif; font-size: 9px; letter-spacing: .1em; padding: 2px 6px; border-radius: 5px;
  background: rgba(217,169,59,.14); border: 1px solid rgba(217,169,59,.5); color: var(--gold-lt); vertical-align: 2px; }
.mg-dot { display: inline-block; width: 10px; height: 10px; border-radius: 50%; margin: 0 4px 0 2px; vertical-align: -1px; }
.mg-guild { border-top: 3px solid var(--gc, var(--line)) !important; }
table.mg-matrix th, table.mg-matrix td { text-align: right; white-space: nowrap; padding: 9px 12px; }
table.mg-matrix th:first-child, table.mg-matrix td:first-child { text-align: left; }
table.mg-matrix .mg-mono { font-family: 'Spline Sans Mono', monospace; font-size: 15px; }
table.mg-matrix .has-over { background: rgba(224,87,79,.08); }
table.mg-matrix tr.mg-total td { border-top: 1px solid var(--line); font-weight: 600; color: var(--gold-lt); }
.mg-chip.tone-red { --c: var(--danger); }

/* --- v3.40: refined ledger — band colour, priority patterns, lanes, summary ---- */
.mg-bar.stacked { --band: var(--dim); background: rgba(123,79,216,.18); }
.mg-seg { position: relative; background: var(--band); display: flex; align-items: center; justify-content: center; overflow: hidden; }
.mg-seg b { font-family: 'Orbitron', sans-serif; font-size: 9px; letter-spacing: .06em; color: #08060F; white-space: nowrap; pointer-events: none; }
.mg-seg.pat-stripe { background-image: repeating-linear-gradient(135deg, rgba(8,6,15,.45) 0 3px, transparent 3px 9px); }
.mg-seg.pat-dots { background-image: radial-gradient(rgba(8,6,15,.6) 1.4px, transparent 1.6px); background-size: 8px 8px; }
.mg-seg.pat-cross { background-image: repeating-linear-gradient(45deg, rgba(8,6,15,.4) 0 2px, transparent 2px 8px), repeating-linear-gradient(-45deg, rgba(8,6,15,.4) 0 2px, transparent 2px 8px); }
.mg-seg.pat-over { background-color: color-mix(in srgb, var(--band) 55%, var(--danger)); background-image: repeating-linear-gradient(135deg, rgba(224,87,79,.85) 0 3px, transparent 3px 8px); }
.mg-seg.pat-over b { color: #fff; text-shadow: 0 0 3px #000; }
.mg-seg.pat-ahead { background-color: rgba(154,143,186,.45); background-image: repeating-linear-gradient(135deg, rgba(154,143,186,.55) 0 3px, transparent 3px 8px); }
.mg-seg.pat-ahead b { color: var(--text); }
.mg-seg.mine { box-shadow: inset 0 0 0 2px rgba(255,255,255,.7); }
.mg-bar i.cap em { position: absolute; top: 100%; left: -10px; margin-top: 4px; font: 9px 'Spline Sans Mono', monospace; font-style: normal; color: var(--danger); }
.mg-barwrap { display: grid; gap: 8px; }
.mg-lanes { display: grid; gap: 3px; }
.mg-lanes .lane { display: block; height: 5px; border-radius: 3px; background: rgba(123,79,216,.22); overflow: hidden; }
.mg-lanes .lane i { display: block; height: 100%; border-radius: 3px; }
.mg-lanes .lane.app i { background: #E8A33C; } .mg-lanes .lane.acc i { background: var(--rise); }
.mg-prog { display: block; font-family: 'Spline Sans Mono', monospace; font-size: 11px; color: var(--dim); margin-top: 4px; }
.mg-prog b { font-weight: 400; } .mg-prog .app { color: #E8A33C; } .mg-prog .acc { color: var(--rise); }
.mg-prog small { display: block; font-size: 10px; color: var(--dim); }
.mg-patkey { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 4px 6px; margin-left: auto;
  font-family: 'Spline Sans Mono', monospace; font-size: 10.5px; color: var(--dim); }
.mg-patkey i { display: inline-block; width: 22px; height: 10px; border-radius: 3px; margin-left: 10px; background: var(--dim); }
.mg-patkey i.pat-stripe { background-image: repeating-linear-gradient(135deg, rgba(8,6,15,.5) 0 3px, transparent 3px 7px); }
.mg-patkey i.pat-dots { background-image: radial-gradient(rgba(8,6,15,.7) 1.2px, transparent 1.4px); background-size: 6px 6px; }
.mg-patkey i.pat-over { background: color-mix(in srgb, var(--dim) 50%, var(--danger)); background-image: repeating-linear-gradient(135deg, rgba(224,87,79,.9) 0 3px, transparent 3px 7px); }
.mg-patkey i.pat-ahead { background: rgba(154,143,186,.45); background-image: repeating-linear-gradient(135deg, rgba(154,143,186,.6) 0 3px, transparent 3px 7px); }
.mg-summary ul { list-style: none; margin: 0; padding: 0; display: grid; gap: 8px; }
.mg-summary li { display: flex; flex-wrap: wrap; align-items: baseline; gap: 6px 10px; font-size: 14.5px; }
.mg-summary li b { color: var(--text); } .mg-summary li span { color: var(--mut); }
.mg-progress { margin: 14px 0 0; padding-top: 12px; border-top: 1px solid rgba(123,79,216,.14); font-size: 14px; color: var(--text); }
.mg-wait { display: inline-block; font-family: 'Orbitron', sans-serif; font-size: 9.5px; letter-spacing: .1em; color: var(--danger);
  border: 1px solid rgba(224,87,79,.6); background: rgba(224,87,79,.12); border-radius: 999px; padding: 3px 9px; vertical-align: 2px; }
table.mg-matrix td .mg-of { margin-left: 5px; }
table.mg-matrix td:first-child { border-left: 4px solid var(--spine); }
.mg-row.has-lanes { align-items: start; }
.mg-row.has-lanes .mg-band, .mg-row.has-lanes .mg-nums, .mg-row.has-lanes .mg-left { padding-top: 2px; }

/* --- v3.40.1: who-fits-where as a grid; screenshot mode ---------------------- */
.mg-grid { display: grid; grid-template-columns: 170px repeat(var(--cols), minmax(150px, 1fr)) 90px; align-items: center; }
.mg-gh { font-family: 'Orbitron', sans-serif; font-size: 10px; letter-spacing: .16em; color: var(--dim); padding: 6px 12px 10px;
  display: flex; align-items: center; gap: 8px; justify-content: flex-end; border-bottom: 1px solid var(--line); }
.mg-gh .mg-gname-h { color: var(--gold-lt); }
.mg-gh.mg-openh { color: var(--dim); }
.mg-gc { padding: 11px 12px; text-align: right; border-bottom: 1px solid rgba(123,79,216,.12); }
.mg-gc.mg-mband { text-align: left; border-left: 4px solid var(--spine); }
.mg-gc .mg-mono { font-family: 'Spline Sans Mono', monospace; font-size: 18px; color: var(--text); }
.mg-gc .mg-of { font-size: 11px; margin-left: 5px; }
.mg-gc .mg-wait { margin-left: 8px; }
.mg-gc.mg-total { border-bottom: 0; border-top: 1px solid var(--line); font-family: 'Orbitron', sans-serif; font-size: 11px; letter-spacing: .14em; color: var(--gold-lt); text-align: right; }
.mg-gc.mg-total:first-child { text-align: left; }
.mg-toplinks { display: flex; flex-wrap: wrap; align-items: center; gap: 12px; }
@media (max-width: 900px) { .mg-grid { grid-template-columns: 120px repeat(var(--cols), minmax(120px, 1fr)) 70px; overflow-x: auto; } }

/* --- v3.40.2: who-fits-where — aligned cells ----------------------------------- */
table.mg-matrix th, table.mg-matrix td { padding: 10px 14px; white-space: nowrap; vertical-align: middle; }
table.mg-matrix th { text-align: left; }
table.mg-matrix th:first-child { padding-left: 14px; }
table.mg-matrix td:first-child { border-left: 4px solid var(--spine); }
table.mg-matrix tfoot td { border-top: 1px solid var(--line); font-family: 'Orbitron', sans-serif; font-size: 11px; letter-spacing: .14em; color: var(--gold-lt); }
.mg-cell { display: inline-grid; grid-template-columns: 3.2ch 4.6em 7.2em; align-items: center; column-gap: 8px; }
.mg-cell .n { font-family: 'Spline Sans Mono', monospace; font-size: 18px; color: var(--text); text-align: right; }
.mg-cell .l { font-family: 'Spline Sans Mono', monospace; font-size: 11px; color: var(--dim); text-align: left; }
.mg-cell .p { text-align: left; }
.mg-cell .p .mg-wait { margin: 0; }
table.mg-matrix th .mg-pbadge { vertical-align: 1px; margin-right: 2px; }

/* --- v3.40.3: who-fits-where — one left edge for header, numbers and totals --- */
table.mg-matrix { table-layout: auto; }
table.mg-matrix th, table.mg-matrix td, table.mg-matrix tfoot td { text-align: left !important; padding: 10px 18px 10px 14px !important; }
table.mg-matrix th { font-size: 10px; }
table.mg-matrix tfoot td { font-family: inherit; font-size: inherit; letter-spacing: 0; color: inherit; }
table.mg-matrix tfoot td:first-child { font-family: 'Orbitron', sans-serif; font-size: 11px; letter-spacing: .14em; color: var(--gold-lt); }
.mg-cell { display: inline-grid; grid-template-columns: 2.6ch 4.4em 7.2em; align-items: center; column-gap: 8px; }
.mg-cell .n { text-align: left; font-family: 'Spline Sans Mono', monospace; font-size: 18px; }
.mg-cell .n.meta { font-size: 18px; }
tfoot .mg-cell .n { color: var(--gold-lt); }

/* --- v3.41: migration on phones -------------------------------------------------- */
@media (max-width: 700px) {
  /* stat strip: two per row, smaller numerals */
  .mg-stats { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
  .mg-stat { padding: 10px 12px; } .mg-val { font-size: 24px; } .mg-lab { font-size: 8.5px; }
  .mg-tab { font-size: 9.5px; padding: 6px 10px; }
  /* summary: tighter prose */
  .mg-summary li { font-size: 13.5px; } .mg-progress { font-size: 13px; }
  /* ledger head: key drops under the title */
  .mg-ledger { padding: 14px 14px 6px; }
  .mg-ledger-head { flex-direction: column; align-items: flex-start; gap: 6px; }
  .mg-patkey { margin-left: 0; } .mg-patkey i { margin-left: 0; margin-right: 4px; }
  .mg-patkey i + i, .mg-patkey i:not(:first-child) { margin-left: 8px; }
  /* ledger rows stack: name → bar → numbers on one line */
  .mg-row, .mg-row.has-lanes { grid-template-columns: 1fr; grid-template-rows: auto auto auto; gap: 6px 0; padding: 12px 0; }
  .mg-row .mg-band { grid-template-columns: 22px 1fr auto; column-gap: 8px; }
  .mg-row .mg-band .mg-brange { grid-column: 3; grid-row: 1 / 3; align-self: center; }
  .mg-row .mg-barwrap, .mg-row .mg-bar { grid-column: 1; }
  .mg-row .mg-nums { display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px; }
  .mg-row .mg-nums .mg-used { font-size: 20px; }
  .mg-row .mg-prog { display: inline; margin: 0; } .mg-row .mg-prog small { display: inline; margin-left: 6px; }
  .mg-row .mg-left { text-align: left; font-size: 13px; }
  .mg-row .mg-left::before { content: '→ '; color: var(--dim); }
  /* segment labels are too cramped on a 320px bar: legend + tooltips carry them */
  .mg-seg b { display: none; }
  .mg-bar i.cap em { display: none; }
  /* guild cards: full width, compact */
  .mg-guilds { grid-template-columns: 1fr; gap: 10px; }
  .mg-guild { padding: 14px 16px 12px; }
  .mg-gacts { gap: 6px; }
  /* who-fits-where: scrolls sideways with the band column pinned; slimmer cells */
  .mg-matrix-wrap .tablewrap { overflow-x: auto; -webkit-overflow-scrolling: touch; }
  table.mg-matrix th:first-child, table.mg-matrix td:first-child { position: sticky; left: 0; background: var(--panel); z-index: 1; }
  .mg-cell { grid-template-columns: 2.4ch 4em; grid-template-rows: auto auto; column-gap: 6px; }
  .mg-cell .p { grid-column: 1 / -1; }
  .mg-cell .n { font-size: 16px; }
  table.mg-matrix th, table.mg-matrix td, table.mg-matrix tfoot td { padding: 8px 10px !important; }
  /* roster + filters */
  .mg-filters { padding: 10px 12px; gap: 6px; }
  .mg-filters .mg-tabs-lab { width: 100%; margin: 4px 0 0; }
  .mg-search { width: 100%; margin: 4px 0 0; }
  table.mg-roster td, table.mg-roster th { padding: 8px 10px; font-size: 13px; }
  .mg-pname { font-size: 14px; } .mg-pow { font-size: 13px; }
  .mg-uid { width: 96px; }
  /* config fold summary */
  .mg-config > summary { padding: 12px 14px; }
  /* portal */
  h1 .mg-h1sub { display: block; font-size: 12px; margin-top: 4px; }
  .mg-intent { gap: 8px; } .mg-intent .intent-select { flex: 1 1 100%; }
  .mg-quiet { margin-left: 0; }
  .mg-two { gap: 12px; }
  .mg-yrow { grid-template-columns: 1fr; gap: 2px; padding: 10px 0; }
  .mg-yrow .mg-band { grid-template-columns: 22px 1fr auto; }
  .mg-ycount { grid-column: 3; grid-row: 1 / 3; align-self: center; }
  .mg-yleft { text-align: left; }
  .mg-lands { padding: 10px 12px; }
}
@media (max-width: 420px) {
  .mg-val { font-size: 21px; }
  .mg-row .mg-nums .mg-used { font-size: 18px; }
  .mg-cell { grid-template-columns: 2.2ch 3.6em; }
}

/* --- v3.43: hidden players --------------------------------------------------- */
.mg-hidebox em { font-style: normal; color: var(--dim); font-size: 12px; }
table.mg-roster tr.mg-hiddenrow td { opacity: .55; }
table.mg-roster tr.mg-hiddenrow td:first-child { opacity: .8; }

/* --- v3.43.3: hidden players stay on the admin roster ------------------------- */
table.mg-roster tr.mg-hiddenrow td { opacity: .6; }
table.mg-roster tr.mg-hiddenrow td:first-child, table.mg-roster tr.mg-hiddenrow td:last-child { opacity: .9; }

/* --- v3.44: migrated -------------------------------------------------------- */
.tone-teal { color: var(--power-hi); } .mg-chip.tone-teal { --c: var(--power-hi); }
.mg-lanes .lane.mig i { background: var(--power-hi); }
.mg-prog .mig, .mg-progress .mig { color: var(--power-hi); }
.mg-patkey i.lane-app { background: #E8A33C; height: 5px; } .mg-patkey i.lane-acc { background: var(--rise); height: 5px; } .mg-patkey i.lane-mig { background: var(--power-hi); height: 5px; }
.mg-flag-mig { accent-color: var(--power-hi); }

/* --- v3.45: additive grants (+ MIGRATION) ------------------------------------ */
.grants { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 7px; }
.grant-chip { font-family: 'Orbitron', sans-serif; font-size: 9px; letter-spacing: .16em; font-weight: 700;
  padding: 4px 10px; border-radius: 999px; border: 1px dashed var(--line-2); color: var(--dim);
  background: transparent; cursor: pointer; transition: all .18s ease; white-space: nowrap; }
.grant-chip:hover { border-color: var(--gold); color: var(--gold-lt); }
.grant-chip.on { border-style: solid; border-color: var(--gold); color: var(--gold-lt);
  background: rgba(217,169,59,.12); box-shadow: 0 0 16px -6px rgba(217,169,59,.9); }
span.grant-chip { cursor: default; }

/* --- v3.45: migration waves + archive ---------------------------------------- */
.mg-wave { padding: 14px 18px 16px; }
.mg-wave-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); gap: 14px; margin-top: 10px; }
.mg-wave-step { display: flex; gap: 14px; align-items: flex-start; padding: 12px 14px; border-radius: 12px;
  border: 1px solid var(--line-2); background: rgba(123,79,216,.07); }
.mg-wave-n { font-family: 'Orbitron', sans-serif; font-size: 30px; font-weight: 700; line-height: 1; min-width: 2.2em; text-align: right; padding-top: 2px; }
.mg-wave-body { display: flex; flex-direction: column; gap: 4px; flex: 1; }
.mg-wave-body > b { font-family: 'Cinzel', serif; letter-spacing: .04em; }
.mg-wave-body .meta { line-height: 1.5; }
.mg-wave .btn[disabled] { opacity: .4; cursor: not-allowed; }
.tone-arch { color: #B9A8E6; } .mg-chip.tone-arch { --c: #B9A8E6; border-style: dashed; }
.mg-stat .mg-val.tone-arch { color: #B9A8E6; }
.mg-archive { margin-top: 22px; }
.mg-archive > summary { cursor: pointer; display: flex; align-items: center; gap: 12px; padding: 10px 0; list-style: none; }
.mg-archive > summary::-webkit-details-marker { display: none; }
.mg-archive > summary::before { content: '▸'; color: var(--dim); font-size: 12px; transition: transform .15s; }
.mg-archive[open] > summary::before { transform: rotate(90deg); }
.mg-archwave { margin-top: 10px; }
.mg-archwave .mg-ledger-head { flex-wrap: wrap; gap: 10px; }
table.mg-roster tr.mg-archrow td { opacity: .7; }
table.mg-roster tr.mg-archrow td:first-child { opacity: .95; }
.mg-wave-body { min-width: 0; }
.mg-wave-body .meta { overflow-wrap: anywhere; }
.mg-wave-step .mg-inline { display: flex; flex-wrap: wrap; row-gap: 8px; }
.mg-wave-step .switch-row { padding: 6px 10px; white-space: nowrap; }
.mg-wave-step .switch-row span { font-size: 12px; }
