/* =====================================================================
   route-animation.css — composant animation de trajet (SCOPÉ)
   ---------------------------------------------------------------------
   ⚠️ SCOPING : tout est préfixé pour NE PAS polluer le projet hôte.
     - Variables : --ra-*            (ex. --ra-accent)
     - Classes   : .ra-*             (ex. .ra-card)
     - Racine    : .ra-root          (tout vit à l'intérieur)
   Les overrides Leaflet sont scopés sous `.ra-root .leaflet-*` pour ne
   toucher QUE la carte du composant.

   POUR REBRANDER : ne touche que le bloc `.ra-root { --ra-… }` ci-dessous,
   ou (mieux) surcharge ces variables depuis le CSS du projet hôte, ex. :
     .ra-root { --ra-accent: var(--brand-primary); --ra-font-serif: var(--brand-display); }
   ===================================================================== */

.ra-root{
  /* ---------- COULEURS (à mapper sur le design hôte) ---------- */
  --ra-primary:      #1a1a1a;                 /* texte principal           */
  --ra-secondary:    #8a8f94;                 /* métal / secondaire        */
  --ra-accent:       #C73A3A;                 /* LIGNE + points actifs     */
  --ra-accent-deep:  #B93737;                 /* accent foncé (passé)      */
  --ra-route-color:  #C73A3A;                 /* trajet principal          */
  --ra-accent-soft:  #b08d57;                 /* bordures, légendes        */
  --ra-accent-bright:#d9c08a;                 /* accent clair              */

  --ra-bg:           #f4f1ea;                 /* fond général              */
  --ra-bg-2:         #e9e3d6;                 /* fond scène carte          */
  --ra-panel:        #fbf8f1;                 /* panneaux / points repos   */
  --ra-map-bg:       #dfe6ea;                 /* fond carte (chargement)   */

  --ra-text:         #1a1a1a;
  --ra-text-soft:    rgba(26,26,26,.62);
  --ra-text-faint:   rgba(26,26,26,.30);
  --ra-text-on-map:  #ffffff;

  --ra-glass-bg:     rgba(251,248,241,.66);
  --ra-glass-border: rgba(176,141,87,.40);
  --ra-glass-blur:   16px;

  /* ---------- TYPOGRAPHIE (hérite du hôte par défaut) ---------- */
  --ra-font-serif:   inherit;                 /* titres / noms de station  */
  --ra-font-sans:    inherit;                 /* texte courant             */
  --ra-font-mono:    ui-monospace, "SFMono-Regular", Menlo, monospace;

  /* ---------- MARQUEURS ---------- */
  --ra-dot:          11px;
  --ra-dot-active:   15px;
  --ra-dot-border:   2px;

  /* ---------- LIGNE ---------- */
  --ra-line-glow-1:  2px;
  --ra-line-glow-2:  5px;

  /* ---------- divers ---------- */
  --ra-radius:       3px;
  position:relative;
  color:var(--ra-text);
  font-family:var(--ra-font-sans);
}
.ra-root *{box-sizing:border-box}

/* ---------- zone de scroll (mode scroll) ---------- */
.ra-scroll{position:relative;width:100%}            /* hauteur posée en inline (vh) */

/* ---------- scène carte (sticky en mode scroll, plein en autoplay) ---------- */
.ra-stage{position:sticky;top:0;height:100vh;width:100%;overflow:hidden;background:var(--ra-bg-2)}
.ra-root[data-ra-mode="autoplay"] .ra-stage,
.ra-root[data-ra-mode="manual"] .ra-stage{position:relative;height:100%}

.ra-map{position:absolute;inset:0;width:100%;height:100%;background:var(--ra-map-bg);z-index:1}
.ra-root .leaflet-tile-pane{filter:saturate(.6) brightness(1.12) contrast(.95)}  /* tonalité douce */
.ra-tone{position:absolute;inset:0;z-index:2;pointer-events:none;background:linear-gradient(180deg, rgba(244,241,234,.30), rgba(233,227,214,.08) 35%, rgba(244,241,234,.28));mix-blend-mode:soft-light}
.ra-vignette{position:absolute;inset:0;z-index:3;pointer-events:none;box-shadow:inset 0 0 220px 60px rgba(244,241,234,.5);background:radial-gradient(ellipse at 50% 46%, transparent 52%, rgba(233,227,214,.45))}
.ra-root .leaflet-container{background:var(--ra-map-bg);font-family:var(--ra-font-sans)}
.ra-root .leaflet-control-attribution{font-family:var(--ra-font-mono);font-size:8px !important;background:rgba(251,248,241,.7) !important;color:var(--ra-text-soft) !important}
.ra-root .leaflet-control-attribution a{color:var(--ra-accent-soft) !important}
.ra-route-line{filter:drop-shadow(0 0 var(--ra-line-glow-1) rgba(199,58,58,.65)) drop-shadow(0 1px var(--ra-line-glow-2) rgba(90,18,18,.5))}

