:root {
  --bg: #1a1a2e;
  --surface: #16213e;
  --surface-2: #1e2a3a;
  --border: #2a2a4a;
  --border-2: #34406b;
  --text: #e6e8ef;
  --text-2: #aab2c5;
  --muted: #7c86a0;
  --mint: #4CD9B0;
  --mint-2: #3bc9a0;
  --blue: #6db3f2;
  --pos: #4ade80;
  --neg: #f87171;
  --pos-bg: rgba(74, 222, 128, .14);
  --neg-bg: rgba(248, 113, 113, .14);
  --gold: #f4c65a;
  --chip-bg: rgba(255, 255, 255, .07);
  --radius: 12px;
  --font: 'Inter', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;
  --shadow: 0 2px 10px rgba(0, 0, 0, .25);
}

* { box-sizing: border-box; }

body {
  font-family: var(--font);
  margin: 0;
  padding: 22px 26px 80px;
  background: var(--bg);
  color: var(--text);
  line-height: 1.5;
  font-size: 14px;
}

a { color: var(--blue); }

/* ---------------------------------------------------------------- header */
.app-header {
  display: flex; align-items: center; gap: 16px; flex-wrap: wrap;
  margin-bottom: 20px;
}

/* PANNE SOURCE PINNACLE : GROS bandeau rouge collant en haut, impossible à rater. Affiché par JS
   quand le dernier cycle Pinnacle réussi date de > 60 s (fournisseur cassé → fairs figées). */
.pin-down {
  position: sticky; top: 8px; z-index: 1000;
  margin: 0 0 18px; padding: 14px 20px; border-radius: 12px;
  background: #b91c1c; color: #fff; border: 2px solid #fecaca;
  box-shadow: 0 0 0 4px rgba(248, 113, 113, .35), 0 10px 32px rgba(0, 0, 0, .5);
  animation: pinDownPulse 1.2s ease-in-out infinite;
}
.pin-down[hidden] { display: none; }
.pin-down .pd-title { display: block; font-size: 22px; font-weight: 900; letter-spacing: .01em; line-height: 1.25; }
.pin-down .pd-sub { display: block; margin-top: 5px; font-size: 13.5px; font-weight: 600; opacity: .95; line-height: 1.4; }
.pin-down .pd-sub b { font-variant-numeric: tabular-nums; }
.pin-down .pd-err { display: block; margin-top: 4px; font-size: 11.5px; font-family: ui-monospace, SFMono-Regular, Menlo, monospace; opacity: .85; word-break: break-all; }
@keyframes pinDownPulse {
  0%, 100% { box-shadow: 0 0 0 4px rgba(248, 113, 113, .35), 0 10px 32px rgba(0, 0, 0, .5); }
  50%      { box-shadow: 0 0 0 12px rgba(248, 113, 113, .12), 0 10px 32px rgba(0, 0, 0, .5); }
}
/* Pastille Pinnacle du header en mode panne (> 60 s) : rouge franc, pas juste « stale ». */
.pill.down { background: var(--neg-bg); box-shadow: inset 0 0 0 1px var(--neg); }
.pill.down .k, .pill.down .v { color: var(--neg); font-weight: 700; }

/* Barre fraîcheur des données (nb lignes/book+API, âge du dernier scrape) — discrète, tout en haut. */
.data-freshness {
  display: flex; align-items: center; gap: 6px 10px; flex-wrap: wrap;
  margin: -8px 0 16px; padding: 6px 10px;
  background: var(--surface); border: 1px solid var(--border); border-radius: 8px;
  font-size: 11px; color: var(--muted); line-height: 1.4;
}
.data-freshness:empty { display: none; }
.df-label { font-weight: 700; color: var(--text-2); }
.df-seg { display: inline-flex; align-items: center; gap: 6px; flex-wrap: wrap; }
.df-sport { font-size: 13px; }
.df-book {
  display: inline-flex; align-items: baseline; gap: 3px;
  padding: 1px 6px; border-radius: 5px; background: var(--chip-bg); color: var(--text-2);
  white-space: nowrap; cursor: default;
}
.df-book b { color: var(--text); font-variant-numeric: tabular-nums; font-weight: 700; }
.df-book.api { box-shadow: inset 2px 0 0 var(--blue); }   /* Pinnacle = l'API, léger repère bleu */
.df-age { color: var(--muted); font-size: 10px; }
.df-book.stale, .df-book.stale b, .df-book.stale .df-age {   /* pas de refresh > 15 min → rouge */
  color: var(--neg);
}
.df-book.stale { background: var(--neg-bg); box-shadow: inset 2px 0 0 var(--neg); }
.app-header h1 { font-size: 20px; font-weight: 700; margin: 0; letter-spacing: .01em; }
.app-header .sub { color: var(--muted); font-size: 12.5px; }
.header-status { margin-left: auto; display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }

