/* ============================================================
   carbon-fr — Tableau de bord live (s'appuie sur theme.css)
   Carte en tuiles des 12 régions + classement + détail
   ============================================================ */

.dash-head{background:var(--hero-bg);border-bottom:1px solid var(--line)}
.dash-head .wrap{padding:36px 32px 30px;display:grid;grid-template-columns:1fr auto;gap:30px;align-items:end}
.dash-title .eyebrow{margin-bottom:14px}
.dash-title h1{font-size:clamp(26px,3.2vw,40px);line-height:1.05;margin-bottom:10px}
.dash-title p{color:var(--muted);font-size:16px;max-width:56ch}

.nat-card{
  display:flex;align-items:center;gap:20px;border:1px solid var(--line);border-radius:var(--radius-lg);
  background:var(--surface);padding:18px 22px;min-width:340px;box-shadow:var(--shadow);
}
.nat-figure{display:flex;flex-direction:column;gap:2px;align-items:flex-start}
.nat-figure .lab{font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--faint);white-space:nowrap}
.nat-figure .val{font-family:var(--font-head);font-weight:800;font-size:46px;line-height:1;letter-spacing:-.03em}
.nat-figure .unit{font-family:var(--font-mono);font-size:12px;color:var(--muted)}
.nat-band{display:flex;flex-direction:column;gap:8px;align-items:flex-start;border-left:1px solid var(--line);padding-left:20px}
.nat-band .chip-band{display:inline-flex;align-items:center;gap:8px;padding:5px 12px;border-radius:999px;font-size:13px;font-weight:600;background:var(--chip);border:1px solid var(--line)}
.nat-band .chip-band i{width:9px;height:9px;border-radius:50%}
.nat-band .upd{font-family:var(--font-mono);font-size:11px;color:var(--faint);display:flex;align-items:center;gap:7px;white-space:nowrap}
.nat-band .upd i{width:7px;height:7px;border-radius:50%;background:var(--c-low)}

/* ---------------- Corps ---------------- */
.dash-wrap{max-width:var(--maxw-wide);margin:0 auto;padding:34px 32px 90px}
.dash-grid{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(320px,.82fr);gap:30px;align-items:start}
@media(max-width:980px){.dash-grid{grid-template-columns:1fr}}

.panel{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface);overflow:hidden}
.panel-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:15px 20px;border-bottom:1px solid var(--line)}
.panel-head h2{font-size:17px;line-height:1.2}
.panel-head .sub{font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--faint)}
.panel-body{padding:22px}

/* ---------------- Carte Leaflet + OpenStreetMap ---------------- */
.map-frame{position:relative}
#map{height:540px;width:100%;border-radius:var(--radius);overflow:hidden;background:var(--surface-2);z-index:1}
.map-back{position:absolute;top:12px;right:12px;z-index:1000;appearance:none;cursor:pointer;
  font-family:var(--font-body);font-size:13px;font-weight:600;color:var(--ink);
  background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--radius);
  padding:8px 13px;min-height:44px;display:inline-flex;align-items:center;
  box-shadow:0 6px 18px -7px rgba(0,0,0,.45);transition:background .15s}
.map-back:hover{background:var(--surface-2)}
.map-reso{position:absolute;left:12px;bottom:24px;z-index:1000;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.02em;color:var(--on-brand);
  background:var(--accent);padding:5px 11px;border-radius:var(--radius);box-shadow:0 6px 18px -7px rgba(0,0,0,.45)}
.leaflet-container{background:var(--surface-2);font-family:var(--font-body)}
/* Tuiles IGN (souveraines) calmées en fond neutre — filtre sur les TUILES seules, pas
   sur les régions/flèches superposées. Mode sombre : inversion → vrai fond sombre. */
