/* La cabine. Une seule grille : --bord est la marge de la page et la position des deux bouts du néon sur le mur rendu.
   1/12 de la largeur au grand écran, 20/390 au téléphone (voir 3d/scene.js). Tout le réglage du néon tient dans --part (0 à 1) :
   la part de 6 h 30 que dure la formule choisie. Le verre, la lumière du mur, le repère et la lueur de la section en découlent. */
@font-face { font-family: "M PLUS Rounded 1c"; src: url("polices/mplus-500.woff2") format("woff2"); font-weight: 500; font-display: swap; }
@font-face { font-family: "M PLUS Rounded 1c"; src: url("polices/mplus-700.woff2") format("woff2"); font-weight: 700; font-display: swap; }
@font-face { font-family: "Urbanist"; src: url("polices/urbanist.woff2") format("woff2"); font-weight: 100 900; font-display: swap; }

@property --part { syntax: "<number>"; inherits: true; initial-value: .6; }

:root {
  --bord: calc(100vw * 20 / 390);
  --y: var(--y-tel, .69);
  --bout: calc(100vw * var(--bout-tel, .0283));
  --h: 54px;
  --mur-h: calc(100vw * 2460 / 1170);
  --nuit: #0B0E0F;
  --texte: #F1F5F2;
  --doux: #BFCBC7;
  --sarcelle: #8CE9D7;
  --ambre: #F0A94E;
  --papier: #E7EAE5;
  --encre: #1B2122;
  --titre: "M PLUS Rounded 1c", "Urbanist", system-ui, sans-serif;
  --corps: "Urbanist", system-ui, sans-serif;
  --largeur-tuile: 106.4vw;
  /* où s'arrête le verre allumé */
  --x: calc(var(--bord) + var(--bout) + var(--part) * (100vw - 2 * var(--bord) - 2 * var(--bout)));
  --force: calc(.5 + .5 * var(--part));
  transition: --part .8s cubic-bezier(.3, .7, .2, 1);
}
@media (min-width: 701px) {
  :root { --bord: calc(100vw / 12); --y: var(--y-pc, .685); --bout: calc(100vw * var(--bout-pc, .01625)); --h: clamp(58px, 4.7vw, 88px); --mur-h: calc(100vw * 1800 / 2880); --largeur-tuile: 44.44vw; }
}

*, *::before, *::after { box-sizing: border-box; }
html { background: var(--nuit); scroll-behavior: smooth; -webkit-text-size-adjust: 100%; scroll-padding-top: calc(var(--h) + 12px); }
body { margin: 0; color: var(--texte); font: 500 17px/1.45 var(--corps); background: rgb(168, 148, 143) url("mur/tuile.webp") 0 0 / var(--largeur-tuile) auto; background-blend-mode: multiply; overflow-x: clip; } /* la mousse loin du néon : baissée pour rester lisible, la lumière vient des couches de chaque section */
img { display: block; max-width: 100%; height: auto; }
a { color: inherit; }
h1, h2, h3, p, ol, ul, dl, dd, figure, address { margin: 0; padding: 0; font-style: normal; }
ol, ul { list-style: none; }
.invisible { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); white-space: nowrap; }
:focus-visible { outline: 3px solid var(--sarcelle); outline-offset: 3px; border-radius: 6px; }
.grille { padding-inline: var(--bord); }