/* Bascule sport ⚽/🎾 */
.sport-switch { display: inline-flex; border: 1px solid var(--border-2); border-radius: 999px; overflow: hidden; }
.sport-switch button {
  background: var(--surface-2); color: var(--text-2); border: none; border-right: 1px solid var(--border);
  padding: 8px 16px; font-size: 13.5px; font-weight: 700; cursor: pointer; letter-spacing: .02em;
}
.sport-switch button:last-child { border-right: none; }
.sport-switch button:hover { color: var(--text); }
.sport-switch button.active { background: var(--mint); color: #08201a; }

.pill {
  display: inline-flex; align-items: center; gap: 7px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 999px; padding: 6px 12px; font-size: 12px; color: var(--text-2);
}
.pill .k { color: var(--muted); }
.pill .v { color: var(--text); font-weight: 600; font-variant-numeric: tabular-nums; }
.dot { width: 8px; height: 8px; border-radius: 50%; background: var(--muted); flex: 0 0 auto; }
.dot.live { background: var(--mint); animation: pulse 1.7s infinite; }
.dot.stale { background: var(--neg); }
@keyframes pulse {
  0% { box-shadow: 0 0 0 0 rgba(76, 217, 176, .5); }
  70% { box-shadow: 0 0 0 7px rgba(76, 217, 176, 0); }
  100% { box-shadow: 0 0 0 0 rgba(76, 217, 176, 0); }
}

/* ---------------------------------------------------------------- sections */
.section {
  background: var(--surface); border: 1px solid var(--border);
  border-radius: var(--radius); padding: 18px 20px; margin-bottom: 20px;
  box-shadow: var(--shadow);
}
.section h2 { font-size: 14px; font-weight: 700; margin: 0 0 14px; display: flex; align-items: center; gap: 8px; }
.section h2 .count { color: var(--muted); font-weight: 600; font-size: 12px; }

/* ---------------------------------------------------------------- détecteur de matchs manqués */
details.coverage > summary {
  cursor: pointer; font-size: 14px; font-weight: 700; list-style: none;
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
details.coverage > summary::-webkit-details-marker { display: none; }
details.coverage > summary::before { content: "▸ "; color: var(--muted); }
details[open].coverage > summary::before { content: "▾ "; }
details.coverage > summary .sub { font-weight: 500; font-size: 12px; color: var(--muted); }
details.coverage .count { color: var(--muted); font-weight: 600; font-size: 12px; }
details.coverage #cov-body { margin-top: 6px; }
details.coverage h3 {
  font-size: 12px; font-weight: 700; text-transform: uppercase; letter-spacing: .03em;
  margin: 20px 0 8px; display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
}
details.coverage h3 .sub { font-weight: 500; text-transform: none; letter-spacing: 0; color: var(--muted); font-size: 11px; }

/* ---------------------------------------------------------------- tag CLV (ledger) */
.clv-tag {
  display: inline-block; font-size: 9px; font-weight: 700; text-transform: uppercase;
  letter-spacing: .04em; padding: 1px 5px; border-radius: 6px; vertical-align: middle;
}
.clv-tag.live { background: rgba(52, 199, 89, 0.16); color: var(--mint); }
.clv-tag.closing { background: rgba(120, 120, 128, 0.18); color: var(--muted); }

/* ---------------------------------------------------------------- fusion des paris (ledger) */
.merge-toggle {
  background: none; border: none; cursor: pointer; color: inherit;
  font: inherit; padding: 0; display: inline-flex; align-items: center; gap: 4px;
}
.merge-badge {
  background: var(--chip-bg); color: var(--muted); font-size: 10px; font-weight: 700;
  padding: 1px 5px; border-radius: 6px; white-space: nowrap;
}
.merge-toggle:hover .merge-badge { color: var(--text); }
tr.merged > td:first-child { box-shadow: inset 3px 0 0 var(--blue); }
tr.member > td { background: rgba(120, 120, 128, 0.06); }
tr.member > td:first-child { box-shadow: inset 3px 0 0 var(--border); padding-left: 20px; }
/* Pari à régler : match terminé mais statut encore "en attente" → fond orange/jaune. */
tr.to-settle > td { background: rgba(240, 180, 41, .13); }
tr.to-settle:hover > td { background: rgba(240, 180, 41, .2); }
tr.to-settle > td:first-child { box-shadow: inset 3px 0 0 #f0b429; }

/* ---------------------------------------------------------------- onglets */
.tabs { display: flex; gap: 6px; margin-bottom: 18px; border-bottom: 1px solid var(--border); }
.tabs button {
  background: none; border: none; cursor: pointer; color: var(--muted);
  font-size: 13px; font-weight: 700; padding: 10px 14px; border-radius: 8px 8px 0 0;
  border-bottom: 2px solid transparent; margin-bottom: -1px;
}
.tabs button:hover { color: var(--text-2); }
.tabs button.active { color: var(--text); border-bottom-color: var(--mint); }
.tab-panel[hidden] { display: none; }

/* ---------------------------------------------------------------- comparateur de cotes */
.cmp-table { border-collapse: collapse; font-size: 12px; white-space: nowrap; width: 100%; }
.cmp-table th, .cmp-table td { padding: 5px 5px; text-align: right; }
.cmp-table th.txt, .cmp-table td.txt { text-align: left; }
/* Colonne Match compacte : on borne la largeur et on autorise le retour à la ligne
   pour que tous les books tiennent sans scroll horizontal. */
.cmp-table td.txt .match { white-space: normal; max-width: 150px; line-height: 1.15; overflow-wrap: anywhere; }
.cmp-table td.cmp-comp { white-space: normal; max-width: 110px; line-height: 1.15; overflow-wrap: anywhere; }
.cmp-table thead th { position: sticky; top: 0; background: var(--surface); z-index: 1; }
.cmp-table .grp {
  text-align: center; font-size: 10px; text-transform: uppercase; letter-spacing: .04em;
  color: var(--muted); border-left: 1px solid var(--border); font-weight: 700;
}
.cmp-table .grp.pin { color: var(--text-2); }
.cmp-table .grp-book { padding-top: 4px; padding-bottom: 4px; }
.cmp-table .grp-book .book-logo { height: 15px; max-width: 62px; }
.cmp-table .grp-book .chip { font-size: 10px; padding: 1px 5px; }
.cmp-table td.g1 { border-left: 1px solid var(--border); }  /* 1re colonne d'un groupe */
.cmp-table tbody tr:nth-child(even) { background: rgba(120, 120, 128, 0.06); }
.cmp-table .o-pin { color: var(--text-2); font-weight: 600; }
.cmp-table .o-fair { color: var(--mint); }
.cmp-table .o-val { color: var(--mint); }       /* book > fair : value */
.cmp-table .o-best { font-weight: 800; text-decoration: underline; }
/* Fond or : meilleure cote de l'issue, Pinnacle + ANJ confondus. */
.cmp-table .o-top { background: rgba(255, 193, 7, 0.20); box-shadow: inset 0 0 0 1px rgba(255, 193, 7, 0.5); font-weight: 700; }
.cmp-table .o-na { color: var(--muted); }
.cmp-table .cmp-ev { font-size: 10px; font-weight: 700; font-variant-numeric: tabular-nums; margin-top: 1px; opacity: .85; }
.cmp-table .cmp-ev.ev-pos { color: var(--pos); }
.cmp-table .cmp-ev.ev-neg { color: var(--neg); }
.cmp-table .cmp-fair { font-size: 10px; font-weight: 600; margin-top: 1px; }  /* fair sous la cote Pinnacle */
.cmp-table .cmp-trj-h { text-align: right; }
.cmp-table .cmp-trj { font-weight: 700; font-variant-numeric: tabular-nums; color: var(--text-2); }
.cmp-table .cmp-trj.ev-pos { color: var(--pos); }  /* TRJ ≥ 100 % = arbitrage/edge cumulé */
.controls label.chk { flex-direction: row; align-items: center; gap: 6px; cursor: pointer; }
.controls label.chk input { width: auto; }
.cmp-comp { color: var(--muted); font-size: 11px; }

/* Montage dans la colonne Issue du tableau des values : jambes + mise à poser (liée au total) */
.mtg-legs { display: inline-flex; flex-wrap: wrap; align-items: center; gap: 2px 4px; }
.mtg-market { font-weight: 700; margin-right: 4px; }
.mtg-leg { white-space: nowrap; }
.mtg-leg .mtg-stake { color: var(--mint); font-variant-numeric: tabular-nums; }
.mtg-leg .mtg-side { font-weight: 700; }
.mtg-odds { color: var(--text-2); }
.mtg-book { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .03em; }
.mtg-refund { color: var(--blue); font-size: 10px; }
.mtg-plus { color: var(--muted); margin: 0 4px; font-weight: 700; }

/* Marchés dérivés (DC / DNB) */
#drv-table .drv-num { text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap; }
#drv-table .drv-num.ev-pos { color: var(--pos); font-weight: 700; }
#drv-table .drv-num.ev-neg { color: var(--neg); }
#drv-table .drv-montage { font-size: 12px; line-height: 1.5; }
.drv-leg { white-space: nowrap; }
.drv-book { color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: .03em; }
.drv-refund { color: var(--blue); font-size: 10px; }
.drv-plus { color: var(--muted); margin: 0 6px; font-weight: 700; }

/* Couverture books ANJ : matrice championnat × book */
#bcov-matrix td:first-child { text-align: left; white-space: normal; max-width: 240px; overflow-wrap: anywhere; }
#bcov-matrix th.cmp-book { text-align: center; }
#bcov-matrix th.cmp-book .book-logo { height: 16px; max-width: 64px; }
#bcov-matrix td.bcov-zero { color: var(--neg); background: var(--neg-bg); font-weight: 800; }
#bcov-matrix td.bcov-part { color: #e0a800; background: rgba(255, 193, 7, 0.14); font-weight: 700; }
#bcov-matrix td.bcov-full { color: var(--text-2); }
.bcov-zero { color: var(--neg); font-weight: 700; }
.bcov-part { color: #e0a800; font-weight: 700; }
#bcov-mg-body .book-logo { height: 15px; max-width: 58px; vertical-align: middle; }

/* ---------------------------------------------------------------- KPI tiles */
/* Rangée KPIs + bouton "Régler les paris auto" à droite, sur une seule ligne. */
.kpis-row { display: flex; align-items: stretch; gap: 12px; }
.kpis { flex: 1; display: flex; gap: 14px; min-width: 0; }
.kpi-group { display: flex; gap: 10px; flex-basis: 0; min-width: 0; }
.kpi-group + .kpi-group { padding-left: 14px; border-left: 1px solid var(--border); }
@media (max-width: 720px) {
  .kpis-row { flex-direction: column; }
  .kpis { flex-direction: column; }
  .kpi-group { flex-wrap: wrap; }
  .kpi-group + .kpi-group { padding-left: 0; padding-top: 12px; border-left: 0; border-top: 1px solid var(--border); }
}
.kpi {
  flex: 1 1 0;
  background: var(--surface-2); border: 1px solid var(--border);
  border-radius: 10px; padding: 10px 12px; min-width: 0;
}
.kpi .lab { font-size: 10px; letter-spacing: .06em; text-transform: uppercase; color: var(--muted); margin-bottom: 6px; }
.kpi .val { font-size: 20px; font-weight: 800; color: var(--text); font-variant-numeric: tabular-nums; line-height: 1.05; white-space: nowrap; }
.kpi .val.pos { color: var(--pos); }
.kpi .val.neg { color: var(--neg); }

/* ---------------------------------------------------------------- courbe de gains */
.chart-wrap { position: relative; }
#gains-chart svg { width: 100%; height: auto; display: block; }
.chart-legend { display: inline-flex; gap: 16px; margin-left: auto; font-size: 11px; font-weight: 400; color: var(--text-2); align-items: center; }
.chart-legend .lg { display: inline-flex; align-items: center; gap: 7px; }
.chart-legend .swatch { display: inline-block; width: 18px; border-top: 2px solid; }
.chart-legend .swatch.real { border-color: var(--mint); }
.chart-legend .swatch.theo { border-top-style: dashed; border-color: var(--text-2); }
.chart-grid { stroke: var(--border); stroke-width: 1; }
.chart-zero { stroke: var(--border-2); stroke-width: 1.2; }
.chart-axis-txt { fill: var(--muted); font-size: 10px; font-variant-numeric: tabular-nums; }
.chart-line-real { fill: none; stroke: var(--mint); stroke-width: 2; stroke-linejoin: round; stroke-linecap: round; }
.chart-line-theo { fill: none; stroke: var(--text-2); stroke-width: 2; stroke-dasharray: 5 4; stroke-linejoin: round; stroke-linecap: round; }
.chart-crosshair { stroke: var(--border-2); stroke-width: 1; stroke-dasharray: 3 3; }
.chart-dot-real { fill: var(--mint); stroke: var(--surface); stroke-width: 1.5; }
.chart-dot-theo { fill: var(--text-2); stroke: var(--surface); stroke-width: 1.5; }
.chart-endlab { font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; }
.chart-tip {
  position: absolute; pointer-events: none; z-index: 5; white-space: nowrap;
  background: var(--surface); border: 1px solid var(--border-2); border-radius: 8px;
  padding: 8px 10px; font-size: 11.5px; color: var(--text); box-shadow: var(--shadow);
}
.chart-tip .tt-n { color: var(--muted); font-size: 10.5px; margin-bottom: 4px; }
.chart-tip .tt-row { display: flex; align-items: center; gap: 7px; font-variant-numeric: tabular-nums; }
.chart-tip .tt-row .sw { width: 10px; height: 10px; border-radius: 2px; }
.chart-tip .tt-row .sw.real { background: var(--mint); }
.chart-tip .tt-row .sw.theo { background: var(--text-2); }
.chart-tip .tt-row .lab { color: var(--text-2); }
.chart-tip .tt-row .num { margin-left: auto; font-weight: 700; }

/* ---------------------------------------------------------------- controls */
.controls { display: flex; align-items: center; gap: 20px; flex-wrap: wrap; margin-bottom: 14px; }
.controls label { font-size: 12px; color: var(--text-2); display: flex; align-items: center; gap: 8px; }
input[type="range"] { accent-color: var(--mint); }
.controls .edge-val { color: var(--mint); font-weight: 700; font-variant-numeric: tabular-nums; min-width: 42px; }

input, select, button {
  font-family: var(--font); font-size: 13px;
  border-radius: 8px; border: 1px solid var(--border-2);
  background: var(--surface-2); color: var(--text); padding: 7px 10px;
  transition: border-color .15s, box-shadow .15s, background .15s;
}
input:focus, select:focus { outline: none; border-color: var(--mint); box-shadow: 0 0 0 2px rgba(76, 217, 176, .2); }
input[type="number"] { width: 84px; text-align: right; font-variant-numeric: tabular-nums; }

button.btn {
  background: var(--mint); color: #08201a; border: none; font-weight: 700; cursor: pointer;
}
button.btn:hover { background: var(--mint-2); }
button.btn:active { transform: translateY(1px); }
button.ghost { background: transparent; border: 1px solid var(--border-2); color: var(--text-2); cursor: pointer; }
/* Bouton "Régler les paris auto" : tuile d'action à droite de la rangée KPIs, bleu. */
.btn.btn-auto-settle {
  flex: 0 0 auto; align-self: stretch; max-width: 180px;
  font-size: 13px; font-weight: 700; padding: 8px 14px; border-radius: 10px;
  text-transform: none; letter-spacing: 0; line-height: 1.2;
  background: rgba(109, 179, 242, .16); color: var(--blue); border: 1px solid rgba(109, 179, 242, .4);
}
.btn.btn-auto-settle:hover { background: rgba(109, 179, 242, .26); }
.btn.btn-auto-settle:disabled { opacity: .6; cursor: default; }
@media (max-width: 720px) { .btn.btn-auto-settle { align-self: flex-start; max-width: none; } }
button.ghost:hover { border-color: var(--mint); color: var(--text); }

/* ---------------------------------------------------------------- table */
table { border-collapse: separate; border-spacing: 0; width: 100%; font-size: 13px; }
thead th {
  text-align: left; font-size: 10px; letter-spacing: .06em; text-transform: uppercase;
  color: var(--muted); font-weight: 600; padding: 0 12px 9px; border-bottom: 1px solid var(--border);
}
thead th.num, td.num { text-align: right; font-variant-numeric: tabular-nums; }
tbody td { padding: 11px 12px; border-bottom: 1px solid var(--border); vertical-align: middle; }
tbody tr:last-child td { border-bottom: none; }
tbody tr:hover td { background: rgba(255, 255, 255, .025); }

.match { font-weight: 600; color: var(--text); }
.sub { font-size: 11px; color: var(--muted); margin-top: 2px; }
.chip {
  display: inline-block; background: var(--chip-bg); color: var(--text-2);
  border-radius: 7px; padding: 3px 9px; font-size: 12px; font-weight: 600;
}
.odds { font-weight: 700; color: var(--blue); font-variant-numeric: tabular-nums; font-size: 14px; }
.badge {
  display: inline-block; border-radius: 8px; padding: 3px 10px; font-weight: 700;
  font-variant-numeric: tabular-nums; background: var(--pos-bg); color: var(--pos);
}
.badge.neg { background: var(--neg-bg); color: var(--neg); }
.fair { font-size: 11px; color: var(--muted); margin-top: 3px; }

/* Dynamique de la fair : sparkline + tendance (renforce/stable/s'effrite) + fraîcheur */
td.vb-fair-cell { white-space: nowrap; }
.vb-fair-dyn { display: flex; align-items: center; gap: 6px; margin-top: 3px; justify-content: flex-end; }
.vb-spark { width: 76px; height: 20px; flex: 0 0 auto; overflow: visible; }
.vb-spark path { stroke: var(--muted); }
.vb-spark circle { fill: var(--muted); }
.vb-spark.up path { stroke: var(--pos); }
.vb-spark.up circle { fill: var(--pos); }
.vb-spark.down path { stroke: var(--neg); }
.vb-spark.down circle { fill: var(--neg); }
.vb-spark.flat path { stroke: var(--muted); }
.vb-trend {
  display: inline-flex; align-items: center; gap: 2px; font-size: 10px; font-weight: 700;
  padding: 1px 6px; border-radius: 999px; letter-spacing: .01em;
}
.vb-trend.up { background: var(--pos-bg); color: var(--pos); }
.vb-trend.down { background: var(--neg-bg); color: var(--neg); }
.vb-trend.flat { background: var(--chip-bg); color: var(--muted); }

td.vb-fresh { font-variant-numeric: tabular-nums; font-size: 12px; font-weight: 600; }
td.vb-fresh.hot { color: var(--mint); }
td.vb-fresh.warm { color: var(--gold); }
td.vb-fresh.stale { color: var(--neg); font-weight: 800; }
td.vb-fresh.cold { color: var(--muted); }
td.vb-fresh.none { color: var(--muted); }

/* Warning « fair gelée » : fair Pinnacle figée > 1 min → l'edge peut être faux (gel pinnapi). */
.vb-stale-warn {
  display: inline-block; margin-left: 6px; padding: 2px 7px; border-radius: 6px;
  background: var(--neg-bg); color: var(--neg); border: 1px solid var(--neg);
  font-size: 11px; font-weight: 800; letter-spacing: .3px; white-space: nowrap;
  vertical-align: middle; animation: staleWarnPulse 1.3s ease-in-out infinite;
}
@keyframes staleWarnPulse { 0%, 100% { opacity: 1; } 50% { opacity: .45; } }
tr.row-stale-fair > td { background: var(--neg-bg); }
tr.row-stale-fair > td:first-child { box-shadow: inset 3px 0 0 var(--neg); }
/* La value gelée prime visuellement sur les autres liserés de gauche. */
tr.row-stale-fair.row-alertable > td:first-child,
tr.row-stale-fair.row-exposed > td:first-child { box-shadow: inset 3px 0 0 var(--neg); }
/* Fenêtre compagnon : ligne + bandeau de value gelée. */
.co-row.stale { border-color: var(--neg); box-shadow: 0 0 0 1px var(--neg) inset; }
.co-stale {
  margin-top: 3px; padding: 2px 6px; border-radius: 5px;
  background: var(--neg-bg); color: var(--neg); border: 1px solid var(--neg);
  font-size: 11px; font-weight: 800; letter-spacing: .3px;
}

/* Colonnes TRJ (taux de retour Pinnacle / TRJ -EV) */
td.trj { color: var(--text-2); font-variant-numeric: tabular-nums; }
td.trj.good { color: var(--pos); font-weight: 600; }
.trj-badge { font-variant-numeric: tabular-nums; color: var(--text-2); }
.trj-badge.good { color: var(--pos); font-weight: 600; }

/* Panneau des réglages d'alerte Discord */
details.alert-settings > summary { cursor: pointer; font-weight: 600; }
details.alert-settings > summary .sub { font-weight: 500; }
details.alert-settings #as-status.off { color: var(--neg); }
.as-intro { margin: 8px 0 4px; max-width: 720px; }
label.chk { display: flex; align-items: center; gap: 8px; }
label.chk input[type="checkbox"] { width: auto; }

/* Cote éditable dans le tableau des value bets (re-vérifier la value si le book a droppé) */
input.vb-odds { width: 72px; font-weight: 700; color: var(--blue); font-size: 14px; }
input.vb-odds.edited { border-color: var(--mint); box-shadow: 0 0 0 2px rgba(76, 217, 176, .18); }
.odds-orig { display: flex; gap: 6px; align-items: center; justify-content: flex-end; }
.odds-orig .odds { font-size: 11px; font-weight: 700; }
.odds-reset {
  background: none; border: none; cursor: pointer; color: var(--muted);
  font-size: 12px; padding: 0 2px; line-height: 1;
}
.odds-reset:hover { color: var(--mint); }

/* Books empilés par issue : book sélectionné (actionnable) + autres books en value (puces) */
td.books { min-width: 210px; }
.book-list { display: flex; flex-direction: column; gap: 5px; align-items: flex-start; }
.book-row.sel {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 3px 8px 3px 6px; border-radius: 9px;
  background: rgba(76, 217, 176, .08); box-shadow: inset 2px 0 0 var(--mint);
}
.book-row.sel .book-logo { height: 20px; }
.book-row.sel input.vb-odds { width: 66px; }
.ext-link { color: var(--muted); text-decoration: none; font-size: 12px; }
.ext-link:hover { color: var(--blue); }
/* En-têtes triables de l'historique des paris. */
#ledger-head th.sortable { cursor: pointer; user-select: none; white-space: nowrap; }
#ledger-head th.sortable:hover { color: var(--text); }
#ledger-head th.sort-asc::after { content: " ▲"; font-size: 9px; opacity: .8; }
#ledger-head th.sort-desc::after { content: " ▼"; font-size: 9px; opacity: .8; }
/* Cote effective après cashback Miles (Winamax) — estimée, informative. */
.vb-cashback {
  font-size: 11px; color: var(--text-2); white-space: nowrap; cursor: help;
  padding: 1px 5px; border-radius: 7px; border: 1px dashed var(--border);
  opacity: .85;
}
.book-chip {
  display: inline-flex; align-items: center; gap: 6px; font: inherit; cursor: pointer;
  background: var(--chip-bg); border: 1px solid var(--border); border-radius: 8px;
  padding: 2px 8px 2px 6px; color: var(--text-2);
}
.book-chip:hover { border-color: var(--border-2); background: rgba(255, 255, 255, .1); }
.book-chip .book-logo { height: 16px; max-width: 58px; }
.chip-odds { font-weight: 700; color: var(--blue); font-variant-numeric: tabular-nums; }
.chip-edge { font-size: 11px; font-weight: 700; color: var(--pos); font-variant-numeric: tabular-nums; }

/* Repère de priorité sur la mise conseillée : barre de remplissage (or) ∝ taille de la mise,
   rapportée à la plus grosse value du lot → les grosses opportunités sautent aux yeux. */
td.vb-stake-cell { position: relative; }
td.vb-stake-cell::before {
  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
  width: calc(var(--prio, 0) * 1%);
  background: linear-gradient(90deg, rgba(244, 198, 90, .04), rgba(244, 198, 90, .20));
  border-left: 2px solid transparent;
  transition: width .25s ease;
}
td.vb-stake-cell > * { position: relative; z-index: 1; }
td.vb-stake-cell.prio-warm::before { background: linear-gradient(90deg, rgba(244, 198, 90, .06), rgba(244, 198, 90, .30)); }
td.vb-stake-cell.prio-hot::before {
  background: linear-gradient(90deg, rgba(244, 198, 90, .10), rgba(244, 198, 90, .42));
  border-left-color: var(--gold);
}
/* Top tier : mise en gras doré + pastille 🔥 pour attirer l'œil en priorité. */
td.vb-stake-cell.prio-hot input.vb-stake { color: var(--gold); font-weight: 800; border-color: rgba(244, 198, 90, .5); }
td.vb-stake-cell.prio-hot::after {
  content: "🔥"; position: absolute; top: 3px; left: 4px; z-index: 2;
  font-size: 11px; line-height: 1; opacity: .9;
}
.chip-edge.neg { color: var(--neg); }
.book-n {
  display: inline-block; margin-left: 6px; padding: 1px 6px; border-radius: 6px;
  background: var(--chip-bg); color: var(--muted); font-size: 10px; font-weight: 700;
  letter-spacing: .03em; vertical-align: middle;
}

/* Exposition déjà en cours sur un match (paris pending) — éviter de se sur-exposer */
.exposure {
  display: inline-flex; align-items: center; gap: 4px; margin-top: 4px;
  padding: 2px 8px; border-radius: 999px; font-size: 11px; font-weight: 600;
  color: #f4c65a; background: rgba(244, 198, 90, .12); border: 1px solid rgba(244, 198, 90, .28);
  cursor: default; white-space: nowrap;
}
.exposure.same-side { color: #f0a63a; background: rgba(240, 166, 58, .16); border-color: rgba(240, 166, 58, .4); }
.exposure.maxed { color: var(--neg); background: var(--neg-bg); border-color: rgba(248, 113, 113, .4); }
.exposure .cap { font-weight: 700; text-transform: uppercase; font-size: 9.5px; letter-spacing: .04em; }
.exposure .exp-sides { font-weight: 700; opacity: .85; padding-left: 5px; margin-left: 3px; border-left: 1px solid rgba(244, 198, 90, .35); }
tr.row-exposed > td:first-child { box-shadow: inset 3px 0 0 rgba(244, 198, 90, .55); }

/* Value correspondant aux critères d'alerte Discord */
.bell { font-size: 12px; }
tr.row-alertable > td:first-child { box-shadow: inset 3px 0 0 var(--mint); }
tr.row-alertable.row-exposed > td:first-child { box-shadow: inset 3px 0 0 var(--mint), inset 6px 0 0 rgba(244, 198, 90, .55); }
tr.row-maxed { opacity: .55; }
tr.row-maxed > td:first-child { box-shadow: inset 3px 0 0 var(--neg); }

/* Mise en sourdine d'un match (exclu des alertes + tableau) */
.mute-btn {
  background: none; border: none; cursor: pointer; padding: 0 4px;
  margin-left: 6px; font-size: 12px; line-height: 1; color: var(--muted);
  opacity: .4; transition: opacity .12s;
}
tr:hover .mute-btn { opacity: .85; }
.mute-btn:hover { opacity: 1; }
.mute-btn.muted { opacity: 1; color: var(--mint); font-size: 11px; font-weight: 600; }
tr.row-muted { opacity: .5; }
tr.row-muted .match { text-decoration: line-through; text-decoration-color: var(--muted); }
tr.row-muted > td:first-child { box-shadow: inset 3px 0 0 var(--muted); }

/* 3e issue d'un match déjà misé sur 2 issues (affichée via le toggle) */
tr.row-trio { opacity: .6; }
tr.row-trio > td:first-child { box-shadow: inset 3px 0 0 rgba(248, 113, 113, .55); }

/* Info sous la mise : déjà misé sur une autre issue du même match */
.bet-elsewhere {
  margin-top: 4px; font-size: 10.5px; font-weight: 600; line-height: 1.3;
  color: #f0a63a; white-space: normal;
}

/* Plafond de mise Unibet (250/(cote−1)) affiché sous la mise. Rouge si la mise conseillée le dépasse. */
.uni-max {
  margin-top: 4px; font-size: 10.5px; font-weight: 700; line-height: 1.3;
  color: var(--muted); white-space: nowrap; font-variant-numeric: tabular-nums;
}
.uni-max.over { color: #f8113c; }

/* Ligne « pari en cours d'enregistrement » : feedback immédiat au clic sur Miser (avant le refresh). */
tr.row-placing { opacity: .45; pointer-events: none; transition: opacity .1s ease; }

/* Libellé de match cliquable → filtre l'historique */
.match-link { cursor: pointer; border-bottom: 1px dashed transparent; transition: color .12s, border-color .12s; }
.match-link:hover { color: var(--blue); border-bottom-color: currentColor; }

/* Chip du filtre actif dans l'entête de l'historique */
.ledger-filter { font-size: 13px; }
.lf-chip {
  display: inline-flex; align-items: center; gap: 6px; vertical-align: middle;
  padding: 2px 6px 2px 10px; border-radius: 999px; font-weight: 600;
  color: var(--blue); background: rgba(109, 179, 242, .12); border: 1px solid rgba(109, 179, 242, .32);
}
.lf-clear {
  background: none; border: none; cursor: pointer; color: inherit; font: inherit;
  line-height: 1; padding: 2px 4px; border-radius: 999px; opacity: .8;
}
.lf-clear:hover { opacity: 1; background: rgba(109, 179, 242, .2); }

/* Bandeau des values masquées pour exposition atteinte */
.hidden-note { margin-top: 10px; font-size: 12px; color: var(--muted); }
.linkbtn {
  background: none; border: none; padding: 0 2px; cursor: pointer;
  color: var(--blue); font: inherit; text-decoration: underline;
}
.linkbtn:hover { color: var(--mint); }

.status-tag { font-weight: 700; font-size: 11px; padding: 3px 9px; border-radius: 7px; text-transform: uppercase; letter-spacing: .03em; }
.status-pending { background: var(--chip-bg); color: var(--text-2); }
.status-won { background: var(--pos-bg); color: var(--pos); }
.status-lost { background: var(--neg-bg); color: var(--neg); }
.status-void { background: rgba(255,255,255,.06); color: var(--muted); }
.status-cashout { background: rgba(240, 180, 41, .16); color: #f0b429; }
/* Pari réglé automatiquement (auto_settle) : petit badge discret à côté du statut. */
.auto-tag { display: inline-block; margin-left: 5px; font-size: 9px; font-weight: 800;
  text-transform: uppercase; letter-spacing: .04em; padding: 2px 5px; border-radius: 5px;
  vertical-align: 1px; background: rgba(109, 179, 242, .16); color: var(--blue); }

/* Cellule Date match + badge d'état du match (coup d'envoi) */
.match-date { white-space: nowrap; }
.match-state { display: inline-block; margin-top: 3px; font-weight: 700; font-size: 10px;
  padding: 2px 7px; border-radius: 6px; text-transform: uppercase; letter-spacing: .03em; }
.match-state::before { content: "●"; margin-right: 4px; font-size: 8px; vertical-align: 1px; }
/* À venir : mis en avant (mint). En cours : ambre. Terminé : atténué. */
.ms-upcoming { background: rgba(76, 217, 176, .14); color: var(--mint); }
.ms-live { background: rgba(240, 180, 41, .16); color: #f0b429; }
.ms-finished { background: var(--chip-bg); color: var(--muted); }
/* Délai restant avant le coup d'envoi, affiché sous le badge "À venir". */
.match-countdown { display: block; margin-top: 2px; font-size: 10px; font-weight: 600; color: var(--mint); opacity: .85; }

.settle-actions { display: flex; gap: 5px; flex-wrap: wrap; }
.settle-actions button { padding: 4px 9px; font-size: 11px; border-radius: 6px; cursor: pointer; border: 1px solid var(--border-2); background: var(--surface-2); color: var(--text-2); }
.settle-actions button.win:hover { border-color: var(--pos); color: var(--pos); }
.settle-actions button.lose:hover { border-color: var(--neg); color: var(--neg); }
.settle-actions button.void:hover { border-color: var(--muted); color: var(--text); }
.settle-actions button.edit:hover { border-color: var(--mint); color: var(--mint); }
.settle-actions button.cash:hover { border-color: #f0b429; color: #f0b429; }
.settle-actions button.unset:hover,
.settle-actions button.unset-grp:hover { border-color: var(--blue); color: var(--blue); }
.settle-actions input.co-input { width: 92px; padding: 4px 7px; font-size: 11px; border-radius: 6px;
  border: 1px solid #f0b429; background: var(--surface-2); color: var(--text); }
/* Colonne Cashout : seuil minimum à accepter (EV−) et montant encaissé. */
.cashout-min { font-weight: 700; color: #f0b429; white-space: nowrap; cursor: help; }
.cashout-amt { font-weight: 700; white-space: nowrap; cursor: help; }
tr.editing { background: rgba(255, 255, 255, .03); }
tr.editing input.e-txt { width: 100%; min-width: 90px; margin: 1px 0; text-align: left; }
tr.editing input[type="number"] { width: 74px; }

.empty { color: var(--muted); font-size: 13px; padding: 14px 2px; }

/* ---------------------------------------------------------------- fenêtre compagnon flottante */
.companion-body { margin: 0; padding: 0; background: var(--bg); color: var(--text);
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; }
.companion { display: flex; flex-direction: column; gap: 6px; padding: 8px; }
.co-title { font-size: 11px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
  color: var(--muted); padding: 2px 2px 4px; position: sticky; top: 0; background: var(--bg); }
.co-row { border: 1px solid var(--border-2); border-radius: 9px; padding: 7px 9px;
  background: var(--surface-2); cursor: pointer; transition: border-color .12s, transform .06s; }
.co-row:hover { border-color: var(--mint); }
.co-row:active { transform: scale(.99); }
.co-row.hot { border-color: var(--mint); box-shadow: 0 0 0 1px var(--mint) inset; }
.co-r1 { display: flex; align-items: center; gap: 7px; font-size: 11px; }
.co-edge { font-weight: 800; color: var(--pos); font-variant-numeric: tabular-nums;
  font-size: 19px; line-height: 1.1; letter-spacing: -0.02em; }
.co-edge.neg { color: var(--neg); }
.co-book { font-weight: 700; color: var(--text-2); }
.co-cd { margin-left: auto; color: var(--muted); font-variant-numeric: tabular-nums; }
.co-cd.soon { color: #f0b429; font-weight: 700; }
.co-cd.today { color: var(--text-2); }
.co-match { font-size: 13px; font-weight: 600; margin: 3px 0 2px; }
/* Carte MATCH de la fenêtre live : en-tête (équipes + compte à rebours + expo) puis ses sélections
   regroupées dessous (best EV en tête), sans dupliquer le nom du match. */
.co-mrow { display: flex; flex-direction: column; gap: 5px; padding: 2px 0; }
.co-mrow + .co-mrow { border-top: 1px solid var(--border-2); padding-top: 8px; }
.co-mhead { padding: 0 2px; }
.co-mteams { display: flex; align-items: center; gap: 6px; font-size: 13px; font-weight: 700; }
.co-vs { color: var(--muted); font-weight: 400; }
.co-mcount { background: rgba(255,255,255,.08); color: var(--text-2); font-size: 10px; font-weight: 700;
  padding: 1px 6px; border-radius: 6px; }
.co-mexp { font-size: 11.5px; color: #f0b429; margin-top: 2px; font-variant-numeric: tabular-nums; }
.co-mexp b { font-weight: 700; }
/* Sélections d'un même match : empilées et indentées (barre gauche) pour matérialiser le groupe. */
.co-sels { display: flex; flex-direction: column; gap: 5px; padding-left: 8px;
  border-left: 2px solid var(--border-2); }
/* Ligne actionnable de la fenêtre live : cote éditable (EV+mise recalculés) + mise + Valider */
.co-r2 { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; font-size: 12.5px;
  color: var(--text); font-variant-numeric: tabular-nums; margin-top: 3px; }
.co-r2 b { color: var(--mint); }
.co-r2 .co-side { font-weight: 600; }
input.co-odds { width: 62px; font-weight: 700; color: var(--blue); font-size: 13px; padding: 3px 5px; cursor: text; }
input.co-odds.edited { border-color: var(--mint); box-shadow: 0 0 0 2px rgba(76, 217, 176, .18); }
.co-stake-wrap { display: inline-flex; align-items: center; gap: 3px; color: var(--muted); }
input.co-stake { width: 52px; font-weight: 700; font-size: 13px; padding: 3px 5px; cursor: text; }
button.co-validate { margin-left: auto; background: var(--mint); color: #08201a; border: none;
  font-weight: 700; cursor: pointer; border-radius: 7px; padding: 4px 9px; font-size: 12px; white-space: nowrap; }
button.co-validate:hover { background: var(--mint-2); }
button.co-validate:disabled { opacity: .6; cursor: default; }
/* Ligne fair : fair de-viggée + tendance + fraîcheur colorée + sparkline */
.co-meta { display: flex; align-items: center; gap: 7px; flex-wrap: wrap; margin-top: 4px;
  font-size: 11.5px; font-variant-numeric: tabular-nums; }
.co-fair { color: var(--text-2); }
.co-fair b { color: var(--mint); font-weight: 700; }
.co-fresh { font-weight: 700; }
.co-fresh.hot { color: var(--mint); }
.co-fresh.warm { color: var(--gold); }
.co-fresh.stale { color: var(--neg); }
.co-fresh.cold, .co-fresh.none { color: var(--muted); }
/* Santé de la source Pinnacle : bandeau compact source + fraîcheur des matchs proches */
.pin-health-sec { padding: 10px 14px; }
.pin-health .ph-row { display: flex; align-items: center; flex-wrap: wrap; gap: 8px 12px; font-size: 12.5px; }
.ph-title { font-weight: 700; }
.ph-block { display: inline-flex; align-items: center; gap: 8px; flex-wrap: wrap;
  background: var(--surface-2); border-radius: 9px; padding: 4px 10px; }
.ph-icon { font-size: 14px; }
.ph-src { font-weight: 700; color: var(--mint); font-variant-numeric: tabular-nums; }
.ph-badge { font-size: 10.5px; font-weight: 700; padding: 1px 6px; border-radius: 6px;
  background: rgba(255,255,255,.08); color: var(--text-2); }
.ph-badge.ph-push { background: rgba(76,217,176,.16); color: var(--mint); }
.ph-seg { color: var(--text-2); font-variant-numeric: tabular-nums; }
.ph-seg.ph-ok { color: var(--mint); }
.ph-seg.ph-warn { color: var(--gold); }
.ph-seg.ph-bad { color: var(--neg); font-weight: 700; }
.ph-seg.ph-muted { color: var(--muted); }
.ph-alert { margin-top: 7px; font-size: 12.5px; font-weight: 700; padding: 5px 10px; border-radius: 8px; display: inline-block; }
.ph-alert.ph-bad { color: #2a0d0d; background: var(--neg); }
.ph-alert.ph-ok-alert { color: var(--mint); background: rgba(76,217,176,.12); font-weight: 600; }
/* Attribution CLV : bandeau de synthèse + tables par dimension */
.clv-summary { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 16px; }
.clv-kpi { background: var(--surface-2); border-radius: 10px; padding: 8px 14px; min-width: 118px; }
.clv-kpi .lab { font-size: 11px; color: var(--muted); }
.clv-kpi .val { font-size: 18px; font-weight: 700; font-variant-numeric: tabular-nums; }
.clv-block { margin-bottom: 22px; }
.clv-block h3 { margin: 0 0 7px; font-size: 14px; }
.clv-table td, .clv-table th { font-variant-numeric: tabular-nums; }
.clv-pos { color: var(--mint); }
.clv-neg { color: var(--neg); }
/* Ligne TRJ Pinnacle / TRJ -EV / limite de mise Pinnacle */
.co-trj { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 4px;
  font-size: 11.5px; color: var(--text-2); font-variant-numeric: tabular-nums; }
.co-trj b { color: var(--text); font-weight: 700; }
.co-trjev.good b { color: var(--mint); }
.co-pinmax b { color: var(--text); }
/* Value fraîchement apparue : halo pulsé + accent gauche + compteur 🆕 dans le titre */
.co-row.new { box-shadow: inset 3px 0 0 var(--mint); animation: coNew 1.4s ease-in-out infinite; }
@keyframes coNew { 0%, 100% { background: var(--surface-2); } 50% { background: rgba(76, 217, 176, .14); } }
.co-new-count { background: var(--mint); color: #08201a; font-weight: 800; font-size: 10px;
  padding: 1px 6px; border-radius: 6px; margin-left: 6px; }
/* Logos des books dans la fenêtre live (compacts) — book principal et puces "autres books" */
.co-book { display: inline-flex; align-items: center; }
.co-book .book-logo { height: 15px; max-width: 66px; }
.co-chip .book-logo { height: 13px; max-width: 52px; }
.co-r3 { font-size: 11.5px; color: #f0b429; margin-top: 3px; font-variant-numeric: tabular-nums; }
.co-r3 b { font-weight: 700; }
.co-r3 .co-side-amt { color: var(--muted); font-size: 11px; }
.co-row.has-exp { border-left: 3px solid #f0b429; }
/* Autres books en value sur la même issue */
.co-others { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 5px; }
.co-chip { display: inline-flex; align-items: center; gap: 4px; padding: 2px 6px; border-radius: 6px;
  border: 1px solid var(--border-2); background: var(--surface); font-size: 10.5px; color: var(--text-2);
  cursor: pointer; font-variant-numeric: tabular-nums; }
.co-chip:hover { border-color: var(--mint); color: var(--text); }
.co-chip b { color: var(--text); font-weight: 700; }
.co-chip-edge { color: var(--pos); font-weight: 700; }
.co-chip-edge.neg { color: var(--neg); }
.co-empty { color: var(--muted); font-size: 12px; padding: 16px 4px; text-align: center; }
.co-more { color: var(--muted); font-size: 11px; padding: 4px 2px; text-align: center; }

/* ---------------------------------------------------------------- vue fusionnée foot+tennis */
/* Pastille sport (⚽/🎾) devant un match / une issue, visible seulement en filtre « Tous ». */
.sport-tag { font-size: 12px; margin-right: 3px; opacity: .95; }
.pill-sport { font-size: 13px; margin: 0 1px 0 8px; align-self: center; opacity: .95; }

/* ---------------------------------------------------------------- values expirées (EV+ -> EV-) */
.exp-mybet { color: var(--gold); font-weight: 700; font-variant-numeric: tabular-nums; }
tr.exp-hasbet { background: rgba(244, 198, 90, .07); }
tr.exp-hasbet td { border-top: 1px solid rgba(244, 198, 90, .25); }
.exp-vanished { color: var(--muted); font-style: italic; }

/* ---------------------------------------------------------------- manual form */
details.manual { background: var(--surface); border: 1px solid var(--border); border-radius: var(--radius); padding: 4px 20px; margin-bottom: 20px; }
details.manual summary { cursor: pointer; font-weight: 700; font-size: 13px; padding: 12px 0; color: var(--text-2); list-style: none; }
details.manual summary::-webkit-details-marker { display: none; }
details.manual summary::before { content: "➕ "; }
details[open].manual summary::before { content: "➖ "; }
.form-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; padding: 8px 0 18px; }
@media (max-width: 860px) { .form-grid { grid-template-columns: repeat(2, 1fr); } }
.form-grid label { display: flex; flex-direction: column; gap: 5px; font-size: 11px; color: var(--muted); text-transform: uppercase; letter-spacing: .04em; }
.form-grid input, .form-grid select { width: 100%; text-align: left; }
.form-grid .m-match-cell { grid-column: 1 / -1; }   /* liste des matchs sur toute la largeur */
.form-actions { grid-column: 1 / -1; }
.manual .m-match-info { font-size: 12px; color: var(--muted); padding: 0 0 14px; }
.manual .m-match-info.ok { color: var(--mint); }
.manual .m-match-info b { color: var(--text); }

/* ---------------------------------------------------------------- toast */
#toast-wrap { position: fixed; bottom: 20px; right: 20px; display: flex; flex-direction: column; gap: 10px; z-index: 9999; }
.toast {
  background: var(--surface); border: 1px solid var(--mint); color: var(--text);
  border-radius: 10px; padding: 12px 16px; font-size: 13px; box-shadow: 0 8px 24px rgba(0, 0, 0, .4);
  animation: toastIn .25s ease-out; max-width: 340px;
}
.toast.err { border-color: var(--neg); }
@keyframes toastIn { from { transform: translateY(12px); opacity: 0; } to { transform: translateY(0); opacity: 1; } }

/* ---------------------------------------------------------------- filtre segmenté (date) */
.seg { display: inline-flex; border: 1px solid var(--border-2); border-radius: 8px; overflow: hidden; }
.seg button {
  background: var(--surface-2); color: var(--text-2); border: none; border-right: 1px solid var(--border);
  padding: 7px 12px; font-size: 12.5px; font-weight: 600; cursor: pointer; border-radius: 0;
}
.seg button:last-child { border-right: none; }
.seg button:hover { color: var(--text); }
.seg button.active { background: var(--mint); color: #08201a; }

/* ---------------------------------------------------------------- logo book */
.book-logo { height: 22px; max-width: 82px; object-fit: contain; vertical-align: middle; display: inline-block; }

/* ---------------------------------------------------------------- badge "commence dans" */
.start {
  display: inline-block; font-weight: 700; font-variant-numeric: tabular-nums; font-size: 12.5px;
  padding: 3px 9px; border-radius: 7px; background: var(--chip-bg); color: var(--text-2); white-space: nowrap;
}
.start.today { background: rgba(237, 161, 0, .16); color: #f0b429; }   /* < 24h */
.start.soon  { background: var(--neg-bg); color: var(--neg); }          /* < 3h  */
.start.past  { background: transparent; color: var(--muted); font-weight: 600; }

/* ---------------------------------------------------------------- cote cliquable */
a.odds { text-decoration: none; }
a.odds:hover { text-decoration: underline; }
a.odds .ext { font-size: 10px; margin-left: 2px; opacity: .7; }

/* ---------------------------------------------------------------- variation d'edge (EV) */
.ev-delta { margin-left: 6px; font-size: 11px; font-weight: 700; font-variant-numeric: tabular-nums; }
.ev-delta.up { color: var(--pos); }
.ev-delta.down { color: var(--neg); }

/* ---------------------------------------------------------------- nouvelle ligne */
.new-tag {
  display: inline-block; background: var(--mint); color: #08201a; font-size: 9px; font-weight: 800;
  letter-spacing: .05em; padding: 1px 5px; border-radius: 5px; vertical-align: middle; margin-right: 4px;
}

/* Colonne Période du tableau des value bets : temps plein vs 1re mi-temps. */
.vb-period { white-space: nowrap; }
.per-tag {
  display: inline-block; font-size: 10px; font-weight: 700; letter-spacing: .02em;
  padding: 1px 6px; border-radius: 5px; vertical-align: middle;
}
.per-tag.per-ft { background: rgba(255, 255, 255, .07); color: var(--dim, #9aa4b2); }
.per-tag.per-1h { background: rgba(120, 160, 255, .16); color: #9fbcff; }
tr.row-new td { animation: rowNew 1.4s ease-in-out infinite; }
tr.row-new td:first-child { box-shadow: inset 3px 0 0 var(--mint); }
@keyframes rowNew {
  0%, 100% { background: transparent; }
  50% { background: rgba(76, 217, 176, .12); }
}

/* Séparateur "nouveautés / reste" (tri 🆕 Nouveautés) : bande fine repérant la frontière entre
   les values fraîchement apparues (au-dessus) et les plus anciennes (en dessous). */
tr.vb-sep td {
  padding: 3px 10px; background: rgba(76, 217, 176, .08);
  border-top: 1px solid rgba(76, 217, 176, .45); border-bottom: 1px solid rgba(76, 217, 176, .45);
  font-size: 11px; letter-spacing: .03em; user-select: none;
}
.vb-sep-badge {
  display: inline-block; background: var(--mint); color: #08201a; font-weight: 800;
  padding: 1px 7px; border-radius: 5px; margin-right: 8px;
}
.vb-sep-rest { color: var(--muted, #8a94a6); font-weight: 600; }

/* ---------------------------------------------------------------- modal historique cote */
.fair-link { cursor: pointer; color: var(--blue); }
.fair-link:hover { text-decoration: underline; }
.clv-link { cursor: pointer; display: inline-flex; align-items: center; gap: 6px; }
.clv-link:hover .badge { text-decoration: underline; }
.overlay {
  position: fixed; inset: 0; background: rgba(0, 0, 0, .6);
  display: flex; align-items: center; justify-content: center; z-index: 100; padding: 20px;
}
.modal {
  position: relative; background: var(--surface); border: 1px solid var(--border-2);
  border-radius: var(--radius); box-shadow: var(--shadow);
  width: min(720px, 96vw); max-height: 92vh; overflow-y: auto; padding: 20px 22px;
}
.modal-close {
  position: absolute; top: 12px; right: 12px; width: 30px; height: 30px; border-radius: 8px;
  border: 1px solid var(--border-2); background: var(--surface-2); color: var(--text-2);
  cursor: pointer; font-size: 14px; line-height: 1;
}
.modal-close:hover { color: var(--text); border-color: var(--neg); }
.hist-head h3 { margin: 0 0 2px; font-size: 17px; }
.hist-head .sub { color: var(--text-2); font-size: 12px; }
.hist-chart-title { margin: 16px 0 6px; font-size: 12px; color: var(--muted); text-transform: uppercase; letter-spacing: .06em; }
.chart-wrap { position: relative; width: 100%; }
#hist-svg { width: 100%; height: 240px; display: block; }
.c-grid { stroke: var(--border); stroke-width: 1; }
.c-ylab, .c-xlab { fill: var(--muted); font-size: 10px; font-variant-numeric: tabular-nums; }
.c-cross { stroke: var(--text-2); stroke-width: 1; stroke-dasharray: 3 3; opacity: .6; }
.c-hover { fill: var(--mint); stroke: var(--surface); stroke-width: 2; }
.c-tip {
  position: absolute; top: 6px; pointer-events: none; background: var(--surface-2);
  border: 1px solid var(--border-2); border-radius: 8px; padding: 6px 9px; font-size: 12px;
  color: var(--text); white-space: nowrap; box-shadow: var(--shadow);
}
.c-tip .sub { color: var(--muted); font-size: 11px; }
/* Repère de ta prise sur le graphe de la fair (historique des paris) : doré, dashé. */
.c-bet-line { stroke: var(--gold); stroke-width: 1.5; stroke-dasharray: 4 3; opacity: .85; }
.c-bet-dot { fill: var(--gold); stroke: var(--surface); stroke-width: 2; }
.c-bet-lab { fill: var(--gold); font-size: 10px; font-weight: 700; }
.bet-note { color: var(--gold); }

/* Bandeau ouverture → actuel + repère d'ouverture sur le graphe de la fair. */
.fair-delta { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 4px 0 12px; font-size: 13px; color: var(--muted); }
.fair-delta b { color: var(--text); font-variant-numeric: tabular-nums; }
.fair-delta .fd-cur b { color: var(--mint); }
.fair-delta .fd-arrow { color: var(--muted); }
.fd-chip { font-weight: 800; font-variant-numeric: tabular-nums; padding: 2px 9px; border-radius: 999px; font-size: 12px; }
.fd-chip.pos { color: var(--pos); background: var(--pos-bg); }
.fd-chip.neg { color: var(--neg); background: var(--neg-bg); }
.fd-chip.flat { color: var(--muted); background: var(--chip-bg); }

/* Boutons de fenêtre temporelle (dernières heures / tout). */
.hist-range { display: flex; gap: 6px; margin-bottom: 8px; }
.range-btn {
  border: 1px solid var(--border); background: var(--surface-2); color: var(--muted);
  border-radius: 8px; padding: 4px 11px; font-size: 12px; font-weight: 600; cursor: pointer;
  font-variant-numeric: tabular-nums; transition: color .12s ease, border-color .12s ease, background .12s ease;
}
.range-btn:hover { color: var(--text); border-color: var(--border-2); }
.range-btn.active { color: var(--mint); border-color: var(--mint); background: rgba(76, 217, 176, .12); }

/* Repère horizontal de l'ouverture : discret, en pointillés. */
.c-open-line { stroke: var(--text-2); stroke-width: 1; stroke-dasharray: 2 4; opacity: .5; }
.c-open-lab { fill: var(--text-2); font-size: 10px; font-weight: 600; opacity: .85; }
.c-open-dot { fill: var(--surface); stroke: var(--text-2); stroke-width: 2; }
/* Masquer P&L : clic sur un montant tagué .money → floute/défloue tous les montants. */
.money { cursor: pointer; }
.pnl-hidden .money { filter: blur(8px); transition: filter .12s ease; user-select: none; }

.hist-tiles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 14px; }
.hist-note { margin-top: 12px; font-size: 11px; color: var(--muted); }

/* Calculette EV du modal : saisir une cote → EV+ / EV− vs fair de-viggée. */
.ev-calc { margin-top: 16px; padding: 12px 14px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 10px; }
.ev-calc-head { font-size: 12px; font-weight: 700; color: var(--text-2); margin-bottom: 10px; }
.ev-calc-row { display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.ev-calc-row label { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--muted); }
.ev-calc-row input { width: 96px; font-variant-numeric: tabular-nums; }
.ev-result { font-size: 15px; font-weight: 800; font-variant-numeric: tabular-nums; }
.ev-result.pos { color: var(--pos); }
.ev-result.neg { color: var(--neg); }

/* ---------------------------------------------------------------- calendrier des gains */
.cal-toolbar {
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: 16px; margin-bottom: 18px;
}
.cal-nav { display: flex; align-items: center; gap: 10px; }
.cal-title { margin: 0; font-size: 20px; font-weight: 800; min-width: 190px; text-align: center; }
.cal-arrow {
  width: 34px; height: 34px; border-radius: 10px; cursor: pointer;
  background: var(--surface-2); border: 1px solid var(--border-2);
  color: var(--text); font-size: 20px; line-height: 1; display: grid; place-items: center;
  transition: background .12s, border-color .12s;
}
.cal-arrow:hover { background: var(--surface); border-color: var(--mint); color: var(--mint); }
.cal-today { margin-left: 4px; padding: 7px 14px; }

.cal-stats { display: flex; gap: 10px; flex-wrap: wrap; }
.cal-stat {
  display: flex; flex-direction: column; gap: 2px;
  background: var(--surface); border: 1px solid var(--border);
  border-radius: 10px; padding: 8px 14px; min-width: 108px;
}
.cal-stat-lab { font-size: 10.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--muted); }
.cal-stat-val { font-size: 17px; font-weight: 800; font-variant-numeric: tabular-nums; }
.cal-stat-val.pos { color: var(--pos); }
.cal-stat-val.neg { color: var(--neg); }
.cal-stat-val.zero, .cal-stat-val.muted { color: var(--text-2); }

.cal-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 8px; }
.cal-dow {
  text-align: center; font-size: 11px; font-weight: 700; letter-spacing: .04em;
  text-transform: uppercase; color: var(--muted); padding-bottom: 2px;
}
.cal-cell {
  position: relative; min-height: 98px; border-radius: 12px;
  border: 1px solid var(--border); background: var(--surface);
  padding: 7px 9px; display: flex; flex-direction: column;
  transition: border-color .12s, transform .08s, box-shadow .12s;
}
.cal-blank { background: transparent; border: 1px dashed var(--border); opacity: .35; }
.cal-num { font-size: 12.5px; font-weight: 700; color: var(--text-2); }
.cal-cell.has-bets { cursor: pointer; }
.cal-cell.has-bets:hover { transform: translateY(-1px); box-shadow: var(--shadow); }
.cal-cell.has-bets.pos { border-color: rgba(74, 222, 128, .45); background: linear-gradient(180deg, var(--pos-bg), transparent 90%); }
.cal-cell.has-bets.neg { border-color: rgba(248, 113, 113, .45); background: linear-gradient(180deg, var(--neg-bg), transparent 90%); }
.cal-cell.has-bets.zero { border-color: var(--border-2); }
.cal-cell.today { outline: 2px solid var(--mint); outline-offset: -2px; }
.cal-cell.today .cal-num { color: var(--mint); }
.cal-cell.selected { border-color: var(--mint); box-shadow: 0 0 0 1px var(--mint); }
.cal-amt {
  margin-top: auto; font-size: 15px; font-weight: 800; font-variant-numeric: tabular-nums; line-height: 1.15;
}
.cal-cell.pos .cal-amt { color: var(--pos); }
.cal-cell.neg .cal-amt { color: var(--neg); }
.cal-cell.zero .cal-amt { color: var(--text-2); }
.cal-kpis { display: flex; flex-wrap: wrap; gap: 4px 8px; margin-top: 3px; }
.cal-kpis .ck { font-size: 10.5px; font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.cal-kpis .ck.pos { color: var(--pos); }
.cal-kpis .ck.neg { color: var(--neg); }
.cal-kpis .ck.zero, .cal-kpis .ck.muted { color: var(--muted); }
.cal-count { font-size: 10.5px; color: var(--muted); margin-top: 2px; }

.cal-day-detail { margin-top: 20px; border-top: 1px solid var(--border); padding-top: 16px; }
.cal-detail-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 10px; }
.cal-detail-head h3 { margin: 0; font-size: 16px; font-weight: 800; text-transform: capitalize; }
.cal-detail-net { font-size: 17px; font-weight: 800; font-variant-numeric: tabular-nums; }
.cal-detail-net.pos { color: var(--pos); }
.cal-detail-net.neg { color: var(--neg); }
.cal-detail-net.zero { color: var(--text-2); }
.cal-detail-kpi { font-size: 12px; color: var(--muted); font-variant-numeric: tabular-nums; }
.cal-detail-kpi b { font-weight: 800; margin-left: 3px; }
.cal-detail-kpi b.pos { color: var(--pos); }
.cal-detail-kpi b.neg { color: var(--neg); }
.cal-detail-kpi b.zero, .cal-detail-kpi b.muted { color: var(--text-2); }
.cal-detail-close {
  margin-left: auto; width: 28px; height: 28px; border-radius: 8px; cursor: pointer;
  background: var(--surface-2); border: 1px solid var(--border-2); color: var(--text-2); font-size: 14px;
}
.cal-detail-close:hover { color: var(--neg); border-color: var(--neg); }
.cal-day-detail td.money.pos { color: var(--pos); font-weight: 700; }
.cal-day-detail td.money.neg { color: var(--neg); font-weight: 700; }
.cal-day-detail td.money.zero { color: var(--text-2); }

@media (max-width: 640px) {
  .cal-grid { gap: 5px; }
  .cal-cell { min-height: 74px; padding: 5px 6px; }
  .cal-amt { font-size: 12.5px; }
  .cal-count { display: none; }
  .cal-kpis { gap: 2px; flex-direction: column; }
  .cal-kpis .ck { font-size: 9.5px; }
  .cal-title { min-width: 140px; font-size: 17px; }
}

/* ---------------------------------------------------------------- file d'action « À miser maintenant » */
.aq-sec {
  border: 1px solid var(--mint);
  box-shadow: inset 3px 0 0 var(--mint), var(--shadow);
  background: linear-gradient(180deg, rgba(76, 217, 176, .06), transparent 120px);
}
.aq-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.aq-head h2 { margin: 0; }
.aq-head-actions { display: flex; align-items: center; gap: 12px; }
#aq-collapse { font-size: 16px; line-height: 1; padding: 2px 8px; }
.aq-body { margin-top: 12px; display: flex; flex-direction: column; gap: 8px; }

.aq-row {
  display: grid;
  grid-template-columns: auto 1fr auto;
  align-items: center;
  gap: 12px;
  padding: 9px 12px;
  border: 1px solid var(--border);
  border-radius: 10px;
  background: var(--surface-2);
  cursor: pointer;
  transition: border-color .12s, background .12s;
}
.aq-row:hover { border-color: var(--border-2); background: #22304a; }
.aq-row.urgent { box-shadow: inset 3px 0 0 var(--gold); }
.aq-row.stale { opacity: .82; }

.aq-rank {
  display: inline-flex; align-items: center; justify-content: center;
  width: 26px; height: 26px; border-radius: 50%;
  background: var(--chip-bg); color: var(--text-2);
  font-weight: 800; font-size: 13px; font-variant-numeric: tabular-nums;
}
.aq-row:first-child .aq-rank { background: var(--mint); color: #08201a; }

.aq-main { min-width: 0; }
.aq-line1 { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.aq-match { font-weight: 700; color: var(--text); }
.aq-cd { font-size: 11.5px; }
.aq-line2 { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 3px; }
.aq-side { color: var(--text-2); font-weight: 600; }
.aq-book .book-logo { height: 16px; max-width: 60px; }
.aq-odds { color: var(--blue); font-variant-numeric: tabular-nums; font-size: 15px; }
.aq-edge { color: var(--pos); font-weight: 700; font-variant-numeric: tabular-nums; }
.aq-edge.neg { color: var(--neg); }

.aq-flag { font-size: 12px; line-height: 1; }
.aq-flag.new {
  background: var(--mint); color: #08201a; font-size: 9px; font-weight: 800;
  padding: 1px 5px; border-radius: 5px; letter-spacing: .3px;
}

.aq-act { display: flex; flex-direction: column; align-items: flex-end; gap: 3px; text-align: right; }
.aq-stake { font-weight: 700; color: var(--text); font-variant-numeric: tabular-nums; }
.aq-ev { font-size: 11.5px; color: var(--gold); font-variant-numeric: tabular-nums; }
.aq-bet {
  margin-top: 3px; padding: 6px 16px; border: none; border-radius: 8px;
  background: var(--mint); color: #08201a; font-weight: 800; font-size: 13px; cursor: pointer;
  transition: background .12s;
}
.aq-bet:hover { background: var(--mint-2); }
.aq-bet:disabled { opacity: .5; cursor: default; }
.aq-more { color: var(--muted); font-size: 12px; padding: 4px 2px 0; }
.aq-sec.collapsed .aq-body { display: none; }

@media (max-width: 720px) {
  .aq-row { grid-template-columns: auto 1fr; }
  .aq-act { grid-column: 2; flex-direction: row; align-items: center; justify-content: flex-end; gap: 10px; flex-wrap: wrap; }
  .aq-bet { margin-top: 0; }
}

.cmp-line { color: var(--dim, #9aa7b4); font-size: 12px; font-weight: 600; }

/* ---------------------------------------------------------------- fiche match (/match) */
/* Nom du match = lien vers la fiche (board Pinnacle complet, nouvel onglet) ; 🔍 = même lien en icône. */
.match-open { color: inherit; text-decoration: none; border-bottom: 1px dashed transparent; transition: color .12s, border-color .12s; }
.match-open:hover { color: var(--blue); border-bottom-color: currentColor; }
.match-page-ico { text-decoration: none; font-size: 11px; margin-left: 5px; opacity: .5; vertical-align: middle; }
.match-page-ico:hover { opacity: 1; }
.match-link.ico { font-size: 11px; margin-left: 5px; opacity: .5; border-bottom: 0; }
.match-link.ico:hover { opacity: 1; }
/* Modale fiche match : plein écran, la page /match embarquée (iframe) en mode intégré. */
.modal-match { width: min(1500px, 97vw); height: 94vh; max-height: 94vh; padding: 0; overflow: hidden; display: flex; }
.modal-match iframe { flex: 1; width: 100%; height: 100%; border: 0; background: var(--bg); border-radius: var(--radius); }
.modal-match .modal-close { top: 10px; right: 10px; z-index: 2; }
.modal-newtab {
  position: absolute; top: 10px; right: 48px; width: 30px; height: 30px; border-radius: 8px; z-index: 2;
  border: 1px solid var(--border-2); background: var(--surface-2); color: var(--text-2);
  display: inline-flex; align-items: center; justify-content: center; text-decoration: none; font-size: 14px;
}
.modal-newtab:hover { color: var(--text); border-color: var(--blue); }
body.modal-open { overflow: hidden; }
