:root {
  --bg:#0b0d12; --card:#14171f; --card2:#1a1e28; --line:#242a36; --line2:#2f3645;
  --txt:#eef1f6; --muted:#8b94a7; --accent:#6c8cff; --accent-d:#4a6cff;
  --good:#2fd07a; --good-bg:#11281c; --warn:#f5b13d; --warn-bg:#2b2310; --bad:#ff6b6b; --bad-bg:#2c1517;
  --radius:14px;
}
* { box-sizing:border-box; }
html,body { margin:0; }
body { font:14px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Inter,sans-serif; background:radial-gradient(1200px 600px at 70% -10%, #161b27 0%, var(--bg) 55%); color:var(--txt); min-height:100vh; display:flex; }

/* ===== Sidebar (menu vertical gauche) ===== */
.sidebar { width:236px; flex-shrink:0; display:flex; flex-direction:column; border-right:1px solid var(--line); background:rgba(11,13,18,.6); position:sticky; top:0; height:100vh; }
.brand { padding:22px 20px 16px; }
.brand .logo { display:flex; align-items:center; gap:9px; font-size:20px; font-weight:700; letter-spacing:-.02em; }
.brand .logo b { color:var(--accent); }
.brand .logo-mark { border-radius:6px; flex-shrink:0; }
.brand .sub { color:var(--muted); font-size:12px; margin-top:4px; }
.nav { display:flex; flex-direction:column; gap:4px; padding:8px; }
.navitem { display:flex; align-items:center; gap:11px; width:100%; border:0; background:transparent; color:var(--muted); font:inherit; font-weight:600; padding:10px 12px; border-radius:10px; cursor:pointer; transition:.15s; text-align:left; }
.navitem svg { width:18px; height:18px; flex-shrink:0; stroke:currentColor; fill:none; stroke-width:1.8; }
.navitem:hover { color:var(--txt); background:var(--card2); }
.navitem.active { background:var(--accent); color:#fff; }
/* Sous-navigation de l'Admin (segments Auth / Crawl / Settings). */
.subnav { display:flex; gap:6px; margin:0 0 18px; border-bottom:1px solid var(--line); }
.subtab { border:0; background:transparent; color:var(--muted); font:inherit; font-weight:600; padding:8px 14px; cursor:pointer; border-bottom:2px solid transparent; margin-bottom:-1px; transition:.15s; }
.subtab:hover { color:var(--txt); }
.subtab.active { color:var(--txt); border-bottom-color:var(--accent); }
.subpanel { display:none; }
.subpanel.active { display:block; }
.sidebar-foot { margin-top:auto; padding:16px 18px; border-top:1px solid var(--line); display:flex; flex-direction:column; gap:12px; }
.thr { display:flex; align-items:center; gap:8px; color:var(--muted); font-size:12px; }
.thr input { width:60px; }
select.basis-sel { background:var(--card2); color:var(--txt); border:1px solid var(--line2); border-radius:8px; padding:4px 7px; font-size:12px; cursor:pointer; }
.badge-net { font-family:inherit; font-size:12px; color:var(--muted); background:none; border:1px solid var(--line2); border-radius:999px; padding:5px 11px; align-self:flex-start; cursor:pointer; display:inline-flex; align-items:center; }
.badge-net:hover { color:var(--txt); border-color:var(--muted); }
.badge-net .badge-pct:not(:empty) { margin-left:7px; padding-left:7px; border-left:1px solid var(--line2); font-variant-numeric:tabular-nums; }
.dot { display:inline-block; width:7px; height:7px; border-radius:50%; background:var(--good); margin-right:6px; }
.signout-form { margin:0; }
.signout { width:100%; background:transparent; color:var(--muted); border:1px solid var(--line2); border-radius:10px; padding:9px 12px; font:inherit; font-weight:600; font-size:13px; cursor:pointer; transition:.15s; }
.signout:hover { color:var(--bad); border-color:var(--bad); }

.content { flex:1; min-width:0; }
main { max-width:1180px; margin:0 auto; padding:28px 32px 60px; }
.pagehead { margin:0 0 20px; }
.pagehead h1 { font-size:19px; font-weight:700; letter-spacing:-.02em; margin:0; }
.pagehead p { color:var(--muted); font-size:13px; margin:4px 0 0; }

.view { display:none; } .view.active { display:block; animation:fade .25s ease; }
@keyframes fade { from { opacity:0; transform:translateY(4px); } to { opacity:1; transform:none; } }
.card { background:var(--card); border:1px solid var(--line); border-radius:var(--radius); padding:20px; margin-bottom:20px; }
.grid { display:flex; flex-wrap:wrap; gap:16px; align-items:flex-end; }
.grid > .field { flex:0 1 auto; }
.grid > .field:first-child { flex:1 1 220px; min-width:200px; }
.grid textarea { width:100%; }
.field { display:flex; flex-direction:column; gap:7px; min-width:0; }
label { color:var(--muted); font-size:11px; text-transform:uppercase; letter-spacing:.05em; font-weight:600; }
textarea, input, select { background:#0c0e13; color:var(--txt); border:1px solid var(--line2); border-radius:10px; padding:10px 12px; font:inherit; outline:none; transition:.15s; }
textarea:focus, input:focus, select:focus { border-color:var(--accent); box-shadow:0 0 0 3px rgba(108,140,255,.15); }
textarea { height:92px; resize:vertical; font-family:ui-monospace,Menlo,monospace; font-size:13px; }
input.sm{ width:78px; } input.mid{ width:120px; }

/* ===== date picker maison ===== */
.dp { position:relative; width:158px; }
.dp-trigger { display:flex; align-items:center; gap:8px; width:100%; background:#0c0e13; color:var(--txt); border:1px solid var(--line2); border-radius:10px; padding:10px 12px; font:inherit; text-align:left; cursor:pointer; transition:.15s; }
.dp-trigger:hover { border-color:var(--line); }
.dp-trigger.active { border-color:var(--accent); box-shadow:0 0 0 3px rgba(108,140,255,.15); }
.dp-trigger .dp-ico { width:16px; height:16px; flex-shrink:0; stroke:var(--muted); fill:none; stroke-width:1.8; }
.dp-trigger.active .dp-ico { stroke:var(--accent); }
.dp-trigger.empty .dp-val { color:var(--muted); }
.dp-pop { display:none; position:absolute; top:calc(100% + 6px); left:0; z-index:50; width:250px; background:var(--card2); border:1px solid var(--line2); border-radius:12px; box-shadow:0 12px 32px rgba(0,0,0,.5); padding:12px; }
.dp-pop.open { display:block; }
.dp-head { display:flex; align-items:center; gap:4px; margin-bottom:10px; }
.dp-title { flex:1; text-align:center; font-weight:600; font-size:13px; text-transform:capitalize; }
.dp-nav { width:26px; height:26px; flex-shrink:0; border:1px solid var(--line2); background:var(--card); color:var(--muted); border-radius:8px; font-size:14px; line-height:1; cursor:pointer; transition:.12s; padding:0; }
.dp-nav:hover { color:var(--txt); border-color:var(--accent); }
.dp-grid { display:grid; grid-template-columns:repeat(7,1fr); gap:2px; }
.dp-wd { text-align:center; color:var(--muted); font-size:10px; text-transform:uppercase; letter-spacing:.04em; padding-bottom:4px; }
.dp-day { aspect-ratio:1; display:flex; align-items:center; justify-content:center; border:0; background:transparent; color:var(--txt); border-radius:8px; font:inherit; font-size:12.5px; cursor:pointer; transition:.1s; }
.dp-day:hover { background:var(--card); }
.dp-day.other { color:var(--muted); opacity:.55; }
.dp-day.today { box-shadow:inset 0 0 0 1px var(--line2); }
.dp-day.sel { background:var(--accent); color:#fff; font-weight:600; }
.dp-day.sel:hover { background:var(--accent-d); }
.dp-foot { display:flex; gap:8px; margin-top:10px; padding-top:10px; border-top:1px solid var(--line); }
.dp-today, .dp-reset { flex:1; background:var(--card); border:1px solid var(--line2); color:var(--muted); border-radius:8px; padding:6px 10px; font:inherit; font-size:12px; cursor:pointer; transition:.12s; }
.dp-today:hover { color:var(--txt); border-color:var(--accent); }
.dp-reset:hover { color:var(--bad); border-color:#4a2226; }
.btn { background:var(--accent); color:#fff; border:0; border-radius:10px; padding:11px 22px; font:inherit; font-weight:600; cursor:pointer; transition:.15s; }
.btn:hover { background:var(--accent-d); } .btn:disabled { opacity:.45; cursor:default; }
.btn.ghost { background:var(--card2); color:var(--txt); border:1px solid var(--line2); }
.btn.sm { padding:6px 12px; font-size:12px; border-radius:8px; }
.btn.danger { background:var(--bad-bg); color:var(--bad); }
.btn.danger:hover { background:#3a1a1d; }
.btn.ghost.danger { background:var(--card2); color:var(--bad); border-color:#4a2226; }
.btn.ghost.danger:hover { background:var(--bad-bg); }

/* En-tête de vue avec action à droite (ex. bouton Export) */
.pagehead-row { display:flex; align-items:center; justify-content:space-between; gap:16px; }
/* Historique embarqué dans une vue (Comparer / Calendrier) */
.histpanel { margin-top:20px; }
.histpanel-title { margin:0 0 12px; font-size:15px; font-weight:600; }

/* Historique : liste des runs */
.runsort { display:flex; align-items:center; gap:8px; margin:14px 0 10px; flex-wrap:wrap; }
.runsort-label { color:var(--muted); font-size:12px; }
.sortbtn { background:var(--card); border:1px solid var(--line); color:var(--muted); border-radius:8px; padding:5px 12px; font-size:12px; cursor:pointer; display:inline-flex; align-items:center; gap:5px; }
.sortbtn:hover { border-color:var(--line2); color:var(--txt); }
.sortbtn.active { color:var(--txt); border-color:var(--accent); }
.sortbtn .arrow { font-size:10px; opacity:.7; }
.runlist { display:flex; flex-direction:column; gap:8px; }
.run-wrap { background:var(--card); border:1px solid var(--line); border-radius:12px; overflow:hidden; }
.run-wrap:hover { border-color:var(--line2); }
.run-wrap.open { border-color:var(--line2); }
.run-row { display:flex; flex-wrap:wrap; align-items:center; gap:10px 16px; padding:12px 16px; }
.run-main { flex:1 1 220px; display:flex; align-items:center; gap:10px; min-width:0; }
.run-label { font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.run-avg { display:inline-flex; align-items:center; gap:5px; color:var(--muted); font-size:11px; white-space:nowrap; }
.run-meta { color:var(--muted); font-size:12px; white-space:nowrap; flex:0 0 auto; }
.run-actions { display:flex; flex-wrap:wrap; gap:8px; flex:0 0 auto; }
.run-detail { display:none; padding:0 16px 14px; }
.run-wrap.open .run-detail { display:block; }
.run-detail-loading { color:var(--muted); font-size:12px; padding:8px 0; }
table.mini th, table.mini td { padding:8px 12px; font-size:12.5px; }
.file { color:var(--muted); font-size:12px; margin-top:9px; } .file input { padding:5px; font-size:12px; }
.hint { color:var(--muted); font-size:12px; margin-top:12px; }
code { background:#0c0e13; border:1px solid var(--line); border-radius:5px; padding:1px 6px; font-size:12px; }

/* champ large (recherche hôtel) */
.grid > .field.wide { flex:1 1 320px; min-width:240px; }

/* autocomplete */
.ac { position:relative; }
.ac-input { width:100%; }
/* icône « bulk » collée dans le champ hôtel (ouvre la modale d'import CSV/IDs) */
.ac-bulk .ac-input { padding-right:38px; }
.ac-bulk-btn { position:absolute; top:0; right:0; height:100%; width:34px; display:inline-flex; align-items:center; justify-content:center; background:none; border:0; color:var(--muted); cursor:pointer; }
.ac-bulk-btn:hover { color:var(--accent); }
.ac-bulk-btn svg { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.ac-panel { display:none; position:absolute; top:calc(100% + 4px); left:0; right:0; z-index:40; background:var(--card2); border:1px solid var(--line2); border-radius:10px; box-shadow:0 12px 32px rgba(0,0,0,.45); max-height:280px; overflow:auto; }
.ac-panel.open { display:block; }
.ac-item { display:flex; flex-direction:column; gap:2px; padding:8px 12px; cursor:pointer; border-bottom:1px solid var(--line); }
.ac-item:last-child { border-bottom:0; }
.ac-item:hover, .ac-item.active { background:var(--accent); }
.ac-item:hover .ac-meta, .ac-item.active .ac-meta { color:rgba(255,255,255,.8); }
.ac-name { font-weight:600; font-size:13px; }
.ac-meta { color:var(--muted); font-size:12px; }

/* chips (hôtels sélectionnés) */
.chips { display:flex; flex-wrap:wrap; gap:7px; margin-top:9px; }
.chips:empty { margin-top:0; }
.chip { display:inline-flex; align-items:center; gap:8px; background:var(--card2); border:1px solid var(--line2); border-radius:999px; padding:5px 6px 5px 12px; font-size:12.5px; max-width:100%; }
.chip-txt { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.chip .muted { color:var(--muted); }
.chip-x { display:inline-flex; align-items:center; justify-content:center; width:18px; height:18px; border:0; border-radius:50%; background:var(--line2); color:var(--txt); font-size:14px; line-height:1; cursor:pointer; padding:0; }
.chip-x:hover { background:var(--bad); color:#fff; }

/* repli IDs bruts / CSV */
/* Custom inline (Comparer) : éditeur de règles éphémère sous le sélecteur de politique */
.cmp-custom { margin-top:12px; border-top:1px solid var(--line); padding-top:12px; }
.rules-foot { margin-top:10px; }
/* Historique hôtel : tooltip de la courbe (même style que le Monitoring) */
#hh-card { position:relative; }
#hh-tooltip { position:absolute; pointer-events:none; background:#0c0e13; border:1px solid var(--line2); border-radius:8px; padding:8px 10px; font-size:12px; opacity:0; transition:opacity .1s; white-space:nowrap; box-shadow:0 6px 20px rgba(0,0,0,.4); }

/* lien hôtel cliquable */
.hotel-link { color:var(--txt); text-decoration:none; border-bottom:1px dashed var(--line2); transition:.15s; }
.hotel-link:hover { color:var(--accent); border-color:var(--accent); }

.summary { display:flex; gap:10px; flex-wrap:wrap; margin:2px 0 16px; }
.stat { background:var(--card); border:1px solid var(--line); border-radius:12px; padding:10px 16px; min-width:110px; }
.stat .n { font-size:22px; font-weight:700; letter-spacing:-.02em; }
.stat .l { color:var(--muted); font-size:12px; }
.stat.good .n{ color:var(--good); } .stat.bad .n{ color:var(--bad); } .stat.warn .n{ color:var(--warn); } .stat.muted .n{ color:var(--muted); }

.tablewrap { background:var(--card); border:1px solid var(--line); border-radius:var(--radius); overflow:auto; }
table { width:100%; border-collapse:collapse; }
th,td { text-align:right; padding:11px 14px; border-bottom:1px solid var(--line); white-space:nowrap; }
tbody tr:last-child td { border-bottom:0; } tbody tr:hover { background:var(--card2); }
th { color:var(--muted); font-size:11px; text-transform:uppercase; letter-spacing:.04em; position:sticky; top:0; background:var(--card); user-select:none; }
th.l,td.l { text-align:left; } td.l { font-weight:500; }
th.sortable { cursor:pointer; } th.sortable:hover { color:var(--txt); } th .arrow { opacity:.5; font-size:10px; }
.muted { color:var(--muted); }
.pill { display:inline-block; font-weight:700; font-size:12px; padding:3px 10px; border-radius:999px; }
.pill.good { color:var(--good); background:var(--good-bg); } .pill.warn { color:var(--warn); background:var(--warn-bg); }
.pill.bad { color:var(--bad); background:var(--bad-bg); } .pill.na { color:var(--muted); background:#1a1e28; }
.conf { display:inline-flex; align-items:center; gap:6px; color:var(--muted); font-size:12px; }
.conf .d { width:8px; height:8px; border-radius:50%; }
.empty { padding:40px; text-align:center; color:var(--muted); }

/* cellules colorées (grille Comparer : td.gap-cell + variantes .cell.* réutilisées) */
.cell { border-radius:10px; padding:11px 8px; text-align:center; border:1px solid var(--line2); background:var(--card2); transition:.12s; cursor:pointer; }
.cell:hover { transform:translateY(-2px); }
.cell.sel { outline:2px solid var(--accent); outline-offset:1px; }
.cell .cd { font-size:11px; color:var(--muted); }
.cell .cg { font-size:16px; font-weight:700; margin-top:4px; color:var(--muted); }
.cell .cp { font-size:10px; color:var(--muted); margin-top:2px; }
.cell.good { background:var(--good-bg); border-color:#1d4a33; } .cell.good .cg{ color:var(--good); }
.cell.warn { background:var(--warn-bg); border-color:#4a3a16; } .cell.warn .cg{ color:var(--warn); }
.cell.bad { background:var(--bad-bg); border-color:#4a2226; } .cell.bad .cg{ color:var(--bad); }

/* détail prix (sunhotels / marge / booking / direct) */
.detail { margin-top:16px; border-top:1px solid var(--line); padding-top:16px; }
.detail-head { display:flex; align-items:center; gap:10px; margin-bottom:12px; flex-wrap:wrap; }
.detail-date { font-weight:600; }
.prices { display:grid; grid-template-columns:repeat(auto-fill, minmax(132px,1fr)); gap:10px; }
.pchip { background:var(--card2); border:1px solid var(--line2); border-radius:10px; padding:10px 12px; }
.pchip .pl { color:var(--muted); font-size:11px; text-transform:uppercase; letter-spacing:.04em; }
.pchip .pv { font-size:18px; font-weight:700; margin-top:3px; letter-spacing:-.02em; }
.pchip.accent { border-color:rgba(108,140,255,.5); } .pchip.accent .pv{ color:var(--accent); }
.pchip.best { border-color:#1d4a33; } .pchip.best .pv{ color:var(--good); }
/* puce de la référence active (base de comparaison choisie) */
.pchip.basis { outline:2px solid var(--accent); outline-offset:-2px; }
.pchip.basis .pl::after { content:' · réf'; color:var(--accent); }

/* ===== Comparer : heatmap hôtels × dates ===== */
#cmp-tablewrap { max-height:72vh; }                 /* scroll interne -> thead + colonne hôtel figés */
#cmp-grid th.cmp-datecol, #cmp-grid td.gap-cell,
#cmp-grid th.cmp-avgcol, #cmp-grid td.cmp-avg { text-align:center; }

/* colonne hôtel figée à gauche (box-shadow et non border : border-collapse fait sauter les borders sticky) */
#cmp-grid th.cmp-hcol, #cmp-grid td.cmp-hcol {
  position:sticky; left:0; z-index:2; background:var(--card);
  text-align:left; box-shadow:1px 0 0 var(--line);
}
#cmp-grid thead th.cmp-hcol { z-index:3; }          /* coin haut-gauche au-dessus du header ET de la colonne */
#cmp-grid tbody tr:hover td.cmp-hcol { background:var(--card2); }

/* cellules colorées — mêmes tokens que .cell.good/.warn/.bad du Calendrier */
td.gap-cell { font-weight:700; cursor:pointer; }
td.gap-cell.good { background:var(--good-bg); color:var(--good); }
td.gap-cell.warn { background:var(--warn-bg); color:var(--warn); }
td.gap-cell.bad  { background:var(--bad-bg);  color:var(--bad); }
/* cases sans écart : glyphe discret. Par défaut atténué (cause « normale »)… */
td.gap-cell.no_net, td.gap-cell.no_public, td.gap-cell.no_ref, td.gap-cell.pending,
td.gap-cell.backoff, td.gap-cell.blocked, td.gap-cell.unknown,
.cell.no_net, .cell.no_public, .cell.no_ref, .cell.pending, .cell.backoff, .cell.blocked, .cell.unknown { color:var(--muted); }
/* …sauf « introuvable Google » : c'est le défaut de mapping à corriger -> teinté d'alerte pour sauter aux yeux. */
td.gap-cell.unresolved, .cell.unresolved { background:var(--bad-bg); color:var(--bad); }
.cell.unresolved .cg, .cell.unresolved .cp { color:var(--bad); }
/* non scrapé : date non traitée (run interrompu) — hachuré, à ne pas confondre avec une cause de scrape */
td.gap-cell.not_run, .cell.not_run { color:var(--muted); cursor:default;
  background:repeating-linear-gradient(-45deg, transparent 0 5px, var(--line2) 5px 6px); }
td.gap-cell.sel { outline:2px solid var(--accent); outline-offset:-2px; }

/* légende de la grille compare */
/* Sélecteur de référence de prix, posé juste au-dessus du tableau des prix. */
.basisbar { display:flex; align-items:center; gap:8px; margin:2px 2px 10px; font-size:12px; color:var(--muted); }
.cmp-legend { display:flex; flex-wrap:wrap; gap:14px; align-items:center; margin:2px 2px 10px; font-size:12px; color:var(--muted); }
.cmp-legend span { display:inline-flex; align-items:center; gap:5px; }
.cmp-legend .lg { width:13px; height:13px; border-radius:3px; display:inline-block; }
.cmp-legend .lg-good { background:var(--good-bg); box-shadow:inset 0 0 0 1px var(--good); }
.cmp-legend .lg-bad  { background:var(--bad-bg);  box-shadow:inset 0 0 0 1px var(--bad); }
/* introuvable Google : même teinte d'alerte que la cellule -> lien visuel légende ↔ grille */
.cmp-legend .lg-unresolved { background:var(--bad-bg); box-shadow:inset 0 0 0 1px var(--bad); }
/* causes « normales » : contour neutre */
.cmp-legend .lg-no_net, .cmp-legend .lg-no_public, .cmp-legend .lg-no_ref,
.cmp-legend .lg-backoff, .cmp-legend .lg-blocked, .cmp-legend .lg-pending,
.cmp-legend .lg-unknown { background:transparent; box-shadow:inset 0 0 0 1px var(--line2); }
.cmp-legend .lg-not_run { background:repeating-linear-gradient(-45deg, transparent 0 4px, var(--line2) 4px 5px); box-shadow:inset 0 0 0 1px var(--line2); }

/* min / max (anneau interne, se superpose au fond santé) — Comparer (par date) + Calendrier (par date) */
td.gap-cell.cmp-best, .cell.cmp-best   { box-shadow:inset 0 0 0 2px var(--good); }
td.gap-cell.cmp-worst, .cell.cmp-worst { box-shadow:inset 0 0 0 2px var(--bad); }

/* colonne Moyenne : accentuée, texte coloré via gapClass */
#cmp-grid th.cmp-avgcol, #cmp-grid td.cmp-avg { border-left:1px solid var(--line2); font-weight:700; }
td.cmp-avg.good { color:var(--good); } td.cmp-avg.warn { color:var(--warn); }
td.cmp-avg.bad  { color:var(--bad); }  td.cmp-avg.na { color:var(--muted); }

/* panneau détail sous la grille : réutilise .detail-head / .prices / .pchip */
.cmp-detail .detail-head { margin-bottom:12px; }
.detail-hotel { font-weight:600; }

/* monitoring */
.mon { display:grid; grid-template-columns:360px 1fr; gap:18px; }
.hotellist { background:var(--card); border:1px solid var(--line); border-radius:var(--radius); overflow:hidden; max-height:480px; overflow-y:auto; }
.hrow { display:flex; align-items:center; justify-content:space-between; gap:10px; padding:12px 14px; border-bottom:1px solid var(--line); cursor:pointer; transition:.12s; }
.hrow:hover { background:var(--card2); } .hrow.active { background:rgba(108,140,255,.12); box-shadow:inset 3px 0 0 var(--accent); }
.hrow .nm { font-size:13px; font-weight:500; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.hrow .meta { color:var(--muted); font-size:11px; }
.hrow.ignored { opacity:.5; }
.hrow-right { display:flex; align-items:center; gap:6px; flex-shrink:0; }
.hrow-act { width:22px; height:22px; display:inline-flex; align-items:center; justify-content:center; border:1px solid var(--line2); border-radius:6px; background:var(--card2); color:var(--muted); font-size:12px; line-height:1; cursor:pointer; padding:0; transition:.12s; }
.hrow-act:hover { color:var(--txt); border-color:var(--accent); }
.hrow-act.danger:hover { color:#fff; background:var(--bad); border-color:var(--bad); }
.mon-controls { margin-bottom:14px; }
.hrow-pol { max-width:96px; padding:4px 6px; font-size:11px; border-radius:6px; color:var(--muted); }
.hrow-pol:hover, .hrow-pol:focus { color:var(--txt); }

/* Toggle ★ suivre/ne plus suivre (Comparer / Calendrier / Historique) */
.mon-btn { border:0; background:none; cursor:pointer; padding:2px 4px; font-size:16px; line-height:1; color:var(--line2); transition:.12s; vertical-align:middle; }
.mon-btn:hover { color:var(--warn); }
.mon-btn.on { color:var(--warn); }
td.c { text-align:center; }
.chartcard { background:var(--card); border:1px solid var(--line); border-radius:var(--radius); padding:18px; position:relative; }
.chart-head { display:flex; align-items:baseline; gap:12px; margin-bottom:6px; }
.chart-head h3 { margin:0; font-size:15px; } .legend { display:flex; gap:16px; margin-left:auto; }
.legend span { color:var(--muted); font-size:12px; display:inline-flex; align-items:center; gap:6px; } .legend i { width:11px; height:11px; border-radius:3px; display:inline-block; }
#tooltip { position:absolute; pointer-events:none; background:#0c0e13; border:1px solid var(--line2); border-radius:8px; padding:8px 10px; font-size:12px; opacity:0; transition:opacity .1s; white-space:nowrap; box-shadow:0 6px 20px rgba(0,0,0,.4); }

/* Admin — table proxies */
.mono { font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; font-size:12.5px; }
td.r, th.r { text-align:right; }
.proxy-status { color:var(--muted); font-size:13px; align-self:center; }

@media (max-width:760px) {
  body { flex-direction:column; }
  .sidebar { width:auto; height:auto; position:static; flex-direction:row; flex-wrap:wrap; align-items:center; border-right:0; border-bottom:1px solid var(--line); }
  .brand { padding:14px 18px; } .nav { flex-direction:row; flex-wrap:wrap; }
  .sidebar-foot { margin:0 0 0 auto; border-top:0; flex-direction:row; align-items:center; }
}

/* Admin — politiques de crawl */
.polhead { display:flex; align-items:flex-start; gap:12px; }
.polhead .btn { margin-left:auto; white-space:nowrap; }
.margin-rows { margin-top:14px; display:flex; flex-direction:column; gap:10px; }
.margin-row { display:flex; align-items:center; gap:12px; flex-wrap:wrap; }
.margin-row .margin-src { min-width:120px; font-weight:600; }
.margin-row .margin-input { display:flex; align-items:center; gap:6px; }
.margin-row .margin-input input { width:90px; }
.margin-row .margin-status { font-size:12px; min-width:90px; }
#pol-rows tr.ignored { opacity:.55; }
.pol-picker { display:flex; align-items:center; gap:8px; }
.pol-dates { color:var(--muted); font-size:12px; margin-top:6px; }

/* Modal (création / édition d'une politique de crawl) — calquée sur .dp-pop */
.modal-backdrop { position:fixed; inset:0; z-index:100; display:none; align-items:flex-start; justify-content:center; padding:56px 16px; overflow:auto; background:rgba(4,6,10,.62); }
.modal-backdrop.open { display:flex; }
.modal { width:min(680px,100%); box-shadow:0 24px 64px rgba(0,0,0,.6); }
.modal-head { display:flex; align-items:center; gap:10px; margin-bottom:14px; }
.modal-x { margin-left:auto; background:none; border:0; color:var(--muted); font-size:22px; line-height:1; cursor:pointer; padding:2px 8px; border-radius:8px; }
.modal-x:hover { color:var(--txt); background:var(--card2); }
.modal-foot { display:flex; justify-content:flex-end; gap:10px; margin-top:18px; }
.pol-fields { margin-top:12px; }
.pol-preview { margin-top:14px; padding:10px 12px; background:var(--card2); border:1px solid var(--line); border-radius:10px; font-size:12.5px; max-height:170px; overflow:auto; }
.pol-preview .d { display:inline-block; margin:3px 6px 0 0; padding:2px 8px; background:var(--bg); border:1px solid var(--line2); border-radius:6px; font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; }

/* Constructeur de règles (modal politique v2) */
.modal { width:min(860px,100%); }
.pol-seed { display:flex; align-items:center; gap:8px; }
.pol-rules-head { display:flex; align-items:center; gap:10px; margin:18px 0 8px; }
.pol-rules-title { font-size:11px; text-transform:uppercase; letter-spacing:.05em; color:var(--muted); font-weight:600; }
.pol-rules-head .btn { margin-left:auto; }
#pol-rules { counter-reset:polrule; }
.pol-rule { border:1px solid var(--line); border-radius:12px; padding:12px 14px; margin-bottom:10px; background:var(--card2); }
.pol-rule .grid { gap:12px; }
.pol-rule-head { display:flex; align-items:center; margin-bottom:8px; }
.pol-rule-n { font-size:12px; font-weight:600; color:var(--muted); }
.pol-rule-n::before { counter-increment:polrule; content:'Règle ' counter(polrule); }
.pol-rule-del { margin-left:auto; background:none; border:0; color:var(--muted); font-size:18px; line-height:1; cursor:pointer; padding:0 4px; border-radius:6px; }
.pol-rule-del:hover { color:var(--bad); }
.pol-rule .r-p, .pol-rule .r-w, .pol-rule .r-s { display:none; }
.pol-rule[data-sel="weekday"] .r-p-weekday,
.pol-rule[data-sel="monthday"] .r-p-monthday,
.pol-rule[data-sel="nth_weekday"] .r-p-nth,
.pol-rule[data-sel="interval"] .r-p-interval,
.pol-rule[data-sel="fixed"] .r-p-fixed { display:flex; }
.pol-rule[data-win="next_weeks"] .r-w-next_weeks,
.pol-rule[data-win="next_days"] .r-w-next_days,
.pol-rule[data-win="month_buckets"] .r-w-month_buckets,
.pol-rule[data-win="date_range"] .r-w-date_range { display:flex; }
.pol-rule[data-smp="random"] .r-s { display:flex; }
.wd-chips, .nth-chips { display:flex; flex-wrap:wrap; gap:4px; }
.wd-chip, .nth-chip { background:var(--bg); border:1px solid var(--line2); color:var(--muted); border-radius:7px; padding:5px 9px; font-size:12px; cursor:pointer; transition:.12s; }
.wd-chip:hover, .nth-chip:hover { color:var(--txt); border-color:var(--line); }
.wd-chip.on, .nth-chip.on { background:var(--accent); border-color:var(--accent); color:#fff; }
.pol-rule textarea { height:60px; }
/* Depart (j+) : sur une plage de dates, le debut c'est « Du » -> champ masque. */
.pol-rule[data-win="date_range"] .r-start-off { display:none; }
/* Reconduction : l'indice n'apparait que quand le menu est fige (fenetre relative). */
.pol-rule .rm-hint { display:none; font-size:11px; }
.pol-rule:not([data-win="date_range"]) .rm-hint { display:block; }
.pol-rule select:disabled { opacity:.5; cursor:not-allowed; }

/* ===== Attente / progression du scraping ===== */
.progress { background:var(--card2); border:1px solid var(--line); border-radius:var(--radius); padding:14px 16px; margin-bottom:14px; animation:fade .2s; }
.progress-head { display:flex; align-items:center; justify-content:space-between; gap:12px; font-size:13px; color:var(--txt); }
.progress-head .btn { padding:6px 14px; font-size:12px; }
.progress-track { height:6px; background:var(--line); border-radius:999px; overflow:hidden; margin:10px 0 4px; }
.progress-track > i { display:block; height:100%; width:0; background:var(--accent); border-radius:999px; transition:width .3s ease; }
.progress-activity { display:flex; flex-direction:column; gap:4px; margin-top:8px; }
.progress-activity .item { display:flex; align-items:center; gap:8px; font-size:12.5px; color:var(--muted); }
.progress-activity .item.retry { color:var(--warn); }
.spinner { flex:none; width:12px; height:12px; border:2px solid var(--line2); border-top-color:var(--accent); border-radius:50%; animation:spin .8s linear infinite; }
.progress-activity .item.retry .spinner { border-top-color:var(--warn); }
@keyframes spin { to { transform:rotate(360deg); } }
