/* ==========================================================================
   ZZZ Analytics — UI refresh
   Loaded after styles.css. Adds: type scale, light theme, navbar/hero,
   filter panel, results bar, card affordances, damage-log, states,
   floating search, shortcuts overlay, toast.
   ========================================================================== */

/* ---------- Type scale (7 steps) ---------- */
:root {
  --fs-micro: 11px;
  --fs-small: 12px;
  --fs-caption: 13px;
  --fs-body: 14px;
  --fs-lead: 16px;
  --fs-title: 20px;
  --fs-display: 28px;

  /* Missing token referenced across the app */
  --bg-main: var(--bg-nav);

  /* Agent header base (theme-aware) + score alias */
  --char-header-base: linear-gradient(135deg, rgba(33, 40, 48, 0.9) 0%, rgba(24, 30, 36, 0.95) 100%);
  --c-score: var(--c-cyan);
  --grid-line: #21262D;
  --c-sepia: #CEA36B;   /* legacy bangboo */
  --c-teal: #2DD4BF;    /* current bangboo */

  /* Element tokens */
  --el-physical: #F2D26B;
  --el-fire: #FF6A3D;
  --el-ice: #63E0FF;
  --el-electric: #6E8BFF;
  --el-ether: #C08BFF;
  --el-wind: #4FE0B5;
  --el-frost: #9AD8FF;
  --el-lumiflux: #FF5FD0;
}

/* ---------- Light theme ---------- */
[data-theme="light"] {
  --bg-dark: #F6F8FA;
  --bg-nav: #FFFFFF;
  --bg-card: #FFFFFF;
  --bg-subcard: #F0F3F6;
  --bg-hover: #E7ECF1;

  --border-main: #D0D7DE;
  --border-accent: #096B8C;

  --text-main: #1F2328;
  --text-muted: #59636E;
  --text-dim: #5A636E;

  --c-cyan: #096B8C;
  --grid-line: #E7ECF1;
  --c-sepia: #7A5628;
  --c-teal: #0F766E;
  --c-orange: #BC4C00;
  --c-purple: #8250DF;
  --c-yellow: #8A5A00;
  --c-red: #B31D28;
  --c-green: #1A7F37;
  --c-pink: #BF3989;

  --char-header-base: linear-gradient(135deg, rgba(246, 248, 250, 0.9) 0%, rgba(240, 243, 246, 0.94) 100%);
}
[data-theme="light"] .site-char-name,
[data-theme="light"] .site-wengine-title,
[data-theme="light"] .site-kpi-val { color: var(--text-main); }
[data-theme="light"] .modal-card { background-color: var(--bg-nav); }
[data-theme="light"] .custom-table td { color: var(--text-main); }
[data-theme="light"] .form-control { color: var(--text-main); }
[data-theme="light"] .agent-multi-select { color: var(--text-main); }
[data-theme="light"] #admin-auth-section .btn-primary { background-color: #FFC24B !important; color: #0D1117 !important; }

/* Catch inline hard-coded dark-theme text/backgrounds still present in JS templates */
[data-theme="light"] [style*="color:#fff"],
[data-theme="light"] [style*="color: #fff"],
[data-theme="light"] [style*="color:#FFF"],
[data-theme="light"] [style*="color: #FFF"],
[data-theme="light"] [style*="color:#FFFFFF"],
[data-theme="light"] [style*="color: #FFFFFF"] { color: var(--text-main) !important; }
[data-theme="light"] [style*="color:#A0AEC0"],
[data-theme="light"] [style*="color: #A0AEC0"],
[data-theme="light"] [style*="color:#E6EDF3"],
[data-theme="light"] [style*="color: #E6EDF3"] { color: var(--text-muted) !important; }
[data-theme="light"] [style*="background:#0D1117"],
[data-theme="light"] [style*="background: #0D1117"],
[data-theme="light"] [style*="background-color:#0D1117"],
[data-theme="light"] [style*="background-color: #0D1117"] { background-color: var(--bg-nav) !important; }

html { color-scheme: dark; }
[data-theme="light"] { color-scheme: light; }

/* ==========================================================================
   Navbar — Z logo, page title in the bar, standardised tab type
   ========================================================================== */
