/* ═══════════════════════════════════════════════════════════════════
   KING TERMINAL — thème futuriste noir/cyan
   RHQuant v2 · paper-only · UI 100% FR
   ═══════════════════════════════════════════════════════════════════ */
:root {
  --bg: #030608;
  --panel: rgba(10, 20, 28, 0.55);
  --panel-hard: rgba(8, 16, 24, 0.82);
  --cyan: #00f0ff;
  --cyan-dim: rgba(0, 240, 255, 0.35);
  --cyan-faint: rgba(0, 240, 255, 0.12);
  --magenta: #ff2d78;
  --amber: #ffb300;
  --green: #20ffa8;
  --red: #ff3b5c;
  --text: #cfe9ee;
  --text-dim: #6d8a94;
  --font-display: 'Orbitron', sans-serif;
  --font-mono: 'JetBrains Mono', monospace;
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html, body {
  background: var(--bg);
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 14px;
  min-height: 100%;
  -webkit-font-smoothing: antialiased;
  font-variant-numeric: tabular-nums;
}

/* ── Fond 3D + overlays ─────────────────────────────────────────── */
#scene3d {
  position: fixed; inset: 0; z-index: 0;
}
#scene3d canvas { display: block; }

.scanlines {
  position: fixed; inset: 0; z-index: 2; pointer-events: none;
  background: repeating-linear-gradient(
    to bottom,
    transparent 0px, transparent 2px,
    rgba(0, 0, 0, 0.18) 3px, rgba(0, 0, 0, 0.18) 4px
  );
  mix-blend-mode: multiply;
}
.vignette {
  position: fixed; inset: 0; z-index: 1; pointer-events: none;
  background: radial-gradient(ellipse at center, transparent 55%, rgba(0,0,0,.55) 100%);
}

/* ── Structure ──────────────────────────────────────────────────── */
#app {
  position: relative; z-index: 3;
  max-width: 1560px; margin: 0 auto;
  padding: 86px 22px 40px;
}

/* ── Header HUD ─────────────────────────────────────────────────── */
header.hud {
  position: fixed; top: 0; left: 0; right: 0; z-index: 10;
  display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
  padding: 10px 22px;
  background: linear-gradient(180deg, rgba(3,6,8,.96), rgba(3,6,8,.78));
  border-bottom: 1px solid var(--cyan-faint);
  backdrop-filter: blur(10px);
}
.brand {
  font-family: var(--font-display);
  font-size: 17px; font-weight: 700; letter-spacing: 2px;
  color: var(--cyan);
  text-shadow: 0 0 12px var(--cyan-dim);
  white-space: nowrap;
}
.brand .dot { color: var(--magenta); text-shadow: 0 0 10px var(--magenta); }

.badge-paper {
  font-family: var(--font-display); font-size: 10px; letter-spacing: 1.5px;
  color: var(--amber); border: 1px solid var(--amber);
  padding: 4px 9px;
  clip-path: polygon(6px 0, 100% 0, 100% calc(100% - 6px), calc(100% - 6px) 100%, 0 100%, 0 6px);
  background: rgba(255,179,0,.08);
  white-space: nowrap;
}

.status-pills { display: flex; gap: 8px; flex-wrap: wrap; margin-left: auto; }
.pill {
  font-size: 10.5px; letter-spacing: .8px;
  padding: 4px 10px;
  border: 1px solid var(--cyan-dim);
  color: var(--text-dim);
  background: rgba(0,240,255,.05);
  clip-path: polygon(5px 0, 100% 0, 100% calc(100% - 5px), calc(100% - 5px) 100%, 0 100%, 0 5px);
  white-space: nowrap;
}
.pill b { color: var(--text); font-weight: 600; }
.pill.ok   { border-color: var(--cyan);   color: var(--cyan);   box-shadow: 0 0 10px rgba(0,240,255,.25) inset; }
.pill.ok b { color: var(--cyan); }
.pill.warn { border-color: var(--amber);  color: var(--amber); }
.pill.warn b { color: var(--amber); }
.pill.bad  { border-color: var(--red);    color: var(--red);    box-shadow: 0 0 10px rgba(255,59,92,.25) inset; }
.pill.bad b { color: var(--red); }

/* ── Bannière kill switch ───────────────────────────────────────── */
.killswitch-banner {
  display: none;
  border: 1px solid var(--red);
  background: rgba(255,59,92,.10);
  color: var(--red);
  font-family: var(--font-display); font-size: 12px; letter-spacing: 1.5px;
  padding: 12px 16px; margin-bottom: 18px;
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
  text-shadow: 0 0 8px rgba(255,59,92,.5);
}
.killswitch-banner.active { display: block; }
.killswitch-banner small { display: block; font-family: var(--font-mono); font-size: 11px; letter-spacing: 0; color: var(--text-dim); margin-top: 5px; }

/* ── Panneaux glassmorphism ─────────────────────────────────────── */
.panel {
  background: var(--panel);
  border: 1px solid var(--cyan-faint);
  backdrop-filter: blur(12px);
  clip-path: polygon(14px 0, 100% 0, 100% calc(100% - 14px), calc(100% - 14px) 100%, 0 100%, 0 14px);
  padding: 16px 18px;
  margin-bottom: 18px;
}
.panel > h2 {
  font-family: var(--font-display); font-size: 12px; font-weight: 600;
  letter-spacing: 2.5px; color: var(--cyan);
  text-shadow: 0 0 10px var(--cyan-dim);
  margin-bottom: 14px;
  display: flex; align-items: center; gap: 10px;
}
.panel > h2 .sub { font-family: var(--font-mono); font-size: 10px; color: var(--text-dim); letter-spacing: 1px; }

/* ── Hero metrics ───────────────────────────────────────────────── */
.hero-grid {
  display: grid; gap: 14px;
  grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
  margin-bottom: 18px;
}
.metric {
  background: var(--panel);
  border: 1px solid var(--cyan-faint);
  backdrop-filter: blur(12px);
  clip-path: polygon(12px 0, 100% 0, 100% calc(100% - 12px), calc(100% - 12px) 100%, 0 100%, 0 12px);
  padding: 14px 16px;
  position: relative;
}
.metric::before {
  content: ''; position: absolute; top: 0; left: 0; width: 34px; height: 2px;
  background: var(--cyan); box-shadow: 0 0 8px var(--cyan);
}
.metric .label {
  font-size: 9.5px; letter-spacing: 2px; color: var(--text-dim);
  text-transform: uppercase; margin-bottom: 8px;
}
.metric .value {
  font-family: var(--font-display); font-size: 24px; font-weight: 700;
  color: var(--text); text-shadow: 0 0 14px rgba(0,240,255,.25);
}
.metric .value.pos { color: var(--green); text-shadow: 0 0 14px rgba(32,255,168,.35); }
.metric .value.neg { color: var(--magenta); text-shadow: 0 0 14px rgba(255,45,120,.35); }
.metric .alt { font-size: 11px; color: var(--text-dim); margin-top: 6px; }
.metric .alt b { color: var(--cyan); font-weight: 500; }

