/* Luvia World — la liste en feuille glissante (mobile).
 *
 * CE QU'IL Y AVAIT AVANT. En vue carte, le panneau de résultats était
 * simplement `display:none`, et le bas de l'écran ne portait qu'une phrase
 * d'excuse : « 54 lieux sans position. Voir la liste ». Un cul-de-sac : on
 * annonçait un manque au lieu de montrer ce qu'on avait.
 *
 * CE QU'IL Y A MAINTENANT. Le même panneau reste affiché, en position fixe,
 * décalé vers le bas : seul son début dépasse. La liste ne s'ouvre plus, elle
 * MONTE — la carte reste derrière, et on ne quitte jamais le monde des yeux.
 *
 * POURQUOI `position:fixed`. La feuille sort du flux : la scène, la carte et
 * le globe gardent exactement la géométrie qu'ils avaient. Rien à recalculer,
 * donc rien à casser.
 *
 * Tout est confiné sous 1024px et à la vue carte. En vue liste et sur bureau,
 * pas une règle de ce fichier ne s'applique.
 */

/* Les pays pas encore ouverts. `hidden` seul ne suffit pas : la barre pose un
   `display:flex` sur ses boutons, qui l'emporterait. */
.world-country-options [data-world-country][hidden] { display: none !important; }