.brand-badge {
  width: 38px;
  padding: 0;
  font-size: var(--fs-lead);
  border-radius: 6px 6px 0 6px;
  clip-path: polygon(0 0, 100% 0, 100% calc(100% - 11px), calc(100% - 11px) 100%, 0 100%);
}
.nav-page-title {
  font-size: var(--fs-lead);
  font-weight: 800;
  letter-spacing: -0.01em;
  color: var(--text-main);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
a.site-btn.nav-tab-btn { letter-spacing: 1px; font-size: var(--fs-small); color: var(--text-muted); border: 1px solid var(--border-main); background-color: var(--bg-card); }
/* Hover mirrors the theme toggle: text -> text-main, border -> accent */
a.site-btn.nav-tab-btn:hover,
a.site-btn.nav-tab-btn:focus-visible { color: var(--text-main); border-color: var(--border-accent); background-color: var(--bg-subcard); outline: none; }
a.site-btn.nav-tab-btn[aria-current="page"] { color: var(--c-cyan); border-color: var(--c-cyan); background-color: rgba(56, 189, 248, 0.10); font-weight: 800; }

/* Filled brand/primary buttons: on hover the border and text go white */
.btn-upload { border: 1px solid transparent; }
.btn-upload:hover,
.btn-upload:focus-visible { background-color: var(--c-cyan); border-color: #ffffff; color: #ffffff; opacity: 1; }
a.brand .brand-badge { border: 1px solid transparent; }
a.brand:hover .brand-badge,
a.brand:focus-visible .brand-badge { border-color: #ffffff; color: #ffffff; }
.theme-toggle {
  width: 38px; height: 38px; padding: 0; flex: none;
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--bg-card); border: 1px solid var(--border-main);
  border-radius: 6px; color: var(--text-muted); cursor: pointer;
}
.theme-toggle:hover { color: var(--text-main); border-color: var(--border-accent); }
.theme-toggle svg { width: 17px; height: 17px; }

/* ==========================================================================
   Hero + results bar
   ========================================================================== */
.page-lede {
  font-size: var(--fs-display);
  font-weight: 800;
  letter-spacing: -0.02em;
  color: var(--text-main);
  margin: 0 0 1.1rem;
}
.hide-mobile { display: inline; }

.results-head {
  position: sticky; top: 59px; z-index: 90;
  display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem;
  padding: 0.55rem 0.9rem; margin-bottom: 1rem;
  background: color-mix(in srgb, var(--bg-nav) 96%, transparent);
  border: 1px solid var(--border-main); border-radius: 8px;
  backdrop-filter: blur(6px);
}
.results-head .rh-count { font-family: 'JetBrains Mono', monospace; font-size: var(--fs-small); color: var(--text-muted); }
.results-head .rh-count b { color: var(--c-cyan); }
.fresh { display: inline-flex; align-items: center; gap: 0.45rem; font-family: 'JetBrains Mono', monospace; font-size: var(--fs-small); color: var(--text-muted); }
.fresh .dot { width: 7px; height: 7px; border-radius: 50%; background: var(--c-green); box-shadow: 0 0 0 3px rgba(34, 197, 94, 0.18); }
.chips { display: flex; flex-wrap: wrap; gap: 0.4rem; }
.chip {
  display: inline-flex; align-items: center; gap: 0.4rem;
  background: var(--bg-card); border: 1px solid var(--border-main); border-radius: 999px;
  padding: 0.2rem 0.35rem 0.2rem 0.7rem; font-size: var(--fs-small); color: var(--text-main); font-weight: 600;
}
.chip button { all: unset; cursor: pointer; color: var(--text-muted); font-size: 0.9rem; line-height: 1; width: 18px; height: 18px; display: grid; place-items: center; border-radius: 50%; }
.chip button:hover { background: var(--bg-hover); color: var(--text-main); }
.results-head .rh-actions { margin-left: auto; display: inline-flex; align-items: center; gap: 0.85rem; }
.results-head .clear { background: none; border: none; cursor: pointer; color: var(--text-muted); font-size: var(--fs-small); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
/* Sort switcher matches the Clear all text (Inter, same size/weight) */
.results-head .rh-sort button { font-family: 'Inter', sans-serif; font-size: var(--fs-small); font-weight: 700; letter-spacing: 0; }
.results-head .clear:hover { color: var(--text-main); }
.link-btn { height: 28px; font-size: var(--fs-small); letter-spacing: 0.4px; }

/* ==========================================================================
   Filter panel — grouped rows, unified text
   ========================================================================== */
.filter-panel { background-color: var(--bg-nav); border: 1px solid var(--border-main); border-radius: 8px; padding: 1rem 1.25rem; margin-bottom: 1rem; }
.filter-head { display: flex; align-items: center; gap: 0.75rem; flex-wrap: wrap; }
.filter-head .title { font-family: 'JetBrains Mono', monospace; font-weight: 800; font-size: var(--fs-caption); letter-spacing: 1px; text-transform: uppercase; color: var(--text-main); }
.filter-head .clear { margin-left: auto; background: none; border: none; cursor: pointer; color: var(--text-muted); font-size: var(--fs-small); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
.filter-toggle { display: none; width: 100%; align-items: center; justify-content: space-between; gap: 0.75rem; padding: 0.6rem 0.15rem; background: none; border: none; color: var(--text-main); cursor: pointer; text-align: left; }
.filter-toggle .t { font-family: 'JetBrains Mono', monospace; font-size: var(--fs-caption); font-weight: 800; letter-spacing: 1px; text-transform: uppercase; color: var(--c-cyan); }
.filter-toggle .c { font-size: var(--fs-small); color: var(--text-muted); }

.filter-row { display: grid; grid-template-columns: 96px 1fr; gap: 0.6rem 1.25rem; align-items: start; padding: 0.85rem 0; border-top: 1px solid var(--border-main); }
.filter-rows > .filter-row:first-child { margin-top: 0.75rem; }
.filter-row .rlabel { font-family: 'JetBrains Mono', monospace; font-size: var(--fs-micro); font-weight: 800; letter-spacing: 0.6px; text-transform: uppercase; color: var(--text-dim); padding-top: 0.45rem; }
.filter-controls { display: flex; flex-wrap: wrap; align-items: center; gap: 0.6rem 1rem; min-width: 0; }
.agents-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.6rem 1.75rem; width: 100%; }
.invest-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)) auto; gap: 0.9rem 1.75rem; align-items: end; width: 100%; }