#map .leaflet-tile-pane{filter:saturate(.32) brightness(1.09) contrast(.9)}
[data-mode="dark"] #map .leaflet-tile-pane{filter:invert(1) hue-rotate(185deg) brightness(.85) saturate(.45) contrast(.92)}
.leaflet-bar a{background:var(--surface);color:var(--ink);border-color:var(--line)}
.leaflet-bar a:hover{background:var(--surface-2);color:var(--ink)}
/* cible tactile ≥44px (leaflet.css par défaut : 30×30 en tactile) — seul moyen de zoomer, molette désactivée */
.leaflet-touch .leaflet-bar a{width:44px;height:44px;line-height:44px}
.leaflet-control-attribution{background:color-mix(in srgb,var(--surface) 86%,transparent)!important;color:var(--faint)!important;font-size:10px}
.leaflet-control-attribution a{color:var(--muted)!important}
.map-tip{background:var(--ink);color:var(--bg);border:none;border-radius:var(--radius);font-family:var(--font-body);font-size:12.5px;line-height:1.4;padding:7px 11px;box-shadow:0 8px 24px -10px rgba(0,0,0,.55);white-space:nowrap}
.map-tip b{font-weight:700}
.map-tip .t-val{font-family:var(--font-mono);font-weight:600}
.map-tip .t-oos{color:var(--faint);font-family:var(--font-mono);font-size:11px}
.leaflet-tooltip-top.map-tip::before{border-top-color:var(--ink)}
.leaflet-tooltip.map-tip{opacity:1 !important}
@media(max-width:560px){#map{height:400px}}

/* Légende */
.legend{display:flex;flex-wrap:wrap;gap:6px;margin-top:18px}
.legend .lg{display:flex;align-items:center;gap:7px;font-family:var(--font-mono);font-size:11px;color:var(--muted);padding:4px 9px;border:1px solid var(--line);border-radius:999px;background:var(--bg)}
.legend .lg i{width:10px;height:10px;border-radius:3px}

/* Solde des échanges (réel : /v1/mix.echanges) */
.exchange{display:flex;align-items:center;gap:14px;margin-top:18px;padding:14px 16px;border:1px solid var(--line);border-radius:var(--radius);background:var(--bg)}
.xc-arrow{width:42px;height:42px;flex:none;border-radius:50%;display:grid;place-items:center;font-size:22px;font-weight:700;line-height:1}
.xc-arrow.exp{background:color-mix(in srgb,var(--c-verylow) 14%,transparent);color:var(--c-verylow);animation:xcUp 1.8s ease-in-out infinite}
.xc-arrow.imp{background:color-mix(in srgb,var(--c-high) 14%,transparent);color:var(--c-high);animation:xcDown 1.8s ease-in-out infinite}
@keyframes xcUp{0%,100%{transform:translateY(2px)}50%{transform:translateY(-2px)}}
@keyframes xcDown{0%,100%{transform:translateY(-2px)}50%{transform:translateY(2px)}}
@media(prefers-reduced-motion:reduce){.xc-arrow{animation:none!important}}
.xc-text{display:flex;flex-direction:column;gap:1px;min-width:0}
.xc-label{font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--faint)}
.xc-value b{font-family:var(--font-head);font-weight:var(--head-weight);font-size:22px;letter-spacing:-.02em}
.xc-value span{font-size:13px;color:var(--muted)}
.xc-note{font-family:var(--font-mono);font-size:10.5px;color:var(--faint)}

