/* ════════════════════════════════════════════════════════════
   PAGE ACCUEIL — "La Ligne de Lumière"
   Port de _references/Bligne.html.

   Tout est scopé sous .be-home (nesting CSS natif — cf. ARCHITECTURE.md
   section 16, "custom properties + nesting natif" est la direction
   actée pour ce projet sans build step).

   Pourquoi le scope :
   - Les tokens --noir/--or/--creme/... de style.css sont GLOBAUX et ne
     doivent pas être touchés (gotcha ARCHITECTURE.md section 16). Cette
     page définit donc son propre jeu de tokens, sous des noms neufs
     (--bg, --ink, --ice...), sans collision.
   - Le reset `*{margin:0;padding:0}` de la référence, s'il restait
     global, écraserait le header/footer Kadence (chargés sur la même
     page via get_header()/get_footer()). Scopé à `.be-home *`, il ne
     touche que le contenu propre à cette page.
   - `html`/`body` gardent uniquement ce qui est explicitement demandé
     (overflow-x clip) — pas le background/color/font de la référence,
     qui iraient sinon cascader jusque dans le header/footer Kadence.
     Ces propriétés "de canevas" sont posées sur .be-home à la place.
   ════════════════════════════════════════════════════════════ */

:root{
  --bg:#0A0D11;
  --ink:#EAEDF0; --ink-2:#9AA2AB; --ink-3:#68707A;
  --ch-a:#79818B; --ch-b:#D3D9E0; --ch-c:#F1F4F7;
  --ice:#7EB4DB; --ice-2:#B0D3EC; --mauve:#AF8FC5;
  --line:rgba(234,237,240,.09); --line-2:rgba(234,237,240,.045);
  --glass:rgba(10,13,17,.56);
  --disp:'Newsreader',serif; --ui:'Inter',sans-serif;
  --bar-h:78px;
}

/* Exigé explicitement (point de vigilance) — évite le dézoom mobile
   causé par les éléments position:fixed/absolute qui débordent. */
html{overflow-x:hidden;overflow-x:clip}
body{overflow-x:clip;background:var(--bg)}
/* Kadence peint son propre fond (réglage global "couleur de fond du site")
   sur #wrapper, un ancestor entre <body> et .be-home. Un fond OPAQUE ici —
   même de la bonne couleur — masquerait #dna : #wrapper est un frère de
   #dna sans z-index, il se peint donc devant un enfant en z-index négatif
   (empilement CSS standard : les descendants non positionnés du body
   passent au-dessus des enfants à z-index négatif). Solution : le rendre
   transparent, pour laisser voir le fond de <body> (donc #dna) au travers.
   Cette feuille ne charge que sur l'accueil, donc sans impact ailleurs. */
#wrapper{background:transparent!important}
/* La barre de location est fixed en bas d'écran (z-index:70) : sans marge
   réservée, elle recouvre le bas du footer Kadence. La référence gérait ça
   sur son propre <footer> (padding-bottom:calc(38px + var(--bar-h))) — on
   applique le même principe au footer réel #colophon. */
#colophon{padding-bottom:calc(var(--bar-h) + env(safe-area-inset-bottom))!important}

/* ===== FOND : LES HÉLICES =====
   #dna est injecté hors de .be-home (directement dans <body> via le
   hook wp_body_open, cf. class-assets.php) — règle donc non scopée. */
#dna{position:fixed;inset:0;width:100%;height:100%;z-index:-1;pointer-events:none}

/* Apparition douce des titres — html.js est ajouté en JS, donc sans JS
   (ou si le script échoue) le contenu reste visible par défaut. */
.js .be-home .rv{opacity:0;transform:translateY(18px);transition:opacity 1s ease,transform 1.1s cubic-bezier(.2,.7,.2,1)}
.js .be-home .rv.in{opacity:1;transform:none}

@media(prefers-reduced-motion:reduce){
  .be-home *{animation:none!important;transition:none!important}
  html{scroll-behavior:auto}
}

.be-home{
  color:var(--ink);font-family:var(--ui);line-height:1.6; /* -webkit-font-smoothing: posé globalement sur body dans style.css */
}
.be-home *{margin:0;padding:0;box-sizing:border-box}
.be-home a{color:inherit;text-decoration:none}
.be-home svg{display:block}
.be-home :focus-visible{outline:1.5px solid var(--ice);outline-offset:3px}
.be-home ::selection{background:rgba(126,180,219,.2)}

