/* ===========================================================
   Market Context page styles. Loaded ONLY by market-context.html.
   Builds on the shared variables/classes in styles.css.
   =========================================================== */

/* Dashboard hero */
.dash-hero{
  display:flex;align-items:flex-end;justify-content:space-between;
  gap:18px;flex-wrap:wrap;
  padding:34px 0 10px;
}
.dash-hero-text{max-width:640px}
.dash-hero h1{margin:14px 0 10px;font-size:40px;line-height:1.06;letter-spacing:-.02em}
.dash-hero .lead{margin:0;font-size:17px}

/* Live status bar */
.livebar{
  display:flex;align-items:center;gap:12px;
  border:1px solid rgba(34,48,94,.85);
  background:rgba(255,255,255,.02);
  border-radius:14px;padding:10px 12px;
}
.livebar-status{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--muted)}
.live-dot{
  width:9px;height:9px;border-radius:999px;background:#8dffcb;
  box-shadow:0 0 0 0 rgba(141,255,203,.6);
  animation:pulse 2s infinite;
}
.live-dot.stale{background:#ffcf7a;animation:none}
.live-dot.error{background:#ff9aa5;animation:none}
@keyframes pulse{
  0%{box-shadow:0 0 0 0 rgba(141,255,203,.5)}
  70%{box-shadow:0 0 0 8px rgba(141,255,203,0)}
  100%{box-shadow:0 0 0 0 rgba(141,255,203,0)}
}

/* Tabs */
.tabs{
  display:inline-flex;gap:4px;margin-top:18px;
  border:1px solid rgba(34,48,94,.85);
  background:rgba(255,255,255,.02);
  border-radius:14px;padding:4px;
}
.tab{
  appearance:none;border:0;cursor:pointer;
  padding:9px 16px;border-radius:10px;
  background:transparent;color:var(--muted);
  font:inherit;font-weight:600;font-size:14px;
  transition:background .15s,color .15s;
}
.tab:hover{color:var(--text)}
.tab.active{
  background:linear-gradient(135deg, var(--accent), rgba(43,92,255,.65));
  color:#fff;box-shadow:0 8px 24px rgba(43,92,255,.22);
}

/* Boards */
.board{display:none;margin-top:18px}
.board.active{display:block}
.board-loading{
  color:var(--muted);padding:40px 0;text-align:center;font-size:14px;
}
.board-loading.hidden{display:none}

/* Commodity / crypto metric groups */
.metric-group{margin-bottom:18px}
.metric-group-title{
  font-size:12px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--muted);margin:0 0 10px;font-weight:700;
}
.metric-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;
  align-items:start; /* an expanded card doesn't stretch its row-mates */
}
.metric-card{
  border:1px solid rgba(34,48,94,.85);
  background:linear-gradient(180deg, rgba(255,255,255,.03), rgba(255,255,255,.01)), var(--card);
  border-radius:16px;padding:14px;
  transition:border-color .15s, transform .15s;
}
.metric-card:hover{border-color:rgba(43,92,255,.5);transform:translateY(-1px)}
.metric-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.metric-label{font-weight:700;font-size:14px}
.metric-symbol{font-size:11px;color:rgba(234,240,255,.45)}
.metric-price{font-size:26px;font-weight:800;margin:8px 0 6px;letter-spacing:-.01em}
.metric-flash{animation:flash .8s ease}
@keyframes flash{0%{background:rgba(43,92,255,.18)}100%{background:transparent}}

