
    #franceMap .region {
      fill: url(#regGrad);
      stroke: rgba(59,130,246,0.5);
      stroke-width: 0.8;
      cursor: default;
      filter: drop-shadow(0 0 6px rgba(37,99,235,0.35));
      transition: fill 0.4s ease, filter 0.4s ease;
    }
    #franceMap .region:hover {
      filter: drop-shadow(0 0 12px rgba(59,130,246,0.5));
    }
    /* Toute la France en bleu grisé */
    #franceMap .region {
      fill: #46618c;
      stroke: rgba(120,144,180,0.35);
      filter: saturate(.4) drop-shadow(0 0 4px rgba(37,99,235,0.12));
    }
    #franceMap .region:hover {
      filter: saturate(.85) drop-shadow(0 0 10px rgba(59,130,246,0.4));
    }

    /* Perimeter slider */
    #filtrePerimetre::-webkit-slider-thumb {
      appearance: none;
      width: 18px;
      height: 18px;
      border-radius: 50%;
      background: var(--accent);
      cursor: grab;
      border: 3px solid #fff;
      box-shadow: 0 2px 6px rgba(37,99,235,.4);
      transition: transform .15s ease;
    }
    #filtrePerimetre::-webkit-slider-thumb:active {
      cursor: grabbing;
      transform: scale(1.15);
    }
    #filtrePerimetre::-moz-range-thumb {
      width: 18px;
      height: 18px;
      border-radius: 50%;
      background: var(--accent);
      cursor: grab;
      border: 3px solid #fff;
      box-shadow: 0 2px 6px rgba(37,99,235,.4);
    }

    /* Beam descent: organic light pillar rising from ground */
    #cityBeamAnim {
      opacity: 0;
      transform-box: fill-box;
      transform-origin: 50% 100%; /* bottom (landing point) */
      will-change: transform, opacity;
    }
    #cityBeamAnim.beam-descending {
      animation: beamRise 1s cubic-bezier(0.16, 1, 0.3, 1) forwards;
    }
    @keyframes beamRise {
      0%   { opacity: 0; transform: scaleY(0) scaleX(0.5); }
      25%  { opacity: 0.9; transform: scaleY(0.25) scaleX(1.2); }
      70%  { opacity: 1; transform: scaleY(1.05) scaleX(0.95); }
      100% { opacity: 1; transform: scaleY(1) scaleX(1); }
    }

    /* Carte 3D — relief statique (respiration désactivée pour la perf) */

    /* Vue à 90° top-down (Google Maps style) : aplatit la perspective iso */
    g.map-flatten {
      transition: transform 1.4s cubic-bezier(0.25, 0.8, 0.25, 1);
      transform: scale(1, 1) !important;
      transform-origin: center;
      transform-box: fill-box;
    }
    /* Masque les 6 couches du relief en vue top-down */
    /* Relief recoloré pour la carte bleu grisé */
    [id^="extrude-"] path[fill="#1d4ed8"]{fill:#39506f;}
    [id^="extrude-"] path[fill="#1e40af"]{fill:#334963;}
    [id^="extrude-"] path[fill="#1e3a8a"]{fill:#2d4058;}
    [id^="extrude-"] path[fill="#dbeafe"]{fill:#d7dee8;}
    [id^="extrude-"].extrude-hiding {
      transition: opacity 1s ease-out;
      opacity: 0 !important;
    }
    /* Surface de la carte en mode zoom : plus clair, style plan routier */
    #franceMap.map-zoomed .region {
      transition: fill 1s ease-out;
      fill: #dbeafe !important;
    }

    /* Blur the whole SVG map when zoom mode is active */
    #franceMap.map-blurred-all {
      filter: blur(4px);
      transition: filter 0.6s ease-out;
    }
  