.be-home{

  /* Kadence pose ses propres couleurs directement sur h1/h2/h3 via son
     CSS de personnalisation (var(--global-palette3), sombre — pensé pour
     un fond clair). Une règle directe sur l'élément bat l'héritage de
     .be-home{color:var(--ink)} ci-dessus, quelle que soit la spécificité
     de l'ancêtre — d'où le !important, nécessaire seulement ici. */
  h1, h2, h3{color:var(--ink)!important}

  .chrome{background:linear-gradient(102deg,var(--ch-a),var(--ch-c) 22%,var(--ch-b) 44%,var(--ch-c) 66%,var(--ch-a));
    background-size:240% 100%;-webkit-background-clip:text;background-clip:text;
    color:transparent!important; /* doit battre le h1,h2,h3{color:var(--ink)!important} ci-dessus sur .final h2.chrome */
    animation:be-dr 12s ease-in-out infinite}
  .halo{position:absolute;border-radius:50%;filter:blur(85px);pointer-events:none;z-index:0}
  .halo.i{background:radial-gradient(circle,rgba(126,180,219,.19),transparent 70%)}
  .halo.m{background:radial-gradient(circle,rgba(175,143,197,.13),transparent 70%)}
  .dust{position:absolute;inset:0;overflow:hidden;pointer-events:none}
  .dust i{position:absolute;width:2px;height:2px;border-radius:50%;background:var(--ice-2);opacity:0;animation:be-tw 6.5s ease-in-out infinite}

  /* ===== VERRE : tout ce qui porte du texte passe par-dessus les hélices ===== */
  .glass{background:var(--glass);-webkit-backdrop-filter:blur(11px) saturate(1.2);backdrop-filter:blur(11px) saturate(1.2);
    box-shadow:inset 0 1px 0 rgba(234,237,240,.035)}
  @supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))){.glass{background:rgba(10,13,17,.93)}}

  /* ===== LA COLONNE VERTÉBRALE ===== */
  .spine{position:absolute;left:56px;top:0;bottom:0;width:1px;background:var(--line-2);z-index:1}
  .spine::after{content:'';position:absolute;left:-.5px;width:2px;height:180px;
    background:linear-gradient(180deg,transparent,var(--ice),transparent);
    animation:be-travel 14s ease-in-out infinite;opacity:.75}
  .node{position:absolute;left:56px;width:9px;height:9px;margin-left:-4px;border-radius:50%;
    background:var(--bg);border:1px solid var(--ch-a);z-index:2}
  .node::after{content:'';position:absolute;inset:2px;border-radius:50%;background:var(--ice);opacity:.55}
  @media(max-width:960px){.spine,.node{display:none}}

  /* Nommé .be-page (pas .page) : WordPress ajoute "page" à la classe de
     <body> sur toute Page — un sélecteur .page tout court matcherait le
     body avant notre conteneur, ce qui fausse toutes les coordonnées
     des hélices dans layout() (page-accueil.js). */
  .be-page{position:relative;max-width:1280px;margin:0 auto;padding:0 34px 0 130px}
  @media(max-width:960px){.be-page{padding:0 24px}}
  @media(max-width:640px){.be-page{padding:0 20px}}

  section{display:block;position:relative;padding:110px 0;scroll-margin-top:40px}
  @media(max-width:640px){section{padding:66px 0}}

  /* ===== HERO asymétrique ===== */
  .hero{display:grid;grid-template-columns:1.05fr .95fr;gap:60px;align-items:center;padding:96px 0 84px;min-height:88svh}
  /* padding-top 100px (pas 64px) : compense le header fixed (~81px, voir
     style.css) — avec l'eyebrow retiré, c'est maintenant le H1 lui-même qui
     commence au tout début du hero et qui serait tronqué sous le header sans
     cette marge, plutôt que l'eyebrow (déjà retiré) qui l'absorbait avant. */
  @media(max-width:960px){.hero{grid-template-columns:1fr;gap:28px;padding:100px 0 50px}}
  .hero .halo.i{width:620px;height:620px;right:-140px;top:-40px}
  h1{font-family:var(--disp);font-weight:300;font-size:clamp(2.5rem,6vw,4.8rem);line-height:1.02;letter-spacing:-.015em;text-align:left}
  h1 span{display:block;font-family:var(--disp);white-space:nowrap}
  .sub{margin-top:34px;max-width:44ch;color:var(--ink-2);font-size:1.06rem;font-weight:300;line-height:1.65}
  .ctas{margin-top:36px;display:flex;gap:14px;flex-wrap:wrap}
  /* Sur mobile, "Découvrir la collection" et "Comment ça marche" n'ont
     pas la même longueur de texte : en largeur automatique côte à côte
     ça donne deux boutons de tailles visiblement différentes. Empilés
     pleine largeur, ils sont identiques peu importe le texte. */
  @media(max-width:640px){.ctas{flex-direction:column}.ctas .btn{width:100%;text-align:center}}

  header{position:static} /* neutralise un éventuel style hérité, le header réel est celui de Kadence */
  nav{max-width:none}
  .brand{font-family:var(--disp);font-size:1.15rem;letter-spacing:.02em}
  .btn{padding:13px 26px;font-size:.9rem;border-radius:1px;transition:.25s;display:inline-block}
  .solid{background:linear-gradient(118deg,var(--ch-b),var(--ch-c));color:#0A0D11;font-weight:600}
  .solid:hover{filter:brightness(1.07)}
  .ghost{border:1px solid var(--line);color:var(--ink)}
  .ghost:hover{border-color:var(--ice);color:var(--ice-2)}

  /* ===== LE SABLIER (hero) ===== */
  .sablier{position:relative;width:100%;max-width:470px;margin-left:auto;aspect-ratio:940/1094}
  .sablier svg{width:100%;height:100%;overflow:visible}
  @media(max-width:960px){.sablier{margin:0 auto;max-width:400px}}
  @media(max-width:640px){.sablier{max-width:260px}}
  .pill{cursor:pointer;outline:none}
  .pill .disc{fill:#070B10;stroke:#4E7E9E;stroke-width:1.6;transition:.45s}
  .pill .nh{opacity:.28;transition:.45s}
  .pill .zone{opacity:0;transition:.6s;pointer-events:none}
  .pill .wire,.pill .bead{pointer-events:none}
  .pill .ico{fill:none;stroke:#DCEBF8;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;transition:.45s}
  .pill .txt{fill:#B9C3CD;font-family:var(--ui);font-size:21px;font-weight:500;letter-spacing:.14em;transition:.45s}
  @media(max-width:640px){.pill .txt{font-size:25px}}
  /* Le texte "BELLE ÉPOQUE" au centre du sablier : l'attribut SVG
     font-family="Newsreader,serif" (posé en JS) est un attribut de
     présentation — il perd face à N'IMPORTE QUELLE règle CSS, y compris
     le simple `*{font-family:var(--ui)}` global. D'où cette classe dédiée. */
  .sb-serif{font-family:var(--disp)!important}
  .pill .wire{fill:none;stroke:#8FB4CE;stroke-opacity:.5;stroke-width:1.1;transition:.45s}
  .pill .bead{fill:#D9E6F2;transition:.45s}
  .pill:hover .disc,.pill:focus-visible .disc,.pill.on .disc{stroke:#CFE7F8;stroke-width:2.2}
  .pill:hover .nh,.pill:focus-visible .nh,.pill.on .nh{opacity:.8}
  .pill:hover .zone,.pill:focus-visible .zone,.pill.on .zone{opacity:1}
  .pill:hover .ico,.pill:focus-visible .ico{stroke:#FFFFFF;stroke-width:2}
  .pill:hover .txt,.pill:focus-visible .txt,.pill.on .txt{fill:#FFFFFF}
  .pill:hover .wire,.pill:focus-visible .wire,.pill.on .wire{stroke:#CFE7F8;stroke-opacity:1;stroke-width:1.5}
  .pill:hover .bead,.pill:focus-visible .bead{fill:#FFFFFF}
  .grain{animation:be-grainTop var(--gd) linear infinite}
  .shim{animation:be-shimmer 9s ease-in-out infinite}
  .breathe{animation:be-breathe 12s ease-in-out infinite}

  .proof{border-top:1px solid var(--line-2);border-bottom:1px solid var(--line-2);padding:20px 0;overflow:hidden;position:relative;
    background:rgba(10,13,17,.45)}
  /* .track est peuplé/mesuré en JS (page-accueil.js) : le nombre de copies
     de .pset n'est jamais figé en dur, il s'adapte à la largeur d'écran
     réelle pour que la boucle soit continue sans trou, même sur un
     écran très large. */
  .track{display:flex;gap:76px;width:max-content;animation:be-mq 55s linear infinite;font-family:var(--disp);font-size:1.08rem;color:var(--ink-3);letter-spacing:.06em}
  .pset{display:flex;align-items:center;gap:76px;flex-shrink:0}
  .proof-logo{height:20px;width:auto;display:block;filter:brightness(0) invert(1);opacity:.55}

  /* ===== têtes de section, alignées à gauche sur la ligne ===== */
  .head{max-width:660px;margin-bottom:56px}
  /* Chapô plus long que la moyenne (section Pourquoi louer), sur 1 seule
     ligne en desktop SANS élargir .head (le H2 doit garder son propre
     retour à la ligne à 660px, inchangé) : sorti de .head, en sibling,
     avec sa propre largeur. .head.tight retire juste le margin-bottom
     habituel de .head (le sibling reprend ce rôle après lui). */
  .head.tight{margin-bottom:16px}
  .head-wide-sub{margin:0 0 56px;color:var(--ink-2);font-weight:300;max-width:900px}
  /* .full : aucun plafond, prend toute la largeur du conteneur (.be-page).
     Un texte long peut malgré tout revenir à la ligne sur un écran de
     largeur normale — au-delà de la largeur de page réelle (~1116px), il
     n'y a plus rien à élargir sans sortir de la mise en page du site. */
  .head-wide-sub.full{max-width:none}
  .kick{font-family:var(--ui);font-weight:var(--kick-weight);font-size:var(--kick-size);letter-spacing:var(--kick-tracking);color:var(--ice-2);margin-bottom:var(--kick-gap)}
  h2{font-family:var(--disp);font-weight:var(--h2-weight);font-size:var(--h2-size);line-height:var(--h2-line);letter-spacing:var(--h2-tracking)}
  .head p{margin-top:16px;color:var(--ink-2);font-weight:300;max-width:50ch}

  /* ===== collection : rangées horizontales sur une plaque de verre ===== */
  .list{border:1px solid rgba(126,180,219,.35);box-shadow:0 0 50px -16px rgba(126,180,219,.35)}
  .item{display:grid;grid-template-columns:auto 1fr auto auto auto auto;gap:34px;align-items:center;
    padding:30px 30px;position:relative;overflow:hidden;scroll-margin-top:120px;transition:background .5s}
  .item+.item{border-top:1px solid var(--line-2)}
  .item::after{content:'';position:absolute;top:0;left:-70%;width:45%;height:100%;pointer-events:none;
    background:linear-gradient(100deg,transparent,rgba(241,244,247,.05),transparent);transform:skewX(-16deg);animation:be-sh 10s linear infinite}
  .item::before{content:'';position:absolute;left:0;top:0;bottom:0;width:1.5px;background:linear-gradient(180deg,var(--ice),transparent);opacity:0;transition:opacity .5s}
  @media(max-width:900px){.item{grid-template-columns:1fr;gap:18px;padding:26px 22px}}
  .thumb{width:150px;height:150px;display:grid;place-items:center;overflow:hidden}
  .thumb img{width:100%;height:100%;object-fit:cover}
  @media(max-width:900px){.thumb{width:120px;height:120px}}
  /* .tag/.tag-icon/.tag-main/.tag-soft/.tag-sep, .idiv et .kwtag sont
     partagés avec Dream Machine (17/09/2026) — définis dans style.css,
     rien à redéfinir ici (éviter une dérive comme celle du kicker/H2). */
  .itxt h3{font-family:var(--disp);font-weight:400;font-size:1.75rem;line-height:1.15}
  .itxt .mk{color:var(--ink-3);font-size:.85rem;margin-top:2px}
  .itxt .kw{margin-top:12px;font-family:var(--ui);font-size:1.05rem;font-weight:500;color:var(--ink);line-height:1.5}
  .imeta{display:flex;flex-direction:column;align-items:center;gap:10px;white-space:nowrap}
  .iact{display:flex;flex-direction:column;align-items:center;gap:10px;white-space:nowrap}
  .price{font-family:var(--disp);font-size:1.1rem;border:1px solid var(--line);padding:10px 20px;display:inline-flex;align-items:baseline;gap:4px}
  .price small{font-family:var(--ui);font-size:.68rem;color:var(--ink-3)}
  /* [AJOUT 21/09/2026] 1er mois différent du tarif récurrent affiché en
     avant — précision en petit, collée au prix (margin-top négatif, le gap
     de 10px du parent .iact suffit à la séparer du lien "Découvrir"). */
  .price-note{margin-top:-4px;font-size:.72rem;color:var(--ink-3)}
  .lk{font-size:.84rem;color:var(--ice-2);border-bottom:1px solid transparent;display:inline-block;transition:border-color .25s}
  .lk:hover{border-color:var(--ice-2)}
}
/* body.bar-on est posé en JS (pas .be-home) — règle hors nesting */
body.bar-on .be-home .item.sel{background:linear-gradient(90deg,rgba(126,180,219,.045),transparent 55%)}
body.bar-on .be-home .item.sel::before{opacity:1}
.be-home{

  .soon{margin-top:40px;border-left:1px solid var(--ice);padding:30px 30px 30px 30px;scroll-margin-top:120px;
    background:linear-gradient(90deg,rgba(126,180,219,.06),rgba(10,13,17,.6) 60%);
    display:grid;grid-template-columns:1fr auto;gap:30px;align-items:center}
  @media(max-width:760px){.soon{grid-template-columns:1fr}}
  .soon p{font-size:.92rem;color:var(--ink-2);margin-bottom:16px}
  .bar{height:1.5px;background:var(--line);max-width:300px;overflow:hidden}
  .bar i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--ice),var(--ice-2));animation:be-ld 6s ease-in-out infinite}
  .chips{display:flex;gap:9px;margin-top:16px;flex-wrap:wrap}
  .chips span{font-size:.73rem;color:var(--ink-3);border:1px solid var(--line-2);padding:5px 11px}
  .sc2{display:flex;flex-direction:column;gap:9px}
  .note{margin-top:26px;font-size:.82rem;color:var(--ink-3)}

  /* ===== comparatif : deux colonnes, la gauche éclairée =====
     .col.a et .col.b sont deux <ul> indépendantes : sans subgrid, la
     hauteur de chaque <li> dépend uniquement de son propre texte, donc
     rien ne force la ligne N de gauche à faire la même hauteur que la
     ligne N de droite. Dès qu'un intitulé plus long passe sur 2 lignes
     d'un côté (ex. "Sélection testée, validée, accessible") sans
     équivalent en face, les séparateurs horizontaux se décalent entre
     les deux colonnes — visible surtout sur mobile (colonnes étroites,
     plus de retours à la ligne). Le subgrid force les deux <li> d'une
     même ligne à partager la même hauteur (celle du plus grand des deux). */
  /* Encadrement plus présent (même halo bleu que .list, cohérence entre
     sections) — la version précédente (simple trait var(--line-2)) était
     jugée trop plate. */
  .cmp{display:grid;grid-template-columns:1fr 1fr;grid-template-rows:auto repeat(5,auto);gap:0;
    border:1px solid rgba(126,180,219,.35);box-shadow:0 0 50px -16px rgba(126,180,219,.35);max-width:900px;margin:0 auto}
  .col{display:grid;grid-template-rows:subgrid;grid-row:1/span 6}
  .col.a{grid-column:1}
  .col.b{grid-column:2}
  .col ul{display:contents}
  .colh{font-family:var(--disp);font-size:1.15rem;font-weight:400;padding:22px 28px;border-bottom:1px solid var(--line-2)}
  .col.a{position:relative;background:linear-gradient(180deg,rgba(126,180,219,.1),transparent 70%)}
  .col.a::before{content:'';position:absolute;left:0;top:0;bottom:0;width:1.5px;background:linear-gradient(180deg,var(--ice),transparent)}
  .col.a .colh{color:var(--ice-2)}
  .col.b{border-left:1px solid var(--line-2)}
  .col.b .colh{color:var(--ink-3)}
  .col li{list-style:none;padding:17px 28px;border-bottom:1px solid var(--line-2);font-size:.97rem;display:flex;align-items:center}
  /* Puce ✓/– générée en CSS plutôt qu'en dur dans le HTML : lecture plus
     rapide de "ce qui compte comme un plus" (Louer) vs "un moins" (Acheter). */
  .col.a li::before{content:'✓';color:var(--ice);margin-right:14px;font-size:.85em;flex-shrink:0}
  .col.b li::before{content:'–';color:var(--ink-3);margin-right:14px;font-size:.85em;flex-shrink:0}
  .col.b li{color:var(--ink-3)}
  .col li:last-child{border-bottom:none}
  @media(max-width:640px){.col li,.colh{padding:14px 18px;font-size:.87rem}}
  /* Phrase de clôture — même format que .dm-note.dm-note-center (Dream
     Machine) : petite, discrète, encadrée de 2 traits lumineux fins et
     étroits — remplace l'ancien traitement "grande citation display",
     jugé trop imposant à cet endroit précis. */
  .close{
    position:relative;text-align:center;max-width:640px;margin:44px auto 0;padding:28px 0;
    font-family:var(--ui);font-size:.82rem;font-style:italic;color:var(--ink-3);line-height:1.6;
  }
  .close::before,.close::after{
    content:'';position:absolute;left:50%;transform:translateX(-50%);width:140px;height:1px;
    background:linear-gradient(90deg,transparent,var(--ice-2),transparent);
  }
  .close::before{top:0}
  .close::after{bottom:0}

  /* ===== "Comment ça marche" (.steps/.step/.stepnum/.stepn/.dep-link) et
     la popup "Dépôt de garantie" (.dm-modal-*) sont des composants
     partagés avec la page Dream Machine — tout est dans style.css, rien
     à redéfinir ici (éviter une dérive comme celle du kicker/H2, voir
     ARCHITECTURE.md 17/09/2026). ===== */

  /* ===== avis ===== */
  /* Cartes séparées par un vrai espace, chacune encadrée individuellement
     (même traitement que .dm-moment sur Dream Machine / .list de la
     collection) — plus le trait 1px partagé + panneau glass d'ensemble. */
  .rev{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
  @media(max-width:900px){.rev{grid-template-columns:1fr}}
  /* Cartes avis — refaites pour "amener de la lumière" (retour du
     17/09/2026, la version précédente jugée trop plate) : halo bleu
     ambiant autour de chaque carte, trait supérieur dégradé, grande
     guillemet décoratif en filigrane, avatar qui brille. */
  .rc{
    padding:34px 28px;background:var(--panel);border:1px solid rgba(126,180,219,.4);
    box-shadow:0 0 50px -16px rgba(126,180,219,.6);position:relative;overflow:hidden;
  }
  .rc::before{
    content:'';position:absolute;top:0;left:0;right:0;height:2px;
    background:linear-gradient(90deg,transparent,var(--ice),transparent);
  }
  .rq{
    position:absolute;top:6px;right:18px;font-family:var(--disp);font-size:4.6rem;
    color:var(--ice);opacity:.22;pointer-events:none;line-height:1;
  }
  .rt{display:flex;gap:12px;align-items:center;margin-bottom:18px;position:relative}
  .av{width:36px;height:36px;border-radius:50%;background:linear-gradient(145deg,var(--ch-a),var(--bg));border:1px solid var(--ice);box-shadow:0 0 10px -2px var(--ice)}
  .rn{font-size:.87rem}
  .rl{font-size:.75rem;color:var(--ink-3)}
  /* Une seule note ("5/5 pour Belle Époque"), pas 3 critères par appareil —
     ces avis parlent du service Belle Époque, pas d'un produit précis. */
  .sc{font-size:.78rem;color:var(--ink-3);margin-bottom:15px;position:relative}
  .sc b{color:var(--ice-2)}
  .rx{font-size:.9rem;color:var(--ink-2);font-weight:300;line-height:1.6;position:relative}
  .tp{display:inline-block;margin-top:30px;font-size:.83rem;color:var(--ink-3)}
  .tp span{border-bottom:1px solid var(--line);transition:.25s}
  .tp:hover span{color:var(--ice-2);border-color:var(--ice-2)}

  /* ===== final — centré comme .dm-ctafinal sur Dream Machine (demande
     explicite du 17/09/2026, plus de traitement différent desktop/mobile
     pour ce bloc précis). ===== */
  .final{padding:140px 0;position:relative;text-align:center}
  /* Séparateur lumineux avant la section, même style que .close (traits
     dégradés fins) mais plus large — sépare "Votre nouvelle routine..."
     de ce qui précède. */
  .final::before{
    content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:460px;height:1px;
    background:linear-gradient(90deg,transparent,var(--ice-2),transparent);
  }
  .final .halo.i{width:560px;height:560px;left:-100px;top:0}
  .final h2{font-size:clamp(1.6rem,4vw,2.8rem);margin:16px 0 20px;letter-spacing:.01em}
  .final p{color:var(--ink-2);font-weight:300;max-width:46ch;margin:0 auto 34px}

  /* ===== BARRE DE LOCATION ===== */
  .rentbar{position:fixed;left:0;right:0;bottom:0;z-index:70;
    background:rgba(10,13,17,.84);-webkit-backdrop-filter:blur(20px) saturate(1.2);backdrop-filter:blur(20px) saturate(1.2);
    border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom);
    transform:translateY(calc(100% + 4px));transition:transform .7s cubic-bezier(.2,.8,.2,1);
    box-shadow:0 -24px 60px -20px rgba(0,0,0,.6);font-family:var(--ui);color:var(--ink)}
  .rentbar.on{transform:none}
  .rentbar::before{content:'';position:absolute;top:-1px;left:0;width:260px;height:1px;
    background:linear-gradient(90deg,transparent,var(--ice-2),transparent);animation:be-sweep 12s ease-in-out infinite}
  .rb-in{max-width:1280px;margin:0 auto;padding:13px 34px 13px 130px;display:flex;align-items:center;gap:26px;min-height:var(--bar-h)}
  @media(max-width:960px){.rb-in{padding:12px 24px;gap:14px}.rb-go{right:16px}}
  @media(max-width:640px){.rb-in{padding:10px 16px;gap:10px;min-height:66px}.rb-go{right:12px}}
  .rb-id{display:flex;align-items:center;gap:14px;flex:0 0 auto}
  .rb-g{width:18px;height:28px;flex:0 0 auto}
  .rb-g .gs{animation:be-gfall 2.4s linear infinite}
  .rb-k{font-size:.7rem;letter-spacing:.2em;color:var(--ice-2);white-space:nowrap}
  .rb-s{font-size:.76rem;color:var(--ink-3);margin-top:3px;white-space:nowrap}
  .rb-pick{display:flex;gap:8px;flex:1 1 auto;justify-content:flex-end;min-width:0;border:0}
  .rb-opt{position:relative;display:flex;align-items:center;gap:11px;padding:9px 15px 9px 13px;border:1px solid var(--line-2);
    cursor:pointer;transition:border-color .3s,background .3s;background:rgba(234,237,240,.015);user-select:none}
  .rb-opt input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
  .rb-opt .dot{width:7px;height:7px;border-radius:50%;border:1px solid var(--ink-3);transition:.3s;flex:0 0 auto}
  .rb-opt b{display:block;font-family:var(--disp);font-weight:400;font-size:1.02rem;line-height:1.15;color:var(--ink-2);transition:color .3s;white-space:nowrap}
  .rb-opt em{display:block;font-style:normal;font-size:.63rem;letter-spacing:.14em;color:var(--ink-3);text-transform:uppercase;white-space:nowrap}
  .rb-opt .pr{font-size:.8rem;color:var(--ink-3);white-space:nowrap;margin-left:4px;transition:color .3s}
  .rb-opt:hover{border-color:var(--line)}
  .rb-opt.is-on{border-color:rgba(126,180,219,.5);background:linear-gradient(180deg,rgba(126,180,219,.1),rgba(126,180,219,.02))}
  .rb-opt.is-on .dot{background:var(--ice);border-color:var(--ice);box-shadow:0 0 9px var(--ice)}
  .rb-opt.is-on b{color:var(--ink)}
  .rb-opt.is-on .pr{color:var(--ice-2)}
  .rb-opt:focus-within{outline:1.5px solid var(--ice);outline-offset:2px}
  .rb-sel{display:none;flex:1 1 auto;min-width:0;appearance:none;-webkit-appearance:none;border-radius:1px;
    background:rgba(234,237,240,.035) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23B0D3EC' stroke-width='1.3'/%3E%3C/svg%3E") no-repeat right 14px center;
    border:1px solid var(--line);color:var(--ink);font:500 .88rem/1.2 var(--ui);padding:13px 34px 13px 14px}
  .rb-sel option{background:#0A0D11;color:var(--ink)}
  /* [MODIFIÉ 22/09/2026] Sorti du flux flex de .rb-in (qui est plafonné à
     max-width:1280px et centré) pour être épinglé au vrai bord droit de
     l'ÉCRAN, avec une petite marge fixe — demande explicite. Un simple
     justify-content:flex-end sur .rb-in n'aurait collé le bouton qu'au
     bord droit de la colonne de 1280px, pas de l'écran, laissant un
     grand vide sur les moniteurs larges. .rentbar (position:fixed,
     left:0;right:0) sert de repère de positionnement, pas besoin d'y
     ajouter position:relative (fixed en établit déjà un).
     À surveiller si le sélecteur multi-appareils (rb-id/rb-pick/rb-sel,
     masqué tant qu'un seul produit existe) est un jour réactivé : sorti
     du flux, ce bouton ne réserve plus sa place — vérifier qu'il ne
     chevauche pas rb-pick/rb-sel une fois visibles (ajouter un
     padding-right sur .rb-in si besoin). */
  .rb-go{position:absolute;top:50%;right:24px;transform:translateY(-50%);white-space:nowrap;overflow:hidden;padding:14px 26px}
  .rb-go::after{content:'';position:absolute;top:0;left:-60%;width:40%;height:100%;
    background:linear-gradient(100deg,transparent,rgba(255,255,255,.55),transparent);transform:skewX(-18deg);animation:be-glint 7s ease-in-out infinite}
  .rb-go .ar{display:inline-block;transition:transform .3s;margin-left:6px}
  .rb-go:hover .ar{transform:translateX(3px)}
  .rb-n{display:inline-block;transition:opacity .25s,transform .25s}
  .rb-n.sw{opacity:0;transform:translateY(5px)}
  .rentbar.flash .rb-go{animation:be-pop .8s cubic-bezier(.2,.8,.2,1)}
  /* [AJOUT 19/09/2026] Masque le sélecteur multi-appareils (rb-id/rb-pick/rb-sel)
     tant qu'un seul produit est au catalogue — !important nécessaire pour battre
     la media query 900px ci-dessous qui repasse .rb-sel en display:block. */
  .rb-hidden-for-now{display:none !important}
  @media(max-width:1180px){.rb-s,.rb-opt em{display:none}}
  @media(max-width:1040px){.rb-id>div{display:none}}
  @media(max-width:900px){.rb-pick{display:none}.rb-sel{display:block}.rb-id{display:none}}
  @media(max-width:480px){.rb-go .rb-l{display:none}.rb-go{padding:14px 20px}}
}

@keyframes be-dr{0%,100%{background-position:0 0}50%{background-position:100% 0}}
@keyframes be-tw{0%,100%{opacity:0}50%{opacity:.9}}
@keyframes be-travel{0%{top:-180px}100%{top:100%}}
@keyframes be-grainTop{0%{opacity:0;transform:translateY(0)}10%{opacity:.95}90%{opacity:.9}100%{opacity:0;transform:translateY(var(--dy))}}
@keyframes be-shimmer{0%,100%{opacity:.35}50%{opacity:.85}}
@keyframes be-breathe{0%,100%{opacity:.22}50%{opacity:.45}}
@keyframes be-mq{from{transform:translateX(0)}to{transform:translateX(-50%)}}
@keyframes be-sh{0%{left:-70%}100%{left:150%}}
@keyframes be-ld{0%{width:0}72%{width:75%}100%{width:75%}}
@keyframes be-sweep{0%{transform:translateX(-260px)}100%{transform:translateX(100vw)}}
@keyframes be-gfall{0%{transform:translateY(0);opacity:0}15%{opacity:1}85%{opacity:1}100%{transform:translateY(9px);opacity:0}}
@keyframes be-glint{0%,70%{left:-60%}100%{left:140%}}
@keyframes be-pop{0%{box-shadow:0 0 0 0 rgba(176,211,236,.55)}100%{box-shadow:0 0 0 14px rgba(176,211,236,0)}}