/* ---------- marqueurs de station ---------- */
.ra-cm{position:relative;width:0;height:0;text-align:center;pointer-events:none;transition:opacity .3s ease}
.ra-cm .ra-d{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:var(--ra-dot);height:var(--ra-dot);border-radius:50%;background:var(--ra-panel);border:var(--ra-dot-border) solid var(--ra-accent-soft);box-shadow:0 0 0 4px rgba(176,141,87,.18),0 2px 6px rgba(0,0,0,.3);transition:all .3s ease}
.ra-cm .ra-l{position:absolute;left:50%;top:50%;transform:translate(calc(-50% + var(--ra-label-x, 0px)), var(--ra-label-y, 24px));padding:4px 10px;border:1px solid rgba(248,239,229,.5);background:rgba(24,24,24,.56);-webkit-backdrop-filter:blur(6px) saturate(1.05);backdrop-filter:blur(6px) saturate(1.05);font-family:var(--ra-font-serif);font-style:italic;font-size:13px;line-height:1.15;color:var(--ra-text-on-map);text-shadow:0 1px 3px rgba(0,0,0,.8),0 0 2px rgba(0,0,0,.85);white-space:nowrap;letter-spacing:.02em;box-shadow:0 8px 18px -12px rgba(0,0,0,.8);transition:transform .25s ease,font-size .25s ease}
/* small pointer notch tying the label to its own marker (no long connectors) */
.ra-cm .ra-l::after{content:"";position:absolute;width:0;height:0}
.ra-cm[data-ra-notch="bottom"] .ra-l::after{left:calc(50% - var(--ra-label-x, 0px));bottom:-5px;transform:translateX(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid rgba(24,24,24,.56)}
.ra-cm[data-ra-notch="top"] .ra-l::after{left:calc(50% - var(--ra-label-x, 0px));top:-5px;transform:translateX(-50%);border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid rgba(24,24,24,.56)}
.ra-cm[data-ra-notch="right"] .ra-l::after{right:-5px;top:50%;transform:translateY(-50%);border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid rgba(24,24,24,.56)}
.ra-cm[data-ra-notch="left"] .ra-l::after{left:-5px;top:50%;transform:translateY(-50%);border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid rgba(24,24,24,.56)}
.ra-cm.ra-real .ra-d{border-color:var(--ra-accent)}
.ra-cm.ra-passed .ra-d{border-color:var(--ra-accent-deep)}
.ra-cm.ra-active .ra-d{width:var(--ra-dot-active);height:var(--ra-dot-active);background:var(--ra-accent);border-color:#fff;box-shadow:0 0 0 5px rgba(199,58,58,.25),0 0 14px rgba(199,58,58,.85)}
.ra-cm.ra-active .ra-l{font-size:15px}

/* ---------- entête + légende ---------- */
.ra-head{position:absolute;top:24px;left:26px;z-index:500;max-width:60%}
.ra-head .ra-k{font-family:var(--ra-font-mono);font-size:10px;letter-spacing:.3em;text-transform:uppercase;color:var(--ra-accent-soft)}
.ra-head h2{font-family:var(--ra-font-serif);font-weight:300;font-size:clamp(20px,3vw,34px);margin:6px 0 0;color:var(--ra-text);text-shadow:0 1px 10px rgba(244,241,234,.8)}
.ra-legend{position:absolute;top:26px;right:26px;z-index:500;font-family:var(--ra-font-mono);font-size:9.5px;letter-spacing:.12em;color:var(--ra-text-soft);text-align:right;background:var(--ra-glass-bg);backdrop-filter:blur(8px);padding:10px 14px;border:1px solid var(--ra-glass-border)}
.ra-legend i{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:8px;vertical-align:middle}
.ra-legend .ra-lr{background:var(--ra-accent)} .ra-legend .ra-lg{background:var(--ra-panel);border:1px solid var(--ra-accent-soft)}
.ra-legend div{margin-bottom:5px}
.ra-legend div:last-child{margin-bottom:0}

/* ---------- carte d'information ---------- */
/* Card anchored bottom-RIGHT: at the closer z13 frame the SW Château stop falls
   in the bottom-left, so the card lives opposite it (the route's east end is
   top-right, leaving the bottom-right clear). */
.ra-card{position:absolute;right:26px;left:auto;bottom:28px;width:360px;max-width:calc(100% - 52px);z-index:500;background:var(--ra-glass-bg);-webkit-backdrop-filter:blur(var(--ra-glass-blur)) saturate(1.1);backdrop-filter:blur(var(--ra-glass-blur)) saturate(1.1);border:1px solid var(--ra-glass-border);border-radius:var(--ra-radius);padding:22px 24px;box-shadow:0 24px 60px -24px rgba(0,0,0,.5)}
.ra-card::before{content:"";position:absolute;left:0;top:0;width:3px;height:100%;background:linear-gradient(180deg,var(--ra-accent-soft),var(--ra-accent-deep))}
.ra-card-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px}
.ra-idx{font-family:var(--ra-font-mono);font-size:11px;letter-spacing:.2em;color:var(--ra-text-soft)}
.ra-badge{font-family:var(--ra-font-mono);font-size:9px;letter-spacing:.18em;text-transform:uppercase;padding:4px 9px;border:1px solid}
.ra-badge.ra-real{color:var(--ra-accent);border-color:rgba(192,57,43,.5);background:rgba(192,57,43,.06)}
.ra-badge.ra-illus{color:var(--ra-text-soft);border-color:var(--ra-text-faint)}
.ra-city{font-family:var(--ra-font-serif);font-style:italic;font-weight:400;font-size:32px;line-height:1;margin-bottom:5px}
.ra-role{font-size:13px;color:var(--ra-accent-soft);letter-spacing:.03em;margin-bottom:12px;font-weight:500}
.ra-desc{font-size:12.5px;line-height:1.6;color:var(--ra-text);font-weight:300;margin-bottom:14px}
.ra-meta{display:flex;gap:18px;font-family:var(--ra-font-mono);font-size:10px;letter-spacing:.1em;color:var(--ra-text-soft);padding-top:12px;border-top:1px solid var(--ra-text-faint)}
.ra-foot{margin-top:10px;font-family:var(--ra-font-mono);font-size:9.5px;line-height:1.5;color:var(--ra-text-soft)}
.ra-gauge{display:flex;align-items:center;gap:13px;margin-top:14px;padding-top:13px;border-top:1px solid var(--ra-text-faint)}
.ra-gauge svg{width:64px;height:64px;flex:none}
.ra-gauge .ra-g-track{fill:none;stroke:var(--ra-text-faint);stroke-width:4;stroke-linecap:round}
.ra-gauge .ra-g-val{fill:none;stroke:var(--ra-accent);stroke-width:4;stroke-linecap:round}
.ra-gauge .ra-g-needle{stroke:var(--ra-primary);stroke-width:1.4;stroke-linecap:round}
.ra-gauge .ra-g-deg{font-family:var(--ra-font-serif);font-style:italic;font-size:26px}
.ra-gauge .ra-g-lab{font-family:var(--ra-font-mono);font-size:8px;letter-spacing:.22em;text-transform:uppercase;color:var(--ra-text-soft)}

@media(max-width:760px){
  .ra-legend{display:none}
  .ra-head{top:16px;left:16px}
  .ra-card{left:12px;right:12px;bottom:12px;width:auto;padding:16px}
  .ra-city{font-size:26px}
}

/* ---------- liste statique (prefers-reduced-motion / fallback) ---------- */
.ra-list{display:none;position:absolute;inset:0;overflow:auto;padding:24px;background:var(--ra-bg);z-index:600}
.ra-list .ra-row{border-top:1px solid var(--ra-text-faint);padding:18px 0;display:flex;gap:18px;align-items:baseline}
.ra-list .ra-row .ra-n{font-family:var(--ra-font-mono);font-size:11px;color:var(--ra-accent-soft);min-width:48px}
.ra-list .ra-row h4{font-family:var(--ra-font-serif);font-style:italic;font-weight:400;font-size:20px;margin:0}
.ra-list .ra-row .ra-rl{font-size:12px;color:var(--ra-accent-soft);margin-top:2px}
.ra-list .ra-row p{font-size:12px;color:var(--ra-text-soft);margin-top:6px;line-height:1.6}
.ra-root.ra-reduced .ra-card,.ra-root.ra-reduced .ra-legend{display:none}
.ra-root.ra-reduced .ra-list{display:block}
.ra-root.ra-reduced .ra-scroll{height:auto !important}
.ra-root.ra-reduced .ra-stage{position:relative;height:70vh}
