:root{
  --bg:#0B0B0D;
  --panel:#131316;
  --panel-2:#1A1A1E;
  --border:#26262B;
  --text:#F2F2F0;
  --text-dim:#9A9AA1;
  --red:#E14A3B;
  --gold:#C9A646;
  --green:#3CB878;
  --blue:#4C8DFF;
  --purple:#A66CE0;
  --cyan:#3DC9D8;
  --orange:#E8804A;
  --silver:#9AA0A8;
  --radius:14px;
}

/* Light theme — same OID brand colors (red/gold/green stay identical
   for brand consistency), only the neutral surface/text scale flips.
   Applied via [data-theme="light"] on <html>, toggled by the header
   theme selector; "System" mode sets this attribute automatically
   based on prefers-color-scheme and stays in sync if the OS changes. */
html[data-theme="light"]{
  --bg:#F5F5F3;
  --panel:#FFFFFF;
  --panel-2:#F0F0EE;
  --border:#DDDDDA;
  --text:#16161A;
  --text-dim:#6B6B70;
}
html[data-theme="light"] body{-webkit-font-smoothing:auto;}

*{margin:0;padding:0;box-sizing:border-box;}
/* [hidden] must always win — without this, elements with their own
   `display` rule (like .fws-shell{display:grid}) can out-cascade the
   browser's default [hidden]{display:none}, since both have equal
   specificity and author CSS loads after the UA stylesheet. */
[hidden]{display:none !important;}
body{background:var(--bg);color:var(--text);font-family:'Inter',system-ui,-apple-system,sans-serif;-webkit-font-smoothing:antialiased;}

/* Custom scrollbars everywhere — thin and dark instead of the
   browser's default thick/white ones, which clashed badly with the
   dark theme on scrollable panels (Watchlist, Recent Week History,
   Market Explorer results, etc). */
::-webkit-scrollbar{width:7px;height:7px;}
::-webkit-scrollbar-track{background:transparent;}
::-webkit-scrollbar-thumb{background:var(--border);border-radius:10px;}
::-webkit-scrollbar-thumb:hover{background:var(--gold);}
*{scrollbar-width:thin;scrollbar-color:var(--border) transparent;}

/* Core OID color utilities — used platform-wide (Dashboard, Business,
   Sports, Membership, everywhere). These went missing during an
   earlier edit; restoring them fixes every "text still shows white"
   report across the whole app, not just the Dashboard hero. */
.c-red{color:var(--red);}
.c-gold{color:var(--gold);}
.c-green{color:var(--green);}

/* ===== HEADER ===== */
.fws-header{
  /* FIX (2026-08-15): rebuilt from flex+flex-wrap to a genuine CSS
     Grid with named areas. flex-wrap (Round 6) reduced but did not
     eliminate overlap — user's screenshots confirmed collision
     persisted. Grid areas are structurally different: each zone
     (logo/mantra/utils) is assigned to an explicit, named region of
     the layout, which CANNOT overlap another named region by
     definition — there's no flex-math edge case where content can
     collide, because grid placement isn't computed from available
     remaining space the way flex-wrap is. At the width where all 3
     zones genuinely can't fit on one line, the grid switches to 3
     explicit stacked rows (one zone per row) rather than attempting
     a wrapped reflow that can still visually collide mid-transition.
  */
  display:grid;grid-template-columns:auto 1fr auto;grid-template-areas:"logo mantra utils";
  align-items:center;column-gap:20px;
  padding:14px 28px;border-bottom:1px solid var(--border);
  position:fixed;top:0;left:0;right:0;background:var(--bg);z-index:100;
}
/* Below 1450px, the 3-column single row genuinely doesn't have room
   for logo + mantra + the full utils zone (world clock + quote + 5
   buttons) together — switch to 3 explicit stacked rows instead of
   letting them compete for horizontal space at all. This threshold
   is wider than the old 1150px mantra-hide breakpoint on purpose:
   mantra now stays visible by stacking, rather than disappearing. */
@media(max-width:1449px){
  .fws-header{grid-template-columns:1fr;grid-template-areas:"logo" "mantra" "utils";row-gap:10px;padding:14px 20px;}
}
.header-logo{grid-area:logo;display:flex;align-items:baseline;gap:10px;min-width:0;flex-shrink:0;}
/* .hero-bg-echo-soft sets position:relative, which would silently
   break the header's fixed positioning (position is a single-value
   property) — restore fixed explicitly after the shared class applies.
   Also override overflow:hidden back to visible — the header's
   language/theme dropdown menus render below the header's own box
   and would otherwise be clipped invisible when opened. The ray-sweep
   layer (::after) relies on that clipping to look right, so it's
   hidden here; the glow layer (::before) doesn't need clipping and
   still shows normally. */