/* one size/weight/colour for every descriptive filter string */
.filter-row .hint,
.filter-row .ctl > span,
.filter-row .mini .ml,
.filter-row .norm .norm-label,
.filter-row .switch,
.filter-row details.why > summary { font-size: var(--fs-caption); font-weight: 600; color: var(--text-muted); }

.seg-sm { display: inline-flex; border: 1px solid var(--border-main); border-radius: 6px; overflow: hidden; background: var(--bg-card); }
.seg-sm button { appearance: none; background: none; border: none; cursor: pointer; color: var(--text-muted); font-family: 'JetBrains Mono', monospace; font-size: var(--fs-small); font-weight: 700; letter-spacing: 0.3px; padding: 0.32rem 0.8rem; }
.seg-sm button + button { border-left: 1px solid var(--border-main); }
.seg-sm button:hover { color: var(--text-main); background: var(--bg-subcard); }
.seg-sm button[aria-pressed="true"] { background: var(--c-cyan); color: #0D1117; }
/* Filled brand elements keep the brand cyan + dark ink in light mode */
[data-theme="light"] .brand-badge,
[data-theme="light"] .btn-upload,
[data-theme="light"] .seg-sm button[aria-pressed="true"] { background-color: #38BDF8; color: #0D1117; }
.fdivider { width: 1px; align-self: stretch; min-height: 22px; background: var(--border-main); margin: 0 0.15rem; }
.seg-label { font-family: 'JetBrains Mono', monospace; font-size: var(--fs-micro); font-weight: 800; letter-spacing: 0.6px; text-transform: uppercase; color: var(--text-dim); }

.ctl { display: flex; align-items: center; gap: 0.5rem; min-width: 0; }
.ctl > span { white-space: nowrap; }
.ctl-select, .filter-row .form-control {
  background: var(--bg-card); border: 1px solid var(--border-main); color: var(--text-main);
  border-radius: 6px; padding: 0.42rem 0.6rem; font-size: var(--fs-caption); font-weight: 600;
  font-family: inherit; cursor: pointer; flex: 1 1 auto; min-width: 0;
}
.ctl-select.logic { flex: 0 0 108px; }
.ctl-select:hover { border-color: var(--border-accent); }
.mini { display: flex; flex-direction: column; gap: 0.28rem; min-width: 0; }
.mini .ml { display: flex; justify-content: space-between; gap: 0.5rem; }
.mini .ml b { color: var(--c-cyan); font-family: 'JetBrains Mono', monospace; }
.mini input[type="range"] { width: 100%; accent-color: var(--c-cyan); height: 4px; cursor: pointer; }
.switch { display: inline-flex; align-items: center; gap: 0.5rem; cursor: pointer; }
.switch:hover { color: var(--text-main); }
.switch input { width: 15px; height: 15px; accent-color: var(--c-cyan); cursor: pointer; }

.norm { position: relative; display: inline-flex; align-items: center; gap: 0.45rem; cursor: pointer; padding-top: 0.1rem; }
.norm-label-wrap { display: inline-flex; align-items: center; gap: 0.45rem; cursor: pointer; }
.norm input { width: 15px; height: 15px; accent-color: var(--c-cyan); cursor: pointer; flex: none; }
.norm .tip-check { display: flex; align-items: center; gap: 0.5rem; margin-top: 0.55rem; padding-top: 0.55rem; border-top: 1px solid var(--border-main); cursor: pointer; color: var(--text-main); font-size: var(--fs-small); font-weight: 600; }
.filter-row .norm .norm-label { display: inline-flex; align-items: center; gap: 0.4rem; font-size: var(--fs-caption); font-weight: 700; color: var(--c-cyan); text-decoration: underline; text-decoration-color: var(--text-muted); text-decoration-thickness: 1px; text-underline-offset: 3px; }
/* Unified help triggers: Normalise, What changed?, cost "?" */
.help-trigger { display: inline-flex; align-items: center; color: var(--c-cyan); font-family: 'Inter', sans-serif; font-size: var(--fs-caption); font-weight: 700; text-decoration: underline; text-decoration-color: var(--text-muted); text-decoration-thickness: 1px; text-underline-offset: 3px; cursor: help; }
.filter-row .norm .norm-label:hover, .help-trigger:hover, .help-trigger:focus-visible { text-decoration-color: var(--c-cyan); text-decoration-thickness: 2px; }
.norm img { height: 18px; width: auto; display: block; }
.tip {
  position: absolute; bottom: calc(100% + 10px); right: 0; z-index: 200;
  width: min(340px, 84vw); padding: 0.85rem 1rem;
  background: var(--bg-card); border: 1px solid var(--c-cyan); border-radius: 8px;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.55);
  font-family: 'Inter', sans-serif; font-size: var(--fs-small); line-height: 1.5; color: var(--text-main);
  visibility: hidden; opacity: 0; pointer-events: none; transition: opacity 0.15s ease;
}
.tip .tip-line { display: block; }
.tip .tip-line + .tip-line { margin-top: 0.15rem; }
.norm:hover .tip, .norm:focus-within .tip { visibility: visible; opacity: 1; pointer-events: auto; }
.tip .h { color: var(--c-cyan); font-weight: 800; margin-bottom: 0.35rem; }
.tip .note { color: var(--c-yellow); font-weight: 700; margin-top: 0.4rem; }
/* Normalise opens downward so it can't slide under the sticky navbar */
.norm .tip { top: calc(100% + 10px); bottom: auto; right: 0; left: auto; }

details.why { position: relative; display: inline-flex; align-items: center; align-self: center; }
details.why > summary { display: inline-flex; align-items: center; cursor: pointer; list-style: none; color: var(--c-cyan); font-weight: 700; text-decoration: underline; text-underline-offset: 2px; }
details.why > summary::-webkit-details-marker { display: none; }
details.why .why-body {
  position: absolute; top: calc(100% + 10px); left: 0; z-index: 200;
  width: min(520px, 82vw); padding: 0.85rem 1rem;
  background: var(--bg-card); border: 1px solid var(--border-accent); border-radius: 8px;
  box-shadow: 0 8px 32px rgba(0, 0, 0, 0.55);
  color: var(--text-muted); font-size: var(--fs-caption); line-height: 1.5;
}

/* ==========================================================================
   Run card affordances
   ========================================================================== */
.site-chart-card.is-expandable { cursor: pointer; }
.site-chart-card.is-expandable:focus-visible { outline: none; border-color: var(--c-cyan); box-shadow: 0 0 0 2px rgba(56, 189, 248, 0.45); }
/* Hover border only where hover is actually available (avoids a stuck border on touch) */
@media (hover: hover) and (pointer: fine) {
  .site-chart-card.is-expandable:hover { border-color: var(--card-hover-color, var(--border-accent)); }
}
.card-chev {
  width: 26px; height: 26px; flex: none; display: grid; place-items: center;
  background: none; border: 1px solid transparent; border-radius: 6px;
  color: var(--text-dim); cursor: pointer;
}
.card-chev:hover { color: var(--c-cyan); border-color: var(--border-main); }
.card-chev svg { width: 15px; height: 15px; transition: transform 0.15s ease; }
.card-chev[aria-expanded="true"] svg { transform: rotate(180deg); }
.share-btn { height: 24px; padding: 0 0.6rem; font-size: var(--fs-micro); letter-spacing: 0.4px; }

/* Status tags — one component for bangboo level / beta / needs-improvement / downscaled */
.status-tag {
  display: inline-flex; align-items: center; gap: 0.4rem;
  font-family: 'Inter', sans-serif; font-size: 0.78rem; font-weight: 700; line-height: 1;
  border-radius: 6px; padding: 0.32rem 0.6rem;
  border: 1px solid var(--border-main); background: var(--bg-subcard); color: var(--text-muted);
  white-space: nowrap;
}
.status-tag .dot { width: 7px; height: 7px; border-radius: 50%; background: currentColor; flex: none; }
.status-tag.is-good { color: var(--c-green); border-color: color-mix(in srgb, var(--c-green) 45%, transparent); background: color-mix(in srgb, var(--c-green) 12%, transparent); }
.status-tag.is-warn { color: var(--c-yellow); border-color: color-mix(in srgb, var(--c-yellow) 45%, transparent); background: color-mix(in srgb, var(--c-yellow) 12%, transparent); }
.status-tag.is-danger { color: var(--c-red); border-color: color-mix(in srgb, var(--c-red) 45%, transparent); background: color-mix(in srgb, var(--c-red) 12%, transparent); }
.status-tag.is-info { color: var(--c-cyan); border-color: color-mix(in srgb, var(--c-cyan) 45%, transparent); background: color-mix(in srgb, var(--c-cyan) 12%, transparent); }
/* "Old" = sepia + dashed outline + hollow dot; "New" = teal, solid */
.status-tag.is-old { color: var(--c-sepia); border-style: dashed; border-color: color-mix(in srgb, var(--c-sepia) 55%, transparent); background: color-mix(in srgb, var(--c-sepia) 10%, transparent); }
.status-tag.is-old .dot { background: transparent; box-shadow: inset 0 0 0 1.5px currentColor; }
.status-tag.is-new { color: var(--c-teal); border-color: color-mix(in srgb, var(--c-teal) 45%, transparent); background: color-mix(in srgb, var(--c-teal) 12%, transparent); }
.status-tag.is-new .dot { background: currentColor; }
.new-chip { font-family: 'JetBrains Mono', monospace; font-size: 10px; font-weight: 800; letter-spacing: 0.5px; color: #0D1117; background: var(--c-green); border-radius: 4px; padding: 0.1rem 0.4rem; }
[data-theme="light"] .new-chip { color: #FFFFFF; }
.help { position: relative; display: inline-grid; }
.help-dot { width: 15px; height: 15px; padding: 0; border-radius: 50%; border: 1px solid var(--border-main); background: var(--bg-card); color: var(--text-muted); display: inline-grid; place-items: center; font-size: 0.58rem; font-weight: 800; cursor: help; line-height: 1; }
.help-dot:hover, .help-dot:focus-visible { color: var(--c-cyan); border-color: var(--c-cyan); }
.help .tip { bottom: auto; top: calc(100% + 10px); left: 0; right: auto; }
.help:hover .tip, .help:focus-within .tip { visibility: visible; opacity: 1; }

/* ==========================================================================
   Damage log — sticky header, sortable
   ========================================================================== */
.damage-log-cap { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; margin-bottom: 0.6rem; }
.damage-log-cap .t { font-weight: 800; font-size: var(--fs-lead); }
table.custom-table th.sortable { cursor: pointer; user-select: none; color: var(--c-cyan); }
table.custom-table th.sortable .arw { opacity: 0.55; }
table.custom-table th.sortable[aria-sort] .arw { opacity: 1; }
.custom-table thead th { position: sticky; top: 0; z-index: 1; }

/* ==========================================================================
   States
   ========================================================================== */
.state-skel { background: var(--bg-card); border: 1px solid var(--border-main); border-radius: 8px; padding: 1rem; margin-bottom: 1.25rem; }
.state-skel .top { display: flex; gap: 0.75rem; align-items: center; margin-bottom: 0.85rem; }
.state-skel .block { background: var(--bg-subcard); border-radius: 5px; }
.state-skel .av { width: 44px; height: 44px; border-radius: 50%; }
.state-skel .l1 { width: 40%; height: 12px; }
.state-skel .l2 { width: 24%; height: 10px; margin-top: 0.45rem; }
.state-skel .cards { display: grid; grid-template-columns: repeat(3, 1fr); gap: 0.7rem; }
.state-skel .c3 { height: 92px; }
.state-box { background: var(--bg-card); border: 1px dashed var(--border-main); border-radius: 8px; padding: 2.5rem 1.5rem; text-align: center; margin-bottom: 1.25rem; }
.state-box h3 { font-size: var(--fs-lead); margin-bottom: 0.4rem; }
.state-box p { color: var(--text-muted); font-size: var(--fs-caption); margin-bottom: 1.1rem; }
.state-box .row { display: flex; gap: 0.6rem; justify-content: center; flex-wrap: wrap; }
.state-box.is-error .ico { width: 42px; height: 42px; margin: 0 auto 0.7rem; border-radius: 50%; background: rgba(239, 68, 68, 0.12); border: 1px solid rgba(239, 68, 68, 0.5); display: grid; place-items: center; color: var(--c-red); }
.state-box.is-empty h3 { color: var(--c-orange); }

/* ==========================================================================
   Floating search + shortcuts + toast
   ========================================================================== */
.floating-search {
  position: fixed; left: 50%; bottom: 1.1rem; transform: translateX(-50%); z-index: 95;
  display: flex; align-items: center; gap: 0.6rem;
  width: min(680px, calc(100% - 1.5rem)); padding: 0 0.85rem; height: 48px;
  background: color-mix(in srgb, var(--bg-nav) 97%, transparent);
  border: 1px solid var(--border-main); border-radius: 10px;
  box-shadow: 0 12px 40px rgba(0, 0, 0, 0.45); backdrop-filter: blur(8px);
  transition: transform 0.2s ease, opacity 0.2s ease;
}
.floating-search:focus-within { border-color: var(--c-cyan); box-shadow: 0 12px 40px rgba(0,0,0,.45), 0 0 0 2px rgba(56,189,248,.35); }
.floating-search > svg { width: 17px; height: 17px; color: var(--text-muted); flex: none; }
.floating-search input { flex: 1; background: none; border: none; color: var(--text-main); font: inherit; font-size: var(--fs-body); min-width: 0; outline: none; }
.floating-search kbd { font-family: 'JetBrains Mono', monospace; font-size: var(--fs-micro); color: var(--text-muted); border: 1px solid var(--border-main); border-radius: 4px; padding: 0.05rem 0.38rem; flex: none; }
.floating-search .fs-count { font-family: 'JetBrains Mono', monospace; font-size: var(--fs-small); color: var(--text-muted); flex: none; }
.floating-search .fs-count b { color: var(--c-cyan); }
.fs-help { width: 26px; height: 26px; flex: none; border-radius: 6px; border: 1px solid var(--border-main); background: var(--bg-card); color: var(--text-muted); cursor: pointer; font-family: 'JetBrains Mono', monospace; font-weight: 800; font-size: var(--fs-small); }
.fs-help:hover { color: var(--c-cyan); border-color: var(--c-cyan); }

.overlay { position: fixed; inset: 0; z-index: 1200; display: none; align-items: center; justify-content: center; padding: 1rem; background: rgba(13, 17, 23, 0.9); }
.overlay.is-open { display: flex; }
.sc-panel { width: min(460px, 100%); background: var(--bg-card); border: 1px solid var(--border-main); border-radius: 10px; overflow: hidden; box-shadow: 0 24px 60px rgba(0, 0, 0, 0.6); }
.sc-head { display: flex; justify-content: space-between; align-items: center; padding: 0.85rem 1rem; border-bottom: 1px solid var(--border-main); font-weight: 800; font-size: var(--fs-body); }
.sc-head button { background: none; border: none; color: var(--text-muted); cursor: pointer; font-size: 1.05rem; }
.sc-head button:hover { color: var(--text-main); }
.sc-row { display: flex; justify-content: space-between; align-items: center; padding: 0.65rem 1rem; border-bottom: 1px solid var(--border-main); font-size: var(--fs-caption); color: var(--text-muted); }
.sc-row:last-child { border-bottom: none; }
kbd { font-family: 'JetBrains Mono', monospace; font-size: var(--fs-micro); color: var(--text-main); background: var(--bg-nav); border: 1px solid var(--border-main); border-bottom-width: 2px; border-radius: 5px; padding: 0.1rem 0.4rem; }

.toast {
  position: fixed; left: 50%; bottom: 4.6rem; z-index: 1300; transform: translateX(-50%) translateY(10px);
  opacity: 0; pointer-events: none; transition: opacity 0.18s ease, transform 0.18s ease;
  display: inline-flex; align-items: center; gap: 0.5rem; background: var(--bg-card);
  border: 1px solid var(--c-green); border-radius: 8px; padding: 0.6rem 0.95rem;
  font-size: var(--fs-caption); box-shadow: 0 10px 30px rgba(0, 0, 0, 0.5);
}
.toast.is-open { opacity: 1; transform: translateX(-50%) translateY(0); }
.toast svg { width: 16px; height: 16px; color: var(--c-green); }

/* Discord logo: black in dark mode, white in light mode */
.discord-fab { color: #000; }
.discord-fab svg { width: 1.7rem; height: 1.7rem; display: block; }
[data-theme="light"] .discord-fab { color: #fff; }

/* ==========================================================================
   Submit dialog — single dropzone with browse
   ========================================================================== */
.dropzone { position: relative; }
.dropzone .dropzone-browse { display: block; margin-top: 0.5rem; color: var(--c-cyan); font-size: var(--fs-caption); font-weight: 700; text-decoration: underline; cursor: pointer; }
.dropzone.is-dragover { border-color: var(--c-cyan); background: var(--bg-subcard); }

/* ==========================================================================
   Responsive
   ========================================================================== */
@media (max-width: 900px) {
  .invest-grid { grid-template-columns: 1fr 1fr; }
  .agents-grid { grid-template-columns: 1fr; }
  .nav-page-title { font-size: var(--fs-caption); }
}
@media (max-width: 760px) {
  /* Submit Run is desktop-only — a run can't practically be submitted from a phone */
  #open-upload-btn, .btn-upload { display: none !important; }
  .filter-head .title, .filter-head .clear { display: none; }
  .filter-toggle { display: flex; }
  .filter-rows.is-collapsed { display: none; }
  .filter-row { grid-template-columns: 1fr; }
  .filter-row .rlabel { padding-top: 0; margin-bottom: 0.1rem; }
  .invest-grid { grid-template-columns: 1fr; }
  .page-lede { font-size: var(--fs-body); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  .hide-mobile { display: none; }
  .state-skel .cards { grid-template-columns: 1fr; }
  .discord-fab { width: 2.9rem; height: 2.9rem; bottom: 4.6rem; }

  /* Mobile-first: no accidental horizontal widening from popovers */
  body { overflow-x: clip; }
  .tip, .why-body { max-width: calc(100vw - 24px); }

  /* Prevent iOS focus zoom (inputs must be >= 16px) */
  input, select, textarea,
  .form-control, .agent-multi-select, .ctl-select,
  #run-search-input, .search input { font-size: 16px; }

  /* Popovers open centred on mobile so they can't run off the edge */
  .tip, .why-body, .norm .tip, .help .tip {
    position: fixed; left: 50%; right: auto; top: 50%; bottom: auto;
    transform: translate(-50%, -50%);
    width: min(92vw, 420px); max-width: 92vw; max-height: 72vh; overflow: auto;
    z-index: 1500;
  }

  /* Free up room in the results bar for the sort switcher */
  .results-head .fresh { display: none; }
  .rh-sort button { padding: 0.28rem 0.6rem; }

  /* Hide the floating search while a modal/overlay is open so it can't cover popups */
  body:has(.modal-overlay.active) .floating-search,
  body:has(.overlay.is-open) .floating-search { display: none; }

  /* Hide while a run is expanded so it can't cover the sticky breakdown actions */
  body.run-expanded .floating-search { display: none; }

  /* Hide on scroll-down, reveal on scroll-up */
  .floating-search.is-hidden { transform: translateX(-50%) translateY(170%); opacity: 0; pointer-events: none; }
}
@media (min-width: 761px) { .filter-rows { display: block !important; } }

@media (prefers-reduced-motion: reduce) {
  .toast, .card-chev svg { transition: none !important; }
}