/* ── Command center : copilote + surveillance ───────────────────── */
.command-grid {
  display: grid;
  grid-template-columns: minmax(0, 2fr) minmax(330px, .82fr);
  gap: 18px;
  align-items: start;
}
.command-side { min-width: 0; }
.command-side .panel { margin-bottom: 18px; }
.copilot-panel { background: rgba(7, 18, 26, .82); border-color: rgba(0,240,255,.28); }
.section-kicker {
  display: block; color: var(--text-dim); font-size: 8.5px;
  letter-spacing: 1.7px; margin-bottom: 5px;
}
.compact-title { align-items: flex-start; }
.compact-title h2 { margin-top: 2px; }
.opportunity-filters { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.opportunity-summary {
  margin: -2px 0 12px; padding: 9px 11px;
  color: var(--text-dim); background: rgba(0,240,255,.035);
  border-left: 2px solid var(--cyan); font-size: 10.5px;
}
.evidence-coverage-gauges {
  margin: -3px 0 12px; padding: 10px; border-radius: 10px;
  background: rgba(0,240,255,.025);
  box-shadow: inset 0 0 0 1px rgba(0,240,255,.11), 0 8px 20px rgba(0,0,0,.12);
  font-variant-numeric: tabular-nums;
}
.evidence-coverage-heading { display: flex; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.evidence-coverage-heading span { color: var(--cyan); font: 700 8.5px var(--font-display); letter-spacing: 1px; }
.evidence-coverage-heading small { color: var(--text-dim); font-size: 7.5px; text-align: right; overflow-wrap: anywhere; }
.evidence-coverage-grid { display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 6px; }
.evidence-gauge { min-width: 0; padding: 8px; border-radius: 6px; background: rgba(255,255,255,.025); }
.evidence-gauge > div:first-child { display: flex; justify-content: space-between; gap: 5px; align-items: baseline; }
.evidence-gauge span { color: var(--text-dim); font-size: 6.8px; letter-spacing: .65px; overflow-wrap: anywhere; }
.evidence-gauge b { color: var(--text); font: 700 10px var(--font-display); }
.evidence-gauge small { display: block; margin-top: 4px; color: #54727d; font-size: 6.8px; }
.evidence-gauge-track { height: 3px; margin-top: 6px; overflow: hidden; border-radius: 3px; background: rgba(255,255,255,.06); }
.evidence-gauge-track i { display: block; height: 100%; background: linear-gradient(90deg, var(--cyan), var(--green)); }
.risk-block-counters {
  margin: -3px 0 12px; padding: 10px; border-radius: 10px;
  background: rgba(255,45,120,.035);
  box-shadow: inset 0 0 0 1px rgba(255,45,120,.12), 0 8px 20px rgba(0,0,0,.14);
  font-variant-numeric: tabular-nums;
}
.risk-block-heading { display: flex; justify-content: space-between; gap: 10px; margin-bottom: 8px; }
.risk-block-heading span { color: var(--magenta); font: 700 8.5px var(--font-display); letter-spacing: 1px; }
.risk-block-heading small { color: var(--text-dim); font-size: 7.5px; text-align: right; }
.risk-block-grid { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 6px; }
.risk-block-counter { min-width: 0; padding: 8px; border-radius: 6px; background: rgba(255,255,255,.025); }
.risk-block-counter span, .risk-block-counter b, .risk-block-counter small { display: block; }
.risk-block-counter span { color: var(--text-dim); font-size: 7px; letter-spacing: .8px; }
.risk-block-counter b { margin-top: 3px; color: var(--text); font: 700 15px var(--font-display); }
.risk-block-counter small { margin-top: 3px; color: #54727d; font-size: 6.8px; overflow-wrap: anywhere; }
.opportunity-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 11px; }
.opportunity-card {
  min-width: 0; padding: 13px; position: relative; overflow: hidden;
  background: linear-gradient(145deg, rgba(11,25,34,.96), rgba(5,13,20,.96));
  border: 1px solid var(--cyan-faint);
  border-radius: 12px;
  box-shadow: 0 12px 28px rgba(0,0,0,.22), inset 0 1px rgba(255,255,255,.025);
}
.opportunity-card::before {
  content: ''; position: absolute; inset: 0 auto 0 0; width: 3px; background: var(--cyan);
}
.opportunity-card.watch::before { background: var(--amber); }
.opportunity-card.avoid::before { background: var(--magenta); }
.opportunity-head, .opportunity-identity, .opportunity-actions {
  display: flex; align-items: center; justify-content: space-between; gap: 10px;
}
.stance {
  display: inline-flex; align-items: center; min-height: 24px; padding: 3px 7px;
  font: 700 8.5px var(--font-display); letter-spacing: .9px;
  border: 1px solid currentColor; border-radius: 5px;
}
.stance.favorable { color: var(--green); background: rgba(32,255,168,.07); }
.stance.watch { color: var(--amber); background: rgba(255,179,0,.07); }
.stance.avoid { color: var(--magenta); background: rgba(255,45,120,.07); }
.opportunity-age { color: var(--text-dim); font-size: 9px; white-space: nowrap; }
.opportunity-identity { margin: 12px 0 9px; align-items: flex-end; }
.opportunity-identity > div:first-child { min-width: 0; }
.opportunity-symbol {
  display: block; max-width: 100%; overflow: hidden; text-overflow: ellipsis;
  font: 700 16px var(--font-display); color: #fff; border: 0;
}
.opportunity-identity small { display: block; margin-top: 4px; color: var(--text-dim); font-size: 8.5px; }
.mc-value { text-align: right; flex: 0 0 auto; }
.mc-value span, .opportunity-kpis small, .decision-box > span, .blocker-box > span {
  display: block; color: var(--text-dim); font-size: 7.5px; letter-spacing: 1.1px;
}
.mc-value b { display: block; color: var(--cyan); font: 700 14px var(--font-display); margin-top: 3px; }
.score-track { height: 3px; background: rgba(255,255,255,.055); overflow: hidden; border-radius: 3px; }
.score-track span { display: block; height: 100%; background: linear-gradient(90deg, var(--cyan), var(--green)); }
.opportunity-card.watch .score-track span { background: linear-gradient(90deg, var(--amber), var(--cyan)); }
.opportunity-card.avoid .score-track span { background: linear-gradient(90deg, var(--magenta), var(--amber)); }
.signal-outcome { display: grid; grid-template-columns: 1fr auto; gap: 3px 10px; margin-top: 9px; padding: 9px; border-left: 2px solid var(--green); background: rgba(32,255,168,.045); }
.signal-outcome.negative { border-left-color: var(--magenta); background: rgba(255,45,120,.06); }
.signal-outcome span { color: var(--text-dim); font-size: 7.5px; letter-spacing: 1px; }
.signal-outcome b { color: var(--green); font-size: 13px; }
.signal-outcome.negative b { color: var(--magenta); }
.signal-outcome small { grid-column: 1 / -1; color: var(--text); font-size: 9px; }
.opportunity-kpis { display: grid; grid-template-columns: repeat(4, 1fr); gap: 5px; margin: 10px 0; }
.opportunity-kpis > span { min-width: 0; padding: 7px; background: rgba(255,255,255,.025); border-radius: 6px; }
.opportunity-kpis b { display: block; margin-top: 3px; color: var(--text); font-size: 10px; overflow-wrap: anywhere; }
.evidence-freshness {
  margin-top: 8px; padding: 9px; border-radius: 8px; background: rgba(255,255,255,.02);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.055); font-variant-numeric: tabular-nums;
}
.evidence-freshness > div { color: var(--text-dim); font-size: 7px; letter-spacing: 1px; }
.evidence-freshness section { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 5px; margin-top: 7px; }
.evidence-freshness-item { min-width: 0; padding: 6px; border-radius: 5px; background: rgba(255,255,255,.025); }
.evidence-freshness-item b, .evidence-freshness-item small, .evidence-freshness-item em { display: block; overflow-wrap: anywhere; }
.evidence-freshness-item b { color: var(--text); font-size: 7px; letter-spacing: .7px; }
.evidence-freshness-item small { margin-top: 3px; color: var(--green); font-size: 6.5px; }
.evidence-freshness-item em { margin-top: 3px; color: #54727d; font-size: 6.3px; font-style: normal; }
.evidence-freshness-item.stale small { color: var(--amber); }
.evidence-freshness-item.missing small { color: var(--magenta); }
.holder-intelligence {
  margin-top: 8px; padding: 9px; border-radius: 10px; background: rgba(53,226,255,.025);
  box-shadow: inset 0 0 0 1px rgba(53,226,255,.10); font-variant-numeric: tabular-nums;
}
.holder-intelligence-head { color: var(--cyan); font-size: 7px; letter-spacing: 1px; }
.holder-intelligence-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; margin-top: 7px; }
.holder-intelligence-grid section {
  min-width: 0; padding: 7px; border-radius: 7px; background: rgba(255,255,255,.025);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.05);
}
.holder-intelligence-grid section:first-child { grid-column: 1 / -1; }
.holder-intelligence-grid span, .holder-intelligence-grid b, .holder-intelligence-grid small {
  display: block; min-width: 0; overflow-wrap: anywhere;
}
.holder-intelligence-grid span { color: var(--text-dim); font-size: 6.5px; letter-spacing: .6px; }
.holder-intelligence-grid b { margin-top: 3px; color: var(--text); font-size: 9px; }
.holder-intelligence-grid small { margin-top: 3px; color: #54727d; font-size: 6.5px; text-wrap: pretty; }
.holder-intelligence details { margin-top: 4px; }
.holder-intelligence summary {
  display: flex; align-items: center; min-height: 40px; color: var(--cyan); cursor: pointer;
  font-size: 6.5px; letter-spacing: .5px; transition-property: color, opacity; transition-duration: 120ms;
}
.holder-intelligence summary:active { scale: .96; }
.holder-intelligence ul { display: grid; gap: 3px; margin: 0; padding: 0; list-style: none; }
.holder-intelligence li { display: flex; justify-content: space-between; gap: 8px; }
.holder-intelligence code { color: var(--text); font-size: 7px; }
@media (max-width: 720px) { .holder-intelligence-grid { grid-template-columns: 1fr; } }
.creator-outflows {
  margin-top: 8px; padding: 9px; border-radius: 8px; background: rgba(255,255,255,.02);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.055); font-variant-numeric: tabular-nums;
}
.creator-outflows > div { color: var(--text-dim); font-size: 7px; letter-spacing: 1px; }
.creator-outflows > small { display: block; margin-top: 6px; color: #54727d; font-size: 6.5px; text-wrap: pretty; }
.creator-outflows p {
  display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 3px 8px; align-items: center;
  margin-top: 7px; padding: 7px; border-radius: 6px; background: rgba(255,176,32,.045);
  box-shadow: inset 0 0 0 1px rgba(255,176,32,.14);
}
.creator-outflows p b, .creator-outflows p span { min-width: 0; overflow-wrap: anywhere; }
.creator-outflows p b { color: var(--amber); font-size: 7px; letter-spacing: .7px; }
.creator-outflows p span { grid-column: 1; color: var(--text); font-size: 7px; }
.creator-outflows p a { grid-column: 2; grid-row: 1 / span 2; color: var(--cyan); font-size: 7px; }
.creator-outflows.missing small { color: var(--magenta); }
.creator-outflows.clear small { color: var(--green); }
.linked-wallet-outflows {
  margin-top: 8px; padding: 9px; border-radius: 8px; background: rgba(255,255,255,.02);
  box-shadow: inset 0 0 0 1px rgba(255,255,255,.055); font-variant-numeric: tabular-nums;
}
.linked-wallet-outflows > div { color: var(--text-dim); font-size: 7px; letter-spacing: 1px; }
.linked-wallet-outflows > small { display: block; margin-top: 6px; color: #54727d; font-size: 6.5px; text-wrap: pretty; }
.linked-wallet-outflows section {
  margin-top: 7px; padding: 7px; border-radius: 6px; background: rgba(255,176,32,.045);
  box-shadow: inset 0 0 0 1px rgba(255,176,32,.14);
}
.linked-wallet-outflows section > div { display: flex; justify-content: space-between; gap: 8px; }
.linked-wallet-outflows section > div b { color: var(--amber); font-size: 7px; letter-spacing: .7px; }
.linked-wallet-outflows section > div span { color: var(--text-dim); font-size: 7px; }
.linked-wallet-outflows ul { display: grid; gap: 5px; margin-top: 6px; }
.linked-wallet-outflows li {
  display: flex; justify-content: space-between; gap: 8px; min-width: 0; padding-top: 5px;
  border-top: 1px solid rgba(255,255,255,.05); color: var(--text); font-size: 7px;
}
.linked-wallet-outflows li > span { min-width: 0; overflow-wrap: anywhere; }
.linked-wallet-outflows li > span:last-child { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
.linked-wallet-outflows a { color: var(--cyan); }
.linked-wallet-outflows.missing small { color: var(--magenta); }
.linked-wallet-outflows.clear small { color: var(--green); }
.decision-box, .blocker-box { padding: 9px; margin-top: 7px; border-radius: 7px; background: rgba(0,240,255,.035); }
.decision-box p, .blocker-box p { color: var(--text); font-size: 9.5px; line-height: 1.45; margin-top: 4px; text-wrap: pretty; }
.gate-evidence { padding: 9px; margin-top: 7px; border-radius: 7px; background: rgba(0,240,255,.025); box-shadow: inset 0 0 0 1px rgba(0,240,255,.08); }
.neutrality-flags { display: flex; flex-wrap: wrap; gap: 5px; margin-bottom: 8px; }
.neutrality-flag { padding: 3px 6px; border-radius: 4px; color: var(--cyan); background: rgba(0,240,255,.07); font-size: 7px; font-weight: 700; letter-spacing: .75px; }
.gate-columns { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.gate-columns h4 { color: var(--text-dim); font-size: 7px; letter-spacing: 1px; }
.gate-columns p { margin-top: 5px; color: var(--text-dim); font-size: 8px; line-height: 1.35; text-wrap: pretty; }
.gate-columns p span { display: block; margin-top: 2px; }
.gate-state { display: block; color: var(--amber); overflow-wrap: anywhere; }
.gate-state.passed { color: var(--green); }
.gate-state.blocked { color: var(--magenta); }
.gate-state.neutral { color: var(--cyan); }
.gate-empty { color: var(--text-dim); }
.social-evidence { padding: 8px 9px; margin-top: 7px; border-radius: 7px; border-left: 2px solid var(--amber); background: rgba(255,179,0,.05); }
.social-evidence.origin { border-left-color: var(--green); background: rgba(32,255,168,.05); }
.social-evidence span { color: var(--amber); font-size: 7.5px; letter-spacing: 1px; }
.social-evidence.origin span { color: var(--green); }
.social-evidence p { color: var(--text); font-size: 9px; margin-top: 4px; }
.blocker-box.blocked { background: rgba(255,179,0,.055); border-left: 2px solid var(--amber); }
.blocker-box.clear { background: rgba(32,255,168,.045); border-left: 2px solid var(--green); }
.invalidation { color: var(--text-dim); font-size: 8.5px; line-height: 1.45; margin-top: 7px; }
.invalidation b { color: var(--magenta); letter-spacing: .8px; }
.opportunity-actions { justify-content: flex-start; flex-wrap: wrap; margin-top: 11px; }
.opportunity-action {
  display: inline-flex; align-items: center; justify-content: center; min-height: 40px;
  padding: 0 9px; border: 1px solid var(--cyan-dim); border-radius: 6px;
  background: rgba(0,240,255,.055); color: var(--cyan); text-decoration: none;
  font: 700 8px var(--font-display); letter-spacing: .7px; cursor: pointer;
  transition-property: border-color, color, background-color, transform;
  transition-duration: 130ms;
}
.opportunity-action.secondary { color: var(--text-dim); background: transparent; }
.opportunity-action:hover, .opportunity-action:focus-visible { color: #fff; border-color: var(--cyan); outline: none; }
.opportunity-action:active { transform: scale(.96); }
.connection-panel[hidden] { display: none; }
.connection-graph {
  margin-top: 10px; padding: 10px; border-radius: 10px;
  background: rgba(0,240,255,.025);
  box-shadow: inset 0 0 0 1px rgba(0,240,255,.12), 0 8px 20px rgba(0,0,0,.16);
  font-variant-numeric: tabular-nums;
}
.connection-graph-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.connection-graph-head b, .connection-graph > div:first-child { color: var(--cyan); font: 700 8px var(--font-display); letter-spacing: .8px; }
.connection-graph-head small, .connection-graph.empty small { color: var(--text-dim); font-size: 7px; text-align: right; overflow-wrap: anywhere; }
.connection-graph svg { display: block; width: 100%; max-height: 210px; margin: 7px 0; overflow: visible; }
.graph-edges line { stroke: rgba(0,240,255,.5); stroke-width: 1.5; }
.graph-node { color: var(--text-dim); cursor: pointer; outline: none; }
.graph-node circle { fill: #0b1922; stroke: currentColor; stroke-width: 1.5; transition-property: fill, stroke, transform; transition-duration: 130ms; transform-origin: center; transform-box: fill-box; }
.graph-node.token { color: var(--cyan); }
.graph-node text { fill: currentColor; font: 7px var(--font-mono); text-anchor: middle; }
.graph-node:hover circle, .graph-node:focus-visible circle { fill: rgba(0,240,255,.16); stroke: #fff; transform: scale(1.08); }
.connection-graph ul { display: grid; gap: 5px; margin: 0; padding: 0; list-style: none; }
.connection-graph li { display: grid; grid-template-columns: 1fr auto; gap: 2px 8px; padding-top: 5px; box-shadow: inset 0 1px rgba(255,255,255,.05); font-size: 7.5px; }
.connection-graph li a { color: var(--cyan); text-decoration: none; }
.connection-graph li small { grid-column: 1 / -1; color: #54727d; overflow-wrap: anywhere; }
.connection-graph.loading, .connection-graph.empty { color: var(--text-dim); font-size: 8px; line-height: 1.5; }
.proof-line { margin-top: 9px; color: #54727d; font-size: 7.5px; letter-spacing: .7px; overflow-wrap: anywhere; }
.decision-disclaimer { margin-top: 12px; color: var(--text-dim); font-size: 8.5px; line-height: 1.5; text-align: center; }

.agent-health { padding: 4px 7px; border: 1px solid var(--cyan-faint); border-radius: 5px; font-size: 8px; letter-spacing: .8px; }
.agent-health.ok { color: var(--green); border-color: rgba(32,255,168,.4); }
.agent-health.warn { color: var(--amber); border-color: rgba(255,179,0,.4); }
.agent-health.bad { color: var(--red); border-color: rgba(255,59,92,.4); }
.cohort-strip { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin:10px 0; font-variant-numeric:tabular-nums; }
.cohort-strip > b { grid-column:1/-1; color:var(--cyan); font-size:9px; letter-spacing:.8px; }
.cohort-strip span { min-width:0; padding:8px; border-radius:6px; box-shadow:inset 0 0 0 1px rgba(0,240,255,.14); background:rgba(0,240,255,.025); }
.cohort-strip strong,.cohort-strip em { display:block; overflow-wrap:anywhere; }
.cohort-strip strong { color:#fff; font-size:9px; } .cohort-strip em { color:var(--text-dim); font-size:8px; font-style:normal; margin-top:3px; }
.desk-health-panel,.autonomy-journal { display:grid; gap:6px; font-variant-numeric:tabular-nums; }
.desk-health-panel p,.autonomy-journal article { margin:0; padding:7px; border-radius:6px; box-shadow:inset 0 0 0 1px rgba(0,240,255,.12); background:rgba(0,240,255,.025); }
.desk-health-panel p { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:3px 8px; }
.desk-health-panel small { grid-column:1/-1; color:var(--text-dim); font-size:7px; }
.autonomy-journal article span,.autonomy-journal article small { display:block; margin-top:2px; color:var(--text-dim); font-size:7.5px; overflow-wrap:anywhere; }
.agent-primary { display: grid; grid-template-columns: 26px 1fr; gap: 9px; align-items: center; padding-bottom: 12px; border-bottom: 1px solid var(--cyan-faint); }
.agent-primary b, .agent-primary small { display: block; }
.agent-primary b { color: #fff; font: 700 10px var(--font-display); }
.agent-primary small { color: var(--text-dim); font-size: 9px; line-height: 1.45; margin-top: 4px; }
.agent-orb { width: 20px; height: 20px; border-radius: 50%; background: var(--red); box-shadow: 0 0 14px rgba(255,59,92,.5); }
.agent-orb.ok { background: var(--green); box-shadow: 0 0 14px rgba(32,255,168,.55); }
.agent-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 7px; margin: 11px 0; }
.agent-grid div { padding: 8px; background: rgba(255,255,255,.025); border-radius: 6px; }
.agent-grid span, .agent-grid b { display: block; }
.agent-grid span { color: var(--text-dim); font-size: 7.5px; letter-spacing: .8px; }
.agent-grid b { color: var(--text); margin-top: 4px; font-size: 10px; }
.agent-grid b.pos { color: var(--green); }
.agent-grid b.neg { color: var(--magenta); }
.agent-pipeline { display: flex; align-items: center; justify-content: space-between; gap: 4px; font-size: 7px; letter-spacing: .4px; }
.agent-pipeline span { padding: 4px; border-radius: 4px; background: rgba(255,255,255,.03); color: var(--text-dim); }
.agent-pipeline span.ok { color: var(--green); }
.agent-pipeline span.warn { color: var(--amber); }
.agent-pipeline span.bad { color: var(--red); }
.agent-pipeline i { color: #31505a; font-style: normal; }

.news-radar { display: grid; gap: 8px; }
.narrative-row { display: grid; grid-template-columns: 1fr auto; gap: 5px 10px; min-width: 0; }
.narrative-row b, .narrative-row small { display: block; }
.narrative-row b { color: var(--text); font: 700 9px var(--font-display); }
.narrative-row small { color: var(--text-dim); font-size: 8px; margin-top: 3px; }
.narrative-score { color: var(--cyan); font: 700 10px var(--font-display); }
.narrative-bar { grid-column: 1 / -1; height: 3px; background: rgba(255,255,255,.05); border-radius: 3px; overflow: hidden; }
.narrative-bar span { display: block; height: 100%; background: linear-gradient(90deg, var(--cyan), var(--magenta)); }

/* ── Grilles de contenu ─────────────────────────────────────────── */
.grid-2 { display: grid; gap: 18px; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.grid-3 { display: grid; gap: 18px; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.grid-2 > *, .grid-3 > * { min-width: 0; }
@media (max-width: 1100px) { .grid-2, .grid-3 { grid-template-columns: 1fr; } }
@media (max-width: 1260px) {
  .command-grid { grid-template-columns: 1fr; }
  .command-side { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
}
@media (max-width: 700px) {
  .evidence-coverage-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .evidence-coverage-heading { display: grid; }
  .evidence-coverage-heading small { text-align: left; }
  .risk-block-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .risk-block-heading { display: grid; }
  .risk-block-heading small { text-align: left; }
}

/* ── Cartes positions / trades ──────────────────────────────────── */
.cards { display: grid; gap: 12px; grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
.card {
  background: var(--panel-hard);
  border: 1px solid var(--cyan-faint);
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
  padding: 13px 15px;
}
.card .card-head { display: flex; justify-content: space-between; align-items: center; margin-bottom: 9px; }
.card .sym { font-family: var(--font-display); font-size: 14px; color: var(--cyan); letter-spacing: 1px; }
.card .addr { font-size: 10px; color: var(--text-dim); }
.card .rows { display: grid; grid-template-columns: 1fr 1fr; gap: 5px 12px; font-size: 11.5px; }
.card .rows .k { color: var(--text-dim); }
.card .rows .v { text-align: right; color: var(--text); }
.card .rows .v.pos { color: var(--green); }
.card .rows .v.neg { color: var(--magenta); }
.card .rows .v.nd { color: var(--text-dim); font-style: italic; }

.pnl-tag {
  font-family: var(--font-display); font-size: 13px; padding: 3px 9px;
  clip-path: polygon(4px 0, 100% 0, 100% calc(100% - 4px), calc(100% - 4px) 100%, 0 100%, 0 4px);
}
.pnl-tag.pos { color: var(--green); border: 1px solid var(--green); background: rgba(32,255,168,.08); }
.pnl-tag.neg { color: var(--magenta); border: 1px solid var(--magenta); background: rgba(255,45,120,.08); }

.tpbar { height: 5px; background: rgba(255,255,255,.06); margin-top: 10px; position: relative; }
.tpbar .fill { position: absolute; inset: 0 auto 0 0; background: linear-gradient(90deg, var(--cyan), var(--green)); box-shadow: 0 0 8px var(--cyan-dim); }
.tpbar .labels { display: flex; justify-content: space-between; font-size: 9px; color: var(--text-dim); margin-top: 4px; }

.empty-state {
  padding: 26px; text-align: center; color: var(--text-dim);
  font-size: 12px; letter-spacing: 1px;
  border: 1px dashed var(--cyan-faint);
}

/* ── Podium stratégies ──────────────────────────────────────────── */
.podium { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-bottom: 14px; }
.podium .step {
  text-align: center; padding: 14px 10px;
  background: var(--panel-hard); border: 1px solid var(--cyan-faint);
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
}
.podium .step .medal { font-size: 20px; }
.podium .step.first { border-color: var(--cyan); box-shadow: 0 0 18px rgba(0,240,255,.18) inset; }
.podium .step .name { font-family: var(--font-display); font-size: 11.5px; color: var(--text); margin: 7px 0 5px; letter-spacing: 1px; }
.podium .step .stat { font-size: 10.5px; color: var(--text-dim); }
.podium .step .stat b { color: var(--cyan); }
.strat-list { display: grid; gap: 6px; font-size: 11.5px; }
.strat-list .row { display: grid; grid-template-columns: 30px 1fr 90px 90px 90px; gap: 8px; padding: 7px 10px; background: rgba(255,255,255,.02); border-left: 2px solid var(--cyan-faint); }
.strat-list .row.head { color: var(--text-dim); font-size: 9.5px; letter-spacing: 1.5px; text-transform: uppercase; border-left: none; background: none; }
.strat-list .row .r { text-align: right; }

/* ── Sniper feed ────────────────────────────────────────────────── */
.feed { display: grid; gap: 6px; max-height: 420px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--cyan-faint) transparent; }
.feed-item {
  display: grid; grid-template-columns: 86px minmax(0, 1fr) auto; gap: 10px; align-items: center;
  min-width: 0;
  padding: 8px 11px; font-size: 11.5px;
  background: rgba(255,255,255,.02);
  border-left: 2px solid var(--cyan-faint);
}
.feed-item > * { min-width: 0; }
.feed-item.buy   { border-left-color: var(--cyan); }
.feed-item.watch { border-left-color: var(--amber); }
.feed-item.avoid { border-left-color: var(--magenta); }
.feed-item .sym { font-family: var(--font-display); font-size: 12px; color: var(--text); overflow-wrap: anywhere; }
.feed-item .meta { color: var(--text-dim); font-size: 10.5px; overflow-wrap: anywhere; }
.feed-item .when { font-size: 10px; color: var(--text-dim); white-space: nowrap; }
.decision {
  font-size: 9.5px; font-family: var(--font-display); letter-spacing: 1px;
  padding: 3px 8px; display: inline-block;
  clip-path: polygon(4px 0, 100% 0, 100% calc(100% - 4px), calc(100% - 4px) 100%, 0 100%, 0 4px);
}
.decision.buy   { color: var(--cyan);    border: 1px solid var(--cyan);    background: rgba(0,240,255,.08); }
.decision.watch { color: var(--amber);   border: 1px solid var(--amber);   background: rgba(255,179,0,.08); }
.decision.avoid { color: var(--magenta); border: 1px solid var(--magenta); background: rgba(255,45,120,.08); }

/* ── Viralité ───────────────────────────────────────────────────── */
.viral-row { display: grid; grid-template-columns: 90px 1fr 46px; gap: 10px; align-items: center; margin-bottom: 8px; font-size: 11.5px; }
.viral-row .sym { font-family: var(--font-display); font-size: 11px; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.viral-bar { height: 8px; background: rgba(255,255,255,.05); position: relative; }
.viral-bar .fill { position: absolute; inset: 0 auto 0 0; background: linear-gradient(90deg, var(--cyan), var(--magenta)); box-shadow: 0 0 10px var(--cyan-dim); }
.viral-row .score { text-align: right; color: var(--cyan); font-family: var(--font-display); font-size: 11px; }

/* ── Alertes ────────────────────────────────────────────────────── */
.alert-item { display: grid; grid-template-columns: 10px 1fr auto; gap: 10px; padding: 8px 10px; font-size: 11.5px; background: rgba(255,255,255,.02); margin-bottom: 6px; align-items: start; }
.alert-dot { width: 8px; height: 8px; margin-top: 4px; border-radius: 50%; }
.alert-dot.critical, .alert-dot.avoid { background: var(--red); box-shadow: 0 0 8px var(--red); }
.alert-dot.high { background: var(--magenta); box-shadow: 0 0 8px var(--magenta); }
.alert-dot.watch, .alert-dot.medium { background: var(--amber); box-shadow: 0 0 8px var(--amber); }
.alert-dot.info, .alert-dot.low, .alert-dot.buy { background: var(--cyan); box-shadow: 0 0 8px var(--cyan); }
.alert-item .title { color: var(--text); }
.alert-item .msg { color: var(--text-dim); font-size: 10.5px; margin-top: 2px; }
.alert-item .when { font-size: 10px; color: var(--text-dim); white-space: nowrap; }

/* ── Charts ─────────────────────────────────────────────────────── */
.chart-box { height: 300px; position: relative; }
.chart-heading { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.chart-timeframes { display: flex; gap: 5px; }
.chart-evidence { min-height: 18px; margin: -3px 0 5px; color: var(--text-dim); font-size: 8.5px; letter-spacing: .35px; overflow-wrap: anywhere; }
.chart-box .chart-note {
  position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
  color: var(--text-dim); font-size: 11.5px; letter-spacing: 1px; text-align: center; padding: 20px;
}

/* ── Footer ─────────────────────────────────────────────────────── */
footer {
  text-align: center; color: var(--text-dim); font-size: 10px;
  letter-spacing: 2px; padding: 22px 0 6px;
  border-top: 1px solid var(--cyan-faint);
}
footer b { color: var(--cyan); font-weight: 500; }

/* ── Interactions token ─────────────────────────────────────────── */
.token-link {
  appearance: none; border: 0; background: none; padding: 0; margin: 0;
  color: var(--cyan); font: inherit; cursor: pointer; text-align: left;
  text-decoration: none; border-bottom: 1px dashed rgba(0,240,255,.35);
  max-width: 100%; overflow-wrap: anywhere;
}
.token-link:hover, .token-link:focus-visible { color: #fff; border-color: var(--cyan); text-shadow: 0 0 8px var(--cyan); outline: none; }
.token-link.disabled { cursor: default; color: var(--text-dim); border: 0; }

/* ── Tweets J7 officiels ────────────────────────────────────────── */
.panel-title-row { display: flex; align-items: center; justify-content: space-between; gap: 14px; margin-bottom: 14px; }
.panel-title-row h2 { font-family: var(--font-display); font-size: 12px; letter-spacing: 2.5px; color: var(--cyan); }
.panel-title-row .sub { font: 10px var(--font-mono); color: var(--text-dim); letter-spacing: 1px; }
.j7-toolbar { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; justify-content: flex-end; }
.filter-btn { border: 1px solid var(--cyan-faint); background: rgba(0,240,255,.04); color: var(--text-dim); padding: 5px 9px; font: 9px var(--font-display); letter-spacing: 1px; cursor: pointer; }
.filter-btn.active, .filter-btn:hover, .filter-btn:focus-visible { color: var(--cyan); border-color: var(--cyan); outline: none; }
.filter-btn.danger { color: var(--magenta); border-color: rgba(255,45,120,.35); }
.filter-btn.danger.active, .filter-btn.danger:hover, .filter-btn.danger:focus-visible { color: #fff; border-color: var(--magenta); background: rgba(255,45,120,.14); }
.coverage { color: var(--text-dim); font-size: 10px; margin-left: 5px; }
.tweet-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(330px, 1fr)); gap: 10px; max-height: 660px; overflow-y: auto; scrollbar-width: thin; scrollbar-color: var(--cyan-faint) transparent; }
.tweet-card { min-width: 0; padding: 13px; background: var(--panel-hard); border: 1px solid var(--cyan-faint); transition: border-color .15s ease, transform .15s ease; }
.tweet-card:hover { border-color: rgba(0,240,255,.48); transform: translateY(-1px); }
.tweet-head { display: grid; grid-template-columns: 42px 1fr auto; gap: 9px; align-items: center; }
.tweet-avatar-link { display: block; width: 42px; height: 42px; border-radius: 50%; text-decoration: none; }
.tweet-avatar-link:focus-visible { outline: 1px solid var(--cyan); outline-offset: 3px; }
.tweet-avatar { width: 42px; height: 42px; border-radius: 50%; object-fit: cover; border: 1px solid var(--cyan-dim); background: #081018; }
.tweet-avatar.fallback { display: grid; place-items: center; color: var(--cyan); font: 700 15px var(--font-display); }
.tweet-author { color: var(--text); font-weight: 700; text-decoration: none; overflow-wrap: anywhere; }
.tweet-author:hover { color: var(--cyan); }
.tweet-author small { display: block; color: var(--text-dim); font-weight: 400; margin-top: 2px; }
.tweet-age { color: var(--text-dim); font-size: 9.5px; white-space: nowrap; }
.tweet-text { display: block; color: var(--text); line-height: 1.55; margin: 11px 0; text-decoration: none; white-space: pre-wrap; overflow-wrap: anywhere; }
.tweet-text:hover { color: #fff; }
.tweet-flags { display: flex; flex-wrap: wrap; gap: 5px; min-height: 20px; }
.tweet-flag, .tweet-token { font-size: 8.5px; letter-spacing: .7px; padding: 3px 6px; border: 1px solid var(--cyan-faint); }
.tweet-flag.crypto { color: var(--cyan); }
.tweet-flag.meme { color: var(--amber); border-color: rgba(255,179,0,.35); }
.tweet-token.raw { color: var(--amber); border-color: rgba(255,179,0,.35); }
.tweet-metrics { display: flex; align-items: center; gap: 12px; color: var(--text-dim); font-size: 9.5px; margin-top: 10px; }
.source-proof { margin-left: auto; color: var(--cyan); font-size: 8.5px; letter-spacing: 1px; }

/* ── Fiche token ────────────────────────────────────────────────── */
body.modal-open { overflow: hidden; }
.modal { position: fixed; inset: 0; z-index: 50; display: none; }
.modal.open { display: block; }
.modal-backdrop { position: absolute; inset: 0; background: rgba(0,3,6,.82); backdrop-filter: blur(8px); }
.token-sheet { position: absolute; top: 0; right: 0; width: min(760px, 100%); height: 100%; overflow-y: auto; background: #071016; border-left: 1px solid var(--cyan); box-shadow: -18px 0 60px rgba(0,240,255,.12); padding: 28px; }
.modal-close { position: sticky; top: 0; z-index: 2; float: right; width: 36px; height: 36px; border: 1px solid var(--cyan-dim); background: #071016; color: var(--cyan); font-size: 24px; cursor: pointer; }
.modal-close:hover, .modal-close:focus-visible { border-color: var(--cyan); outline: none; }
.token-sheet-content { clear: both; padding-top: 10px; }
.modal-loading, .modal-error { min-height: 220px; display: grid; place-items: center; color: var(--cyan); letter-spacing: 1px; text-align: center; }
.modal-error { color: var(--red); }
.token-hero { display: flex; align-items: center; gap: 16px; border-bottom: 1px solid var(--cyan-faint); padding-bottom: 18px; }
.token-avatar { width: 72px; height: 72px; flex: 0 0 72px; display: grid; place-items: center; position: relative; overflow: hidden; border-radius: 50%; border: 1px solid var(--cyan); color: var(--cyan); background: radial-gradient(circle, rgba(0,240,255,.16), transparent); font: 700 20px var(--font-display); }
.token-avatar img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; background: #071016; }
.eyebrow { color: var(--text-dim); font-size: 9px; letter-spacing: 1.5px; }
.token-hero h3 { font: 700 25px var(--font-display); color: #fff; margin: 6px 0; }
.token-symbol { color: var(--cyan); overflow-wrap: anywhere; }
.token-description { color: var(--text-dim); font-size: 10.5px; line-height: 1.5; margin-top: 8px; max-width: 520px; }
.token-actions { display: flex; flex-wrap: wrap; gap: 8px; margin: 16px 0; }
.sheet-link { color: var(--cyan); text-decoration: none; border: 1px solid var(--cyan-dim); padding: 7px 10px; font-size: 9.5px; letter-spacing: 1px; }
.sheet-link:hover, .sheet-link:focus-visible { border-color: var(--cyan); color: #fff; outline: none; }
.token-kpis { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 20px; }
.token-kpis > div { background: rgba(255,255,255,.025); border: 1px solid var(--cyan-faint); padding: 10px; }
.token-kpis span { display: block; color: var(--text-dim); font-size: 8.5px; letter-spacing: 1px; }
.token-kpis b { display: block; color: var(--text); margin-top: 5px; font: 600 12px var(--font-display); overflow-wrap: anywhere; }
.sheet-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.sheet-grid h4 { color: var(--cyan); font: 10px var(--font-display); letter-spacing: 1.5px; margin-bottom: 10px; }
.sheet-grid .rows { display: grid; grid-template-columns: .8fr 1.2fr; gap: 7px 10px; font-size: 10.5px; }
.sheet-grid .rows .k { color: var(--text-dim); }
.sheet-grid .rows .v { color: var(--text); text-align: right; overflow-wrap: anywhere; }
.risk-list { display: grid; gap: 7px; }
.risk-line { display: grid; grid-template-columns: 10px 1fr; gap: 8px; align-items: start; background: rgba(255,255,255,.02); padding: 7px; }
.risk-line b, .risk-line small { display: block; }
.risk-line b { color: var(--text); font-size: 10px; }
.risk-line small { color: var(--text-dim); font-size: 9.5px; margin-top: 2px; }
.coverage-note { margin-top: 20px; padding: 10px; border: 1px dashed var(--cyan-faint); color: var(--text-dim); font-size: 9.5px; line-height: 1.5; }
.empty-state.compact { padding: 12px; }

/* ── Catalogue stratégies 11×11 ────────────────────────────────── */
.catalog-summary {
  display: flex; flex-wrap: wrap; gap: 7px 16px; align-items: center;
  margin: 14px 0 12px; padding: 10px 12px;
  background: rgba(0,240,255,.035); border: 1px solid var(--cyan-faint);
  color: var(--text-dim); font-size: 9.5px; letter-spacing: .7px;
  font-variant-numeric: tabular-nums;
}
.catalog-summary b { color: var(--cyan); font: 600 11px var(--font-display); }
.catalog-summary .warn, .catalog-summary .warn b { color: var(--amber); }
.catalog-summary .muted, .catalog-summary .muted b { color: var(--text-dim); }
.catalog-list { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.catalog-row {
  min-width: 0; display: grid; grid-template-columns: 25px minmax(0, 1fr) auto;
  gap: 9px; align-items: start; padding: 11px;
  background: var(--panel-hard); border: 1px solid var(--cyan-faint);
  border-left: 2px solid var(--text-dim);
}
.catalog-row.active { border-left-color: var(--green); }
.catalog-row.rejected { border-left-color: var(--magenta); }
.catalog-row.blocked { border-left-color: var(--amber); }
.catalog-index { color: var(--text-dim); font: 600 10px var(--font-display); padding-top: 1px; }
.catalog-body { min-width: 0; }
.catalog-body b { display: block; color: var(--text); font: 600 10.5px var(--font-display); line-height: 1.35; text-wrap: balance; }
.catalog-body small { display: block; margin-top: 5px; color: var(--text-dim); font-size: 8.8px; line-height: 1.45; overflow-wrap: anywhere; font-variant-numeric: tabular-nums; }
.catalog-status { padding: 3px 5px; border: 1px solid currentColor; font-size: 7.5px; letter-spacing: .5px; white-space: nowrap; }
.catalog-status.active { color: var(--green); }
.catalog-status.rejected { color: var(--magenta); }
.catalog-status.blocked { color: var(--amber); }
.detector-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 7px; margin-top: 12px; }
.detector-chip { min-width: 0; display: block; padding: 8px 9px; background: rgba(255,255,255,.02); border: 1px solid var(--cyan-faint); }
.detector-chip b { display: block; color: var(--cyan); font-size: 9px; line-height: 1.35; text-wrap: pretty; }
.detector-chip small { display: block; margin-top: 4px; color: var(--text-dim); font-size: 8px; line-height: 1.35; }
.proof-line { margin-top: 12px; padding-top: 9px; border-top: 1px dashed var(--cyan-faint); color: var(--text-dim); font-size: 8px; letter-spacing: .6px; line-height: 1.5; }

@media (max-width: 760px) {
  #app { padding-left: 10px; padding-right: 10px; }
  .panel-title-row { align-items: flex-start; flex-direction: column; }
  .j7-toolbar { justify-content: flex-start; }
  .tweet-grid { grid-template-columns: 1fr; }
  .token-sheet { padding: 18px 14px; }
  .token-kpis { grid-template-columns: repeat(2, 1fr); }
  .sheet-grid { grid-template-columns: 1fr; }
  .source-proof { margin-left: 0; }
  .opportunity-grid { grid-template-columns: 1fr; }
  .command-side { grid-template-columns: 1fr; gap: 0; }
  .opportunity-filters { justify-content: flex-start; }
  .opportunity-kpis { grid-template-columns: repeat(2, 1fr); }
  .catalog-list { grid-template-columns: 1fr; }
  .catalog-row { grid-template-columns: 22px minmax(0, 1fr); }
  .catalog-status { grid-column: 2; justify-self: start; }
  .detector-grid { grid-template-columns: 1fr; }
}


/* ═══════════════════════════════════════════════════════════════════════
   SNIPER POSITIONS TABLE — ODIN APEX style
   ═══════════════════════════════════════════════════════════════════════ */
.sniper-positions {
  display: flex;
  flex-direction: column;
  gap: 0;
  font-variant-numeric: tabular-nums;
}
.sp-row {
  display: grid;
  grid-template-columns: minmax(120px, 1.4fr) 80px 90px 90px 110px 110px 90px 170px;
  gap: 8px;
  align-items: center;
  padding: 9px 10px;
  border-bottom: 1px solid rgba(0, 240, 255, 0.08);
  font-size: 11.5px;
  transition: background 120ms;
}
.sp-row:hover { background: rgba(0, 240, 255, 0.04); }
.sp-row.head {
  color: var(--text-dim);
  font-size: 9px;
  letter-spacing: 1.4px;
  text-transform: uppercase;
  border-bottom: 1px solid rgba(0, 240, 255, 0.25);
  padding-bottom: 8px;
  margin-bottom: 2px;
}
.sp-row.head:hover { background: transparent; }
.sp-token { display: flex; flex-direction: column; gap: 2px; }
.sp-token .sym { font-family: var(--font-display); font-size: 13px; color: var(--cyan); letter-spacing: 0.5px; }
.sp-token .addr { font-size: 9.5px; color: var(--text-dim); }
.sp-statut, .sp-entry, .sp-last, .sp-opened { color: var(--text); }
.sp-pnl { font-weight: 700; }
.sp-pnl.pos { color: var(--green); }
.sp-pnl.neg { color: var(--magenta); }
.sp-exit { text-transform: uppercase; font-size: 9.5px; }
.sp-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 3px 7px;
  border-radius: 4px;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.6px;
  white-space: nowrap;
}
.sp-badge.open { background: rgba(0, 240, 255, 0.12); color: var(--cyan); border: 1px solid rgba(0, 240, 255, 0.3); }
.sp-badge.tp { background: rgba(32, 255, 168, 0.12); color: var(--green); border: 1px solid rgba(32, 255, 168, 0.35); }
.sp-badge.sl { background: rgba(255, 59, 92, 0.12); color: var(--red); border: 1px solid rgba(255, 59, 92, 0.35); }
.sp-badge.dev { background: rgba(255, 179, 0, 0.12); color: var(--amber); border: 1px solid rgba(255, 179, 0, 0.35); }
.sp-links { display: flex; gap: 6px; flex-wrap: wrap; }
.sp-link {
  display: inline-flex;
  align-items: center;
  padding: 3px 7px;
  border-radius: 4px;
  font-size: 9px;
  font-weight: 700;
  letter-spacing: 0.5px;
  text-decoration: none;
  cursor: pointer;
  transition: transform 120ms, filter 120ms;
  border: 0;
  background: transparent;
  font-family: var(--font-mono);
}
.sp-link:hover { transform: translateY(-1px); filter: brightness(1.2); }
.sp-link.gmgn { color: #00d4aa; border: 1px solid rgba(0, 212, 170, 0.35); background: rgba(0, 212, 170, 0.08); }
.sp-link.explorer { color: var(--cyan); border: 1px solid rgba(0, 240, 255, 0.35); background: rgba(0, 240, 255, 0.08); }
.sp-link.chart { color: var(--amber); border: 1px solid rgba(255, 179, 0, 0.35); background: rgba(255, 179, 0, 0.08); }
@media (max-width: 1200px) {
  .sp-row { grid-template-columns: minmax(110px, 1fr) 70px 80px 80px 100px 100px 80px 150px; font-size: 10.5px; }
  .sp-token .sym { font-size: 11px; }
}
@media (max-width: 900px) {
  .sp-row { grid-template-columns: minmax(100px, 1fr) 60px 70px 70px 90px 90px 70px 130px; }
}


/* ═══════════════════════════════════════════════════════════════════════
   GMGN WORKSPACE LAYOUT — 3 colonnes sans scroll vertical
   ═══════════════════════════════════════════════════════════════════════ */
#app { max-width: 100vw; padding: 0 10px 10px; }
.gmgn-hud { position: sticky; top: 0; z-index: 100; padding: 6px 12px; }
.gmgn-hero {
  display: grid;
  grid-template-columns: repeat(5, 1fr);
  gap: 8px;
  margin: 8px 0;
}
.gmgn-hero .metric { padding: 8px 10px; min-height: 58px; }
.gmgn-hero .metric .value { font-size: 1.25rem; }
.gmgn-workspace {
  display: flex;
  flex-direction: row;
  gap: 0;
  height: calc(100vh - 132px);
  min-height: 600px;
  overflow: hidden;
}
.gmgn-col {
  display: flex;
  flex-direction: column;
  gap: 0;
  min-height: 0;
  overflow: hidden;
}
.left-col { width: var(--left-col-width, 240px); flex: 0 0 auto; }
.right-col { width: var(--right-col-width, 280px); flex: 0 0 auto; }
.center-col { flex: 1 1 0; min-width: 0; }

/* Splitters */
.col-splitter {
  width: 6px;
  flex: 0 0 auto;
  cursor: col-resize;
  background: transparent;
  position: relative;
  z-index: 5;
  transition: background 120ms;
}
.col-splitter:hover, .col-splitter.dragging {
  background: rgba(0, 240, 255, 0.25);
}
.col-splitter::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 2px;
  height: 28px;
  border-radius: 1px;
  background: rgba(0, 240, 255, 0.35);
  opacity: 0;
  transition: opacity 120ms;
}
.col-splitter:hover::after, .col-splitter.dragging::after { opacity: 1; }

.panel-splitter {
  height: 6px;
  flex: 0 0 auto;
  cursor: row-resize;
  background: transparent;
  position: relative;
  z-index: 4;
  transition: background 120ms;
}
.panel-splitter:hover, .panel-splitter.dragging {
  background: rgba(0, 240, 255, 0.25);
}
.panel-splitter::after {
  content: '';
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  width: 28px;
  height: 2px;
  border-radius: 1px;
  background: rgba(0, 240, 255, 0.35);
  opacity: 0;
  transition: opacity 120ms;
}
.panel-splitter:hover::after, .panel-splitter.dragging::after { opacity: 1; }

.left-col .panel, .right-col .panel { flex: 0 0 auto; display: flex; flex-direction: column; min-height: 60px; }
.left-col .panel:nth-of-type(1) { height: var(--left-panel-1-height, 33%); }
.left-col .panel:nth-of-type(2) { height: var(--left-panel-2-height, 33%); }
.left-col .panel:nth-of-type(3) { height: var(--left-panel-3-height, 34%); }
.right-col .panel:nth-of-type(1) { height: var(--right-panel-1-height, 45%); }
.right-col .panel:nth-of-type(2) { height: var(--right-panel-2-height, 55%); }

.left-col .panel > div:last-child,
.right-col .panel > div:last-child { flex: 1 1 0; overflow-y: auto; }
.center-col {
  display: flex;
  flex-direction: column;
  gap: 0;
  min-height: 0;
  overflow: hidden;
}
.gmgn-buckets {
  height: var(--center-buckets-height, 130px);
  flex: 0 0 auto;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 10px;
}
.bucket-panel {
  display: flex;
  flex-direction: column;
  min-height: 0;
  padding: 8px;
}
.bucket-panel h2 { font-size: 10px; letter-spacing: 1.2px; }
.bucket-panel .sub { color: var(--text-dim); font-size: 8px; letter-spacing: 0.5px; }
.bucket-list {
  flex: 1 1 0;
  overflow-y: auto;
  display: flex;
  flex-direction: column;
  gap: 5px;
  margin-top: 6px;
}
.bucket-card {
  display: grid;
  grid-template-columns: 1fr auto;
  gap: 4px;
  padding: 5px 6px;
  background: rgba(0,240,255,0.04);
  border: 1px solid rgba(0,240,255,0.12);
  border-radius: 4px;
  cursor: pointer;
  transition: background 120ms, transform 120ms;
  font-size: 10px;
}
.bucket-card:hover { background: rgba(0,240,255,0.10); transform: translateY(-1px); }
.bucket-card .sym { color: var(--cyan); font-weight: 700; font-family: var(--font-display); font-size: 11px; }
.bucket-card .mc { color: var(--text); font-size: 9px; }
.bucket-card .pnl { font-weight: 700; font-size: 9px; }
.bucket-card .pnl.pos { color: var(--green); }
.bucket-card .pnl.neg { color: var(--magenta); }
.bucket-card .links { display: flex; gap: 4px; }
.bucket-card .sp-link { padding: 1px 4px; font-size: 8px; }
.live-chart-panel {
  height: var(--center-chart-height, 38%);
  flex: 0 0 auto;
  display: flex;
  flex-direction: column;
  padding: 10px;
  min-height: 120px;
}
.live-chart-panel .chart-heading { margin-bottom: 6px; }
.live-chart-box { flex: 1 1 0; min-height: 0; }
.positions-table-panel {
  flex: 1 1 0;
  display: flex;
  flex-direction: column;
  min-height: 120px;
  padding: 10px;
}

@media (max-width: 900px) {
  .gmgn-workspace { flex-direction: column; height: auto; overflow: visible; }
  .col-splitter, .panel-splitter { display: none; }
  .left-col, .right-col { width: 100% !important; height: auto !important; }
  .gmgn-buckets { grid-template-columns: 1fr; flex: none; height: auto !important; }
  .live-chart-panel { height: 320px !important; flex: none; }
}

/* Buttons in header */
#btn-reset-paper, #btn-reset-layout {
  cursor: pointer;
  font-family: inherit;
}
#btn-reset-paper { color: var(--amber); border-color: rgba(255,179,0,0.45); background: rgba(255,179,0,0.08); }
#btn-reset-paper:hover { background: rgba(255,179,0,0.18); }
#btn-reset-layout { color: var(--cyan); }
.sniper-positions {
  display: flex;
  flex-direction: column;
  gap: 0;
  font-variant-numeric: tabular-nums;
}
.sp-row {
  display: grid;
  grid-template-columns: minmax(110px, 1.3fr) 70px 85px 85px 100px 100px 80px 150px;
  gap: 6px;
  align-items: center;
  padding: 7px 8px;
  border-bottom: 1px solid rgba(0,240,255,0.06);
  font-size: 10.5px;
  cursor: pointer;
  transition: background 120ms;
}
.sp-row:hover { background: rgba(0,240,255,0.05); }
.sp-row.head {
  color: var(--text-dim);
  font-size: 8px;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  border-bottom: 1px solid rgba(0,240,255,0.25);
  padding-bottom: 5px;
  cursor: default;
}
.sp-row.head:hover { background: transparent; }
.sp-token { display: flex; flex-direction: column; gap: 1px; }
.sp-token .sym { font-family: var(--font-display); font-size: 12px; color: var(--cyan); letter-spacing: 0.5px; }
.sp-token .addr { font-size: 9px; color: var(--text-dim); }
.sp-statut, .sp-entry, .sp-last, .sp-opened { color: var(--text); }
.sp-pnl { font-weight: 700; }
.sp-pnl.pos { color: var(--green); }
.sp-pnl.neg { color: var(--magenta); }
.sp-exit { text-transform: uppercase; font-size: 9px; }
.sp-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 2px 5px;
  border-radius: 3px;
  font-size: 8px;
  font-weight: 700;
  letter-spacing: 0.5px;
  white-space: nowrap;
}
.sp-badge.open { background: rgba(0,240,255,0.12); color: var(--cyan); border: 1px solid rgba(0,240,255,0.3); }
.sp-badge.tp { background: rgba(32,255,168,0.12); color: var(--green); border: 1px solid rgba(32,255,168,0.35); }
.sp-badge.sl { background: rgba(255,59,92,0.12); color: var(--red); border: 1px solid rgba(255,59,92,0.35); }
.sp-badge.dev { background: rgba(255,179,0,0.12); color: var(--amber); border: 1px solid rgba(255,179,0,0.35); }
.sp-links { display: flex; gap: 5px; flex-wrap: wrap; }
.sp-link {
  display: inline-flex;
  align-items: center;
  padding: 2px 5px;
  border-radius: 3px;
  font-size: 8px;
  font-weight: 700;
  letter-spacing: 0.5px;
  text-decoration: none;
  cursor: pointer;
  transition: transform 120ms, filter 120ms;
  border: 0;
  background: transparent;
  font-family: var(--font-mono);
}
.sp-link:hover { transform: translateY(-1px); filter: brightness(1.2); }
.sp-link.gmgn { color: #00d4aa; border: 1px solid rgba(0,212,170,0.35); background: rgba(0,212,170,0.08); }
.sp-link.explorer { color: var(--cyan); border: 1px solid rgba(0,240,255,0.35); background: rgba(0,240,255,0.08); }
.sp-link.chart { color: var(--amber); border: 1px solid rgba(255,179,0,0.35); background: rgba(255,179,0,0.08); }
.mini-position-card {
  background: rgba(0,240,255,0.02);
  border: 1px solid rgba(0,240,255,0.08);
  border-radius: 4px;
  padding: 8px;
  font-size: 10px;
  display: flex;
  flex-direction: column;
  gap: 6px;
}
.mini-position-card .row { display: flex; justify-content: space-between; gap: 8px; }
.mini-position-card .label { color: var(--text-dim); font-size: 8px; letter-spacing: 0.8px; text-transform: uppercase; }
.mini-position-card .value { color: var(--text); font-weight: 600; }
.compact-feed { font-size: 9.5px; }
.compact-tweets { font-size: 9.5px; }
@media (max-width: 1200px) {
  .gmgn-workspace { grid-template-columns: 200px 1fr 240px; }
  .gmgn-buckets { flex: 0 0 120px; }
}
@media (max-width: 900px) {
  .gmgn-workspace { grid-template-columns: 1fr; grid-template-rows: auto auto auto; height: auto; overflow: visible; }
  .gmgn-buckets { grid-template-columns: 1fr; flex: none; }
}


/* GMGN extras : feed compact + bucket card + token avatar */
.feed.compact-feed { display: flex; flex-direction: column; gap: 4px; }
.feed-line {
  display: grid;
  grid-template-columns: 34px 1fr 42px 54px;
  gap: 4px;
  align-items: center;
  padding: 4px 5px;
  border-radius: 3px;
  font-size: 9px;
  background: rgba(0,240,255,0.03);
  border-left: 2px solid transparent;
  cursor: pointer;
}
.feed-line:hover { background: rgba(0,240,255,0.08); }
.feed-line.buy { border-left-color: var(--green); }
.feed-line.watch { border-left-color: var(--cyan); }
.feed-line.avoid { border-left-color: var(--magenta); }
.feed-time { color: var(--text-dim); font-size: 8px; }
.feed-symbol { color: var(--cyan); font-weight: 700; }
.feed-decision { text-transform: uppercase; font-weight: 700; font-size: 8px; }
.feed-line.buy .feed-decision { color: var(--green); }
.feed-line.watch .feed-decision { color: var(--cyan); }
.feed-line.avoid .feed-decision { color: var(--magenta); }
.feed-score { color: var(--text-dim); font-size: 8px; text-align: right; }
.token-avatar-wrap { width: 36px; height: 36px; border-radius: 50%; overflow: hidden; display: flex; align-items: center; justify-content: center; background: var(--panel-hard); border: 1px solid var(--cyan-faint); }
.token-avatar { width: 100%; height: 100%; object-fit: cover; }
.token-monogram { display: flex; align-items: center; justify-content: center; width: 100%; height: 100%; font-family: var(--font-display); font-size: 13px; color: var(--cyan); }
.token-sheet-header { display: flex; gap: 8px; align-items: center; margin-bottom: 8px; }
.token-sheet-title { display: flex; flex-direction: column; }
.token-name { font-family: var(--font-display); color: var(--cyan); font-size: 12px; }
.token-symbol { color: var(--text-dim); font-size: 9px; }
.token-sheet-metrics { display: grid; grid-template-columns: 1fr 1fr; gap: 4px; margin-bottom: 8px; }
.token-metric-row { display: flex; justify-content: space-between; font-size: 9px; padding: 3px 0; border-bottom: 1px solid rgba(0,240,255,0.06); }
.token-sheet-actions { display: flex; gap: 6px; }
.token-basis { color: var(--text-dim); font-size: 8px; margin-top: 6px; }