.bouton { display: inline-flex; align-items: center; justify-content: center; min-height: 52px; padding: 0 26px; border-radius: 12px; font: 700 17px/1 var(--corps); text-decoration: none; cursor: pointer; color: #08201B; background: var(--sarcelle); border: 0; transition: background-color .2s; white-space: nowrap; }
.bouton:hover { background: #A9F0E2; }
.bouton-trait { background: transparent; color: var(--texte); box-shadow: inset 0 0 0 1.5px rgba(255, 255, 255, .42); }
.bouton-trait:hover { background: rgba(255, 255, 255, .08); }

/* ---------- L'en-tête, collant en haut : c'est là que « Réserver » reste à portée, jamais en bas de l'écran ---------- */
.entete { position: sticky; top: 0; z-index: 30; height: var(--h); background: rgba(9, 12, 13, .84); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); box-shadow: 0 1px 0 rgba(255, 255, 255, .07); }
.entete-rang { display: flex; align-items: center; gap: 10px; height: 100%; }
.marque { font: 700 18px/1 var(--titre); letter-spacing: -.01em; text-decoration: none; padding-block: 14px; white-space: nowrap; }
.apercu { font-size: 12px; font-weight: 600; letter-spacing: .02em; color: var(--doux); border: 1px solid rgba(255, 255, 255, .28); border-radius: 99px; padding: 1px 8px; }
.tel { display: none; font-weight: 600; font-variant-numeric: tabular-nums; text-decoration: none; padding-block: 12px; white-space: nowrap; }
.bouton-entete { margin-left: auto; min-height: 44px; padding: 0 18px; font-size: 16px; border-radius: 10px; }
.ancres { display: flex; font-weight: 600; }
.ancres a { display: inline-flex; align-items: center; min-height: 44px; text-decoration: none; color: #DCE4E1; white-space: nowrap; }
.ancres a:hover { color: var(--sarcelle); }
.ancres-pc { display: none; }
.ancres-tel { justify-content: space-between; font-size: 15px; }

/* ---------- Le mur : trois couches de la même scène ---------- */
.cabine { position: relative; }
.mur { position: absolute; left: 0; right: 0; top: calc(-1 * var(--h)); height: var(--mur-h); overflow: hidden; -webkit-mask-image: linear-gradient(#000 82%, transparent); mask-image: linear-gradient(#000 82%, transparent); }
.m-couche, .m-couche img { position: absolute; inset: 0; width: 100%; height: 100%; }
.m-couche img { object-fit: cover; }
/* la bande du verre, autour de la hauteur du tube */
.m-lumiere {
  --bande: 1.05vw; --haut-bande: calc(var(--y) * 100% - var(--bande)); --bas-bande: calc(var(--y) * 100% + var(--bande));
  opacity: var(--force);
  -webkit-mask-image: linear-gradient(to right, #000 calc(var(--x) - 9vw), transparent calc(var(--x) + 16vw)), linear-gradient(#000 var(--haut-bande), transparent var(--haut-bande), transparent var(--bas-bande), #000 var(--bas-bande));
  mask-image: linear-gradient(to right, #000 calc(var(--x) - 9vw), transparent calc(var(--x) + 16vw)), linear-gradient(#000 var(--haut-bande), transparent var(--haut-bande), transparent var(--bas-bande), #000 var(--bas-bande));
  -webkit-mask-composite: source-in; mask-composite: intersect;
}
.m-verre { --bande: 1.05vw; clip-path: inset(calc(var(--y) * 100% - var(--bande)) calc(100% - var(--x)) calc((1 - var(--y)) * 100% - var(--bande)) 0); }
.m-curseur { position: absolute; left: var(--x); top: calc(var(--y) * 100%); width: 8.2vw; height: 8.2vw; margin: -4.1vw 0 0 -4.1vw; max-width: none; }
.m-repere { position: absolute; right: calc(100% - var(--x)); top: calc(var(--y) * 100% + 3.4vw); font: 700 16px/1 var(--titre); color: var(--sarcelle); white-space: nowrap; font-variant-numeric: tabular-nums; }
/* la lueur qui descend sur la section : plus la session est longue, plus elle porte */
.lum-session { position: absolute; left: 0; right: 0; top: calc(var(--mur-h) * .62 - var(--h)); bottom: 0; background: url("couches/tuile-sarcelle.webp") 0 0 / var(--largeur-tuile) auto; opacity: calc(var(--part) * var(--part) * .72 + .06);
  -webkit-mask-image: linear-gradient(to right, #000 calc(var(--x) - 12vw), transparent calc(var(--x) + 22vw)), linear-gradient(transparent, #000 20%, #000 72%, transparent);
  mask-image: linear-gradient(to right, #000 calc(var(--x) - 12vw), transparent calc(var(--x) + 22vw)), linear-gradient(transparent, #000 20%, #000 72%, transparent);
  -webkit-mask-composite: source-in; mask-composite: intersect; pointer-events: none; }

/* ---------- Le haut de page : le titre recule, le mur reste devant ---------- */
.haut { position: relative; min-height: calc(var(--mur-h) * var(--y) - var(--h) + 24vw); }
.ancres-tel { margin-top: 2px; }
.haut-rang { margin-top: 12px; display: grid; gap: 18px; }
h1 { font: 500 clamp(40px, 12vw, 54px)/1.06 var(--titre); letter-spacing: -.025em; }
.accroche { margin-top: 8px; font-size: 20px; line-height: 1.32; font-weight: 600; color: #EEF3F0; }
.appel { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; }
.gamme { order: 2; font-size: 15.5px; color: var(--doux); }

/* ---------- Le choix de la session ---------- */
.session { position: relative; }
.session > * { position: relative; }
/* la lumière du tube retombe avant le titre : le texte reste lisible même à 6 h 30 */
.session::before { content: ""; position: absolute; left: 0; right: 0; top: -14vw; height: 48vw; background: linear-gradient(transparent, rgba(8, 10, 11, .66) 32%, rgba(8, 10, 11, .66) 62%, transparent); pointer-events: none; }
@media (min-width: 701px) { .session::before { top: -3.4vw; height: 15vw; } }
.session-tete h2, .bloc h2 { font: 500 clamp(30px, 8.6vw, 38px)/1.1 var(--titre); letter-spacing: -.02em; }
.session-tete p { margin-top: 6px; font-size: 16.5px; line-height: 1.35; font-weight: 600; color: var(--texte); }
fieldset { margin: 14px 0 0; padding: 0; border: 0; min-width: 0; display: grid; gap: 7px; }
.entetes { display: none; }

.ligne {
  position: relative; display: grid; grid-template-columns: 22px minmax(0, 1fr) auto; column-gap: 8px; align-items: baseline;
  padding: 8px 14px 2px 12px; border-radius: 12px; cursor: pointer; overflow: hidden; isolation: isolate; background: rgba(21, 25, 26, .78);
  box-shadow: 0 0 0 1px rgba(255, 255, 255, .08) inset, 0 8px 18px rgba(0, 0, 0, .35); transition: box-shadow .25s;
}
.ligne::before { content: ""; position: absolute; inset: 0; z-index: -1; background: url("mur/feutre.webp") 0 0 / 256px; opacity: .5; }
.ligne input { position: absolute; inset: 0; width: 100%; height: 100%; margin: 0; opacity: 0; cursor: pointer; z-index: 3; }
.l-pastille { width: 16px; height: 16px; border-radius: 50%; border: 2px solid rgba(255, 255, 255, .46); align-self: start; margin-top: 2px; grid-row: 1; transition: border-color .2s, background-color .2s, box-shadow .2s; }
.l-nom { font: 700 16.5px/1.25 var(--corps); grid-column: 2; grid-row: 1; }
.l-nom small { display: block; font-weight: 500; font-size: 15px; line-height: 1.3; color: var(--doux); margin-top: 1px; }
.l-prix { font: 700 21px/1.2 var(--titre); font-variant-numeric: tabular-nums; grid-column: 3; grid-row: 1; white-space: nowrap; text-align: right; }
.l-infos { grid-column: 2 / -1; grid-row: 2; font-size: 15.5px; color: var(--doux); }
.l-duree::after { content: ", "; }
.rail { position: relative; grid-column: 1 / -1; grid-row: 3; height: 24px; margin-top: 1px; margin-inline: 4px; display: block; }
.gorge { position: absolute; left: 0; right: 0; top: 50%; height: 10px; margin-top: -5px; border-radius: 5px; background: #0A0C0D; box-shadow: 0 1px 0 rgba(255, 255, 255, .08), inset 0 1px 3px #000; }
.gorge i { position: absolute; top: 12px; width: 1px; height: 4px; background: rgba(255, 255, 255, .24); }
.rail picture { position: absolute; left: -3.077%; width: 106.154%; top: 50%; transform: translateY(-50%); pointer-events: none; }
.t { width: 100%; height: auto; }
.t-on { clip-path: inset(0 100% 0 0); transition: clip-path .55s cubic-bezier(.3, .7, .2, 1); }
/* un toucher suffit : le bouton du fader n'apparaît que sur la ligne choisie, au bout du verre allumé */
.curseur { position: absolute; top: 50%; left: 0; width: 32px; height: 32px; margin: -16px 0 0 -16px; max-width: none; opacity: 0; transition: left .55s cubic-bezier(.3, .7, .2, 1), opacity .25s; pointer-events: none; }

.ligne:has(input:checked) { box-shadow: 0 0 0 1.5px rgba(140, 233, 215, .62) inset, 0 8px 18px rgba(0, 0, 0, .35); background: rgba(28, 33, 34, .86); }
.ligne:has(input:checked) .l-pastille { border-color: var(--sarcelle); background: var(--sarcelle); box-shadow: inset 0 0 0 3px #181C1D; }
.ligne:has(input:checked) .t-on { clip-path: inset(0 0 0 0); }
.ligne:has(input:checked) .curseur { left: var(--fin); opacity: 1; }
.ligne:has(input:focus-visible) { outline: 3px solid var(--sarcelle); outline-offset: 2px; }
.ligne:hover:not(:has(input:checked)) { box-shadow: 0 0 0 1px rgba(255, 255, 255, .26) inset, 0 8px 18px rgba(0, 0, 0, .35); }
.ligne-prod { margin-top: 5px; }

.resume { margin-top: 12px; display: grid; grid-template-columns: auto minmax(0, 1fr); column-gap: 12px; row-gap: 10px; align-items: center; }
.resume-texte { display: grid; font-size: 15.5px; line-height: 1.3; color: var(--doux); }
.resume-etiquette { font-size: 14px; color: var(--doux); }
.en-cours .resume-etiquette { color: var(--ambre); font-weight: 600; }
.resume-texte strong { font: 700 18px/1.25 var(--titre); color: var(--texte); }
.bouton-plein { width: 100%; min-height: 54px; font-size: 18px; grid-column: 1 / -1; }
.en-cours #voir { display: none; } /* la feuille est ouverte : le bouton a fait son travail */

/* La lampe ON AIR : un objet, éteint au repos. Sa version allumée se pose dessus, sans clignoter. */
.lampe { position: relative; display: block; width: 92px; aspect-ratio: var(--r-onair); }
.lampe .objet, .lampe .objet img { position: absolute; inset: 0; display: block; width: 100%; height: 100%; }
.lampe .objet-on-air-on { opacity: 0; transition: opacity .6s; }
.en-cours .lampe .objet-on-air-on { opacity: 1; }
.lampe .objet-vide { aspect-ratio: 2 / 1; border-radius: 6px; background: #17191A; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, .14); }
.lampe .objet-vide::after { content: "ON AIR"; position: absolute; inset: 0; display: grid; place-items: center; font: 700 12px/1 var(--titre); letter-spacing: .08em; color: #5F6564; }
.lampe .objet-vide.objet-on-air-on { background: #3B2A12; box-shadow: inset 0 0 0 1px rgba(240, 169, 78, .6); }
.lampe .objet-vide.objet-on-air-on::after { color: var(--ambre); }

/* Le calendrier : une feuille posée sur la tablette, son titre et un filet au-dessus du widget */
.creneaux { margin-top: 16px; }
.creneaux[hidden] { display: none; }
.creneaux:focus { outline: none; }
.feuille { position: relative; background: #fff; color: #182022; border-radius: 6px 6px 0 0; box-shadow: 0 18px 40px rgba(0, 0, 0, .45); overflow: hidden; }
.feuille h3 { font: 700 18px/1.25 var(--corps); padding: 14px 16px 12px; border-bottom: 1px solid #D6DBD8; }
.calendrier { min-height: 420px; background: #fff; }
.calendrier iframe { display: block; width: 100%; border: 0; }
.tablette { height: 12px; margin-inline: -6px; border-radius: 0 0 5px 5px; background: linear-gradient(#34393A, #1A1D1E 55%, #0D0F10); box-shadow: 0 1px 0 rgba(255, 255, 255, .1) inset, 0 12px 20px rgba(0, 0, 0, .55); position: relative; }
.secours { margin-top: 14px; font-size: 15.5px; color: var(--doux); }
.secours a { color: var(--texte); text-underline-offset: 3px; }

/* ---------- Les sections : chacune sa lumière et son objet ---------- */
.bloc { position: relative; padding-top: 38px; }
.lum { position: absolute; left: 0; right: 0; top: 0; bottom: 0; pointer-events: none; z-index: -1; }
main { position: relative; z-index: 0; }
.bloc > *:not(.lum) { position: relative; }

/* La vitre : la photo derrière le verre, jamais plus grande que ses 640 px */
.studio { padding-top: 34px; overflow-x: clip; } /* l'ombre de la vitre s'arrête au bord de l'écran */
.lum-vitre { background: url("couches/tuile-sarcelle.webp") 0 0 / var(--largeur-tuile) auto; opacity: .55; -webkit-mask-image: radial-gradient(52% 46% at 30% 52%, #000, transparent); mask-image: radial-gradient(52% 46% at 30% 52%, #000, transparent); }
.studio-rang { margin-top: 14px; display: grid; grid-template-columns: minmax(0, 1fr) 118px; gap: 16px 14px; }
.vitre { position: relative; grid-column: 1 / -1; aspect-ratio: var(--r-vitre); --tg: var(--tg-tel); --th: var(--th-tel); --tl: var(--tl-tel); --tt: var(--tt-tel); }
/* la photo déborde de 2 % sous le cadre : aucun liseré dans les angles */
/* l'image porte son ombre dans 7,8 % de transparence de chaque côté (mesuré sur vitre-*.webp) : le cadre, lui, tombe sur la grille */
.vitre { width: calc(100% / .844); margin: calc(-100% * .078 / .844) 0 calc(-100% * .078 / .844) calc(-100% * .078 / .844); }
.vitre { --vx: calc(var(--tg) - 2%); --vy: calc(var(--th) - 2%); --vw: calc(var(--tl) + 4%); --vh: calc(var(--tt) + 4%); }
.vitre-fenetre { position: absolute; left: var(--vx); top: var(--vy); width: var(--vw); height: var(--vh); overflow: hidden; background: #05070B; z-index: 0; }
.vitre .objet-vitre-reflet { z-index: 1; } .vitre .objet-vitre { z-index: 2; }
.vitre-photo { width: 100%; height: 100%; object-fit: cover; object-position: 50% 62%; filter: saturate(.66) brightness(1.06); }
/* tant que les objets 3D manquent : un cadre sobre */
.vitre:has(.objet-vide) .vitre-fenetre { inset: 10px; width: auto; height: auto; border-radius: 3px; }
.vitre .objet-vide.objet-vitre { position: absolute; inset: 0; border-radius: 6px; background: linear-gradient(#1C2021, #101314); z-index: -1; box-shadow: 0 16px 30px rgba(0, 0, 0, .5), inset 0 0 0 1px rgba(255, 255, 255, .08); }
.vitre .objet-vide.objet-vitre-reflet { position: absolute; inset: 10px; background: linear-gradient(118deg, rgba(255, 255, 255, .13), rgba(255, 255, 255, 0) 26%, rgba(255, 255, 255, 0) 62%, rgba(150, 235, 220, .07)); }
.vitre picture.objet { position: absolute; inset: 0; pointer-events: none; }
.vitre picture.objet img { width: 100%; height: 100%; }
.studio-texte { grid-column: 1; grid-row: 2; }
.studio-nom { font: 700 21px/1.2 var(--titre); }
.studio-role { margin-top: 4px; font-size: 16px; line-height: 1.34; color: #DCE4E1; }
.studio-phrase { margin-top: 10px; font-size: 16px; line-height: 1.34; color: #DCE4E1; }
.studio-signature { margin-top: 10px; font-family: var(--titre); font-weight: 500; color: var(--sarcelle); font-size: 16px; }
.marc { grid-column: 2; grid-row: 2; width: 118px; border-radius: 6px; box-shadow: 0 12px 24px rgba(0, 0, 0, .5); align-self: start; }

/* Les morceaux : le casque accroché à la mousse */
.lum-casque { background: url("couches/tuile-neutre.webp") 0 0 / var(--largeur-tuile) auto; opacity: .9; -webkit-mask-image: radial-gradient(52% 46% at 24% 52%, #000, transparent); mask-image: radial-gradient(52% 46% at 24% 52%, #000, transparent); }
.morceaux-rang { display: grid; gap: 14px; }
.morceaux-gauche { position: relative; min-height: 112px; padding-right: 104px; }
.morceaux-gauche p { margin-top: 6px; color: #DCE4E1; }
.objet-casque { position: absolute; right: -6px; top: -26px; width: 96px; display: block; aspect-ratio: var(--r-casque); }
.objet-casque img { width: 100%; height: 100%; }
.lampe .objet { transform: translateX(-10.9%); } /* le boîtier, pas sa lueur, tombe sur la grille */
.objet-casque.objet-vide { aspect-ratio: 5 / 6; border-radius: 50% 50% 14px 14px; border: 2px solid rgba(255, 255, 255, .1); }
.pistes { display: grid; gap: 8px; }
.piste { display: grid; grid-template-columns: 76px minmax(0, 1fr); gap: 12px; align-items: center; padding: 8px; border-radius: 12px; background: rgba(21, 25, 26, .9); box-shadow: 0 0 0 1px rgba(255, 255, 255, .08) inset; }
.piste-media { position: relative; display: block; border-radius: 7px; overflow: hidden; aspect-ratio: 1; }
.piste-media img { width: 100%; height: 100%; object-fit: cover; }
.piste-lecture { position: absolute; inset: 0; display: grid; place-items: center; background: rgba(5, 8, 9, .24); transition: background-color .2s; }
.piste-lecture::after { content: ""; width: 34px; height: 34px; border-radius: 50%; background: rgba(241, 245, 242, .92) conic-gradient(from 0deg, transparent 0 0); -webkit-mask: none; clip-path: none; box-shadow: 0 2px 8px rgba(0, 0, 0, .4); }
.piste-lecture::before { content: ""; position: absolute; z-index: 1; margin-left: 3px; border-style: solid; border-width: 7px 0 7px 12px; border-color: transparent transparent transparent #0B0E0F; }
.piste-media:hover .piste-lecture { background: rgba(5, 8, 9, .05); }
.piste-texte { display: grid; min-width: 0; line-height: 1.28; }
.piste-texte strong { font: 700 18px/1.2 var(--titre); }
.piste-texte span { color: #DCE4E1; font-size: 16px; }
.piste-texte small { color: var(--doux); font-size: 14.5px; }
.piste.ouverte { grid-template-columns: minmax(0, 1fr); }
.piste.ouverte iframe { width: 100%; aspect-ratio: 16 / 9; border: 0; border-radius: 7px; background: #000; display: block; }
.morceaux-liens { margin-top: 10px; font-size: 15.5px; color: var(--doux); }
.morceaux-liens a { display: inline-flex; align-items: center; min-height: 44px; color: #DCE4E1; text-underline-offset: 3px; }

/* Ce qui est compris : une feuille de session, le seul grand clair de la page */
.feuille-session { background: var(--papier); color: var(--encre); border-radius: 8px; padding: 22px 18px 12px; box-shadow: 0 22px 44px rgba(0, 0, 0, .5); }
.compris h2 { color: var(--encre); }
.compris-chapeau { margin-top: 4px; font-size: 16px; color: #4A5456; }
.conditions { margin-top: 12px; }
.conditions > div { padding-block: 10px; border-top: 1px solid rgba(27, 33, 34, .2); }
.conditions dt { font-weight: 800; font-size: 16px; line-height: 1.25; }
.conditions dd { font-size: 16px; line-height: 1.34; color: #2E3738; }
sup { font-size: .68em; line-height: 0; }

/* La prod sur mesure : la seule section posée sur un panneau, son tube en deux verres */
.prod-panneau { display: grid; gap: 18px; padding: 20px 16px; border-radius: 12px; background: #1B2122 url("mur/feutre.webp") 0 0 / 256px; box-shadow: 0 0 0 1px rgba(255, 255, 255, .08) inset, 0 18px 36px rgba(0, 0, 0, .42); }
.prod-chapeau { margin-top: 8px; font-size: 17px; line-height: 1.36; color: #E2E9E6; }
.deroule { margin-top: 14px; }
.deroule-tube { position: relative; overflow: hidden; height: 62px; -webkit-mask-image: linear-gradient(transparent, #000 32%, #000 68%, transparent); mask-image: linear-gradient(transparent, #000 32%, #000 68%, transparent); }
/* l'image couvre 6,9 h : on l'agrandit pour que ses 3 h 30 tiennent toute la largeur, le reste dépasse et se coupe */
.deroule-tube picture { position: absolute; left: calc(-.2 / 3.5 * 100%); width: calc(6.9 / 3.5 * 100%); top: 50%; transform: translateY(-50%); }
.deroule-tube img { width: 100%; max-width: none; height: auto; }
.deroule-etapes { display: grid; grid-template-columns: 1.5fr 2fr; gap: 10px; font-size: 15.5px; line-height: 1.3; color: var(--doux); }
.deroule-etapes strong { display: block; font: 700 19px/1.2 var(--titre); color: var(--sarcelle); }
.prod-note { margin-top: 12px; font-size: 15.5px; line-height: 1.34; color: var(--doux); }
.prod-action { margin-top: 14px; display: grid; gap: 10px; }
.prod-prix { font: 700 28px/1.1 var(--titre); }
.prod-prix span { font: 500 16px/1 var(--corps); color: var(--doux); margin-left: 6px; }
.prod-conditions { display: grid; gap: 0; font-size: 15.5px; line-height: 1.34; color: #DCE4E1; }
.prod-conditions li { padding-block: 6px; border-top: 1px solid rgba(255, 255, 255, .1); }

/* Le contact, à la porte de la cabine */
.contact { padding-bottom: 34px; }
.lum-porte { background: url("couches/tuile-neutre.webp") 0 0 / var(--largeur-tuile) auto; opacity: .9; -webkit-mask-image: radial-gradient(52% 46% at 22% 50%, #000, transparent); mask-image: radial-gradient(52% 46% at 22% 50%, #000, transparent); }
/* la porte : une bande calée contre le bord gauche, de haut en bas de la section ; on n'en garde que le battant et le chambranle */
.contact { --porte-w: calc(var(--bord) + 62px); }
.contact > .objet-porte { position: absolute; left: 0; top: 0; bottom: 0; width: var(--porte-w); z-index: 0; }
.contact > .objet-porte img { width: 100%; height: 100%; object-fit: cover; object-position: 100% 50%; }
.contact-rang { display: grid; grid-template-columns: minmax(0, 1fr); gap: 18px 16px; padding-left: calc(var(--porte-w) - var(--bord) + 16px); }

.objet-porte.objet-vide { display: block; background: linear-gradient(90deg, #1E2223, #15181A); }
.contact h2 { font-size: clamp(25px, 7vw, 30px); }
address { margin-top: 8px; font-size: 17px; line-height: 1.35; }
.contact-liens { margin-top: 12px; display: grid; gap: 8px; }
.contact-liens .bouton { min-height: 48px; padding-inline: 12px; font-size: 16px; }
.contact-mail { margin-top: 6px; font-size: 15.5px; }
.contact-mail a { display: inline-flex; align-items: center; min-height: 44px; text-underline-offset: 3px; }
.contact-horaires { grid-column: 1 / -1; }
.contact-horaires h3 { font: 700 18px/1.2 var(--titre); }
.jours { margin-top: 6px; }
.jours li { display: flex; justify-content: space-between; gap: 12px; padding-block: 6px; font-size: 16px; border-top: 1px solid rgba(255, 255, 255, .12); font-variant-numeric: tabular-nums; }

.pied { position: relative; padding-block: 8px 24px; font-size: 14.5px; color: var(--doux); background: rgba(9, 12, 13, .72); box-shadow: 0 -1px 0 rgba(255, 255, 255, .08); }
.reseaux { display: flex; flex-wrap: wrap; gap: 0 16px; }
.reseaux a { display: inline-flex; align-items: center; min-height: 44px; font-size: 15.5px; font-weight: 600; color: #DCE4E1; text-decoration: none; }
.reseaux a:hover { color: var(--sarcelle); }
.pied p { margin-top: 4px; }

/* ---------- Le grand écran : les mêmes bords, le mur en 16:10, les colonnes d'un tableau ---------- */
@media (min-width: 701px) {
  body { font-size: clamp(17px, 1.25vw, 24px); }
  .entete-rang { gap: clamp(12px, 1.1vw, 20px); }
  .marque { font-size: clamp(18px, 1.55vw, 30px); }
  .apercu { font-size: clamp(12px, .9vw, 17px); padding: .12em .8em; }
  .ancres-pc { display: flex; margin-inline: auto; gap: clamp(12px, 1.7vw, 34px); font-size: clamp(14.5px, 1.1vw, 21px); }
  .ancres-tel { display: none; }
  .tel { display: inline; font-size: clamp(14.5px, 1.1vw, 21px); }
  .bouton-entete { margin-left: 0; min-height: clamp(44px, 3.2vw, 60px); font-size: clamp(15px, 1.15vw, 22px); padding: 0 clamp(14px, 1.5vw, 28px); border-radius: clamp(10px, .8vw, 16px); }

  .m-repere { top: calc(var(--y) * 100% + 1.5vw); font-size: clamp(15px, 1.25vw, 24px); }
  .m-curseur { width: 3.1vw; height: 3.1vw; margin: -1.55vw 0 0 -1.55vw; }
  .m-lumiere, .m-verre { --bande: .62vw; }
  .haut { min-height: calc(var(--mur-h) * var(--y) - var(--h) + 7vw); }
  .haut-rang { margin-top: 2.6vw; grid-template-columns: minmax(0, 1fr) auto; gap: 3vw; align-items: end; }
  h1 { font-size: clamp(38px, 4.5vw, 86px); }
  .accroche { margin-top: .55vw; font-size: clamp(18px, 1.72vw, 33px); font-weight: 600; }
  .appel { flex-direction: row; align-items: center; gap: 1.4vw; }
  .gamme { order: 0; font-size: clamp(14.5px, 1.1vw, 21px); }
  .bouton { min-height: clamp(52px, 3.9vw, 74px); padding: 0 clamp(20px, 2vw, 38px); font-size: clamp(16px, 1.25vw, 24px); border-radius: clamp(12px, .9vw, 18px); }

  .session-tete { display: flex; align-items: baseline; justify-content: space-between; gap: 3vw; }
  .session-tete h2 { font-size: clamp(32px, 3.2vw, 62px); }
  .session-tete p { margin: 0; font-size: clamp(15.5px, 1.2vw, 23px); text-align: right; }
  :root { --cols: minmax(0, 3.25fr) minmax(0, 3.5fr) minmax(0, 1.05fr) minmax(0, 1.45fr) minmax(0, .75fr); --retrait: calc(1.2vw + clamp(16px, 1.15vw, 22px) + .7vw); }
  fieldset { margin-top: 1.1vw; gap: .5vw; }
  .entetes { display: grid; grid-template-columns: var(--cols); column-gap: 1.7vw; padding-inline: var(--retrait) 1.5vw; font-size: clamp(14px, 1vw, 19px); color: #DCE4E1; font-weight: 600; }
  .entetes span:last-child { text-align: right; }
  .ligne { grid-template-columns: var(--cols); column-gap: 1.7vw; align-items: center; padding: 0 1.5vw 0 var(--retrait); min-height: clamp(60px, 4.8vw, 92px); border-radius: clamp(12px, .95vw, 18px); }
  .l-pastille { position: absolute; left: 1.2vw; top: 50%; margin-top: calc(clamp(16px, 1.15vw, 22px) / -2); width: clamp(16px, 1.15vw, 22px); height: clamp(16px, 1.15vw, 22px); }
  .l-nom { grid-column: 1; grid-row: 1; font-size: clamp(16.5px, 1.3vw, 25px); padding-block: .4vw; }
  .l-nom small { font-size: clamp(15px, 1.05vw, 20px); }
  .rail { grid-column: 2; grid-row: 1; height: 3vw; margin: 0; }
  .gorge { height: .75vw; margin-top: -.375vw; border-radius: .4vw; }
  .gorge i { top: .95vw; height: .32vw; }
  .curseur { width: 3vw; height: 3vw; margin: -1.5vw 0 0 -1.5vw; }
  .l-infos { display: contents; }
  .l-duree::after { content: none; }
  .l-duree { grid-column: 3; grid-row: 1; font-size: clamp(16px, 1.2vw, 23px); color: var(--texte); white-space: nowrap; }
  .l-mor { grid-column: 4; grid-row: 1; font-size: clamp(16px, 1.2vw, 23px); color: var(--texte); white-space: nowrap; }
  .l-prix { grid-column: 5; grid-row: 1; font-size: clamp(21px, 1.85vw, 36px); }
  .ligne-prod { margin-top: .4vw; }

  .resume { margin-top: 1.1vw; grid-template-columns: auto minmax(0, 1fr) auto; column-gap: 1.6vw; }
  .lampe { width: clamp(92px, 8.4vw, 160px); }
  .resume-texte { display: block; font-size: clamp(15.5px, 1.2vw, 23px); }
  .resume-etiquette { font-size: inherit; margin-right: .5em; }
  .resume-texte strong { font-size: clamp(18px, 1.55vw, 30px); margin-right: .55em; }
  .bouton-plein { width: auto; grid-column: auto; min-height: clamp(54px, 4vw, 76px); font-size: clamp(17px, 1.3vw, 25px); padding-inline: clamp(26px, 2.8vw, 54px); }

  .creneaux { margin-top: 1.6vw; }
  .feuille { border-radius: .6vw .6vw 0 0; }
  .feuille h3 { font-size: clamp(18px, 1.5vw, 28px); padding: 1.1vw 1.6vw 1vw; }
  .calendrier { min-height: 620px; }
  .tablette { height: 1vw; margin-inline: -.7vw; }
  .secours { font-size: clamp(15.5px, 1.1vw, 21px); }

  .bloc { padding-top: 5.6vw; }
  .bloc h2 { font-size: clamp(30px, 3.2vw, 62px); }
  /* la photo fait 640 px : la vitre s'arrête à cette largeur, le texte prend le reste, Marc tient le bord droit */
  /* la photo garde au plus ses 640 px : trou plus 4 % de débord, image de la vitre à 84,4 % opaque */
  .studio-rang { margin-top: 1.6vw; grid-template-columns: minmax(0, min(44vw, calc(640px * .844 / (var(--trou-l-pc) + .04)))) minmax(0, 1fr) minmax(0, min(15vw, 260px)); gap: 3vw; align-items: center; }
  .vitre { --tg: var(--tg-pc); --th: var(--th-pc); --tl: var(--tl-pc); --tt: var(--tt-pc); }
  .vitre { grid-column: 1; grid-row: 1; }
  .studio-texte { grid-column: 2; grid-row: 1; align-self: center; }
  .marc { grid-column: 3; grid-row: 1; width: 100%; border-radius: .6vw; align-self: end; }
  .studio-nom { font-size: clamp(22px, 2vw, 38px); }
  .studio-role, .studio-phrase { font-size: clamp(16.5px, 1.3vw, 25px); margin-top: .8vw; }
  .studio-signature { margin-top: 1.2vw; font-size: clamp(16.5px, 1.45vw, 28px); }

  .morceaux-rang { grid-template-columns: minmax(0, 4fr) minmax(0, 8fr); gap: 3vw; align-items: stretch; }
  .morceaux-gauche { min-height: 0; padding-right: 0; display: flex; flex-direction: column; }
  .morceaux-gauche p { margin-top: .5vw; font-size: clamp(16.5px, 1.3vw, 25px); }
  .objet-casque { position: relative; right: auto; top: auto; width: min(64%, 300px); margin-top: .6vw; transform: translateX(-12.7%); }
  .pistes { gap: .8vw; }
  .piste { grid-template-columns: clamp(76px, 7.6vw, 150px) minmax(0, 1fr); gap: 1.6vw; padding: .7vw; border-radius: .95vw; }
  .piste-texte strong { font-size: clamp(18px, 1.7vw, 33px); }
  .piste-texte span { font-size: clamp(16px, 1.25vw, 24px); }
  .piste-texte small { font-size: clamp(14.5px, 1.05vw, 20px); }
  .morceaux-liens { margin-top: .8vw; text-align: right; font-size: clamp(15px, 1.05vw, 20px); }

  .feuille-session { padding: 2.4vw 2.6vw 1.6vw; border-radius: .7vw; }
  .compris-chapeau { margin-top: .3vw; font-size: clamp(16px, 1.2vw, 23px); }
  .conditions { margin-top: 1.3vw; display: grid; grid-template-columns: 1fr 1fr; column-gap: 3.4vw; }
  .conditions > div { padding-block: .85vw; }
  .conditions dt { font-size: clamp(16px, 1.2vw, 23px); }
  .conditions dd { font-size: clamp(16px, 1.2vw, 23px); }

  .prod-panneau { grid-template-columns: minmax(0, 6.4fr) minmax(0, 5.6fr); gap: 3vw; padding: 2.6vw; border-radius: .95vw; align-items: start; }
  .prod-chapeau { margin-top: .6vw; font-size: clamp(17px, 1.35vw, 26px); }
  .deroule { margin-top: 1.2vw; }
  .deroule-tube { height: 5vw; }
  .deroule-etapes { font-size: clamp(15.5px, 1.15vw, 22px); gap: 1vw; }
  .deroule-etapes strong { font-size: clamp(19px, 1.6vw, 30px); }
  .prod-note { margin-top: 1vw; font-size: clamp(15.5px, 1.1vw, 21px); }
  .prod-action { margin-top: 1.2vw; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 2vw; }
  .prod-prix { font-size: clamp(28px, 2.6vw, 50px); }
  .prod-prix span { font-size: clamp(16px, 1.2vw, 23px); margin-left: .5em; }
  .prod-action .bouton-plein { grid-column: auto; }
  .prod-conditions { font-size: clamp(15.5px, 1.15vw, 22px); }
  .prod-conditions li { padding-block: .62vw; }
  .prod-conditions li:first-child { border-top: 0; padding-top: 0; }

  .contact { padding-bottom: 4.4vw; }
  .contact { --porte-w: calc(var(--bord) + 8vw); }
  .contact-rang { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 4vw; align-items: start; padding-left: calc(var(--porte-w) - var(--bord) + 3vw); min-height: 22vw; }

  .contact h2 { font-size: clamp(26px, 2.5vw, 48px); }
  address { margin-top: 1vw; font-size: clamp(18px, 1.5vw, 29px); }
  .contact-liens { margin-top: 1.2vw; display: flex; flex-wrap: wrap; gap: .8vw; }
  .contact-liens .bouton { min-height: clamp(50px, 3.6vw, 68px); padding-inline: clamp(16px, 1.6vw, 30px); font-size: clamp(16px, 1.2vw, 23px); }
  .contact-mail { margin-top: .6vw; font-size: clamp(16px, 1.2vw, 23px); }
  .contact-horaires { grid-column: 2; }
  .contact-horaires h3 { font-size: clamp(18px, 1.55vw, 30px); }
  .jours li { font-size: clamp(16px, 1.2vw, 23px); padding-block: .5vw; }

  .pied { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0 3vw; padding-block: .6vw 1vw; font-size: clamp(14.5px, 1vw, 19px); }
  .reseaux { gap: 0 2vw; }
  .reseaux a { font-size: clamp(15px, 1.1vw, 21px); }
  .pied p { margin: 0; }
}
/* Le téléphone : la session passe par-dessus le bas du mur, juste sous le néon */
.session { scroll-margin-top: calc(24.4vw + 18px); }
@media (min-width: 701px) { .session { scroll-margin-top: calc(9.65vw + 18px); } }

/* Entre le téléphone et le grand écran, les textes gardent leur taille minimale : le rail cède de la place. */
@media (min-width: 701px) and (max-width: 1180px) {
  :root { --cols: minmax(0, 3fr) minmax(0, 2.2fr) minmax(0, 1.3fr) minmax(0, 1.7fr) minmax(0, .9fr); }
  .prod-action { grid-template-columns: minmax(0, 1fr); }
  .prod-prix span { white-space: nowrap; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  :root { transition: none; }
  .t-on, .curseur, .bouton, .ligne, .l-pastille, .lampe .objet-on-air-on { transition: none; }
}