@media (max-width: 1023px) {
  .world-2032 {
    /* Hauteur visible de la feuille au repos : la poignée et son libellé,
       rien de plus. Une barre fine, pas un morceau de liste — la carte reste
       le sujet, et l'aperçu d'un logement a toute la place de s'ouvrir
       au-dessus sans rien recouvrir. Tout le reste se règle ici. */
    --lv-sheet-peek: 58px;
    --lv-sheet-nav: calc(69px + env(safe-area-inset-bottom));
  }

  /* --- La feuille ----------------------------------------------------- */
  .world-2032.mobile-map-active .search-results-panel {
    display: block !important;
    position: fixed;
    left: 0;
    right: 0;
    bottom: var(--lv-sheet-nav);
    /* `!important` obligatoire : deux règles antérieures imposent déjà une
       hauteur (100% puis auto). Sans ça la feuille prend la taille de son
       contenu — plusieurs milliers de pixels — et la translation l'envoie
       hors de l'écran. */
    height: calc(100svh - 141px - env(safe-area-inset-bottom)) !important;
    max-height: calc(100svh - 141px - env(safe-area-inset-bottom)) !important;
    min-height: 0 !important;
    z-index: 60;
    margin: 0;
    box-sizing: border-box;
    background: #fbf7f4;
    border: 0;
    border-radius: 26px 26px 0 0;
    box-shadow: 0 -12px 44px #4b332524, 0 -1px 0 #ffffffb0 inset;
    transform: translateY(calc(100% - var(--lv-sheet-peek)));
    transition: transform .46s cubic-bezier(.32, .72, 0, 1);
    overflow: hidden !important;
    overscroll-behavior: contain;
    will-change: transform;
  }

  .world-2032.mobile-map-active.world-sheet-open .search-results-panel {
    transform: translateY(0);
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch;
  }

  /* Au repos la liste ne défile pas : le doigt doit continuer de faire
     tourner le globe, pas gratter un contenu qu'on ne voit qu'à moitié. */
  .world-2032.mobile-map-active:not(.world-sheet-open) .search-results-inner {
    pointer-events: none;
  }
  .world-2032.mobile-map-active:not(.world-sheet-open) .world-sheet-grip {
    pointer-events: auto;
  }

  .world-2032.mobile-map-active .search-results-inner {
    padding: 0 16px calc(env(safe-area-inset-bottom) + 120px) !important;
    max-width: 430px;
    margin: 0 auto;
  }

  /* --- La poignée ------------------------------------------------------ */
  .world-sheet-grip {
    position: sticky;
    top: 0;
    z-index: 3;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 7px;
    width: 100%;
    padding: 11px 0 9px;
    border: 0;
    border-radius: 26px 26px 0 0;
    background: linear-gradient(#fbf7f4 72%, #fbf7f400);
    color: #8a7666;
    font: 500 10px Inter, Arial, sans-serif;
    letter-spacing: .3px;
    cursor: pointer;
    touch-action: none;
  }
  .world-sheet-grip::before {
    content: '';
    width: 38px;
    height: 4px;
    border-radius: 4px;
    background: #d9c7b8;
    transition: background .2s ease, width .3s ease;
  }
  .world-sheet-grip:active::before { background: #b99e88; width: 46px; }
  /* Ouverte, la poignée est le seul retour vers la carte : elle doit se lire
     comme un bouton, pas comme une légende. */
  .world-sheet-grip span {
    display: block;
    padding: 5px 13px;
    border-radius: 20px;
    transition: background .2s ease, color .2s ease;
  }
  .world-2032.world-sheet-open .world-sheet-grip span {
    background: #1c1c1e;
    color: #fff;
    font-weight: 500;
  }

  /* --- Les filtres rapides, sous la poignée ---------------------------- */
  /* Alignés à gauche, sous le bouton de retour. Ils défilent horizontalement
     plutôt que de passer à la ligne : la liste doit rester le sujet, et une
     rangée de filtres qui s'empile mange l'écran avant la première annonce. */
  .world-2032.mobile-map-active .world-sheet-filtres {
    display: flex !important;
    position: sticky;
    top: 44px;
    z-index: 2;
    gap: 7px;
    margin: 0 0 4px;
    padding: 2px 16px 12px;
    background: linear-gradient(#fbf7f4 76%, #fbf7f400);
    overflow-x: auto;
    scrollbar-width: none;
  }
  .world-2032.mobile-map-active .world-sheet-filtres::-webkit-scrollbar { display: none; }
  .world-2032.mobile-map-active .world-sheet-filtres > * { flex: none; }

  /* Au repos, seule la poignée dépasse : les filtres ne doivent pas voler la
     place du premier logement, ni happer un doigt qui vise le globe. */
  .world-2032.mobile-map-active:not(.world-sheet-open) .world-sheet-filtres {
    pointer-events: none;
  }

  /* --- La bascule Carte / Liste ---------------------------------------- */
  /* Au repos elle garde sa place d'origine : la feuille culmine à 132 px du
     bas de la scène, la pastille est à 161 px, elles ne se touchent pas.
     Une fois la liste ouverte, la pastille est enfermée dans le contexte
     d'empilement de la carte (z-index 30) et ne peut pas passer au-dessus de
     la feuille, quel que soit son propre z-index. On l'efface donc, et c'est
     la poignée qui ramène à la carte — comme sur toute feuille de ce genre. */
  .world-2032.mobile-map-active.world-sheet-open .world-view-switch {
    opacity: 0;
    pointer-events: none;
    transition: opacity .2s ease;
  }

  /* --- Ce que la feuille remplace -------------------------------------- */
  /* La mention « n lieux sans position » disait un manque sans rien offrir.
     Ces logements sont dans la liste, qui est maintenant sous le pouce. */
  .world-2032.mobile-map-active .lv-world-coverage { display: none !important; }

  /* L'aperçu qui s'ouvre au tap d'un marqueur était calé à 19 px du bas : la
     feuille au repos monte à 132 px, il naissait donc derrière elle et on n'en
     lisait que le liseré supérieur.
     Un z-index ne le sauverait pas — il vit dans le conteneur de la carte, qui
     forme son propre contexte d'empilement sous la feuille. On le remonte donc
     au-dessus du repos, où il est lisible en entier. */
  .world-2032.mobile-map-active .lv-map-preview {
    bottom: calc(var(--lv-sheet-peek) + 14px) !important;
  }

  /* En remontant, l'aperçu venait buter dans la pastille Carte / Liste. Elle
     s'efface au-dessus de lui — l'ordre d'origine, pastille puis fiche, est
     conservé. L'aperçu n'existe dans le DOM que lorsqu'il est ouvert, donc
     `:has()` suffit à décrire les deux situations sans une ligne de script. */
  /* Pas de transition sur `bottom` : le globe recrée l'aperçu à chaque
     rafraîchissement de ses marqueurs, `:has()` rebascule, et l'animation
     repartirait sans jamais se poser. Le déplacement est instantané. */
  .world-2032.mobile-map-active .world-view-switch { transition: opacity .2s ease; }
  .world-2032.mobile-map-active .mobile-map-view:has(.lv-map-preview) .world-view-switch {
    bottom: calc(var(--lv-sheet-peek) + 156px);
  }
  /* Liste ouverte, la carte est derrière : l'aperçu n'a plus lieu d'être. */
  .world-2032.mobile-map-active.world-sheet-open .lv-map-preview { display: none !important; }
}