.fws-header.hero-bg-echo-soft{position:fixed;top:0;left:0;right:0;overflow:visible;}
.fws-header.hero-bg-echo-soft::after{display:none;}
.header-logo span{font-size:24px;font-weight:800;letter-spacing:1px;}
.logo-f{color:var(--red);} .logo-w{color:var(--gold);} .logo-s{color:var(--green);}
.logo-meta{display:flex;flex-direction:column;line-height:1.2;margin-left:4px;}
.logo-sub{font-size:10.5px;font-weight:700;letter-spacing:2px;color:var(--text-dim);}
.logo-tag{font-size:8.5px;letter-spacing:1.5px;color:#5A5A60;}
.header-mantra{grid-area:mantra;display:flex;align-items:center;justify-content:center;gap:20px;font-size:12px;color:var(--text-dim);transition:opacity .3s ease;flex-wrap:wrap;min-width:0;}
.mantra-item{display:flex;align-items:center;gap:6px;white-space:nowrap;}
.mantra-item i{font-size:12px;}
.mantra-item strong{font-weight:800;}
/* header-mantra no longer force-hidden at 1150px (Round 6 removed
   this once already per an earlier explicit request that it stay
   visible) — grid stacking above handles narrow widths instead. */
/* FIX (2026-08-15): flex-wrap added here too — header-utils on its
   own (world-clock + daily-motivation + lang/theme/share/notif/avatar
   buttons) is a lot of non-shrinking content; without its own wrap
   safety net it could still overflow/collide even after the header's
   own wrap kicks in. */
.header-utils{grid-area:utils;display:flex;align-items:center;justify-content:flex-end;gap:10px;flex-wrap:wrap;min-width:0;}
@media(max-width:1449px){ .header-utils{justify-content:center;} }

.world-clock{
  display:flex;flex-direction:column;gap:5px;background:var(--panel-2);border:1px solid var(--border);
  padding:7px 14px;border-radius:10px;font-size:11px;color:var(--text-dim);
}
.wc-row{display:flex;align-items:center;gap:12px;}
.wc-item{display:flex;align-items:center;gap:5px;white-space:nowrap;}
.wc-item i{font-size:10px;color:var(--gold);}
.wc-item strong{color:var(--text);font-weight:700;}
.wc-sessions{display:flex;gap:10px;font-size:9.5px;}
.wc-session{display:flex;align-items:center;gap:4px;white-space:nowrap;}
.wc-session-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;}
.wc-session-dot.session-open{background:var(--green);box-shadow:0 0 5px var(--green);}
.wc-session-dot.session-soon{background:var(--gold);box-shadow:0 0 5px var(--gold);}
.wc-session-dot.session-closed{background:#4A4A50;}

.daily-motivation{font-size:11px;color:var(--text-dim);font-style:italic;white-space:nowrap;transition:opacity .3s ease;}

.header-lang-select .util-btn{position:relative;}
.header-lang-select .custom-select-list{right:0;left:auto;width:150px;}

.notif-btn{position:relative;}
.notif-count{
  position:absolute;top:-5px;right:-5px;background:var(--red);color:#fff;
  font-size:9px;font-weight:800;width:16px;height:16px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;border:2px solid var(--bg);
}

@media(max-width:1150px){ .daily-motivation{display:none;} }
@media(max-width:1150px){ .world-clock{display:none;} }

.util-btn{background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:8px 13px;border-radius:10px;font-size:12.5px;cursor:pointer;display:flex;align-items:center;gap:6px;}
.util-btn:hover{border-color:var(--gold);}
.avatar-btn{width:36px;height:36px;border-radius:50%;background:var(--panel-2);border:1px solid var(--gold);color:var(--text);cursor:pointer;position:relative;}
.avatar-status-dot{position:absolute;bottom:-1px;right:-1px;width:11px;height:11px;border-radius:50%;border:2px solid var(--bg);}
.avatar-status-dot.on{background:var(--green);}
.avatar-status-dot.off{background:#6a6a6e;}

/* ===== IDENTITY STRIP ===== */
.identity-strip{
  display:flex;gap:0;border-bottom:1px solid var(--border);
  background:var(--panel);position:fixed;top:var(--header-height, 65px);left:0;right:0;z-index:95;
  flex-wrap:wrap;
}
.identity-item{
  flex:1 1 0;min-width:200px;background:none;border:none;border-right:1px solid var(--border);
  color:var(--text-dim);padding:11px 18px;display:flex;align-items:center;gap:9px;
  cursor:pointer;font-size:12.5px;transition:background .15s;justify-content:flex-start;
}
.identity-item:last-of-type{border-right:none;}
.identity-item:hover{background:var(--panel-2);}
.id-dot{width:7px;height:7px;border-radius:50%;background:#4A4A50;flex-shrink:0;}
.id-text{display:flex;flex-direction:column;gap:1px;}
.id-name{font-weight:700;color:var(--text);white-space:nowrap;font-size:13px;}
.id-name sup{font-size:8px;}
.id-role{color:var(--text-dim);white-space:nowrap;font-weight:700;font-size:10px;letter-spacing:.5px;text-transform:uppercase;}
.identity-item[data-system="tradingview"] .id-role{color:var(--red);}
.identity-item[data-system="brain"] .id-role{color:var(--gold);}
.identity-item[data-system="mentor"] .id-role{color:var(--green);}
.id-status{
  margin-left:auto;font-size:10.5px;font-weight:700;letter-spacing:.5px;
  color:var(--text-dim);white-space:nowrap;text-transform:uppercase;
}

/* Permanent per-system identity colors (design language: TradingView stays
   neutral always; Brain is always yellow-tinted; Mentor always green-tinted.
   "is-active" only intensifies glow — it never changes WHICH color a system is. */
.identity-item[data-system="tradingview"] i:not(.id-caret){color:#9AA0A8;}
.identity-item[data-system="brain"] i:not(.id-caret){color:var(--gold);}
.identity-item[data-system="mentor"] i:not(.id-caret){color:var(--green);}

.identity-item[data-system="tradingview"].is-active .id-dot{background:var(--green);box-shadow:0 0 6px var(--green);}
.identity-item[data-system="tradingview"].is-active .id-status{color:var(--green);}

.identity-item[data-system="brain"].is-active .id-dot{background:var(--gold);box-shadow:0 0 8px var(--gold);}
.identity-item[data-system="brain"].is-active .id-status{color:var(--gold);}
.identity-item[data-system="brain"].is-active i:not(.id-caret){text-shadow:0 0 10px rgba(201,166,70,.5);}

.identity-item[data-system="mentor"].is-active .id-dot{background:var(--green);box-shadow:0 0 8px var(--green);}
.identity-item[data-system="mentor"].is-active .id-status{color:var(--green);}
.identity-item[data-system="mentor"].is-active i:not(.id-caret){text-shadow:0 0 10px rgba(60,184,120,.5);}

.identity-item.is-supporting .id-status{color:var(--text)!important;}
.id-caret{font-size:9px;color:#5A5A60;margin-left:6px;transition:transform .15s;}
.identity-item[aria-expanded="true"] .id-caret{transform:rotate(180deg);}
.identity-explain{
  width:100%;padding:12px 20px;font-size:12.5px;color:var(--text-dim);
  background:var(--panel-2);border-top:1px solid var(--border);line-height:1.5;
}
.identity-explain strong{color:var(--gold);}


/* ===== SHELL / SIDEBAR ===== */
/* FIX (2026-08-14): .fws-shell no longer needs grid-template-columns
   to reserve sidebar space — now that .fws-sidebar is position:fixed,
   it's removed from normal document flow entirely (fixed elements
   never participate in grid/flex layout), so the old 230px grid
   column would otherwise sit empty. Sidebar spacing is now handled
   directly via .fws-main's margin-left instead. padding-top here
   clears the fixed header+identity-strip (110px total) so content
   doesn't start underneath them. */
/* FIX (2026-08-14): replaced the hardcoded 110px with a CSS variable
   set precisely by JS (measureFixedHeaderHeight() in shell.js) —
   user confirmed the OID status row was still clipped under the
   fixed header, meaning the real combined rendered height of header
   + identity-strip genuinely isn't exactly 110px (font metrics,
   icon sizing, and content wrapping all affect this in ways a
   hardcoded guess can't reliably match). Measuring the real DOM
   height on load removes the guesswork entirely. 110px stays as a
   fallback for the brief moment before JS runs. */
.fws-shell{padding-top:var(--fixed-top-height, 110px);min-height:100vh;}
.fws-sidebar{
  border-right:1px solid var(--border);padding:18px 12px;display:flex;flex-direction:column;gap:2px;
  /* FIX (2026-08-14): switched from position:sticky to position:fixed
     — sticky was confirmed NOT holding on scroll (user screenshot
     showed nav already scrolled out of view while still near the top
     of page content). Fixed pins directly to the viewport regardless
     of any parent container's properties, the same fix applied to
     the header above. */
  position:fixed;top:var(--fixed-top-height, 110px);left:0;width:230px;height:calc(100vh - var(--fixed-top-height, 110px));overflow-y:auto;z-index:90;
  background:var(--bg);transition:width .2s ease;
}
/* FIX (2026-08-14): sidebar collapse toggle — desktop only (mobile/
   tablet have their own off-canvas drawer + close button already).
   Collapsed state reuses the exact icon-only nav styling already
   built for the small-laptop breakpoint, rather than a second
   pattern. */
.sidebar-collapse-toggle{
  display:none;background:none;border:1px solid var(--border);color:var(--text-dim);
  width:26px;height:26px;border-radius:7px;cursor:pointer;align-self:flex-end;margin-bottom:10px;
}
@media(min-width:1151px){ .sidebar-collapse-toggle{display:flex;align-items:center;justify-content:center;} }
body.sidebar-collapsed .fws-sidebar{width:68px;padding:18px 8px;align-items:center;}
body.sidebar-collapsed .fws-sidebar .nav-item{justify-content:center;padding:10px;font-size:0;gap:0;}
body.sidebar-collapsed .fws-sidebar .nav-item i{font-size:17px;}
body.sidebar-collapsed .fws-sidebar .sidebar-upgrade{display:none;}
body.sidebar-collapsed .fws-sidebar .sidebar-collapse-toggle{align-self:center;}
body.sidebar-collapsed .fws-main{margin-left:68px;}
.nav-item{
  display:flex;align-items:center;gap:11px;padding:10px 13px;border-radius:10px;
  color:var(--text-dim);text-decoration:none;font-size:13.5px;font-weight:500;position:relative;
}
.nav-item i:first-child{width:15px;text-align:center;}
.nav-item:hover{background:var(--panel-2);color:var(--text);}
.nav-item.active{background:var(--panel-2);color:var(--red);border-left:3px solid var(--red);padding-left:10px;}
.badge-new{background:var(--green);color:#04140B;font-size:9px;font-weight:800;padding:2px 6px;border-radius:6px;margin-left:auto;}
.nav-lock{margin-left:auto;font-size:10.5px;color:#5A5A60;}
.sidebar-upgrade{margin-top:auto;background:linear-gradient(160deg,#1E1806,var(--panel-2));border:1px solid var(--gold);border-radius:var(--radius);padding:15px;text-align:center;}
.sidebar-upgrade i{color:var(--gold);font-size:18px;margin-bottom:8px;}
.sidebar-upgrade p{font-size:11.5px;color:var(--text-dim);margin-bottom:11px;line-height:1.4;}
.btn-upgrade{width:100%;background:var(--red);color:#fff;border:none;padding:9px;border-radius:8px;font-weight:700;font-size:12.5px;cursor:pointer;}
.btn-upgrade:hover{filter:brightness(1.1);}

/* ===== MAIN / STUBS ===== */
/* FIX (2026-08-14): margin-left added to compensate for .fws-sidebar
   now being position:fixed (230px wide) — without this, main content
   would render underneath the fixed sidebar instead of beside it. */
.fws-main{padding:28px 36px;margin-left:230px;transition:margin-left .2s ease;}
.section-stub h2{font-size:22px;margin-bottom:10px;}
.section-stub p{color:var(--text-dim);font-size:14px;max-width:560px;line-height:1.6;}

/* ===== DASHBOARD ===== */
.card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);padding:18px;}
.card-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;gap:10px;flex-wrap:wrap;}
.ai-mentor-close-mobile{display:none;margin-left:auto;background:none;border:1px solid var(--border);color:var(--text-dim);width:26px;height:26px;border-radius:7px;cursor:pointer;flex-shrink:0;}
.ai-mentor-reopen-pill{display:none;background:var(--panel-2);border:1px solid var(--gold);color:var(--gold);padding:10px 16px;border-radius:10px;font-size:12.5px;font-weight:600;cursor:pointer;width:100%;align-items:center;justify-content:center;gap:8px;margin-bottom:14px;}
.card-head h4{font-size:11.5px;letter-spacing:1.3px;color:var(--text-dim);display:flex;align-items:center;gap:7px;}
.card-head h4 i{color:var(--gold);}

/* FIX (2026-08-24): Option A visual reorder — tradePanel displays
   above moToolbar without either block's actual DOM position
   changing. Both need explicit order values since default order is 0
   for everyone; without this, source order (moToolbar first) would
   still win visually despite the flex container. */
.mo-controls-order-wrap{display:flex;flex-direction:column;}
.mo-controls-order-wrap #moToolbar{order:1;}
.mo-controls-order-wrap #tradePanel{order:2;margin-top:14px;}

/* FIX (2026-08-24): compact "terminal control bar" restyle — scoped
   directly to #moToolbar since .mode-btn/.account-btn/.mkt-tab are
   confirmed used nowhere else on the page (verified via grep before
   scoping this way, so this can't have an unintended effect
   elsewhere). Smaller padding/font, tighter gaps — a professional,
   compact row rather than large individual buttons. */
#moToolbar{gap:10px;margin-bottom:12px;}
#moToolbar .mode-toggle{padding:3px;gap:4px;}
#moToolbar .mode-btn{padding:6px 10px;font-size:11.5px;gap:5px;}
#moToolbar .account-btn{padding:6px 10px;font-size:11.5px;}
#moToolbar .market-tabs{gap:4px;}
#moToolbar .mkt-tab{padding:6px 10px;font-size:11px;}

/* FIX (2026-08-24): Trading Controls collapsible toggle — collapsed
   by default per explicit instruction. State is made visually
   obvious via the ▸/▾ icon plus a label-text change (handled in JS),
   not just a subtle arrow alone, so users don't mistake "collapsed"
   for "removed." */
.trade-controls-toggle{
  width:100%;background:none;border:none;color:var(--text);cursor:pointer;
  display:flex;align-items:center;gap:8px;padding:4px 0;
  font-family:'Space Grotesk',sans-serif;font-size:15px;font-weight:700;
}
.trade-controls-toggle:hover{color:var(--gold);}
#tradeControlsToggleIcon{color:var(--gold);font-size:13px;transition:transform .15s ease;}
.mode-toggle{display:flex;gap:6px;background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:4px;}
/* FIX (2026-08-30): requested desktop layout - Auto/Manual (left),
   Demo/Real (middle), 8 Core Markets (right), all in one row within
   the same card. Order matches the existing HTML exactly, so this is
   purely a display change, no markup reordering needed. The existing
   max-width:768px rule below already stacks these back into a column
   on mobile/tablet - untouched, still applies correctly since it
   targets this same .dash-toolbar class. */
.dash-toolbar{display:flex;align-items:center;justify-content:space-between;gap:20px;flex-wrap:wrap;}
.mode-btn{
  background:none;border:1px solid transparent;color:var(--text-dim);padding:8px 14px;border-radius:8px;
  font-size:12.5px;font-weight:600;cursor:pointer;display:flex;align-items:center;gap:7px;
  transition:all .2s ease;
}
/* FIX (2026-08-11): Auto and Manual mode looked nearly identical when
   active — only Auto got a real color change, Manual's "active" state
   was barely different from inactive. Now each mode has its own
   unmistakable color, border, and glow when active, so it's instantly
   clear which one you're in without reading the label. */
.mode-btn.active[data-mode="auto"]{background:rgba(201,166,70,.15);color:var(--gold);border-color:var(--gold);box-shadow:0 0 12px rgba(201,166,70,.25);}
.mode-btn.active[data-mode="manual"]{background:rgba(60,184,120,.15);color:var(--green);border-color:var(--green);box-shadow:0 0 12px rgba(60,184,120,.25);}
.tier-chip{background:rgba(201,166,70,.15);color:var(--gold);font-size:9px;font-weight:800;padding:2px 7px;border-radius:20px;letter-spacing:.5px;}
.market-tabs{display:flex;gap:6px;flex-wrap:wrap;}
.mkt-tab{background:var(--panel);border:1px solid var(--border);color:var(--text-dim);padding:8px 14px;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;}
.mkt-tab.active{background:var(--gold);color:#0B0B0D;border-color:var(--gold);}
.mkt-tab.tab-loading{opacity:.65;}

.dash-grid{display:grid;grid-template-columns:205px 1fr 215px;gap:16px;margin-bottom:18px;}

.live-dot{color:var(--green);font-size:10.5px;font-weight:700;}
.ref-data-badge{
  color:var(--text-dim);font-size:9.5px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;
  background:var(--panel-2);padding:3px 9px;border-radius:10px;border:1px solid var(--border);
}
.dev-mode-badge{
  color:var(--gold);font-size:9px;font-weight:800;letter-spacing:.5px;text-transform:uppercase;
  background:rgba(201,166,70,.12);padding:4px 10px;border-radius:10px;border:1px solid rgba(201,166,70,.4);
  margin-left:auto;
}
.pulse-list{list-style:none;display:flex;flex-direction:column;gap:12px;}

/* Market Watchlist — expanded table (Symbol/Value/Change/Chg%/Open/High/Low/Prev) */
.wl-table-wrap{overflow-x:auto;margin-bottom:10px;}

/* Sideeq AI™ panel — 100% native, pure interpretation readout */
.sb-market-label{font-size:12.5px;color:var(--text-dim);margin-bottom:14px;}
.sb-market-label strong{color:var(--gold);font-weight:800;}
.sb-fields{list-style:none;display:flex;flex-direction:column;gap:11px;margin-bottom:14px;}
.sb-fields li{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--text-dim);}
.sb-fields li strong{font-size:12px;font-weight:700;text-align:right;}
.sb-updated{font-size:10.5px;color:var(--text-dim);border-top:1px solid var(--border);padding-top:12px;}
.sb-updated span{color:var(--text);font-weight:700;}

/* Chart now hosts TradingView's own Watchlist + Details panels
   internally, so it needs more vertical room than before. */
.chart-mount-tall{height:460px;}
.wl-table-scroll{max-height:420px;overflow-y:auto;}
.wl-table-scroll thead th{position:sticky;top:0;background:var(--panel);z-index:1;}
.wl-extra .wl-symbol{color:var(--text-dim);font-weight:700;}
.tv-attrib{color:var(--text-dim);opacity:.7;}
.wl-table{width:100%;border-collapse:collapse;font-size:11px;white-space:nowrap;}
.wl-table th{text-align:left;padding:8px 10px;color:var(--text-dim);font-size:9.5px;text-transform:uppercase;letter-spacing:.4px;border-bottom:1px solid var(--border);}
.wl-table td{padding:9px 10px;border-bottom:1px solid var(--border);color:var(--text-dim);}
.wl-table tr{cursor:pointer;transition:background .15s;}
.wl-table tr:hover{background:var(--panel-2);}
.wl-table tr.wl-active{background:rgba(201,166,70,.08);}
.wl-table tr.wl-active .wl-symbol{color:var(--gold);}
.wl-symbol{font-weight:800;color:var(--text);}
.wl-up{color:var(--green);}
.wl-down{color:var(--red);}
.pulse-list li{display:flex;justify-content:space-between;align-items:center;font-size:12.5px;padding:6px;border-radius:8px;}
.pulse-list li.wl-active{background:var(--panel-2);}
.pulse-list strong{display:block;font-size:12.5px;}
.pulse-list span{font-size:10.5px;color:var(--text-dim);}
.pulse-val{text-align:right;font-weight:600;font-size:12.5px;}
.pulse-val.up{color:var(--green);} .pulse-val.down{color:var(--red);}
.pulse-val small{display:block;font-weight:500;font-size:10px;}
.card-foot{margin-top:12px;font-size:10px;color:#5A5A60;}

.tf-toggle{display:flex;gap:4px;flex-wrap:wrap;}
.tf{background:none;border:1px solid var(--border);color:var(--text-dim);font-size:10.5px;padding:5px 9px;border-radius:6px;cursor:pointer;}
.tf.active{background:var(--gold);color:#0B0B0D;border-color:var(--gold);font-weight:700;}
.chart-mount{height:460px;border-radius:10px;overflow:hidden;background:var(--panel-2);margin-bottom:12px;position:relative;}
.chart-placeholder{color:#5A5A60;font-size:12px;}
.chart-legend{display:flex;gap:18px;font-size:11px;color:var(--text-dim);flex-wrap:wrap;}
.chart-legend i{margin-right:5px;}

/* Custom watchlist (2026-07-27) — see HTML comment above #fwsWatchlist
   for why this isn't TradingView's own widget. Sits alongside the
   chart, same height, own scroll if needed. */
/* FWS Chart Engine™ drawing toolbar (2026-07-27) */
.fws-draw-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:10px;flex-wrap:wrap;}
.draw-tool{background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);font-size:11px;font-weight:600;padding:7px 12px;border-radius:8px;cursor:pointer;display:flex;align-items:center;gap:6px;}
.draw-tool:hover{border-color:var(--gold);color:var(--text);}
.draw-tool.active{background:var(--gold);border-color:var(--gold);color:#0B0B0D;}
.draw-hint{font-size:10.5px;color:var(--text-dim);font-style:italic;}

/* HSB™ live reaction zone — filled band, not just two lines (revised
   2026-07-27). Absolutely positioned over the chart, top/height
   recomputed on every price update, pan/zoom, and resize since it
   isn't a native chart primitive. pointer-events:none so it never
   blocks chart interaction or the drawing tool's click handler. */
/* FIX (2026-08-22): HSB™ zone now reacts to the REAL calculated
   structure direction (SideeqAIEngine.calculateStructure — Bullish/
   Bearish/Consolidating/Transition/Awaiting Confirmation), not a
   fixed color. Base rule below is the neutral/observation state
   (gold) — used whenever structure isn't confirmed bullish or
   bearish specifically, never guessed. */
#hsbZoneBand{position:absolute;left:0;right:60px;pointer-events:none;background:rgba(201,166,70,.18);border-top:2px solid rgba(201,166,70,.7);border-bottom:2px solid rgba(201,166,70,.7);z-index:2;}
#hsbZoneBand .hsb-zone-label{position:absolute;left:8px;top:2px;font-size:9.5px;font-weight:700;color:var(--gold);letter-spacing:.3px;}
#hsbZoneBand.hsb-bullish{background:rgba(31,174,107,.18);border-top-color:rgba(31,174,107,.7);border-bottom-color:rgba(31,174,107,.7);}
#hsbZoneBand.hsb-bullish .hsb-zone-label{color:var(--green);}
#hsbZoneBand.hsb-bearish{background:rgba(214,69,69,.18);border-top-color:rgba(214,69,69,.7);border-bottom-color:rgba(214,69,69,.7);}
#hsbZoneBand.hsb-bearish .hsb-zone-label{color:var(--red);}

/* Live status bar (2026-07-28) — a running UTC clock (always visible,
   ticks every second) that switches to showing the hovered candle's
   OHLC + time while the crosshair is over the chart. Purely cosmetic/
   informational — never blocks chart interaction underneath it. */
.fws-chart-status-bar{
  position:absolute;left:8px;bottom:6px;z-index:3;pointer-events:none;
  font-size:10.5px;font-family:'Courier New',monospace;color:var(--text-dim);
  background:rgba(19,19,22,.75);padding:3px 9px;border-radius:6px;letter-spacing:.3px;
}
.fws-chart-status-bar .ohlc-o{color:var(--text-dim);}
.fws-chart-status-bar .ohlc-up{color:#1FAE6B;}
.fws-chart-status-bar .ohlc-down{color:#D64545;}

.symbol-info-mount{margin-bottom:10px;border-radius:10px;overflow:hidden;min-height:70px;background:var(--panel-2);}

.stale-data-banner{
  display:flex;align-items:center;gap:9px;background:rgba(201,166,70,.12);border:1px solid rgba(201,166,70,.4);
  color:var(--gold);font-size:12px;font-weight:600;padding:9px 14px;border-radius:8px;margin-bottom:10px;
}

#fwsChartLoadingOverlay{
  position:absolute;inset:0;z-index:10;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  background:rgba(19,19,22,.92);border-radius:10px;
}
.chart-loading-spinner{width:32px;height:32px;border-radius:50%;border:3px solid var(--border);border-top-color:var(--gold);animation:fwsSpin .8s linear infinite;}
@keyframes fwsSpin{to{transform:rotate(360deg);}}
.chart-loading-title{font-size:14px;font-weight:700;color:var(--text);}
.chart-loading-step{font-size:12px;color:var(--text-dim);}

.chart-workspace-row{display:flex;gap:10px;margin-bottom:12px;}
.chart-workspace-row .chart-mount{flex:1;min-width:0;margin-bottom:0;}
.fws-watchlist{width:148px;flex-shrink:0;height:460px;overflow-y:auto;background:var(--panel-2);border-radius:10px;padding:6px;}
.wl-row{display:flex;flex-direction:column;gap:2px;padding:8px 10px;border-radius:8px;cursor:pointer;margin-bottom:4px;border:1px solid transparent;}
.wl-row:hover{background:var(--panel);}
.wl-row.active{background:var(--panel);border-color:var(--gold);}
.wl-symbol{font-size:11px;font-weight:700;letter-spacing:.3px;color:var(--text);}
.wl-price{font-size:12.5px;font-weight:600;}
.wl-meta{font-size:9.5px;color:var(--text-dim);}

.tag-brain{display:inline-block;background:rgba(201,166,70,.12);color:var(--gold);font-size:10.5px;font-weight:700;padding:3px 9px;border-radius:20px;}
.ai-reading-card h4{font-size:15px;margin:10px 0 12px;}
.reading-list{list-style:none;display:flex;flex-direction:column;gap:8px;margin-bottom:14px;}
.reading-list li{display:flex;justify-content:space-between;font-size:12px;color:var(--text-dim);}
.reading-list strong{font-size:12px;}
.ai-note{font-size:11.5px;color:var(--text-dim);line-height:1.55;margin-bottom:14px;}
.ai-note i{color:var(--gold);margin-right:4px;}
.btn-outline{width:100%;background:none;border:1px solid var(--border);color:var(--text);padding:10px;border-radius:8px;font-size:12px;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:7px;}
.btn-outline:hover{border-color:var(--gold);}

.hist-card{margin-bottom:18px;}

/* ===== MARKET OVERVIEW — Phase 1 additions ===== */
.current-market-strip{
  display:flex;gap:22px;flex-wrap:wrap;align-items:center;
  background:var(--panel);border:1px solid var(--border);border-radius:12px;
  padding:12px 20px;margin-bottom:16px;font-size:12px;color:var(--text-dim);
}
.cms-item{display:flex;align-items:center;gap:7px;white-space:nowrap;}
.cms-item strong{font-size:12.5px;}

.ai-conclusion{font-size:12px;color:var(--text-dim);line-height:1.55;margin-bottom:12px;}
.ai-conclusion strong{color:var(--text);}

.why-toggle{
  background:none;border:1px solid var(--border);color:var(--gold);
  padding:7px 13px;border-radius:8px;font-size:11.5px;cursor:pointer;
  display:flex;align-items:center;gap:6px;margin-bottom:12px;
}
.why-toggle i{font-size:9px;transition:transform .2s;}
.why-toggle.open i{transform:rotate(180deg);}
.why-reasoning{background:var(--panel-2);border-radius:9px;padding:12px 14px;margin-bottom:14px;}
.why-reasoning p{font-size:11.5px;color:var(--text-dim);line-height:1.55;}

.ai-recommends{border-top:1px solid var(--border);margin-top:14px;padding-top:14px;}

/* FWS Workspace Engine™ (2026-07-27) */
.workspace-engine-card{margin-bottom:16px;}
.we-grid{display:grid;grid-template-columns:1fr 1fr;gap:20px;}
.we-col h5{font-size:11px;font-weight:700;letter-spacing:.4px;color:var(--text-dim);text-transform:uppercase;margin:0 0 10px;display:flex;align-items:center;justify-content:space-between;gap:10px;}
.btn-snapshot{font-size:10.5px;padding:6px 10px;width:auto;}
.we-notes-list,.we-snapshot-list{display:flex;flex-direction:column;gap:8px;max-height:220px;overflow-y:auto;margin-bottom:10px;}
.we-empty{font-size:11.5px;color:var(--text-dim);font-style:italic;padding:6px 0;}
.we-note{background:var(--panel-2);border-radius:8px;padding:9px 11px;position:relative;}
.we-note p{font-size:12px;line-height:1.5;margin:0 22px 4px 0;}
.we-note-meta{font-size:9.5px;color:var(--text-dim);}
.we-note-delete{position:absolute;top:8px;right:8px;background:none;border:none;color:var(--text-dim);cursor:pointer;font-size:11px;padding:2px 5px;}
.we-note-delete:hover{color:var(--red);}
.we-note-input-row{display:flex;gap:8px;}
.we-note-input-row input{flex:1;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:8px 11px;font-size:12px;color:var(--text);}
.we-note-input-row button{background:var(--gold);color:#0B0B0D;border:none;border-radius:8px;padding:0 13px;cursor:pointer;font-weight:700;}
.we-snapshot{background:var(--panel-2);border-radius:8px;padding:10px 12px;font-size:11.5px;}
.we-snapshot-head{display:flex;justify-content:space-between;font-size:10px;color:var(--text-dim);margin-bottom:6px;}
.we-snapshot-row{display:flex;justify-content:space-between;padding:1px 0;}
.we-snapshot-row span:first-child{color:var(--text-dim);}
@media(max-width:700px){ .we-grid{grid-template-columns:1fr;} }

/* Community module (2026-07-28) */
.community-philosophy{text-align:center;padding:22px 16px;border-radius:var(--radius);margin-bottom:16px;}
.community-philosophy h2{margin-bottom:6px;}
.community-stats-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:14px 0;}
.community-stat{background:var(--panel-2);border-radius:10px;padding:14px 8px;text-align:center;}
.community-stat strong{display:block;font-size:22px;color:var(--gold);}
.community-stat span{font-size:10.5px;color:var(--text-dim);}
.founder-message-body{display:flex;gap:16px;align-items:flex-start;}
.founder-photo-placeholder{
  flex-shrink:0;width:64px;height:64px;border-radius:50%;background:var(--panel-2);
  display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--text-dim);border:2px solid var(--gold);
}
.announcement-list{display:flex;flex-direction:column;gap:12px;}
.announcement-item{background:var(--panel-2);border-radius:10px;padding:12px 14px;}
.announcement-pin{display:inline-flex;align-items:center;gap:5px;font-size:10px;font-weight:700;color:var(--gold);margin-bottom:6px;}
.discussion-room-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;}
.discussion-room{
  background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:14px 8px;
  display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--text);font-size:11.5px;font-weight:600;cursor:pointer;
}
.discussion-room:hover{border-color:var(--gold);}
.discussion-room i{font-size:17px;color:var(--gold);}
.rank-ladder{display:flex;justify-content:space-between;gap:6px;margin:14px 0 8px;flex-wrap:wrap;}
.rank-step{flex:1;min-width:80px;background:var(--panel-2);border-radius:10px;padding:12px 6px;text-align:center;}
.rank-step i{display:block;font-size:16px;color:var(--gold);margin-bottom:6px;}
.rank-step span{font-size:10.5px;font-weight:700;}
.leaderboard-list{display:flex;flex-direction:column;gap:6px;margin-top:12px;}
.leaderboard-row{display:grid;grid-template-columns:32px 1fr auto auto;gap:10px;align-items:center;background:var(--panel-2);border-radius:8px;padding:9px 12px;font-size:12px;}
.leaderboard-row .lb-rank{color:var(--gold);font-weight:700;}
.leaderboard-row .lb-level{color:var(--text-dim);font-size:10.5px;}
.leaderboard-row .lb-xp{color:var(--green);font-weight:700;font-size:11px;}
.activity-item{padding:8px 4px;font-size:12px;color:var(--text-dim);border-bottom:1px solid var(--border);}
.activity-item:last-child{border-bottom:none;}
.activity-item i{color:var(--gold);margin-right:8px;font-size:8px;}
.room-panel{background:var(--panel-2);border-radius:10px;padding:14px;margin-top:10px;}
.room-posts{display:flex;flex-direction:column;gap:8px;margin-bottom:12px;max-height:220px;overflow-y:auto;}
.room-post{background:var(--panel);border-radius:8px;padding:9px 11px;}
.room-post-author{font-size:10.5px;font-weight:700;color:var(--gold);}
.room-post p{font-size:12px;margin-top:3px;}
.room-post-form{display:flex;gap:8px;}
.room-post-form input{flex:1;background:var(--panel);border:1px solid var(--border);border-radius:8px;padding:8px 11px;font-size:12px;color:var(--text);}
.profile-modal-card{width:420px;max-width:90vw;}
.profile-header{display:flex;gap:14px;align-items:center;margin-bottom:16px;}
.profile-avatar{width:64px;height:64px;border-radius:50%;background:var(--panel-2);display:flex;align-items:center;justify-content:center;font-size:24px;color:var(--text-dim);border:2px solid var(--gold);flex-shrink:0;}
.profile-header h3{margin-bottom:2px;}
.profile-header .profile-country{font-size:11.5px;color:var(--text-dim);}
.profile-stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:16px;}
.profile-stat-row .community-stat strong{font-size:17px;}
.profile-field{margin-bottom:12px;}
.profile-field label{display:block;font-size:10px;font-weight:700;color:var(--text-dim);text-transform:uppercase;letter-spacing:.4px;margin-bottom:5px;}
.profile-field p{font-size:12.5px;}
.profile-field input,.profile-field textarea{width:100%;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:8px 11px;font-size:12.5px;color:var(--text);font-family:inherit;}
.profile-field textarea{resize:vertical;min-height:60px;}
.profile-actions{display:flex;gap:8px;margin-top:14px;}

/* Certificates module (2026-07-30) */
.progress-ring-row{display:flex;gap:20px;align-items:center;margin-bottom:12px;flex-wrap:wrap;}
.progress-ring-wrap{display:flex;flex-direction:column;align-items:center;gap:8px;flex-shrink:0;}
.progress-ring{
  width:84px;height:84px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:conic-gradient(var(--gold) calc(var(--pct)*1%), var(--panel-2) 0);font-weight:700;font-size:16px;
}
.progress-ring::before{content:'';position:absolute;}
.progress-ring span{background:var(--panel);width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;}
.progress-ring-label{font-size:10px;color:var(--text-dim);text-align:center;}
.xp-bar-track{background:var(--panel-2);border-radius:20px;height:10px;overflow:hidden;margin-top:8px;}
.xp-bar-track.small{height:6px;flex:1;margin:0;}
.xp-bar-fill{background:linear-gradient(90deg,var(--gold),#E8C868);height:100%;border-radius:20px;transition:width .4s;}
.oid-journey-row{display:flex;gap:8px;margin:12px 0;flex-wrap:wrap;}
.oid-journey-step{flex:1;min-width:80px;background:var(--panel-2);border-radius:10px;padding:14px 8px;text-align:center;opacity:.55;}
.oid-journey-step[data-status="done"]{opacity:1;border:1px solid var(--green);}
.oid-journey-step[data-status="active"]{opacity:1;border:1px solid var(--gold);}
.oid-journey-step i{display:block;font-size:16px;color:var(--gold);margin-bottom:6px;}
.oid-journey-step span{font-size:10.5px;font-weight:700;}
.methodology-list{display:flex;flex-direction:column;gap:10px;}
.methodology-row{display:grid;grid-template-columns:110px 1fr 36px;gap:10px;align-items:center;font-size:11.5px;}
.methodology-pct{color:var(--text-dim);text-align:right;font-size:10.5px;}
.cert-card{background:var(--panel-2);border-radius:12px;padding:16px;margin-bottom:10px;border:1px solid var(--border);}
.cert-card.locked{opacity:.6;}
.cert-card-head{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;}
.cert-card-head h5{font-size:13px;}
.cert-verify-ok{background:rgba(31,174,107,.12);border:1px solid rgba(31,174,107,.4);border-radius:8px;padding:12px;font-size:12px;}
.cert-verify-fail{background:rgba(214,69,69,.12);border:1px solid rgba(214,69,69,.4);border-radius:8px;padding:12px;font-size:12px;color:var(--red);}
.cert-preview{background:linear-gradient(145deg,#0B0B0D,#1a1a1e);border:2px solid var(--gold);border-radius:14px;padding:28px 20px;text-align:center;}
.cert-preview-logo{font-size:22px;font-weight:800;color:var(--gold);letter-spacing:2px;margin-bottom:10px;}
.cert-preview-title{font-size:11px;color:var(--text-dim);text-transform:uppercase;letter-spacing:1px;}
.cert-preview-name{font-size:19px;font-weight:700;margin:10px 0 4px;color:var(--text);}
.cert-preview-course{font-size:10.5px;color:var(--text-dim);}
.cert-preview-course-name{font-size:15px;font-weight:700;color:var(--gold);margin:4px 0 16px;}
.cert-preview-footer{display:flex;justify-content:space-between;font-size:9px;color:var(--text-dim);border-top:1px solid var(--border);padding-top:10px;flex-wrap:wrap;gap:6px;}
.member-id-card{display:flex;gap:16px;align-items:center;}
.member-id-info h3{margin-bottom:4px;}
.member-id-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:8px;}
.community-stat-chip{background:var(--panel-2);border:1px solid var(--border);border-radius:20px;padding:4px 12px;font-size:10.5px;font-weight:600;color:var(--gold);}
.cert-preview{position:relative;}
.cert-preview-seal{position:absolute;top:14px;right:16px;width:36px;height:36px;border-radius:50%;border:2px solid var(--gold);display:flex;align-items:center;justify-content:center;color:var(--gold);font-size:14px;opacity:.7;}
.cert-preview-qr{margin:10px auto 14px;width:44px;height:44px;border:1px dashed var(--border);border-radius:6px;display:flex;align-items:center;justify-content:center;color:var(--text-dim);font-size:18px;}
.lesson-content-body{font-size:13px;line-height:1.7;color:var(--text);white-space:pre-line;margin:14px 0;max-height:320px;overflow-y:auto;padding-right:6px;}
.lesson-objectives{list-style:none;display:flex;flex-direction:column;gap:6px;margin:10px 0;}
.lesson-objectives li{font-size:12px;color:var(--text-dim);padding-left:18px;position:relative;}
.lesson-objectives li::before{content:'✓';position:absolute;left:0;color:var(--green);font-weight:700;}
.edu-course-card{background:var(--panel-2);border:1px solid var(--border);border-radius:12px;padding:16px;margin-bottom:10px;cursor:pointer;transition:border-color .2s;}
.edu-course-card:hover{border-color:var(--gold);}
.edu-course-card h5{font-size:13.5px;margin-bottom:4px;}
.edu-course-card p{font-size:11.5px;color:var(--text-dim);}
@media(max-width:700px){ .community-stats-row{grid-template-columns:repeat(2,1fr);} .discussion-room-grid{grid-template-columns:repeat(2,1fr);} .rank-ladder{flex-direction:column;} .founder-message-body{flex-direction:column;align-items:center;text-align:center;} .leaderboard-row{grid-template-columns:24px 1fr auto;} .leaderboard-row .lb-level{display:none;} }

.mo-secondary-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px;}

.account-btns{display:flex;gap:8px;}
.account-btn{
  display:flex;align-items:center;gap:6px;padding:8px 14px;border-radius:8px;font-size:11px;font-weight:700;
  text-decoration:none;border:1px solid var(--border);white-space:nowrap;
}
.account-btn i{font-size:7px;}
.account-demo{color:var(--text-dim);}
.account-demo i{color:var(--text-dim);}
.account-real{color:var(--green);border-color:rgba(60,184,120,.35);}
.account-real i{color:var(--green);}

.fin-cal-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px;}
.fin-cal-tab{
  background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);
  padding:7px 12px;border-radius:8px;font-size:11px;cursor:pointer;display:flex;align-items:center;gap:6px;
}
.fin-cal-tab.active{background:var(--gold);color:#0B0B0D;border-color:var(--gold);font-weight:700;}
.soon-badge{background:rgba(201,166,70,.2);color:var(--gold);font-size:8px;padding:2px 6px;border-radius:8px;font-weight:800;text-transform:uppercase;}
.fin-cal-tab.active .soon-badge{background:rgba(11,11,13,.25);color:#0B0B0D;}
.fin-cal-soon{text-align:center;padding:36px 20px;color:var(--text-dim);}
.fin-cal-soon i{font-size:22px;color:var(--gold);margin-bottom:12px;display:block;}
.fin-cal-soon p{font-size:12px;max-width:480px;margin:0 auto;line-height:1.6;}

/* FWS Core Markets Intelligence — native educational table */
.fws-markets-table-wrap{overflow-x:auto;margin-bottom:10px;}
.fws-markets-table{width:100%;border-collapse:collapse;font-size:11.5px;white-space:nowrap;}
.fws-markets-table th{
  text-align:left;padding:9px 12px;color:var(--text-dim);font-size:10px;text-transform:uppercase;
  letter-spacing:.5px;border-bottom:1px solid var(--border);
}
.fws-markets-table td{padding:10px 12px;border-bottom:1px solid var(--border);color:var(--text);}
.fws-cell-symbol{font-weight:800;}
.fws-cell-insight{white-space:normal;min-width:260px;color:var(--text-dim);font-size:11px;}
.fws-market-row{cursor:pointer;transition:background .15s;}
.fws-market-row:hover{background:var(--panel-2);}
.fws-market-row.fws-row-active{background:rgba(201,166,70,.08);}
.fws-market-row.fws-row-active .fws-cell-symbol{color:var(--gold);}

/* Status dot icons for AI Intelligence rows */
.reading-list-dots li span{display:flex;align-items:center;gap:8px;}
.status-dot{width:8px;height:8px;border-radius:50%;flex-shrink:0;display:inline-block;}
.status-dot.dot-green{background:var(--green);box-shadow:0 0 5px var(--green);}
.status-dot.dot-gold{background:var(--gold);box-shadow:0 0 5px var(--gold);}
.status-dot.dot-orange{background:#E8804A;box-shadow:0 0 5px #E8804A;}

/* RWD active step glows/pulses gently */
.rwd-step.rwd-pending{animation:rwdPulse 2.2s ease-in-out infinite;}
@keyframes rwdPulse{
  0%,100%{box-shadow:0 0 0 rgba(201,166,70,0);}
  50%{box-shadow:0 0 16px rgba(201,166,70,.5);}
}

/* Asset (market tab) buttons glow softly when selected */
.mkt-tab.active{box-shadow:0 0 14px rgba(201,166,70,.4);}

.ai-mentor-actions{display:flex;gap:10px;}
.ai-mentor-actions .btn-outline{flex:1;}
@media(max-width:500px){ .ai-mentor-actions{flex-direction:column;} }

.chart-head-controls{display:flex;align-items:center;gap:10px;}
.focus-mode-btn{
  background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);
  width:34px;height:34px;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;
}
.focus-mode-btn:hover{border-color:var(--gold);color:var(--gold);}

/* Focus Mode — hides everything except the chart, restores on exit */
/* Focus Mode — enlarges the WHOLE Market Overview into a spacious
   full-screen workspace. Only the left nav sidebar and the toolbar's
   mode/account controls hide (to reclaim width) — every section stays
   visible: chart, AI Intelligence, FWS Markets, Market Explorer, RWD,
   Checklist, Weekly Structure, Financial Calendar. Nothing disappears,
   it all just gets more room, like a dedicated dealing-desk screen. */
#marketOverviewStub.focus-mode #moToolbar .mode-toggle,
#marketOverviewStub.focus-mode #moToolbar .account-btns,
#marketOverviewStub.focus-mode #moToolbar .market-tabs{display:none;}
#marketOverviewStub.focus-mode .chart-mount{height:640px;}
#marketOverviewStub.focus-mode .fws-main{padding:32px 48px;margin-left:0;}
.fws-shell:has(#marketOverviewStub.focus-mode) .fws-sidebar{display:none;}

/* Blur+unlock preview — shows real value before asking users to pay */
.locked-panel{position:relative;}
.locked-preview-blur{filter:blur(5px);opacity:.5;pointer-events:none;user-select:none;}
.locked-overlay{
  position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  padding:20px;text-align:center;background:rgba(11,11,13,.55);border-radius:var(--radius);
}
/* Demo login state (see initAuthGate/applyAuthState in shell.js) —
   once logged in, every gated preview unblurs and its lock overlay
   disappears, matching the real production behavior this stands in for. */
body.fws-logged-in .locked-preview-blur{filter:none;opacity:1;pointer-events:auto;user-select:auto;}
body.fws-logged-in .locked-overlay{display:none;}
body.fws-logged-in .nav-lock{display:none;}

.rwd-steps{display:flex;gap:10px;margin-bottom:12px;}
.rwd-step{
  flex:1;display:flex;flex-direction:column;align-items:center;gap:6px;
  background:var(--panel-2);border-radius:10px;padding:12px 8px;font-size:11px;font-weight:700;letter-spacing:.5px;
}
.rwd-step i{font-size:16px;}
.rwd-step.rwd-done{color:var(--green);}
.rwd-step.rwd-done i{color:var(--green);}
.rwd-step.rwd-pending{color:var(--gold);}
.rwd-step.rwd-pending i{color:var(--gold);}
.rwd-current{font-size:12.5px;color:var(--text-dim);}

.mo-checklist{list-style:none;display:flex;flex-direction:column;gap:11px;}
.mo-checklist li{display:flex;align-items:center;gap:10px;font-size:12.5px;color:var(--text-dim);}
.mo-checklist li i{font-size:14px;color:#4A4A50;}
.mo-checklist li.mo-check-done{color:var(--text);}
.mo-checklist li.mo-check-done i{color:var(--green);}

@media(max-width:700px){ .mo-secondary-grid{grid-template-columns:1fr;} .current-market-strip{gap:14px;} }
.hist-tabs{display:flex;gap:6px;flex-wrap:wrap;}
.hist-tab{background:none;border:1px solid var(--border);color:var(--text-dim);padding:7px 12px;border-radius:8px;font-size:11.5px;cursor:pointer;display:flex;align-items:center;gap:6px;}
.dev-reset-btn{margin-left:auto;color:var(--gold);border-color:rgba(201,166,70,.4);border-style:dashed;}
.dev-reset-btn:hover{background:rgba(201,166,70,.1);}
.hist-tab.active{background:var(--panel-2);color:var(--text);border-color:var(--gold);}
.hist-tab i{font-size:9.5px;color:#5A5A60;}
.hist-row{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--border);font-size:12.5px;color:var(--text-dim);}
.hist-row-clickable{cursor:pointer;padding-left:10px;padding-right:10px;margin:0 -10px;border-radius:6px;transition:background .15s;}
.hist-row-clickable:hover{background:var(--panel-2);}
.hist-row-clickable.hist-row-active{background:rgba(201,166,70,.1);}
.hist-row-clickable.hist-row-active span{color:var(--gold);font-weight:700;}

/* Weekly Structure Intelligence — full-width stacked rows, label on
   top, fuller description below, edge-to-edge instead of a narrow
   label/value pair. Room for real explanation, not just a short tag. */
.wsi-row{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:14px 0;border-bottom:1px solid var(--border);}
.wsi-row:last-of-type{border-bottom:none;}
.wsi-label{font-size:11px;color:var(--text-dim);text-transform:uppercase;letter-spacing:.5px;flex-shrink:0;}
.wsi-row strong{font-size:14px;font-weight:700;text-align:right;}

/* Weekly Structure Intelligence became a full-width standalone
   section (no longer confined to a 3-column grid cell) — without
   this, .hist-row's space-between stretches label/value to opposite
   edges of a very wide card, leaving a huge empty gap between them.
   Capping the row width keeps it reading like a compact data table. */
.hist-card .hist-panel .hist-row{max-width:640px;}
.hist-row strong{color:var(--text);}
.locked-panel{text-align:center;padding:26px 20px;}
.lock-icon{font-size:22px;color:var(--gold);margin-bottom:12px;display:block;}
.locked-panel p{font-size:12.5px;color:var(--text-dim);max-width:380px;margin:0 auto 16px;line-height:1.5;}
.locked-panel .btn-upgrade{width:auto;padding:10px 22px;}

.edu-disclaimer{font-size:11px;color:#5A5A60;text-align:center;padding-top:6px;}
.edu-disclaimer i{color:var(--gold);margin-right:5px;}

@media(max-width:1150px){ .dash-grid{grid-template-columns:1fr;} }

/* ===== AI HUB ===== */
.hub-grid{display:grid;grid-template-columns:1fr 280px;gap:16px;margin-bottom:18px;}
.hub-chat-card{display:flex;flex-direction:column;}
.lang-select{background:var(--panel-2);border:1px solid var(--border);color:var(--text);font-size:11.5px;padding:6px 10px;border-radius:8px;}

.topic-chips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px;}
.chip{background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);padding:8px 13px;border-radius:20px;font-size:12px;cursor:pointer;}
.chip:hover{border-color:var(--gold);color:var(--text);}

.chat-window{
  background:var(--panel-2);border-radius:10px;padding:16px;min-height:520px;max-height:640px;
  overflow-y:auto;display:flex;flex-direction:column;gap:14px;margin-bottom:14px;
}
.chat-msg{max-width:80%;}
.chat-msg p{font-size:13px;line-height:1.55;margin:0 0 8px;}
.chat-msg p:last-child{margin-bottom:0;}
.msg-tag{display:block;font-size:10px;font-weight:700;letter-spacing:.5px;color:var(--text-dim);margin-bottom:5px;}
.msg-body{padding:11px 14px;border-radius:14px;}
.msg-ai{align-self:flex-start;}
.msg-ai .msg-body{background:var(--panel);border:1px solid var(--border);border-top-left-radius:4px;}
.msg-ai .msg-tag{color:var(--green);}
/* User bubble matches the AI bubble's dark background + light text —
   previously a solid bright-gold fill with dark text, which reads as
   visually "softer"/less sharp than light-on-dark (a real contrast-
   direction perception effect, not a literal blur). Same visual
   weight now, distinguished by alignment + a gold accent border + tag
   color, closer to how ChatGPT differentiates bubbles subtly rather
   than with a jarring color block. */
.msg-user{align-self:flex-end;}
.msg-user .msg-body{background:var(--panel);border:1px solid var(--gold);border-top-right-radius:4px;color:var(--text);font-weight:400;}
.msg-user .msg-tag{text-align:right;color:var(--gold);}
.msg-thinking .msg-body{color:var(--text-dim);font-style:italic;}
/* AI reply markdown formatting (formatAIText) — headers/bold/lists
   rendered instead of showing raw #, ##, **, - symbols. */
.msg-body .ai-h1{font-size:15px;font-weight:800;color:var(--gold);margin:2px 0 8px;}
.msg-body .ai-h2{font-size:13.5px;font-weight:700;color:var(--green);margin:10px 0 6px;}
.msg-body .ai-h3{font-size:13px;font-weight:700;color:var(--text);margin:8px 0 5px;}
.msg-body .ai-h1:first-child,.msg-body .ai-h2:first-child,.msg-body .ai-h3:first-child{margin-top:0;}
.msg-body strong{color:var(--gold);font-weight:700;}
.msg-body .ai-list{margin:4px 0 8px;padding-left:18px;}
.msg-body .ai-list li{font-size:13px;line-height:1.55;margin-bottom:4px;}

.chat-input-row{display:flex;gap:10px;}
.chat-input-row input{
  flex:1;background:var(--panel-2);border:1px solid var(--border);color:var(--text);
  padding:12px 16px;border-radius:10px;font-size:13px;
}
.chat-input-row .btn-primary{width:46px;padding:0;display:flex;align-items:center;justify-content:center;}

.hub-progress-card .panel-block h4{font-size:11px;letter-spacing:1.3px;color:var(--text-dim);margin-bottom:12px;}
.tier-badge{font-size:13px;font-weight:700;margin-bottom:10px;}
.progress-track{background:var(--panel-2);border-radius:20px;height:7px;overflow:hidden;margin-bottom:8px;}
.progress-fill{background:linear-gradient(90deg,var(--red),var(--gold),var(--green));height:100%;border-radius:20px;}
.progress-label{font-size:11px;color:var(--text-dim);}
.next-lesson{display:flex;gap:12px;align-items:flex-start;}
.next-lesson i{color:var(--gold);font-size:16px;margin-top:2px;}
.next-lesson strong{display:block;font-size:12.5px;margin-bottom:3px;}
.next-lesson span{font-size:11px;color:var(--text-dim);}
.recent-topics{list-style:none;display:flex;flex-direction:column;gap:9px;}
.recent-topics li{font-size:12px;color:var(--text-dim);display:flex;align-items:center;gap:8px;}
.recent-topics i{font-size:10px;color:#5A5A60;}
.hub-progress-card hr{border:none;border-top:1px solid var(--border);margin:16px 0;}

@media(max-width:1150px){ .hub-grid{grid-template-columns:1fr;} }

/* ===== EDUCATION ===== */
.ladder-card{margin-bottom:20px;overflow-x:auto;}
.ladder{display:flex;align-items:center;min-width:640px;padding:8px 4px;}
.ladder-step{display:flex;flex-direction:column;align-items:center;gap:6px;flex-shrink:0;width:88px;text-align:center;}
.ladder-dot{width:14px;height:14px;border-radius:50%;background:var(--panel-2);border:2px solid var(--border);}
.ladder-step.current .ladder-dot{background:var(--gold);border-color:var(--gold);box-shadow:0 0 10px rgba(201,166,70,.6);}
.ladder-step strong{font-size:11.5px;}
.ladder-step.current strong{color:var(--gold);}
.ladder-step small{font-size:9.5px;color:var(--text-dim);}
.ladder-step.current small{color:var(--green);font-weight:700;}
.ladder-line{flex:1;height:2px;background:var(--border);min-width:20px;}

.edu-toolbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:16px;flex-wrap:wrap;}
.edu-cats{display:flex;gap:6px;flex-wrap:wrap;}
.edu-cat{background:var(--panel);border:1px solid var(--border);color:var(--text-dim);padding:8px 14px;border-radius:8px;font-size:12px;cursor:pointer;display:flex;align-items:center;gap:6px;}
.edu-cat.active{background:var(--panel-2);color:var(--text);border-color:var(--gold);}
.edu-cat i{font-size:9.5px;color:#5A5A60;}
.edu-search{display:flex;align-items:center;gap:9px;background:var(--panel);border:1px solid var(--border);border-radius:9px;padding:9px 14px;min-width:220px;}
.edu-search i{color:var(--text-dim);font-size:12px;}
.edu-search input{background:none;border:none;color:var(--text);font-size:12.5px;outline:none;width:100%;}

.course-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px;}
.course-card{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:16px;cursor:pointer;}
.course-card:hover{border-color:var(--gold);}
.course-card i{font-size:20px;margin-bottom:10px;}
.course-card h5{font-size:13px;margin-bottom:6px;line-height:1.35;}
.course-meta{font-size:10.5px;color:var(--text-dim);}
.locked-grid{grid-template-columns:1fr;}
.locked-panel.small{padding:18px;}

.yz-spotlight{background:linear-gradient(120deg,var(--panel),#1a1310);border-color:rgba(225,74,59,.3);margin-bottom:20px;}
.yz-copy h4{font-size:19px;margin:10px 0 8px;}
.yz-copy p{color:var(--text-dim);font-size:13.5px;max-width:560px;line-height:1.55;margin-bottom:16px;}

.edu-bottom-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:18px;}

/* ===== FWS LIBRARY ===== */
.lib-card{margin-bottom:20px;}
.lib-search{display:flex;align-items:center;gap:10px;background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:12px 16px;margin-bottom:16px;}
.lib-search i{color:var(--text-dim);font-size:13px;}
.lib-search input{background:none;border:none;color:var(--text);font-size:13px;outline:none;width:100%;}
.lib-topics{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:20px;}
.lib-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px;}
.lib-block h5{font-size:11px;letter-spacing:1px;color:var(--text-dim);margin-bottom:12px;text-transform:uppercase;}
.lib-block h5 i{color:var(--gold);margin-right:6px;}
.continue-item{display:flex;gap:12px;align-items:flex-start;background:var(--panel-2);border-radius:10px;padding:14px;}
.continue-item i{color:var(--gold);font-size:16px;margin-top:2px;}
.continue-text{flex:1;}
.continue-text strong{display:block;font-size:12.5px;margin-bottom:8px;}
.continue-text .progress-track{margin-bottom:6px;}
.continue-text span{font-size:10.5px;color:var(--text-dim);}
.lib-tier-access{border-top:1px solid var(--border);padding-top:16px;}
.lib-tier-access h5{font-size:11px;letter-spacing:1px;color:var(--text-dim);margin-bottom:12px;text-transform:uppercase;}
.lib-tier-list{list-style:none;display:flex;flex-direction:column;gap:9px;}
.lib-tier-list li{display:flex;gap:14px;font-size:12px;color:var(--text-dim);align-items:baseline;}
.lib-tier-name{flex:0 0 160px;color:var(--text);font-weight:600;}

@media(max-width:700px){ .lib-grid{grid-template-columns:1fr;} .lib-tier-list li{flex-direction:column;gap:2px;} .lib-tier-name{flex:none;} }

@media(max-width:900px){ .course-grid{grid-template-columns:repeat(2,1fr);} .edu-bottom-grid{grid-template-columns:1fr;} }
@media(max-width:600px){ .course-grid{grid-template-columns:1fr;} }

/* ===== MEMBERSHIP ===== */
.status-card{margin-bottom:16px;}
.status-row{display:flex;justify-content:space-between;gap:24px;flex-wrap:wrap;align-items:flex-start;}
.status-row h3{font-size:20px;margin:8px 0 8px;}
.status-row .ai-note{max-width:420px;margin-bottom:0;}
.status-next{background:var(--panel-2);border-radius:12px;padding:16px;min-width:260px;}
.next-label{font-size:10.5px;letter-spacing:1px;color:var(--text-dim);display:block;margin-bottom:10px;}
.status-next .next-lesson{margin-bottom:14px;}
.status-next .btn-upgrade{width:100%;}

.tier-intro{font-size:12.5px;color:var(--text-dim);max-width:720px;line-height:1.6;margin:0 auto 20px;}
.about-tagline{font-size:13px;font-weight:700;letter-spacing:2px;color:var(--gold);text-transform:uppercase;margin:-10px 0 20px;}
.about-explainer{font-size:15px;font-weight:600;line-height:1.5;max-width:680px;margin-bottom:10px;}
.why-fws-exists{background:var(--panel-2);border-radius:12px;padding:18px 20px;margin-bottom:20px;display:flex;flex-direction:column;gap:6px;}
.why-fws-exists p{font-size:14px;}
.why-fws-exists p:last-child{color:var(--gold);}

/* Contact rows (2026-07-31) — fully clickable, same premium
   black/gold treatment as the certificate preview for consistency. */
.contact-row-list{display:flex;flex-direction:column;gap:10px;}
.contact-row{
  display:flex;align-items:center;gap:14px;text-decoration:none;color:var(--text);
  background:linear-gradient(145deg,#0B0B0D,#1a1a1e);border:1px solid var(--border);border-radius:12px;
  padding:14px 16px;transition:border-color .2s,transform .2s;
}
.contact-row:hover{border-color:var(--gold);transform:translateX(2px);}
.contact-row-icon{
  width:40px;height:40px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;
  background:rgba(201,166,70,.12);border:1px solid var(--gold);color:var(--gold);font-size:17px;
}
.contact-row-text{display:flex;flex-direction:column;gap:2px;flex:1;}
.contact-row-text strong{font-size:12.5px;}
.contact-row-text span{font-size:11.5px;color:var(--text-dim);}
.contact-row-go{color:var(--text-dim);font-size:11px;}
.contact-row:hover .contact-row-go{color:var(--gold);}

/* Support & Settings (2026-07-31) */
.support-search-wrap{position:relative;margin-bottom:16px;}
.support-search-wrap i{position:absolute;left:14px;top:50%;transform:translateY(-50%);color:var(--text-dim);}
.support-search-wrap input{width:100%;background:var(--panel-2);border:1px solid var(--border);border-radius:10px;padding:12px 14px 12px 38px;font-size:13px;color:var(--text);}
.support-search-wrap input:focus{border-color:var(--gold);outline:none;}
.platform-status-list{display:flex;flex-direction:column;gap:8px;}
.status-row{display:grid;grid-template-columns:14px 1fr auto;gap:10px;align-items:center;font-size:12px;padding:6px 0;}
.status-dot{width:9px;height:9px;border-radius:50%;}
.status-dot.status-ok{background:var(--green);box-shadow:0 0 6px var(--green);}
.status-dot.status-warn{background:var(--gold);box-shadow:0 0 6px var(--gold);}
.status-dot.status-off{background:var(--red);box-shadow:0 0 6px var(--red);}
.status-label{color:var(--text-dim);font-size:10.5px;}
.settings-form{display:flex;flex-direction:column;gap:12px;}
.settings-form select,.settings-form textarea,.settings-form input[type="file"]{width:100%;background:var(--panel-2);border:1px solid var(--border);border-radius:8px;padding:9px 12px;font-size:12.5px;color:var(--text);font-family:inherit;}
.settings-form textarea{min-height:80px;resize:vertical;}
.settings-toggle-row{display:flex;justify-content:space-between;align-items:center;padding:9px 0;border-bottom:1px solid var(--border);font-size:12.5px;}
.settings-toggle-row:last-child{border-bottom:none;}
.settings-toggle{position:relative;width:38px;height:20px;flex-shrink:0;}
.settings-toggle input{opacity:0;width:0;height:0;}
.settings-toggle-slider{position:absolute;inset:0;background:var(--panel-2);border:1px solid var(--border);border-radius:20px;cursor:pointer;transition:.2s;}
.settings-toggle-slider::before{content:'';position:absolute;width:14px;height:14px;left:2px;top:2px;background:var(--text-dim);border-radius:50%;transition:.2s;}
.settings-toggle input:checked + .settings-toggle-slider{background:rgba(201,166,70,.2);border-color:var(--gold);}
.settings-toggle input:checked + .settings-toggle-slider::before{transform:translateX(18px);background:var(--gold);}
.contact-row-disabled{opacity:.5;cursor:default;}
.contact-row-disabled:hover{border-color:var(--border);transform:none;}
.support-footer{text-align:center;padding:24px 16px;background:linear-gradient(145deg,#0B0B0D,#1a1a1e);border:1px solid var(--gold);border-radius:14px;margin-top:20px;}
.support-footer p{font-size:14px;font-weight:600;margin-bottom:12px;}
.support-footer .btn-primary{display:inline-flex;align-items:center;gap:8px;width:auto;padding:11px 22px;text-decoration:none;}
.trading-access-card{margin-bottom:16px;}
.trading-access-btns{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px;}

/* FWS TRADING WORKSPACE™ — trade ticket (2026-08-19). BUY green,
   SELL red, per explicit spec — these are fixed brand colors, not
   dynamic. The PRICE NUMBERS (not the buttons) flash briefly on a
   genuine tick up/down, driven only by real price changes from the
   connected broker — never a decorative animation running on its own. */
.trade-ticket{display:flex;gap:12px;}
.trade-ticket-3col{display:grid;grid-template-columns:1fr 110px 1fr;gap:10px;align-items:stretch;}
.trade-lot-mid{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;background:rgba(201,166,70,.16);border:1px solid var(--gold);border-radius:14px;padding:10px;}
.trade-lot-mid input{width:100%;text-align:center;background:var(--panel);border:1px solid var(--border);color:#fff;border-radius:8px;padding:8px 4px;font-size:14px;}

/* FWS TRADING WORKSPACE™ bottom navigation (2026-08-19) */
.trade-bottom-nav{display:flex;gap:4px;background:var(--card);border:1px solid var(--line);border-radius:16px;padding:6px;margin-bottom:16px;}
.trade-nav-btn{flex:1;background:none;border:none;color:var(--text-dim);cursor:pointer;padding:10px 4px;border-radius:12px;
  display:flex;flex-direction:column;align-items:center;gap:4px;font-size:10.5px;font-weight:600;transition:background .15s;}
.trade-nav-btn i{font-size:16px;}
.trade-nav-btn:hover{background:var(--panel-2);}
.trade-nav-btn.active{background:var(--panel-2);color:var(--gold);}

/* Real data-freshness indicator (2026-08-22) — colors reflect
   genuine data age, computed from the actual last-update timestamp. */
.freshness-live{color:var(--green);}
.freshness-delayed{color:var(--gold);}
.freshness-stale{color:var(--red);}
.trade-side-btn{
  flex:1;border-radius:14px;border:none;cursor:pointer;padding:12px 16px;
  display:flex;flex-direction:row;align-items:center;justify-content:center;gap:10px;
  transition:filter .15s ease;
}
/* FIX (2026-08-24): the compact horizontal layout doesn't have
   enough room on narrow phone screens — confirmed via real mobile
   viewport testing (BUY card was getting cut off, SELL's placeholder
   text wrapped to 3 lines). Reverts to the original stacked layout
   below 480px, where there's more vertical room to work with than
   horizontal. */
@media(max-width:480px){
  .trade-side-btn{flex-direction:column;gap:6px;padding:14px 10px;}
}
.trade-side-btn:hover{filter:brightness(1.1);}
.trade-side-btn:disabled{opacity:.5;cursor:not-allowed;filter:none;}
.trade-sell{background:rgba(214,69,69,.16);border:1px solid var(--red);}
.trade-buy{background:rgba(31,174,107,.16);border:1px solid var(--green);}
/* FIX (2026-08-22): buttons don't reliably inherit page-wide text
   color the way divs/spans do — many browsers give <button> elements
   their own default (often black) text color regardless of the
   page's theme, unless explicitly overridden. This is very likely
   why the price text was showing as black/unreadable against the
   red/green backgrounds — .trade-side-price never had an explicit
   color, so it fell back to the button's own default rather than the
   page's white text. Now explicit, on both the label and price. */
.trade-side-label{font-size:12px;font-weight:700;letter-spacing:2px;color:var(--text-dim);}
.trade-sell .trade-side-label{color:var(--red);}
.trade-buy .trade-side-label{color:var(--green);}
.trade-side-price{font-family:'Space Grotesk',sans-serif;font-size:17px;font-weight:700;color:#fff;}
.trade-sell .trade-side-price{color:#fff;}
.trade-buy .trade-side-price{color:#fff;}
/* FIX (2026-08-23): 'Awaiting Live Data' was inheriting the large
   22px real-price size, making the placeholder text visually huge
   compared to normal platform status messages. Now matches .ai-note's
   size (11.5px) whenever this modifier class is present — the real
   price itself is untouched, still 22px. */
.trade-side-price.price-pending{font-size:11.5px;font-weight:600;color:var(--gold);font-family:inherit;}
.trade-side-price.tick-up{animation:tickUp .5s ease;}
.trade-side-price.tick-down{animation:tickDown .5s ease;}
@keyframes tickUp{0%{color:var(--green);}100%{color:inherit;}}
@keyframes tickDown{0%{color:var(--red);}100%{color:inherit;}}
.trading-access-btns .btn-outline,.trading-access-btns .btn-primary{width:auto;flex:1;min-width:140px;display:flex;align-items:center;justify-content:center;gap:8px;text-decoration:none;padding:11px 14px;}
.risk-disclaimer{font-size:10px;color:var(--text-dim);margin-top:12px;line-height:1.5;border-top:1px solid var(--border);padding-top:10px;}

.tier-list{display:flex;flex-direction:column;gap:14px;margin-bottom:20px;}
.tier-card{background:var(--panel);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;}
.tier-card.active-tier{border-color:var(--green);box-shadow:0 0 0 1px rgba(60,184,120,.15);}
.tier-card.locked-tier{opacity:.94;}

.tier-summary{
  width:100%;background:none;border:none;color:var(--text);cursor:pointer;
  display:flex;align-items:center;gap:14px;padding:18px 20px;text-align:left;
}
.tier-summary:hover{background:var(--panel-2);}
.tier-emoji{font-size:26px;}
.tier-summary-text{flex:1;}
.tier-summary-text h4{font-size:15px;margin-bottom:4px;}
.tier-identity{font-size:11.5px;color:var(--text-dim);line-height:1.4;margin-bottom:6px;max-width:480px;}
.tier-price{font-size:12.5px;color:var(--gold);font-weight:700;}
.tier-price small{color:var(--text-dim);font-weight:500;}
.tier-caret{font-size:12px;color:var(--text-dim);transition:transform .2s;}
.tier-card.expanded .tier-caret{transform:rotate(180deg);}

.tier-body{max-height:0;overflow:hidden;transition:max-height .25s ease;padding:0 20px;}
.tier-card.expanded .tier-body{max-height:900px;padding:0 20px 22px;}
.tier-lock-note{font-size:10.5px;color:var(--text-dim);margin-bottom:14px;letter-spacing:.3px;}
.tier-lock-note i{color:var(--gold);margin-right:5px;}
.tier-col{margin-bottom:16px;}
.tier-col h5{font-size:11px;letter-spacing:1px;color:var(--text-dim);margin-bottom:9px;text-transform:uppercase;}

.plan-durations{display:flex;gap:7px;flex-wrap:wrap;margin-bottom:14px;}
.plan-btn{background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);padding:7px 12px;border-radius:8px;font-size:11.5px;cursor:pointer;}
.plan-btn.active{background:var(--gold);color:#0B0B0D;border-color:var(--gold);font-weight:700;}

.tier-unlocks{list-style:none;display:flex;flex-direction:column;gap:8px;}
.tier-unlocks li.milestone-done{color:var(--text);font-weight:600;}
.tier-unlocks li{font-size:12.5px;color:var(--text-dim);padding-left:18px;position:relative;}
.tier-unlocks li::before{content:'✓';position:absolute;left:0;color:var(--green);font-weight:700;font-size:11px;}
.tier-card .btn-outline:disabled{opacity:.6;cursor:default;color:var(--green);border-color:var(--green);}
.tier-card .btn-outline:disabled:hover{border-color:var(--green);}

/* Persistent sticky learning journey ladder */
.mem-ladder-sticky{position:sticky;top:118px;z-index:20;margin-bottom:16px;padding:14px 20px;backdrop-filter:blur(6px);}
.mem-ladder-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap;}
.mem-ladder-label{font-size:10.5px;letter-spacing:1px;color:var(--text-dim);white-space:nowrap;flex-shrink:0;}
.mem-ladder-label i{color:var(--gold);margin-right:5px;}
.mem-ladder{display:flex;align-items:center;gap:8px;flex-wrap:wrap;flex:1;}
.mem-step{font-size:11.5px;color:var(--text-dim);white-space:nowrap;}
.mem-step.current{color:var(--gold);font-weight:700;}
.mem-arrow{font-size:8px;color:#4A4A50;}
.btn-upgrade.compact{width:auto;padding:8px 16px;flex-shrink:0;}

.tier-outcome{
  font-size:14px;font-weight:600;color:var(--text);line-height:1.5;
  background:var(--panel-2);border-radius:10px;padding:13px 16px;margin-bottom:14px;
}
.tier-outcome i{color:var(--gold);margin-right:8px;}
.tier-qa{font-size:12.5px;color:var(--text-dim);line-height:1.5;margin-bottom:8px;}
.tier-qa strong{color:var(--text);}
.tier-inherit{
  font-size:11.5px;color:var(--green);font-weight:600;margin:14px 0;
  display:flex;align-items:center;gap:7px;
}

.mode-limits{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px;}
.mode-limit-card{background:var(--panel-2);border-radius:10px;padding:14px;}
.mode-limit-card h6{font-size:11.5px;color:var(--text);margin-bottom:9px;display:flex;align-items:center;gap:7px;}
.mode-limit-card h6 i{color:var(--gold);}
.limit-list li::before{content:'✓';}
.limit-list li.limit-no{color:#8a6a5a;}
.limit-list li.limit-no::before{content:'✕';color:var(--red);}

.tier-next{
  font-size:12px;color:var(--text-dim);margin-top:14px;padding-top:14px;
  border-top:1px solid var(--border);line-height:1.5;
}
.tier-next i{color:var(--gold);margin-right:6px;}
.tier-next strong{color:var(--text);}

@media(max-width:700px){
  .status-row{flex-direction:column;} .status-next{width:100%;}
  .mode-limits{grid-template-columns:1fr;}
  .mem-ladder-row{flex-direction:column;align-items:flex-start;}
}

/* ===== BUSINESS ===== */
.biz-hero{text-align:center;padding:36px 24px;margin-bottom:16px;background:linear-gradient(150deg,var(--panel),#151a17);}
.biz-hero h2{font-size:28px;margin-bottom:8px;}
.biz-tagline{font-size:14px;color:var(--gold);font-weight:600;margin-bottom:14px;text-align:center;width:100%;}
.biz-hero-copy{font-size:13.5px;color:var(--text-dim);max-width:620px;margin:0 auto 22px;line-height:1.6;}
.biz-hero-ctas{display:flex;gap:12px;justify-content:center;flex-wrap:wrap;}

.wwd-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.wwd-item{display:flex;align-items:center;gap:10px;background:var(--panel-2);border:1px solid transparent;border-radius:10px;padding:13px 14px;font-size:12.5px;color:var(--text);cursor:pointer;text-align:left;width:100%;font-family:inherit;}
.wwd-item:hover{border-color:var(--gold);}
.wwd-item i{font-size:15px;flex-shrink:0;}

.hero-division-grid{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-top:24px;}
.hero-div-card{
  background:var(--panel-2);border:1px solid var(--border);border-radius:12px;
  padding:16px 12px;text-align:center;cursor:pointer;display:flex;flex-direction:column;
  align-items:center;gap:6px;font-family:inherit;
}
.hero-div-card:hover{border-color:var(--gold);}
.hd-emoji{font-size:24px;}
.hero-div-card strong{font-size:11.5px;color:var(--text);line-height:1.3;}
.hd-tag{font-size:10px;color:var(--gold);font-weight:600;}

/* FIX (2026-08-14): added display:flex;flex-direction:column — without
   this, .msg-ai/.msg-user's align-self:flex-start/flex-end properties
   have NO effect at all (align-self only works inside flex or grid
   containers), meaning messages were never actually left/right
   aligned regardless of the max-width issue above. Both fixes were
   needed together. */
.ai-preview-demo{background:var(--panel-2);border-radius:12px;padding:14px 16px;margin-bottom:16px;position:relative;display:flex;flex-direction:column;}
/* FIX (2026-08-14): removed max-width:100% override — it was making
   .msg-ai's align-self:flex-start and .msg-user's align-self:flex-end
   visually meaningless (a 100%-wide bubble touches both edges either
   way), which is why user and AI messages looked identical in the
   Business AI chat specifically. The base 80% max-width (inherited
   from .chat-msg) restores real left/right differentiation. */
.ai-preview-demo .chat-msg{margin-bottom:10px;}
.ai-preview-demo .chat-msg p{font-size:12.5px;}
.ai-preview-demo .chat-msg .msg-body{padding:9px 12px;}
.preview-label{font-size:10px;color:#5A5A60;font-style:italic;}

@media(max-width:900px){ .wwd-grid{grid-template-columns:repeat(2,1fr);} .cred-grid{grid-template-columns:1fr;} .hero-division-grid{grid-template-columns:repeat(2,1fr);} }
@media(max-width:500px){ .wwd-grid{grid-template-columns:1fr;} .hero-division-grid{grid-template-columns:1fr;} }

.why-grid{display:flex;flex-direction:column;gap:16px;}
.why-item{display:flex;gap:14px;align-items:flex-start;}
.why-item i{color:var(--gold);font-size:17px;margin-top:2px;width:20px;text-align:center;flex-shrink:0;}
.why-item strong{display:block;font-size:13.5px;margin-bottom:4px;}
.why-item span{font-size:12.5px;color:var(--text-dim);line-height:1.5;}

.biz-journey{display:flex;flex-direction:column;align-items:center;gap:8px;padding:8px 0;}
.bj-step{display:flex;align-items:center;gap:12px;background:var(--panel-2);border-radius:10px;padding:11px 20px;font-size:13px;width:100%;max-width:340px;}
.bj-step.final{border:1px solid var(--green);}
.bj-num{width:22px;height:22px;border-radius:50%;background:var(--gold);color:#0B0B0D;font-size:11px;font-weight:800;display:flex;align-items:center;justify-content:center;flex-shrink:0;}
.bj-step.final .bj-num{background:var(--green);}
.bj-arrow{color:#4A4A50;font-size:11px;}

.cred-card{margin-bottom:16px;}
.cred-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-top:12px;}
.cred-item{display:flex;gap:12px;align-items:flex-start;background:var(--panel-2);border-radius:10px;padding:14px;}
.cred-item i{font-size:17px;margin-top:2px;}
.cred-item strong{display:block;font-size:13px;margin-bottom:3px;}
.cred-item span{font-size:11.5px;color:var(--text-dim);}
.founder-block{border-top:1px solid var(--border);margin-top:16px;padding-top:16px;}
.founder-block h5{font-size:11px;letter-spacing:1px;color:var(--text-dim);margin-bottom:8px;text-transform:uppercase;}
.founder-block .ai-note{margin-bottom:0;}

/* ===== SPORTS ===== */
.sport-explain{
  margin-top:14px;padding:13px 16px;background:var(--panel-2);border-radius:10px;
  font-size:12.5px;color:var(--text-dim);line-height:1.5;
}
.responsible-card{border-color:rgba(60,184,120,.3);background:linear-gradient(120deg,var(--panel),#0f1a14);}

.spd-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-bottom:12px;}
.spd-item{background:var(--panel-2);border-radius:10px;padding:15px 12px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:6px;}
.spd-item i{font-size:16px;}
.spd-item strong{font-size:16px;color:var(--text);}
.spd-item span{font-size:10px;color:var(--text-dim);}
.spd-item.spd-next{grid-column:span 2;background:rgba(201,166,70,.08);border:1px solid rgba(201,166,70,.25);}

@media(max-width:700px){ .spd-grid{grid-template-columns:repeat(2,1fr);} .spd-item.spd-next{grid-column:span 2;} }

.sports-stats-row{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin-top:22px;padding-top:22px;border-top:1px solid var(--border);}
.sports-stat{display:flex;flex-direction:column;align-items:center;gap:6px;}
.sports-stat i{font-size:18px;color:var(--gold);}
.sports-stat strong{font-size:17px;color:var(--text);}
.sports-stat span{font-size:10.5px;color:var(--text-dim);}

.wwd-item.active-sport{border-color:var(--gold);background:rgba(201,166,70,.1);}
.wwd-item.ws-future{opacity:.6;position:relative;cursor:default;}
.wwd-item.ws-future small{margin-left:auto;font-size:9px;color:var(--gold);font-weight:700;text-transform:uppercase;}

/* ===== NEW DASHBOARD (HOME) ===== */
.home-hero{
  position:relative;overflow:hidden;text-align:center;padding:32px 24px;margin-bottom:18px;
  background:linear-gradient(150deg,var(--panel),#151a17);
}
.home-hero::before{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(circle at 15% 25%, rgba(225,74,59,.10) 0%, transparent 35%),
    radial-gradient(circle at 85% 20%, rgba(201,166,70,.10) 0%, transparent 35%),
    radial-gradient(circle at 50% 85%, rgba(60,184,120,.10) 0%, transparent 40%),
    repeating-linear-gradient(0deg, rgba(255,255,255,.02) 0px, transparent 1px, transparent 32px),
    repeating-linear-gradient(90deg, rgba(255,255,255,.02) 0px, transparent 1px, transparent 32px);
  animation:heroDrift 22s ease-in-out infinite;
}
.home-hero::after{
  content:'';position:absolute;top:-40%;left:50%;width:160%;height:220%;pointer-events:none;z-index:0;
  background:conic-gradient(from 0deg at 50% 50%, transparent 0deg, rgba(201,166,70,.05) 40deg, transparent 90deg, rgba(225,74,59,.05) 200deg, transparent 260deg, rgba(60,184,120,.05) 320deg, transparent 360deg);
  transform:translateX(-50%);animation:heroRayRotate 40s linear infinite;
}
@keyframes heroDrift{0%,100%{background-position:0 0,0 0,0 0,0 0,0 0;}50%{background-position:2% -2%,-2% 2%,1% -1%,4px 4px,-4px -4px;}}
@keyframes heroRayRotate{from{transform:translateX(-50%) rotate(0deg);}to{transform:translateX(-50%) rotate(360deg);}}
.home-hero > *{position:relative;z-index:1;}

/* Reuses the exact same hero background animation (glow + light-ray
   sweep) at different intensities, so the platform shares one visual
   identity — Hero=100% (native rules), .hero-bg-echo-full=100% (reused
   elsewhere, e.g. Market Overview's chart), .hero-bg-echo=60%,
   .hero-bg-echo-soft=50%. Same slow, low-contrast, no-flash animation. */
.hero-bg-echo, .hero-bg-echo-soft, .hero-bg-echo-full, .hero-bg-echo-faint, .hero-bg-echo-whisper{position:relative;overflow:hidden;}
.hero-bg-echo::before, .hero-bg-echo-soft::before, .hero-bg-echo-full::before, .hero-bg-echo-faint::before, .hero-bg-echo-whisper::before{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(circle at 15% 25%, rgba(225,74,59,.10) 0%, transparent 35%),
    radial-gradient(circle at 85% 20%, rgba(201,166,70,.10) 0%, transparent 35%),
    radial-gradient(circle at 50% 85%, rgba(60,184,120,.10) 0%, transparent 40%),
    repeating-linear-gradient(0deg, rgba(255,255,255,.02) 0px, transparent 1px, transparent 32px),
    repeating-linear-gradient(90deg, rgba(255,255,255,.02) 0px, transparent 1px, transparent 32px);
  animation:heroDrift 22s ease-in-out infinite;
}
.hero-bg-echo::after, .hero-bg-echo-soft::after, .hero-bg-echo-full::after, .hero-bg-echo-faint::after, .hero-bg-echo-whisper::after{
  content:'';position:absolute;top:-40%;left:50%;width:160%;height:220%;pointer-events:none;z-index:0;
  background:conic-gradient(from 0deg at 50% 50%, transparent 0deg, rgba(201,166,70,.05) 40deg, transparent 90deg, rgba(225,74,59,.05) 200deg, transparent 260deg, rgba(60,184,120,.05) 320deg, transparent 360deg);
  transform:translateX(-50%);animation:heroRayRotate 40s linear infinite;
}
.hero-bg-echo::before{opacity:.6;}
.hero-bg-echo::after{opacity:.6;}
.hero-bg-echo-soft::before{opacity:.5;}
.hero-bg-echo-soft::after{opacity:.5;}
.hero-bg-echo-full::before{opacity:1;}
.hero-bg-echo-full::after{opacity:1;}
.hero-bg-echo-faint::before{opacity:.13;}
.hero-bg-echo-faint::after{opacity:.13;}
.hero-bg-echo-whisper::before{opacity:.07;}
.hero-bg-echo-whisper::after{opacity:.07;}
.hero-bg-echo > *, .hero-bg-echo-soft > *, .hero-bg-echo-full > *, .hero-bg-echo-faint > *, .hero-bg-echo-whisper > *{position:relative;z-index:1;}

/* Active sidebar item only — premium 55% animation. Other nav items
   stay clean with just a hover glow (existing .nav-item:hover rule). */
.nav-item.active{position:relative;overflow:hidden;}
.nav-item.active::before{
  content:'';position:absolute;inset:0;pointer-events:none;z-index:0;
  background:
    radial-gradient(circle at 20% 30%, rgba(225,74,59,.14) 0%, transparent 40%),
    radial-gradient(circle at 80% 70%, rgba(201,166,70,.14) 0%, transparent 40%);
  opacity:.55;animation:heroDrift 22s ease-in-out infinite;
}
.nav-item.active > *{position:relative;z-index:1;}

.home-welcome-row{display:flex;align-items:center;gap:14px;justify-content:flex-start;margin-bottom:18px;}
.home-avatar{width:44px;height:44px;border-radius:50%;object-fit:cover;border:2px solid var(--gold);}
.home-avatar-fallback{
  width:44px;height:44px;border-radius:50%;background:var(--panel-2);border:2px solid var(--gold);
  display:flex;align-items:center;justify-content:center;color:var(--gold);font-size:16px;
}
.home-welcome-text{text-align:left;}
.home-welcome-label{font-size:11.5px;color:var(--text-dim);display:block;}
.home-welcome-text h2{font-size:19px;margin:2px 0;}
.home-welcome-sub{font-size:11px;color:var(--text-dim);}
.home-oid-title{font-size:42px;font-weight:900;letter-spacing:1px;margin-bottom:10px;}
.home-hero .hero-sub{font-size:13px;color:var(--text-dim);max-width:600px;margin:0 auto 26px;line-height:1.6;}
.home-hero .hero-sub em{font-style:normal;color:var(--text);}

.ai31-block{margin-bottom:30px;}
.ai31-title{font-size:16px;letter-spacing:3.5px;color:var(--gold);font-weight:800;margin-bottom:14px;text-shadow:0 0 18px rgba(201,166,70,.5);}
.ai31-engines{display:flex;justify-content:center;gap:36px;margin-bottom:14px;flex-wrap:wrap;}
.ai31-engine{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:12px;}
.ai31-engine strong{color:var(--text);font-size:13px;}
.ai31-engine i{font-size:9px;color:var(--text-dim);}
.ai31-statement{font-size:12.5px;color:var(--text);max-width:520px;margin:0 auto;line-height:1.5;font-style:italic;}

/* Enhanced OID rings — rotating halo + breathing pulse, evoking a
   "connected AI system" feel without heavy particle JS. */
.oid-ring{width:64px;height:64px;border-radius:50%;display:flex;align-items:center;justify-content:center;margin:0 auto 12px;font-size:22px;position:relative;}
.ring-lg{width:108px;height:108px;font-size:36px;margin-bottom:16px;}
.oid-ring::before{
  content:'';position:absolute;inset:-10px;border-radius:50%;
  border:1.5px dashed currentColor;opacity:.35;animation:oidSpin 14s linear infinite;
}
.ring-lg{animation:oidBreathe 4s ease-in-out infinite;}
@keyframes oidSpin{from{transform:rotate(0deg);}to{transform:rotate(360deg);}}
@keyframes oidBreathe{0%,100%{transform:scale(1);}50%{transform:scale(1.04);}}
.ring-red{border:2px solid var(--red);color:var(--red);box-shadow:0 0 20px rgba(225,74,59,.25);}
.ring-gold{border:2px solid var(--gold);color:var(--gold);box-shadow:0 0 20px rgba(201,166,70,.25);}
.ring-green{border:2px solid var(--green);color:var(--green);box-shadow:0 0 20px rgba(60,184,120,.25);}
.ring-lg.ring-red{box-shadow:0 0 34px rgba(225,74,59,.4);}
.ring-lg.ring-gold{box-shadow:0 0 34px rgba(201,166,70,.4);}
.ring-lg.ring-green{box-shadow:0 0 34px rgba(60,184,120,.4);}

/* Gauge halo + trend arrows */
.gauge-wrap{position:relative;display:flex;justify-content:center;margin:8px 0 18px;}
.gauge-halo{
  position:absolute;width:170px;height:170px;border-radius:50%;
  background:conic-gradient(from 0deg,var(--gauge-glow-color, rgba(60,184,120,.25)),transparent 60%);
  animation:oidSpin 8s linear infinite;
}
.gauge-trend{color:var(--green);font-size:10px;letter-spacing:1px;margin-left:4px;}

/* Brighter, more "illuminated" connecting arrows */
.oid-arrow{color:var(--gold);font-size:22px;font-weight:900;margin-top:42px;text-shadow:0 0 14px rgba(201,166,70,.7);}


/* Market Sentiment — left/right split (gauge | confirmation list) */
.sentiment-split{display:flex;gap:20px;align-items:center;margin-bottom:16px;}
.sentiment-gauge-col{flex-shrink:0;}
.gauge-wrap-sm{margin:0;}
.gauge-wrap-sm .gauge-halo{width:120px;height:120px;}
.gauge-wrap-sm .gauge-ring{width:96px;height:96px;}
.gauge-wrap-sm .gauge-inner{width:76px;height:76px;gap:1px;}
.gauge-wrap-sm .gauge-inner strong{font-size:19px;}
.gauge-wrap-sm .gauge-inner span:not(.gauge-trend){font-size:9.5px;font-weight:800;letter-spacing:.5px;}
.gauge-wrap-sm .gauge-trend{display:block;margin-left:0;font-size:11px;}
.sentiment-list-v2{list-style:none;display:flex;flex-direction:column;gap:11px;flex:1;margin-bottom:0;}
.sentiment-list-v2 li{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--text-dim);}
.sentiment-list-v2 li strong{display:flex;align-items:center;gap:6px;font-size:12px;}
.sentiment-list-v2 li i{font-size:10px;}

/* Welcome card membership badge */
.home-badge{
  margin-left:auto;background:rgba(201,166,70,.15);color:var(--gold);border:1px solid rgba(201,166,70,.4);
  padding:6px 14px;border-radius:20px;font-size:11px;font-weight:700;letter-spacing:.5px;align-self:flex-start;
}

/* Sideeq AI mini-chat preview on the Dashboard */
.home-brain-preview{display:flex;flex-direction:column;}
.home-brain-window{min-height:70px;max-height:110px;margin:10px 0;}
.home-brain-window .chat-msg p{font-size:11.5px;}
.home-brain-window .chat-msg .msg-body{padding:8px 11px;}

/* 3-in-1 AI engines — fixed width columns for perfect alignment */
.ai31-engine{width:130px;}

.oid-flow{display:flex;align-items:flex-start;justify-content:center;gap:24px;flex-wrap:wrap;}
.oid-flow-lg{gap:32px;}
.oid-step{width:160px;}
.oid-flow-lg .oid-step{width:210px;}
.oid-step h3{font-size:14px;letter-spacing:1.5px;margin-bottom:8px;}
.oid-step p{font-size:11.5px;color:var(--text-dim);line-height:1.5;}
.oid-step p strong{color:var(--text);font-weight:700;display:block;margin-bottom:4px;}

.avatar-circle{
  width:30px;height:30px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;
  font-size:11px;font-weight:800;color:#0B0B0D;border:2px solid var(--panel);margin-right:-10px;
}
.community-avatars{display:flex;margin-bottom:10px;}

.ai-online{display:flex;align-items:center;gap:6px;font-size:10.5px;color:var(--green);font-weight:700;}
.ai-online-dot{width:6px;height:6px;border-radius:50%;background:var(--green);box-shadow:0 0 6px var(--green);}

.home-top-grid{display:grid;grid-template-columns:1fr 1fr 1fr;gap:16px;margin-bottom:16px;}
.home-ai-insight h4{font-size:15px;margin:8px 0 6px;}
.ai-recommends{border-top:1px solid var(--border);margin-top:14px;padding-top:14px;}
.ai-recommends-label{font-size:10px;letter-spacing:1px;color:var(--text-dim);text-transform:uppercase;display:block;margin-bottom:9px;}
.ai-recommends-item{display:flex;align-items:center;gap:9px;background:var(--panel-2);border-radius:9px;padding:11px 13px;font-size:12px;}
.ai-recommends-item span{transition:opacity .3s ease;}
.ai-recommends-item i{color:var(--gold);font-size:13px;}

/* Market Sentiment — premium circular gauge widget */
.sentiment-card{display:flex;flex-direction:column;}
.gauge-wrap{display:flex;justify-content:center;margin:8px 0 18px;}
.gauge-ring{
  width:140px;height:140px;border-radius:50%;
  background:conic-gradient(var(--gauge-color, var(--green)) calc(var(--gauge-pct)*1%), var(--panel-2) 0);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 0 30px var(--gauge-shadow-color, rgba(60,184,120,.25));
  animation:gaugeGlow 3s ease-in-out infinite;
}
@keyframes gaugeGlow{0%,100%{box-shadow:0 0 24px var(--gauge-shadow-color, rgba(60,184,120,.2));}50%{box-shadow:0 0 36px var(--gauge-shadow-color, rgba(60,184,120,.4));}}
.gauge-inner{
  width:106px;height:106px;border-radius:50%;background:var(--panel);
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;
  overflow:hidden;padding:6px;
}
.gauge-inner span{max-width:90px;text-align:center;line-height:1.2;}
.gauge-inner strong{font-size:24px;font-weight:800;color:var(--text);}
.gauge-inner span{font-size:11px;font-weight:700;color:var(--green);letter-spacing:.5px;}
.sentiment-list-v2{list-style:none;display:flex;flex-direction:column;gap:10px;margin-bottom:16px;}
.sentiment-list-v2 li{display:flex;justify-content:space-between;align-items:center;font-size:12px;color:var(--text-dim);}
.sentiment-list-v2 li span{display:flex;align-items:center;gap:7px;}
.sentiment-list-v2 li i{font-size:10px;}
.sentiment-bias{
  background:var(--panel-2);border-radius:10px;padding:12px 14px;margin-bottom:14px;
  display:flex;flex-direction:column;gap:4px;
}
.sentiment-bias-label{font-size:10px;color:var(--text-dim);letter-spacing:.5px;text-transform:uppercase;}
.sentiment-bias strong{font-size:13.5px;}
.sentiment-ai-insight{border-top:1px solid var(--border);padding-top:14px;}
.sentiment-ai-insight p{font-size:11.5px;color:var(--text-dim);line-height:1.5;margin-top:8px;font-style:italic;}

/* Quick Access — colored, glowing, animated icons per module */
.qa-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;}
.qa-card{
  background:var(--panel-2);border:1px solid var(--border);border-radius:11px;
  padding:18px 10px;text-align:center;cursor:pointer;display:flex;flex-direction:column;
  align-items:center;gap:10px;font-family:inherit;transition:transform .15s, border-color .15s;
}
.qa-card:hover{transform:translateY(-3px);}
.qa-card i{font-size:26px;transition:filter .15s;}
.qa-card span{font-size:11px;color:var(--text);}

.qa-gold i{color:var(--gold);filter:drop-shadow(0 0 6px rgba(201,166,70,.4));}
.qa-gold:hover{border-color:var(--gold);}
.qa-gold:hover i{filter:drop-shadow(0 0 12px rgba(201,166,70,.7));}

.qa-blue i{color:var(--blue);filter:drop-shadow(0 0 6px rgba(76,141,255,.4));}
.qa-blue:hover{border-color:var(--blue);}
.qa-blue:hover i{filter:drop-shadow(0 0 12px rgba(76,141,255,.7));}

.qa-orange i{color:var(--orange);filter:drop-shadow(0 0 6px rgba(232,128,74,.4));}
.qa-orange:hover{border-color:var(--orange);}
.qa-orange:hover i{filter:drop-shadow(0 0 12px rgba(232,128,74,.7));}

.qa-green i{color:var(--green);filter:drop-shadow(0 0 6px rgba(60,184,120,.4));}
.qa-green:hover{border-color:var(--green);}
.qa-green:hover i{filter:drop-shadow(0 0 12px rgba(60,184,120,.7));}

.qa-purple i{color:var(--purple);filter:drop-shadow(0 0 6px rgba(166,108,224,.4));}
.qa-purple:hover{border-color:var(--purple);}
.qa-purple:hover i{filter:drop-shadow(0 0 12px rgba(166,108,224,.7));}

.qa-cyan i{color:var(--cyan);filter:drop-shadow(0 0 6px rgba(61,201,216,.4));}
.qa-cyan:hover{border-color:var(--cyan);}
.qa-cyan:hover i{filter:drop-shadow(0 0 12px rgba(61,201,216,.7));}

.qa-silver i{color:var(--silver);filter:drop-shadow(0 0 6px rgba(154,160,168,.35));}
.qa-silver:hover{border-color:var(--silver);}
.qa-silver:hover i{filter:drop-shadow(0 0 12px rgba(154,160,168,.6));}

.home-bottom-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:16px;}

.sports-preview-row{display:flex;gap:10px;flex-wrap:wrap;margin-bottom:16px;}
.sp-chip{background:var(--panel-2);border:1px solid var(--border);border-radius:20px;padding:9px 16px;font-size:12.5px;color:var(--text);}

@media(max-width:1100px){ .home-top-grid{grid-template-columns:1fr;} }
@media(max-width:900px){ .qa-grid{grid-template-columns:repeat(2,1fr);} .home-bottom-grid{grid-template-columns:1fr;} }
@media(max-width:600px){ .oid-flow{flex-direction:column;} .oid-arrow{transform:rotate(90deg);margin-top:0;} .home-oid-title{font-size:28px;} }

.clickable-tiers .tier-link{
  display:flex;align-items:center;gap:14px;cursor:pointer;padding:9px 10px;border-radius:8px;
}
.clickable-tiers .tier-link:hover{background:var(--panel-2);}
.clickable-tiers .tier-link i{margin-left:auto;font-size:11px;color:var(--text-dim);flex-shrink:0;}

@media(max-width:600px){ .sports-stats-row{grid-template-columns:repeat(2,1fr);} }

/* ===== SPORTS WORKSPACE™ V2 (Layer 2) ===== */
/* FIX (2026-08-15): .workspace-view is a SIBLING to .fws-shell, not
   nested inside it — meaning it never inherited .fws-shell's
   padding-top compensation for the fixed header. This is the real
   reason the "Back to Sports Overview" button appeared invisible: it
   genuinely existed with a working click handler the whole time, but
   was rendering directly behind the fixed header (z-index:100),
   covered and unclickable. Same measured CSS variable used everywhere
   else the fixed header needs to be cleared. */
.workspace-view{padding:24px 36px;padding-top:calc(24px + var(--fixed-top-height, 110px));}
@media(max-width:1449px){ .workspace-view{padding-top:calc(24px + var(--fixed-top-height, 220px));} } /* header stacks to 3 rows in this range — taller */
@media(max-width:992px){ .workspace-view{padding-top:76px;} } /* .fws-header hidden here, .mobile-topbar (60px) is the real header */
.workspace-topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:18px;flex-wrap:wrap;}
.workspace-match-title{display:flex;align-items:center;gap:10px;font-size:14px;}
.workspace-match-title .vs{color:var(--text-dim);font-size:12px;}
.workspace-match-title .ws-minute{color:var(--gold);font-weight:700;font-size:12px;}

.workspace-grid{display:grid;grid-template-columns:250px 1fr 280px;gap:16px;margin-bottom:18px;}

.ws-tabs{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap;}
.ws-tab{background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);padding:6px 11px;border-radius:7px;font-size:11px;cursor:pointer;}
.ws-tab.active{background:var(--gold);color:#0B0B0D;border-color:var(--gold);font-weight:700;}
.ws-match-list{list-style:none;display:flex;flex-direction:column;gap:8px;}
.ws-match{background:var(--panel-2);border-radius:9px;padding:10px 12px;font-size:11.5px;cursor:pointer;border:1px solid transparent;}
.ws-match-empty{padding:16px 12px;font-size:11.5px;color:var(--text-dim);text-align:center;font-style:italic;}
.ws-match.active{border-color:var(--gold);}
.ws-match:hover{border-color:var(--gold);}
.wm-league{display:block;color:var(--text-dim);font-size:10px;margin-bottom:5px;}
.wm-teams{display:block;font-size:12px;margin-bottom:4px;}
.wm-live{color:var(--green);font-weight:700;font-size:10.5px;}
.wm-time{color:var(--text-dim);font-size:10.5px;}

.ws-scoreboard{display:flex;align-items:center;justify-content:center;gap:28px;padding:22px 0;margin-bottom:16px;background:var(--panel-2);border-radius:12px;}
.ws-team{display:flex;flex-direction:column;align-items:center;gap:8px;}
.wt-badge{width:38px;height:38px;border-radius:50%;background:var(--panel);border:1px solid var(--border);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:15px;}
.ws-team strong{font-size:12.5px;}
.ws-score{font-size:26px;font-weight:800;color:var(--gold);}
.ws-center-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:14px;}

.ws-learn{margin-bottom:12px;}

/* Shared layout components — same classes used on Trading Dashboard
   and Sports Workspace (and future workspaces). Specific classes
   like .watchlist-card / .ws-observe still carry their own detail
   styling; these carry the structural role so future workspaces can
   reuse them without redefining the pattern. */
.observe-panel{}
.workspace-center{}
.ai-reading-panel{}
.learn-panel{}

.ws-league-filter{margin-bottom:12px;}
.ws-league-filter select{width:100%;background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:9px 11px;border-radius:8px;font-size:11.5px;}

/* Custom scrollable dropdown — replaces native <select> so the list
   can never be limited by the browser's un-stylable popup height. */
.custom-select{position:relative;}
.custom-select-btn{
  width:100%;background:var(--panel-2);border:1px solid var(--border);color:var(--text);
  padding:9px 11px;border-radius:8px;font-size:11.5px;text-align:left;cursor:pointer;
  display:flex;justify-content:space-between;align-items:center;
}
.custom-select-btn i{font-size:10px;color:var(--text-dim);}
.custom-select-list{
  position:absolute;top:calc(100% + 4px);left:0;right:0;z-index:30;
  background:var(--panel-2);border:1px solid var(--border);border-radius:8px;
  max-height:220px;overflow-y:auto;list-style:none;box-shadow:0 8px 20px rgba(0,0,0,.4);
}
.custom-select-list li{padding:9px 12px;font-size:11.5px;color:var(--text-dim);cursor:pointer;}
.custom-select-list li:hover{background:var(--panel);color:var(--text);}

.ws-match-header{display:flex;align-items:center;justify-content:center;gap:24px;padding:20px 0;margin-bottom:16px;background:var(--panel-2);border-radius:12px;}
.ws-score-block{display:flex;flex-direction:column;align-items:center;gap:4px;}
.ws-score-block .ws-score{font-size:26px;font-weight:800;color:var(--gold);}
.ws-competition{font-size:10px;color:var(--text-dim);}

.ws-timeline{background:var(--panel-2);border-radius:10px;padding:12px 14px;margin-bottom:14px;}
.ws-timeline h6{font-size:10px;letter-spacing:1px;color:var(--text-dim);margin-bottom:9px;text-transform:uppercase;}
.ws-timeline h6 i{color:var(--gold);margin-right:5px;}
.ws-timeline-row{display:flex;gap:16px;flex-wrap:wrap;}
.ws-tl-item{font-size:11.5px;color:var(--text-dim);}
.ws-tl-item.ws-tl-latest{color:var(--gold);font-weight:700;}

.ws-visual-placeholder{
  display:flex;align-items:center;gap:10px;background:var(--panel-2);border:1px dashed var(--border);
  border-radius:9px;padding:14px;margin-top:8px;font-size:12px;color:var(--text-dim);
}
.ws-visual-placeholder i{font-size:15px;color:var(--gold);}
.ws-visual-placeholder span{margin-left:auto;font-size:10px;font-style:italic;color:#5A5A60;}

/* Sport Selector — always visible inside the workspace */
.ws-sport-selector{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:18px;}
.ws-sport-btn{background:var(--panel);border:1px solid var(--border);color:var(--text-dim);padding:9px 14px;border-radius:9px;font-size:12px;cursor:pointer;}
.ws-sport-btn.active{background:var(--panel-2);color:var(--text);border-color:var(--gold);font-weight:700;}

/* Recent Form colored badges */
.form-badges{display:inline-flex;gap:5px;vertical-align:middle;}
.fb{width:22px;height:22px;border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;}
.fb-w{background:rgba(60,184,120,.18);color:var(--green);}
.fb-d{background:rgba(201,166,70,.18);color:var(--gold);}
.fb-l{background:rgba(225,74,59,.18);color:var(--red);}

/* In-workspace AI Mentor drawer — slides in from the right, never
   navigates away. Reuses .chat-window/.chat-input-row from AI Hub
   so the interaction pattern matches exactly. */
.ws-ai-drawer{
  /* FIX (2026-08-17): was position:fixed;top:0 with z-index:90 — the
     fixed header (z-index:100, taller than this drawer's own top
     padding) rendered directly on top of the drawer's own close
     button, making it invisible and unreachable. Exact same root
     cause and fix as the Sports Workspace back button from an
     earlier round: use the real measured header height instead of
     assuming top:0 is clear, and raise z-index above the header's so
     nothing in the drawer can ever be covered again. */
  position:fixed;top:var(--fixed-top-height, 110px);right:0;bottom:0;width:380px;max-width:92vw;
  background:var(--panel);border-left:1px solid var(--border);z-index:110;
  padding:20px;display:flex;flex-direction:column;box-shadow:-8px 0 24px rgba(0,0,0,.4);
}
.ws-drawer-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:14px;}
.ws-drawer-close{background:none;border:none;color:var(--text-dim);font-size:22px;cursor:pointer;line-height:1;}
.ws-drawer-context{
  font-size:11px;color:var(--text-dim);background:var(--panel-2);border-radius:9px;
  padding:10px 12px;margin-bottom:14px;line-height:1.5;
}
.ws-drawer-context i{color:var(--gold);margin-right:5px;}
.ws-ai-drawer .chat-window{flex:1;min-height:0;}
.ws-ai-drawer .chat-input-row{margin-bottom:12px;}

@media(max-width:600px){ .ws-ai-drawer{width:100%;max-width:100%;} }
@media(max-width:992px){ .ws-ai-drawer{top:60px;} } /* .fws-header hidden here, .mobile-topbar (60px) is the real header */

@media(max-width:1150px){ .workspace-grid{grid-template-columns:1fr;} }
@media(max-width:700px){ .workspace-view{padding:18px;} }

/* ===== AUTH MODAL ===== */
.auth-modal{position:fixed;inset:0;background:rgba(0,0,0,.7);display:flex;align-items:center;justify-content:center;z-index:100;padding:16px;}
.auth-modal[hidden]{display:none;}
.auth-modal-card{background:var(--panel);border:1px solid var(--border);border-radius:16px;padding:32px;width:340px;max-width:90vw;position:relative;}
.auth-close{position:absolute;top:14px;right:16px;background:none;border:none;color:var(--text-dim);font-size:20px;cursor:pointer;}
.auth-tabs{display:flex;gap:8px;margin-bottom:16px;}
.auth-tab{flex:1;background:var(--panel-2);border:1px solid var(--border);color:var(--text-dim);padding:9px;border-radius:8px;font-size:12.5px;font-weight:600;cursor:pointer;}
.auth-tab.active{background:var(--gold);color:#0B0B0D;border-color:var(--gold);}
.auth-copy{font-size:12px;color:var(--text-dim);margin-bottom:15px;line-height:1.4;}
.auth-status{font-size:11.5px;padding:9px 12px;border-radius:8px;margin-bottom:12px;line-height:1.4;}
.auth-status.auth-status-error{background:rgba(214,69,69,.12);border:1px solid rgba(214,69,69,.4);color:var(--red);}
.auth-status.auth-status-ok{background:rgba(31,174,107,.12);border:1px solid rgba(31,174,107,.4);color:var(--green);}
.auth-link-btn{background:none;border:none;color:var(--gold);font-size:11.5px;cursor:pointer;padding:4px 0;text-align:center;}
.auth-form{display:flex;flex-direction:column;gap:9px;}
.auth-form input{background:var(--panel-2);border:1px solid var(--border);color:var(--text);padding:10px 13px;border-radius:8px;font-size:12.5px;}
.btn-primary{background:var(--gold);color:#0B0B0D;border:none;padding:10px;border-radius:9px;font-weight:700;font-size:12.5px;cursor:pointer;}
.btn-primary.full{width:100%;}

/* ============================================================
   LAPTOP / TABLET TIER (2026-08-11) — the genuinely missing middle
   ground between full desktop and the mobile overhaul below. Uses
   explicit min+max ranges so nothing here ever overlaps or conflicts
   with the existing max-width:1150px rules further down (those
   already correctly stack dash-grid/hub-grid/workspace-grid to a
   single column for anything 1150px and under — this section only
   ever applies ABOVE that, filling the real gap that existed between
   "full desktop" and "already-mobile-prepped"). No existing selector
   is redefined, no component restructured — every rule below only
   adds new behavior at a width the platform never actually addressed.

   Same 3 sub-tiers requested: large laptop, small laptop, tablet. */

/* ---- Large laptop (1151px–1440px) — ~95% of the desktop experience,
   per the explicit request: keep the same layout, just reclaim space
   that a laptop screen genuinely doesn't have as much of. ---- */
@media (min-width:1151px) and (max-width:1680px) {
  .fws-sidebar { width: 200px; }
  .fws-main { padding: 22px 26px; margin-left: 200px; }
  .workspace-grid { grid-template-columns: 210px 1fr 230px; }
  /* header-mantra intentionally NOT hidden here (removed 2026-08-11)
     — laptop should feel like ~95% of desktop, and this rotating
     text is real content the user wants visible, not decorative
     filler safe to cut. */
}

/* ---- Small laptop (993px–1150px) — sidebar becomes an icon rail
   (labels hidden, icons + active-state still fully functional) so
   the main content genuinely gets laptop-appropriate room, while
   every nav item stays one click away, nothing removed. ---- */
@media (min-width:993px) and (max-width:1150px) {
  .fws-sidebar { width: 68px; padding: 18px 8px; align-items: center; }
  .nav-item { justify-content: center; padding: 10px; font-size: 0; gap: 0; }
  .nav-item i { font-size: 17px; }
  .sidebar-upgrade { display: none; }
  .fws-main { padding: 20px; margin-left: 68px; }
}

/* ---- Tablet (769px–992px) — sidebar becomes a full off-canvas
   drawer (the same real, working hamburger drawer already built for
   phones — reused here rather than inventing a second nav pattern),
   and the Market Overview 3-column layout adapts to 2 columns:
   Sideeq AI™ + chart side by side, AI Mentor™ moves below at full
   width, matching the explicit "AI panel moves below the chart on
   tablet" request without changing the panel order in the HTML. ---- */
@media (min-width:769px) and (max-width:992px) {
  /* FIX (2026-08-14): .fws-header and .identity-strip are now
     position:fixed (previously sticky) — without being explicitly
     hidden here, they would visibly overlap .mobile-topbar below,
     since fixed elements are guaranteed to render regardless of
     document flow. .mobile-topbar is the real header at this width. */
  .fws-header, .identity-strip { display: none; }
  .fws-shell { padding-top: 60px; } /* matches .mobile-topbar's real height, not the taller desktop header's */
  .mobile-topbar { display: flex; align-items: center; gap: 14px; position: fixed; top: 0; left: 0; right: 0; z-index: 100; background: #0B0B0D; border-bottom: 1px solid var(--border); padding: 14px 16px; }
  .mobile-menu-btn { background: none; border: 1px solid var(--border); color: var(--text); width: 38px; height: 38px; border-radius: 8px; font-size: 16px; cursor: pointer; display: flex; align-items: center; justify-content: center; flex-shrink: 0; }
  .mobile-topbar-brand { font-size: 13.5px; font-weight: 700; color: var(--gold); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .fws-sidebar {
    position: fixed; top: 0; left: 0; bottom: 0; z-index: 50;
    width: 320px; max-width: 80vw;
    flex-direction: column; overflow-y: auto; overflow-x: hidden;
    border-right: 1px solid var(--border); background: #0B0B0D;
    transform: translateX(-100%); transition: transform .25s ease;
  }
  .fws-sidebar.mobile-open { transform: translateX(0); }
  .mobile-menu-close { display: flex; align-items: center; justify-content: center; align-self: flex-end; margin: 10px 14px 4px; background: none; border: 1px solid var(--border); color: var(--text); width: 32px; height: 32px; border-radius: 8px; font-size: 14px; cursor: pointer; }
  .mobile-nav-overlay.active { display: block; position: fixed; inset: 0; z-index: 45; background: rgba(0,0,0,.6); }
  /* Sidebar is off-canvas (hidden by default) at this width — no
     permanent space needs to be reserved for it. */
  .fws-main { padding: 20px; margin-left: 0; }

  /* Real 2-column adaptation for Market Overview, not just a stack —
     Sideeq AI™ (first child) + chart (second child) sit side by
     side, AI Mentor™ (third child) spans full width beneath. */
  .workspace-grid { grid-template-columns: 220px 1fr; }
  .workspace-grid > *:nth-child(3) { grid-column: 1 / -1; }

  .dash-grid, .hub-grid { grid-template-columns: 1fr; }
}


/* Global safety net — nothing should ever be able to force
   horizontal scroll on the page itself, regardless of what any
   individual component does. */
html, body { max-width: 100%; overflow-x: hidden; }

/* Mobile topbar + hamburger — hidden on desktop/tablet, only
   appears below 768px where the sidebar becomes a drawer. */
.mobile-topbar { display: none; }
.mobile-nav-overlay { display: none; }
.mobile-menu-close { display: none; }
/* FIX (2026-08-14): pushes the new mobile avatar button to the far
   right of the topbar — applies at every breakpoint mobile-topbar
   shows at, defined once here rather than repeated per breakpoint. */
.mobile-avatar-btn { margin-left: auto; flex-shrink: 0; width: 34px; height: 34px; }

@media (max-width: 768px) {
  /* FIX (2026-08-17): .chart-mount had a fixed 460px height with zero
     mobile adjustment anywhere — against a narrow phone width, that
     produces an oddly tall, poorly-proportioned chart. Both Auto and
     Manual mode use this same class, so this fixes candlestick
     proportions for both at once. ResizeObserver (already wired to
     the chart) picks up this height change automatically and
     re-positions the HSB™ zone band correctly to match. */
  .chart-mount { height: 240px; }
  #marketOverviewStub.focus-mode .chart-mount { height: 300px; }
  /* FIX (2026-08-31): the Sideeq AI/Mentor field lists (12 rows each)
     were using the same 11px row gap as desktop - compounds to real,
     significant height on a phone screen. Tightened here specifically
     for mobile; desktop spacing is untouched. */
  .sb-fields { gap: 6px; }
  .sb-fields li { font-size: 11px; }
  .recent-topics { gap: 6px; }
  .ai-mentor-actions { gap: 8px; }
  .ai-mentor-close-mobile { display: flex; align-items: center; justify-content: center; }
  .ai-mentor-reopen-pill.visible { display: flex; }
  /* FIX (2026-08-14): .fws-header and .identity-strip are position:fixed
     now — hide them explicitly here, same reasoning as the tablet tier
     above, since .mobile-topbar is the real header at this width. */
  .fws-header, .identity-strip { display: none; }
  .fws-shell { padding-top: 60px; }
  .mobile-topbar {
    display: flex; align-items: center; gap: 14px;
    position: fixed; top: 0; left: 0; right: 0; z-index: 100;
    background: #0B0B0D; border-bottom: 1px solid var(--border);
    padding: 14px 16px;
  }
  .mobile-menu-btn {
    background: none; border: 1px solid var(--border); color: var(--text);
    width: 38px; height: 38px; border-radius: 8px; font-size: 16px; cursor: pointer;
    display: flex; align-items: center; justify-content: center; flex-shrink: 0;
  }
  .mobile-topbar-brand { font-size: 13.5px; font-weight: 700; color: var(--gold); min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

  .mobile-nav-overlay.active {
    display: block; position: fixed; inset: 0; z-index: 45;
    background: rgba(0,0,0,.6);
  }

  /* Sidebar becomes a genuine off-canvas slide-in drawer — not a
     horizontally-scrolling strip, matching how a real mobile app
     navigates rather than a squeezed-down desktop layout. */
  .fws-sidebar {
    position: fixed; top: 0; left: 0; bottom: 0; z-index: 50;
    width: 78vw; max-width: 300px;
    flex-direction: column; overflow-y: auto; overflow-x: hidden;
    border-right: 1px solid var(--border); border-bottom: none;
    background: #0B0B0D;
    transform: translateX(-100%); transition: transform .25s ease;
  }
  .fws-sidebar.mobile-open { transform: translateX(0); }
  .mobile-menu-close {
    display: flex; align-items: center; justify-content: center;
    align-self: flex-end; margin: 10px 14px 4px;
    background: none; border: 1px solid var(--border); color: var(--text);
    width: 32px; height: 32px; border-radius: 8px; font-size: 14px; cursor: pointer;
  }
  .sidebar-upgrade { display: block; }
  .identity-strip { position: static; }
  .identity-item { min-width: 0; flex-direction: column; align-items: flex-start; gap: 4px; }
  .id-status { margin-left: 0; }

  /* Main content area — full width, reduced padding, no fixed
     min-widths anywhere that could force horizontal scroll. */
  .fws-main { padding: 16px; margin-left: 0; }
  #marketOverviewStub.focus-mode .fws-main { padding: 16px; margin-left: 0; }

  /* Typography scale-down — every heading/body size drops one notch
     on small screens rather than staying desktop-sized and forcing
     zoom/scroll. */
  body { font-size: 13px; }
  h1, .home-oid-title { font-size: 22px !important; }
  h2 { font-size: 18px; }
  h3 { font-size: 15px; }
  h4 { font-size: 13px; }
  .card-head h4 { font-size: 12.5px; }

  /* Cards — reduced padding/margins so more real content fits per
     screen without feeling cramped or requiring pinch-zoom. */
  .card { padding: 14px; margin-bottom: 14px; border-radius: 12px; }
  .card-head { margin-bottom: 10px; }
  .tier-card, .discussion-room, .edu-course-card { padding: 12px; }

  /* Every multi-column grid across every page collapses to a single
     column below 768px — consolidated here instead of scattered
     per-component, so nothing is missed. Existing narrower
     breakpoints (700px, 600px, 500px) still apply underneath this
     for further refinement, they just no longer have to do the
     primary stacking work alone. */
  .fws-shell, .dash-grid, .hub-grid, .workspace-grid, .mo-secondary-grid,
  .home-top-grid, .home-bottom-grid, .qa-grid, .we-grid, .wwd-grid,
  .cred-grid, .hero-division-grid, .spd-grid, .course-grid,
  .edu-bottom-grid, .lib-grid, .community-stats-row,
  .discussion-room-grid, .settings-form, .contact-row-list {
    grid-template-columns: 1fr !important;
  }
  .qa-grid, .we-grid, .wwd-grid, .cred-grid, .hero-division-grid,
  .spd-grid, .course-grid, .community-stats-row, .discussion-room-grid {
    gap: 10px;
  }

  /* Toolbars, button rows, and mode-switchers stack vertically and
     go full-width rather than squeezing into a cramped single row. */
  .dash-toolbar, .trading-access-btns, .home-welcome-row,
  .mode-toggle, .account-btns, .edu-toolbar {
    flex-direction: column; align-items: stretch;
  }
  .trading-access-btns .btn-outline, .trading-access-btns .btn-primary { min-width: 0; }

  /* Any wide element (tables, TradingView symbol lists, market
     tabs) scrolls WITHIN itself rather than pushing the whole page
     wider than the viewport. */
  .fws-markets-table-wrap, .wl-table-wrap, .market-tabs, .lib-topics,
  .edu-cats, .sentiment-list, table {
    max-width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch;
  }

  /* TradingView / chart embeds — force the outer container to real
     100% width so the widget's own internal 100% setting has
     something correct to measure against, rather than inheriting a
     stray fixed width from a parent. */
  .tradingview-widget-container, #tvChartContainer, #tvSymbolInfo,
  .chart-panel, .sentiment-card, .ai-insight { width: 100%; max-width: 100%; }

  /* Two of the decorative background animations genuinely force a
     repaint every frame (heroDrift animates background-position,
     gaugeGlow animates box-shadow) rather than using GPU-composited
     properties like transform/opacity — real, continuous cost on
     mobile GPUs across every card using them. Both run via ::before/
     ::after pseudo-elements, not the base classes directly — targets
     corrected accordingly. Disabled on mobile; heroRayRotate (a
     transform-based rotation) is cheap and stays running. */
  .home-hero::before, .hero-bg-echo::before, .hero-bg-echo-soft::before,
  .hero-bg-echo-full::before, .hero-bg-echo-faint::before, .hero-bg-echo-whisper::before,
  .nav-item.active::before {
    animation: none !important;
  }
  .gauge-ring { animation: none !important; box-shadow: 0 0 24px var(--gauge-shadow-color, rgba(60,184,120,.3)) !important; }

  /* Sticky + backdrop-filter is a known-expensive combination on
     mobile — sticky positioning already forces the browser to
     recompute on every scroll frame, and blur compounds that cost
     significantly on mobile GPUs. Drop the blur on mobile, keep the
     sticky behavior and a solid background instead. */
  .mem-ladder-sticky { backdrop-filter: none; background: rgba(11,11,13,.97); }

  /* Gauges/rings and other fixed-px decorative elements shrink to
     fit rather than overflowing their card on narrow screens. */
  .gauge-wrap, .gauge-ring { max-width: 160px; margin-left: auto; margin-right: auto; }

  /* Modals — reduced padding so the 90vw safety net (set on
     .auth-modal-card/.profile-modal-card in the base stylesheet)
     doesn't feel cramped, and the Lesson Viewer's wider inline
     520px override is capped back down to the same safe width. */
  .auth-modal-card, .profile-modal-card { padding: 20px; }
  #lessonViewerModal .auth-modal-card { width: 90vw !important; }
}

@media (max-width: 480px) {
  /* Smallest phones get one more reduction pass. */
  .fws-main { padding: 12px; }
  .card { padding: 12px; }
  body { font-size: 12.5px; }
  .home-oid-title { font-size: 19px !important; }
  .community-stats-row, .discussion-room-grid { grid-template-columns: 1fr !important; }
}

/* ===== (legacy narrower-breakpoint rules below still apply,
   refining layout further inside the single-column base the 768px
   block above establishes) ===== */
@media(max-width:760px){
  .fws-main { padding: 16px; }
}
a:focus-visible,button:focus-visible,input:focus-visible{outline:2px solid var(--gold);outline-offset:2px;}