.change-pill{
  display:inline-flex;align-items:center;gap:5px;
  padding:3px 9px;border-radius:999px;font-size:13px;font-weight:700;
}
.change-pill.pos{background:rgba(141,255,203,.12);color:#8dffcb;border:1px solid rgba(141,255,203,.3)}
.change-pill.neg{background:rgba(255,154,165,.10);color:#ff9aa5;border:1px solid rgba(255,154,165,.3)}
.change-pill.flat{background:rgba(234,240,255,.06);color:var(--muted);border:1px solid rgba(34,48,94,.8)}

/* Day range bar */
.range{margin-top:14px}
.range-head{
  display:flex;align-items:center;justify-content:space-between;
  margin-bottom:7px;font-size:11px;color:var(--muted);
}
.range-pct{font-weight:700;color:var(--accent2)}
.range-bar{position:relative;height:8px}            /* not clipped — holds the marker */
.range-track{
  position:absolute;inset:0;border-radius:999px;
  background:rgba(34,48,94,.8);overflow:hidden;     /* clips only the fill */
}
.range-fill{position:absolute;top:0;bottom:0;left:0;border-radius:999px;
  background:linear-gradient(90deg, rgba(43,92,255,.55), rgba(157,180,255,.85))}
.range-marker{
  position:absolute;top:50%;width:12px;height:12px;border-radius:999px;
  transform:translate(-50%,-50%);
  background:var(--text);border:2px solid var(--accent);
  box-shadow:0 0 8px rgba(157,180,255,.85);
}
.range-labels{display:flex;justify-content:space-between;margin-top:8px;
  font-size:11px;color:rgba(234,240,255,.5)}

.metric-sub{font-size:12px;color:rgba(234,240,255,.55);margin-top:4px}
.metric-error{color:#ff9aa5;font-size:12px;margin-top:6px}

/* EIA Storage + Weather + Macro extra sections */
.extra-section{margin-top:22px}
.eia-card{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:12px;
  border:1px solid rgba(34,48,94,.85);border-radius:14px;
  background:rgba(255,255,255,.02);padding:14px;margin-top:8px;
}
.eia-stat{display:flex;flex-direction:column;gap:4px}
.eia-label{font-size:11px;color:var(--muted)}
.eia-val{font-size:20px;font-weight:800}
.eia-unit{font-size:13px;font-weight:400;color:var(--muted)}
.eia-period{grid-column:1/-1;font-size:11px;color:rgba(234,240,255,.4);margin-top:4px}
.wx-grid{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.wx-city{
  display:flex;justify-content:space-between;align-items:center;
  padding:8px 12px;border-radius:10px;
  border:1px solid rgba(34,48,94,.8);background:rgba(255,255,255,.02);font-size:13px;
}
.wx-name{font-weight:600}
.wx-temp{color:var(--muted)}

/* Click-to-expand 24h trend chart */
.metric-card.clickable{cursor:pointer}
.chart-hint{
  margin-top:10px;font-size:11px;text-align:right;
  color:rgba(234,240,255,.4);transition:color .15s;
}
.metric-card.clickable:hover .chart-hint{color:var(--accent2)}
.metric-card.open .chart-hint{color:var(--accent2)}
.chart-wrap{display:none}
.metric-card.open .chart-wrap{
  display:block;margin-top:10px;padding-top:12px;
  border-top:1px solid rgba(34,48,94,.55);
}
.spark-box{position:relative}
.spark{width:100%;height:80px;display:block}

/* Interactive crosshair overlays (positioned via JS — CSSOM, CSP-safe) */
.cross-x{
  position:absolute;top:0;bottom:0;width:1px;
  background:rgba(234,240,255,.4);opacity:0;pointer-events:none;
  transform:translateX(-0.5px);transition:opacity .1s;
}
.cross-dot{
  position:absolute;width:9px;height:9px;border-radius:999px;
  background:var(--text);border:2px solid var(--accent);
  opacity:0;pointer-events:none;transform:translate(-50%,-50%);transition:opacity .1s;
}
.spark-tip{
  position:absolute;transform:translateX(-50%);
  background:rgba(15,23,48,.97);border:1px solid rgba(34,48,94,.95);
  border-radius:8px;padding:4px 8px;font-size:11px;font-weight:700;white-space:nowrap;
  color:var(--text);opacity:0;pointer-events:none;z-index:6;
  box-shadow:0 8px 20px rgba(0,0,0,.4);transition:opacity .1s;
}

/* Hover description tooltip on the % pills */
.change-pill.tip{cursor:help;position:relative}
.change-pill.tip:hover::after{
  content:attr(data-tip);
  position:absolute;bottom:calc(100% + 9px);left:50%;transform:translateX(-50%);
  width:158px;white-space:normal;text-align:left;line-height:1.35;
  background:rgba(15,23,48,.98);border:1px solid rgba(34,48,94,.95);
  color:var(--text);font-size:11px;font-weight:500;
  padding:7px 9px;border-radius:8px;box-shadow:0 10px 26px rgba(0,0,0,.45);
  z-index:7;pointer-events:none;
}
.change-pill.tip:hover::before{
  content:"";position:absolute;bottom:calc(100% + 4px);left:50%;transform:translateX(-50%);
  border:5px solid transparent;border-top-color:rgba(34,48,94,.95);z-index:7;pointer-events:none;
}

.chart-meta{display:flex;align-items:center;justify-content:space-between;margin-top:8px}
.chart-tf{font-size:11px;color:var(--muted)}
.chart-hilo{display:flex;justify-content:space-between;margin-top:6px;font-size:11px;color:rgba(234,240,255,.5)}
.chart-loading,.chart-error{font-size:12px;color:var(--muted);padding:16px 0;text-align:center}
.chart-error{color:#ff9aa5}

/* ---------- Sports board ---------- */
.sport-section{margin-bottom:22px}
.sport-section:last-child{margin-bottom:0}
.sport-section-label{
  font-size:12px;text-transform:uppercase;letter-spacing:.08em;
  color:var(--muted);font-weight:700;margin-bottom:10px;
}
.sport-live-status{
  margin-top:8px;font-size:13px;font-weight:700;color:var(--accent2);
}
.game-sport-label{font-size:11px;color:rgba(234,240,255,.5)}

/* ---------- MLB game cards ---------- */
.grid-games{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;
  align-items:start; /* an expanded box score doesn't stretch its row-mates */
}
.game-card{
  border:1px solid rgba(34,48,94,.85);
  background:linear-gradient(180deg, rgba(255,255,255,.03), rgba(255,255,255,.01)), var(--card);
  border-radius:18px;overflow:hidden;
  display:flex;flex-direction:column;
}
.game-card.live{border-color:rgba(141,255,203,.45);box-shadow:0 14px 40px rgba(141,255,203,.07)}

.game-head{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  padding:11px 14px;border-bottom:1px solid rgba(34,48,94,.7);
  font-size:12px;color:var(--muted);
}
.status-badge{
  display:inline-flex;align-items:center;gap:6px;
  padding:3px 9px;border-radius:999px;font-weight:700;font-size:11px;
  border:1px solid rgba(34,48,94,.9);background:rgba(255,255,255,.02);
}
.status-badge.live{border-color:rgba(141,255,203,.5);background:rgba(141,255,203,.10);color:#8dffcb}
.status-badge.final{border-color:rgba(157,180,255,.4);color:var(--accent2)}
.status-badge .live-dot{width:7px;height:7px}

.game-body{padding:12px 14px}
.team-row{
  display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:center;
  padding:7px 0;
}
.team-row + .team-row{border-top:1px solid rgba(34,48,94,.45)}
.team-id{display:flex;align-items:center;gap:9px;min-width:0}
.team-logo{
  width:26px;height:26px;border-radius:8px;flex:0 0 auto;
  background:linear-gradient(135deg, rgba(43,92,255,.75), rgba(157,180,255,.55));
  border:1px solid rgba(234,240,255,.12);
  display:flex;align-items:center;justify-content:center;
  font-size:10px;font-weight:800;color:#fff;letter-spacing:.02em;
}
.ti-text{min-width:0}  /* lets .team-name truncate with ellipsis inside flex */
.team-name{font-weight:700;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.team-record{font-size:12px;color:rgba(234,240,255,.5)}
.team-runs{font-size:22px;font-weight:800;min-width:28px;text-align:right}
.team-runs.dim{color:rgba(234,240,255,.35);font-size:15px;font-weight:600}

/* Pre-game matchup */
.matchup-info{margin-top:10px;font-size:12.5px;color:rgba(234,240,255,.62);line-height:1.5}
.matchup-info .mi-label{color:var(--muted);font-weight:600}
.weather{margin-top:6px;font-size:12px;color:rgba(234,240,255,.5)}

/* Live state strip */
.live-strip{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  margin-top:11px;padding-top:11px;border-top:1px solid rgba(34,48,94,.55);
}
.inning{display:flex;align-items:center;gap:6px;font-size:13px;font-weight:700}
.inning .arrow{color:var(--accent2)}
.count{font-size:13px;font-weight:700;color:var(--text);margin-left:auto}

/* Base diamond */
.diamond{position:relative;width:42px;height:42px;flex:0 0 auto}
.base{
  position:absolute;width:13px;height:13px;
  background:rgba(34,48,94,.9);border:1px solid rgba(157,180,255,.25);
  transform:rotate(45deg);border-radius:2px;
}
.base.on{background:linear-gradient(135deg,#ffcf7a,#ffb454);border-color:#ffcf7a;
  box-shadow:0 0 8px rgba(255,207,122,.6)}
.base.second{top:0;left:50%;margin-left:-6.5px}
.base.first{top:50%;right:0;margin-top:-6.5px}
.base.third{top:50%;left:0;margin-top:-6.5px}

/* Live pitching / at-bat matchup */
.matchup-live{
  margin-top:10px;display:flex;flex-direction:column;gap:6px;
}
.ml-row{
  display:flex;align-items:center;justify-content:space-between;gap:10px;
  font-size:13px;
}
.ml-label{color:var(--muted);font-size:12px;font-weight:600;white-space:nowrap}
.ml-name{color:var(--text);font-weight:700;text-align:right;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ml-break{font-size:12.5px;color:var(--muted);font-style:italic}

/* Expand box score */
.expand-btn{
  width:100%;border:0;border-top:1px solid rgba(34,48,94,.7);
  background:rgba(255,255,255,.02);color:var(--accent2);
  padding:10px;cursor:pointer;font:inherit;font-weight:600;font-size:13px;
  transition:background .15s;
}
.expand-btn:hover{background:rgba(43,92,255,.08)}
.boxscore{display:none;padding:0 14px 14px;border-top:1px solid rgba(34,48,94,.55)}
.boxscore.open{display:block}
.box-team{margin-top:14px}
.box-team-title{font-size:12px;font-weight:800;color:var(--accent2);margin-bottom:6px;
  text-transform:uppercase;letter-spacing:.05em}
.box-table{width:100%;border-collapse:collapse;font-size:12px}
.box-table th{
  text-align:right;color:var(--muted);font-weight:600;padding:4px 5px;
  border-bottom:1px solid rgba(34,48,94,.6);font-size:11px;
}
.box-table th:first-child{text-align:left}
.box-table td{text-align:right;padding:4px 5px;border-bottom:1px solid rgba(34,48,94,.35)}
.box-table td:first-child{text-align:left;white-space:nowrap;max-width:130px;
  overflow:hidden;text-overflow:ellipsis}
.box-table tr.cur td{color:#8dffcb}
.box-table tr.cur td:first-child::after{content:" ●";font-size:9px}
.box-empty{color:var(--muted)}
.pos-tag{color:rgba(234,240,255,.4)}
.box-loading{padding:18px 0}

/* Footer data-source credit */
.footer-left{display:flex;flex-direction:column;gap:6px}
.data-credit{font-size:12px;color:rgba(234,240,255,.5)}
.data-credit a{color:rgba(234,240,255,.7);text-decoration:none}
.data-credit a:hover{color:var(--accent2);text-decoration:underline}

.empty-state{
  grid-column:1/-1;text-align:center;color:var(--muted);
  padding:50px 0;font-size:14px;
}

/* Stocks tab */
.stock-search-wrap{display:flex;gap:10px;margin-bottom:20px}
.stock-search-input{
  flex:1;padding:12px 14px;border-radius:12px;
  border:1px solid rgba(34,48,94,.9);background:rgba(255,255,255,.03);
  color:var(--text);font:inherit;font-size:15px;
}
.stock-search-input:focus{outline:none;border-color:rgba(43,92,255,.8);box-shadow:0 0 0 3px rgba(43,92,255,.18)}
.stock-search-input::placeholder{color:rgba(234,240,255,.4)}
.stock-result-card{
  border:1px solid rgba(34,48,94,.85);border-radius:16px;
  background:linear-gradient(180deg,rgba(255,255,255,.03),rgba(255,255,255,.01)),var(--card);
  padding:18px;display:grid;grid-template-columns:1fr auto;gap:8px 14px;align-items:start;
}
.stock-spark-wrap{width:100%;margin:8px 0 4px;grid-column:1/-1}
.stock-spark-box{position:relative;width:100%}
.stock-spark{width:100%;height:60px;display:block}
.stock-range-btns{grid-column:1/-1;display:flex;gap:6px}
.stock-range-btn{
  appearance:none;border:1px solid rgba(34,48,94,.8);background:rgba(255,255,255,.02);
  color:var(--muted);font:inherit;font-size:12px;font-weight:700;
  padding:4px 12px;border-radius:8px;cursor:pointer;transition:all .15s;
}
.stock-range-btn:hover{border-color:rgba(43,92,255,.5);color:var(--text)}
.stock-range-btn.active{border-color:rgba(43,92,255,.7);background:rgba(43,92,255,.15);color:var(--accent2)}
.range-pct-label{font-weight:400;opacity:.7}
.stock-name{font-size:18px;font-weight:800}
.stock-ticker{font-size:13px;color:var(--muted);margin-top:2px}
.stock-price{font-size:32px;font-weight:800;text-align:right}
.stock-change{text-align:right;margin-top:4px}
.stock-meta{grid-column:1/-1;display:flex;gap:14px;flex-wrap:wrap;margin-top:10px;
  padding-top:10px;border-top:1px solid rgba(34,48,94,.6);font-size:13px;color:var(--muted)}
.stock-meta span b{color:var(--text)}
.stock-loading{color:var(--muted);font-size:14px;padding:20px 0}
.stock-error{color:#ff9aa5;font-size:14px;padding:20px 0}

@media (max-width:980px){
  .dash-hero h1{font-size:32px}
  .livebar{width:100%;justify-content:space-between}
  .tabs{width:100%;justify-content:stretch}
  .tab{flex:1}
}