/* flux par voisin (carte + liste) */
.leaflet-overlay-pane path.xc-flow{animation:xcdash 1.1s linear infinite}
.leaflet-overlay-pane path.xc-flow.xc-imp{animation-direction:reverse}
@keyframes xcdash{to{stroke-dashoffset:-22}}
@media(prefers-reduced-motion:reduce){.leaflet-overlay-pane path.xc-flow{animation:none}}
.xc-neighbors{display:flex;flex-direction:column;gap:1px;margin-top:14px;border-top:1px solid var(--line);padding-top:6px}
.xc-n{display:grid;grid-template-columns:18px 1fr auto auto;gap:10px;align-items:center;padding:7px 2px;font-size:13.5px}
.xc-n-dir{font-weight:700;text-align:center}
.xc-n-dir.exp{color:var(--c-verylow)}
.xc-n-dir.imp{color:var(--c-high)}
.xc-n-name{color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.xc-n-mw{font-family:var(--font-mono);font-size:12.5px;color:var(--muted)}
.xc-n-co{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-weight:600;font-size:12.5px;min-width:54px;justify-content:flex-end}
.xc-n-co i{width:9px;height:9px;border-radius:50%}

/* Renouvelable estimé + météo */
.renew{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.renew-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px;margin-bottom:12px}
.renew-title{font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.renew-tag{font-family:var(--font-mono);font-size:10px;color:var(--faint)}
.renew-cells{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.rn-cell{display:flex;flex-direction:column;gap:6px}
.rn-top{display:flex;align-items:baseline;justify-content:space-between}
.rn-name{font-size:13px;color:var(--ink);font-weight:600}
.rn-cf{font-family:var(--font-head);font-weight:var(--head-weight);font-size:19px;letter-spacing:-.02em}
.rn-bar{height:6px;border-radius:4px;background:var(--surface-2);overflow:hidden}
.rn-bar i{display:block;height:100%;width:0;border-radius:4px;transition:width .5s ease}
.rn-mw{font-family:var(--font-mono);font-size:11px;color:var(--faint)}
.renew-weather{display:flex;gap:18px;flex-wrap:wrap;margin-top:13px;padding-top:12px;border-top:1px solid var(--line)}
.renew-weather .rw{display:inline-flex;align-items:center;gap:7px;font-size:13px;color:var(--muted)}
.renew-weather .rw-ic{font-size:14px}
.renew-weather .rw b{color:var(--ink);font-family:var(--font-mono);font-weight:600}

/* ---------------- Prix de l'électricité (décomposition TRV) ---------------- */
.price{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.price-total{display:flex;align-items:baseline;gap:10px;margin:2px 0 10px}
.price-total b{font-family:var(--font-mono);font-size:22px;font-weight:700;color:var(--ink)}
.price-total span{font-family:var(--font-mono);font-size:11px;color:var(--faint)}
.price-bar{display:flex;height:16px;border-radius:6px;overflow:hidden;background:var(--surface-2)}
.price-bar i{display:block;height:100%}
/* dégradé monochrome institutionnel (du plus saturé = énergie marché, au plus clair) — neutre, sans jugement */
.seg-energie{background:var(--brand)}
.seg-acheminement{background:color-mix(in srgb,var(--brand) 68%,var(--surface))}
.seg-accise{background:color-mix(in srgb,var(--brand) 46%,var(--surface))}
.seg-commercialisation{background:color-mix(in srgb,var(--brand) 30%,var(--surface))}
.seg-tva{background:color-mix(in srgb,var(--brand) 16%,var(--surface))}
.price-legend{display:flex;flex-direction:column;gap:5px;margin-top:11px}
.price-legend .pl{display:flex;align-items:center;gap:8px;font-size:12.5px;color:var(--muted)}
.price-legend .sw{width:11px;height:11px;border-radius:3px;flex:none;border:1px solid color-mix(in srgb,var(--ink) 12%,transparent)}
.price-legend .pl-l{color:var(--ink)}
.price-legend .pl-v{margin-left:auto;color:var(--ink);font-size:12px;white-space:nowrap}
.price-legend .pl-s{flex-basis:100%;padding-left:19px;font-size:11px;color:var(--faint);line-height:1.35}
.price-note{font-size:11.5px;color:var(--faint);line-height:1.55;margin:11px 0 0}
.price-note strong{color:var(--muted);font-weight:600}

/* ---------------- Détail région ---------------- */
.detail{border:1px solid var(--line);border-radius:var(--radius-lg);background:var(--surface);overflow:hidden;margin-bottom:20px}
.detail-top{padding:18px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:14px}
.detail-top .dn{font-family:var(--font-head);font-weight:var(--head-weight);font-size:18px;line-height:1.15}
.detail-top .dc{font-family:var(--font-mono);font-size:11px;color:var(--faint);margin-top:2px}
.detail-fig{text-align:right}
.detail-fig .v{font-family:var(--font-head);font-weight:800;font-size:34px;line-height:1;letter-spacing:-.02em}
.detail-fig .u{font-family:var(--font-mono);font-size:10px;color:var(--muted)}
.detail-body{padding:18px 20px;display:flex;flex-direction:column;gap:14px}
.dband{display:inline-flex;align-items:center;gap:8px;align-self:flex-start;padding:5px 12px;border-radius:999px;font-size:12.5px;font-weight:600;background:var(--chip);border:1px solid var(--line)}
.dband i{width:9px;height:9px;border-radius:50%}
.dmix{display:flex;flex-direction:column;gap:9px}
.dmix .row{display:flex;flex-direction:column;gap:5px}
.dmix .row .l{display:flex;justify-content:space-between;font-size:12px;color:var(--muted)}
.dmix .row .l b{color:var(--ink);font-family:var(--font-mono);font-weight:600}
.dmix .bar{height:6px;border-radius:3px;background:var(--surface-2);overflow:hidden}
.dmix .bar i{display:block;height:100%;border-radius:3px}
.spark{margin-top:2px}
.spark-h{display:flex;justify-content:space-between;align-items:baseline;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.03em;text-transform:uppercase;color:var(--faint);margin-bottom:6px}
.spark-mm{color:var(--muted)}
.spark-svg{width:100%;height:54px;display:block}
.spark.fc{margin-top:14px;padding-top:14px;border-top:1px dashed var(--line)}
.fc-gw{display:flex;align-items:center;gap:8px;margin-top:10px;padding:9px 12px;border:1px solid color-mix(in srgb,var(--c-verylow) 32%,var(--line));border-radius:var(--radius);background:color-mix(in srgb,var(--c-verylow) 8%,transparent);flex-wrap:wrap}
.fc-gw-lab{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.04em;text-transform:uppercase;color:var(--c-verylow)}
.fc-gw b{font-family:var(--font-head);font-weight:var(--head-weight);font-size:15px;letter-spacing:-.01em}
.fc-gw-avg{font-family:var(--font-mono);font-size:11.5px;color:var(--muted);margin-left:auto}
.dmeta{display:flex;justify-content:space-between;font-family:var(--font-mono);font-size:11px;color:var(--faint);padding-top:12px;border-top:1px solid var(--line)}

/* ---------------- Classement ---------------- */
.rank{list-style:none;margin:0;padding:0}
.rank li{display:grid;grid-template-columns:26px 1fr auto;gap:12px;align-items:center;padding:11px 20px;border-bottom:1px solid var(--line);cursor:pointer;transition:background .14s}
.rank li:last-child{border-bottom:none}
.rank li:hover{background:color-mix(in srgb,var(--brand) 5%,transparent)}
.rank li:focus-visible{outline:2px solid var(--focus);outline-offset:-2px;background:color-mix(in srgb,var(--brand) 8%,transparent)}
.rank li.sel{background:color-mix(in srgb,var(--brand) 8%,transparent)}
.rank .rk{font-family:var(--font-mono);font-size:12px;color:var(--faint);text-align:right}
.rank .rmid{min-width:0}
.rank .rname{font-size:14px;font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rank .rbar{height:5px;border-radius:3px;background:var(--surface-2);overflow:hidden;margin-top:5px}
.rank .rbar i{display:block;height:100%;border-radius:3px}
.rank .rval{font-family:var(--font-head);font-weight:700;font-size:17px;letter-spacing:-.01em;white-space:nowrap}
.rank .rval small{font-family:var(--font-mono);font-size:9.5px;font-weight:400;color:var(--muted);margin-left:3px}

/* note méthodo */
.dash-note{
  display:flex;gap:12px;margin-top:26px;max-width:78ch;
  padding:15px 18px;border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:var(--radius);
  background:var(--surface);font-size:13.5px;color:var(--muted);line-height:1.6;
}
.dash-note b{color:var(--ink)}
.dash-note .ic{flex:none;color:var(--accent);font-family:var(--font-mono);font-weight:700}

/* états de chargement */
.is-loading .rval,.is-loading .nat-figure .val{opacity:.35}

@media(max-width:980px){
  .dash-head .wrap{grid-template-columns:1fr}
  .nat-card{min-width:0}
}
@media(max-width:560px){
  .dash-wrap{padding:24px 18px 70px}
  .nat-card{flex-wrap:wrap}
  .nat-band{border-left:none;padding-left:0}
  .nat-band .upd{white-space:normal}
}

/* --------- Données de référence (facteurs + LCOE, chargées à l'affichage) --------- */
.ref-data{margin-top:44px;scroll-margin-top:90px}
.ref-data h2{font-size:clamp(21px,2.4vw,27px);margin-bottom:8px}
.ref-lead{color:var(--muted);font-size:15px;line-height:1.6;max-width:72ch}

/* Bandeau d'indisponibilité (sources injoignables) — honnêteté des données, aucun chiffre fabriqué */
.dash-demo{margin:0 0 16px;padding:10px 14px;border-radius:var(--radius);background:var(--surface-2);border-left:3px solid var(--c-veryhigh);color:var(--ink);font-size:13.5px;line-height:1.5}
