/* RUSH TABLE G v5 — lieux illustrés (photos « cartoon » animées).
   Tout est décoratif (pointer-events: none), transform/opacity seulement; coupé en « animations réduites ». */
.lph { position: absolute; inset: 0; overflow: hidden; pointer-events: none; border-radius: inherit; background: #1d1d20; z-index: 0; }
.lph .kb { position: absolute; left: 0; width: 100%; aspect-ratio: 3 / 4; top: 50%; transform: translateY(calc(var(--fy, .5) * -100%)); }
.lph .kb > * { pointer-events: none; }
.lph picture, .lph img { position: absolute; inset: 0; width: 100%; height: 100%; display: block; object-fit: cover; user-select: none; -webkit-user-drag: none; }
.lph i, .lph b { position: absolute; display: block; }
/* continuité des boucles malgré les re-rendus du plateau (--ph posé sur .board) */
.lph .kb, .lph i { animation-delay: calc(var(--ph, 0) * -1s + var(--d, 0s)); animation-iteration-count: infinite; }
/* Ken Burns : dérive lente de tout le cadre (image + effets) */
.lph .kb { animation: kb 18s ease-in-out infinite alternate; transform-origin: calc(var(--fx, .5) * 100%) calc(var(--fy, .5) * 100%); }
@keyframes kb { from { transform: translateY(calc(var(--fy, .5) * -100%)) scale(1.05) translateX(-1.6%); } to { transform: translateY(calc(var(--fy, .5) * -100% - 1.2%)) scale(1.14) translateX(1.6%); } }
.lph.k-detail .kb { animation-duration: 22s; }
.lph .shade { position: absolute; inset: 0; }
/* grande vue : cadre complet (pas de recadrage par le focus) */
.lph.k-detail .kb { top: 0; transform: none; animation-name: kbd; transform-origin: calc(var(--fx, .5) * 100%) calc(var(--fy, .5) * 100%); }
@keyframes kbd { from { transform: scale(1.03) translate(-1.2%, .6%); } to { transform: scale(1.11) translate(1.2%, -1%); } }

/* ---------- Tuile du plateau ---------- */
.loc.photo { background: #1d1d20; color: #fff; border-color: rgba(212,175,55,.9); }
.loc.photo > :not(.lph) { position: relative; z-index: 2; }
.loc.photo .tot { position: absolute; }
.loc.photo::before { z-index: 3; }
.loc.photo .lph .shade { background: linear-gradient(rgba(29,15,19,.42), rgba(29,15,19,.08) 20%, rgba(29,15,19,.42) 40%, rgba(29,15,19,.66) 72%, rgba(29,15,19,.52)); }
.loc.photo .li { font-size: 15px; filter: drop-shadow(0 1px 2px rgba(0,0,0,.8)); }
.loc.photo .ln { color: #fff3c4; text-shadow: 0 1px 0 #000, 0 0 6px rgba(0,0,0,.95), 0 0 2px #000; }
.loc.photo .le { color: #fbf3e6; text-shadow: 0 1px 0 #000, 0 0 5px rgba(0,0,0,.95); font-weight: 600; }
.loc.photo .tot { box-shadow: 0 1px 4px rgba(0,0,0,.6); }

/* ---------- Toilette : porte qui « respire », lumière sous la porte, bulles ---------- */
.s-toilette .door { transform-origin: 96% 50%; animation: doorb 6.5s ease-in-out infinite; box-shadow: 0 0 0 rgba(0,0,0,0); }
@keyframes doorb { 0%, 62%, 100% { transform: none; filter: none; } 70% { transform: perspective(300px) rotateY(-2.4deg) scaleX(.988); filter: brightness(1.06); } 80% { transform: perspective(300px) rotateY(.6deg); } 88% { transform: none; } }
.s-toilette .slit { background: linear-gradient(90deg, transparent, rgba(255,226,140,.95) 12%, rgba(255,246,200,1) 50%, rgba(255,226,140,.95) 88%, transparent); mix-blend-mode: screen; border-radius: 3px; filter: blur(.6px); animation: slit 4.2s steps(1, end) infinite; }
.s-toilette .spill { background: radial-gradient(60% 50% at 50% 70%, rgba(255,214,120,.55), transparent 75%); mix-blend-mode: screen; animation: slit2 4.2s ease-in-out infinite; }
@keyframes slit { 0%, 100% { opacity: .9; } 8% { opacity: .35; } 10% { opacity: 1; } 13% { opacity: .5; } 15% { opacity: .95; } 55% { opacity: .8; } 57% { opacity: .2; } 59% { opacity: .9; } }
@keyframes slit2 { 0%, 100% { opacity: .75; } 9% { opacity: .2; } 14% { opacity: .85; } 57% { opacity: .1; } 60% { opacity: .7; } }
.s-toilette .bub { --s: 1; bottom: 4%; width: calc(9px * var(--s)); height: calc(9px * var(--s)); border-radius: 50%; border: 1px solid rgba(205,238,255,.8); box-shadow: 0 0 5px rgba(165,216,255,.5); background: radial-gradient(circle at 32% 28%, rgba(255,255,255,.95) 0 14%, rgba(205,238,255,.06) 40%, rgba(205,238,255,.2)); animation: lbub 6.4s ease-in infinite; }
.k-detail.s-toilette .bub { width: calc(16px * var(--s)); height: calc(16px * var(--s)); }
@keyframes lbub { 0% { transform: translate(0, 0) scale(.4); opacity: 0; } 10% { opacity: .95; } 50% { transform: translate(6px, -120%) scale(1); } 80% { opacity: .8; } 100% { transform: translate(-4px, -900%) scale(1.15); opacity: 0; } }
.k-detail.s-toilette .bub { animation-name: lbubd; }
@keyframes lbubd { 0% { transform: translate(0, 0) scale(.4); opacity: 0; } 10% { opacity: .95; } 100% { transform: translate(-8px, -1500%) scale(1.15); opacity: 0; } }

/* ---------- Coin fumeur : nuages, volutes de fumée, feuilles au vent ---------- */
.s-fumeur .sky { overflow: hidden; }
.s-fumeur .cloud { --s: 1; top: 12%; left: -40%; width: calc(46% * var(--s)); height: calc(38% * var(--s)); border-radius: 50%; background: radial-gradient(closest-side, rgba(255,250,240,.75), rgba(255,250,240,.25) 60%, transparent); filter: blur(1px); animation: cloud 26s linear infinite; }
@keyframes cloud { from { transform: translateX(0); } to { transform: translateX(330%); } }
.s-fumeur .smk { width: 0; height: 0; }
.s-fumeur .smk i { left: -14px; top: -14px; width: 28px; height: 28px; border-radius: 50%; background: radial-gradient(closest-side, rgba(232,228,226,.7), rgba(232,228,226,.22) 60%, transparent); animation: wisp 4.8s ease-out infinite; }
.k-detail.s-fumeur .smk i { left: -30px; top: -30px; width: 60px; height: 60px; }
@keyframes wisp { 0% { transform: translate(0, 0) scale(.35); opacity: 0; } 15% { opacity: .95; } 60% { transform: translate(14px, -170%) scale(1.4) rotate(20deg); opacity: .6; } 100% { transform: translate(-6px, -330%) scale(2.3) rotate(40deg); opacity: 0; } }
.s-fumeur .lvs { overflow: visible; }
.s-fumeur .lvs i { --s: 1; left: -6%; width: calc(8px * var(--s)); height: calc(5px * var(--s)); border-radius: 0 80% 0 80%; background: linear-gradient(135deg, #e0a43a, #9b5a1c); box-shadow: 0 1px 1px rgba(0,0,0,.35); animation: leaf 7s cubic-bezier(.45,.1,.6,.9) infinite; opacity: 0; }
.k-detail.s-fumeur .lvs i { width: calc(16px * var(--s)); height: calc(10px * var(--s)); }
.s-fumeur .lvs i:nth-child(2) { background: linear-gradient(135deg, #b9c24a, #6f7a1f); }
@keyframes leaf { 0% { transform: translate(0, 0) rotate(0); opacity: 0; } 8% { opacity: 1; } 30% { transform: translate(380%, -60%) rotate(160deg); } 55% { transform: translate(700%, 40%) rotate(320deg); } 80% { opacity: 1; } 100% { transform: translate(1150%, -30%) rotate(560deg); opacity: 0; } }
.k-detail.s-fumeur .lvs i { animation-name: leafd; }
@keyframes leafd { 0% { transform: translate(0, 0) rotate(0); opacity: 0; } 8% { opacity: 1; } 30% { transform: translate(600%, -120%) rotate(160deg); } 55% { transform: translate(1100%, 80%) rotate(320deg); } 80% { opacity: 1; } 100% { transform: translate(1900%, -60%) rotate(560deg); opacity: 0; } }

/* ---------- Congélateur : givre qui gagne les bords, brume au sol, ampoule qui grésille ---------- */
.s-congel .frost { inset: 0; background: radial-gradient(120% 95% at 50% 50%, transparent 58%, rgba(214,238,255,.55) 82%, rgba(240,250,255,.85)); mix-blend-mode: screen; animation: frost 9s ease-in-out infinite alternate; transform-origin: 50% 50%; }
.s-congel .frost.f2 { background: radial-gradient(1.5px 1.5px at 8% 20%, #fff, transparent), radial-gradient(2px 2px at 92% 34%, #fff, transparent), radial-gradient(1.5px 1.5px at 6% 70%, #fff, transparent), radial-gradient(2px 2px at 94% 82%, #fff, transparent), radial-gradient(1.5px 1.5px at 20% 4%, #fff, transparent), radial-gradient(1.5px 1.5px at 80% 96%, #fff, transparent), repeating-conic-gradient(from 0deg at 0 0, rgba(230,245,255,.0) 0 7deg, rgba(230,245,255,.22) 7deg 9deg), repeating-conic-gradient(from 0deg at 100% 100%, rgba(230,245,255,0) 0 7deg, rgba(230,245,255,.22) 7deg 9deg); -webkit-mask: radial-gradient(120% 100% at 50% 50%, transparent 62%, #000 86%); mask: radial-gradient(120% 100% at 50% 50%, transparent 62%, #000 86%); animation: frost2 9s ease-in-out infinite alternate; }
@keyframes frost { from { transform: scale(1.12); opacity: .45; } to { transform: scale(1); opacity: 1; } }
@keyframes frost2 { from { transform: scale(1.1); opacity: .3; } to { transform: scale(1); opacity: 1; } }
.s-congel .bulb { width: 46%; aspect-ratio: 1; transform: translate(-50%, -50%); border-radius: 50%; background: radial-gradient(closest-side, rgba(255,250,225,.95), rgba(255,236,170,.45) 35%, transparent 72%); mix-blend-mode: screen; animation: bulb 5.5s steps(1, end) infinite; }
.s-congel .flick { inset: 0; background: rgba(10,16,30,.4); animation: flick 5.5s steps(1, end) infinite; opacity: 0; }
@keyframes bulb { 0%, 100% { opacity: 1; } 40% { opacity: .25; } 42% { opacity: .95; } 44% { opacity: .1; } 47% { opacity: 1; } 80% { opacity: .55; } 81% { opacity: 1; } }
@keyframes flick { 0%, 100% { opacity: 0; } 40% { opacity: .65; } 42% { opacity: .05; } 44% { opacity: .8; } 47% { opacity: 0; } 80% { opacity: .35; } 81% { opacity: 0; } }
.s-congel .mist { overflow: visible; }
.s-congel .mist i { left: -30%; top: 15%; width: 160%; height: 70%; border-radius: 50%; background: radial-gradient(closest-side, rgba(230,244,255,.6), rgba(230,244,255,.18) 60%, transparent); filter: blur(2px); animation: lmist 8s ease-in-out infinite alternate; }
@keyframes lmist { from { transform: translateX(-14%) scaleY(.85); opacity: .55; } to { transform: translateX(14%) scaleY(1.1); opacity: 1; } }

/* ---------- Carte révélée (retournement au centre puis vers la tuile) ---------- */
.lrev { position: fixed; inset: 0; z-index: 60; pointer-events: none; display: grid; place-items: start center; padding-top: calc(23dvh + 84px); perspective: 900px; }  /* sous la bannière « Tour N » (top 23%) */
.lrev .lcard { width: min(58vw, 240px, calc((77dvh - 100px) * .75)); aspect-ratio: 3 / 4; transform-style: preserve-3d; }
.lrev .lface { position: absolute; inset: 0; border-radius: 16px; overflow: hidden; border: 2px solid #e2b13c; box-shadow: 0 0 0 4px rgba(74,20,32,.9), 0 0 40px rgba(255,211,107,.75), 0 18px 40px rgba(0,0,0,.6); background: #1d1d20; }
.lrev .lface::before { content: ""; position: absolute; left: 0; right: 0; top: 0; height: 8px; z-index: 3; background: var(--wine2, #7a1d2e) var(--meander-g) repeat-x center / 14px 8px; }
.lrev .lph .shade { background: linear-gradient(transparent 50%, rgba(29,15,19,.6) 72%, rgba(29,15,19,.92)); }
.lrev .lcap { position: absolute; left: 0; right: 0; bottom: 0; z-index: 2; padding: 10px 12px 12px; text-align: center; color: #fff; }
.lrev .lcap b { display: block; font-family: var(--serif); font-size: 17px; color: #fff3c4; text-shadow: 0 2px 0 #000, 0 0 10px rgba(0,0,0,.9); }
.lrev .lcap small { display: block; margin-top: 3px; font-size: 11.5px; line-height: 1.2; text-shadow: 0 1px 0 #000, 0 0 6px #000; }
.lrev .lcard.go { animation: lflip 2.1s cubic-bezier(.3,.8,.3,1) both; }
@keyframes lflip {
  0% { transform: rotateY(180deg) scale(.55); opacity: 0; filter: brightness(2.2); }
  8% { opacity: 1; }
  26% { transform: rotateY(-8deg) scale(1.04); filter: brightness(1.25); }
  34% { transform: rotateY(0) scale(1); filter: none; }
  72% { transform: rotateY(0) scale(1); opacity: 1; }
  100% { transform: translate(var(--tx, 0), var(--ty, 0)) scale(var(--sc, .4)); opacity: 0; }
}
.lrev .lface::after { content: ""; position: absolute; inset: 0; z-index: 4; background: linear-gradient(110deg, transparent 35%, rgba(255,255,255,.45) 50%, transparent 65%); transform: translateX(-120%); animation: lshine 2.1s ease both; }
@keyframes lshine { 0%, 24% { transform: translateX(-120%); } 52%, 100% { transform: translateX(120%); } }

/* ---------- Fiche du lieu (popup) ---------- */
.lpop { position: relative; height: min(46dvh, 400px); margin: -4px -4px 12px; border-radius: 14px; overflow: hidden; border: 2px solid #d4af37; box-shadow: 0 0 0 3px rgba(74,20,32,.85), 0 8px 20px rgba(0,0,0,.35); }
.lpop .lph .kb { top: 50%; }
.lpop .lph.k-detail .kb { animation-name: kbp; }
@keyframes kbp { from { transform: translateY(calc(var(--fy, .5) * -100%)) scale(1.03) translateX(-1.2%); } to { transform: translateY(calc(var(--fy, .5) * -100% - 1%)) scale(1.1) translateX(1.2%); } }
.lpop .lph .shade { background: linear-gradient(transparent 60%, rgba(29,15,19,.55)); }
.lthumb { display: inline-block; width: 30px; height: 40px; border-radius: 6px; overflow: hidden; vertical-align: middle; margin-right: 6px; border: 1px solid #d4af37; position: relative; }
.lthumb img { width: 100%; height: 100%; object-fit: cover; display: block; }


/* ---------- Buffet froid : brume froide ---------- */
.s-buffet_froid .chill { overflow: visible; pointer-events: none; }
.s-buffet_froid .chill i { --s: 1; left: 10%; bottom: 0; width: 40%; height: 90%; border-radius: 50%;
  background: radial-gradient(closest-side, rgba(200,230,255,.55), rgba(200,230,255,.15) 55%, transparent);
  filter: blur(2px); animation: chill 5.5s ease-in-out infinite alternate; opacity: .85; transform: scale(var(--s)); }
.k-detail.s-buffet_froid .chill i { filter: blur(3px); }
@keyframes chill { from { transform: translateY(8%) scale(var(--s)); opacity: .45; } to { transform: translateY(-18%) scale(calc(var(--s) * 1.15)); opacity: .9; } }

/* ---------- Buffet chaud : mirage + vapeur ---------- */
.s-buffet_chaud .heat { overflow: visible; pointer-events: none; }
.s-buffet_chaud .shim { inset: 0; background: linear-gradient(180deg, transparent 30%, rgba(255,180,80,.18), transparent 80%);
  mix-blend-mode: screen; animation: shim 2.8s ease-in-out infinite alternate; }
.s-buffet_chaud .steam { --s: 1; left: 40%; bottom: 10%; width: 28%; height: 70%; border-radius: 50%;
  background: radial-gradient(closest-side, rgba(255,240,220,.55), rgba(255,200,140,.12) 55%, transparent);
  filter: blur(2px); animation: steam 4.6s ease-out infinite; opacity: 0; transform: scale(var(--s)); }
.k-detail.s-buffet_chaud .steam { filter: blur(3px); }
@keyframes shim { from { transform: translateX(-1.5%) skewX(-1deg); opacity: .55; } to { transform: translateX(1.5%) skewX(1deg); opacity: 1; } }
@keyframes steam { 0% { transform: translateY(10%) scale(var(--s)); opacity: 0; } 25% { opacity: .7; } 100% { transform: translateY(-70%) scale(calc(var(--s) * 1.25)); opacity: 0; } }

/* ---------- La ligne / Cuisine : lueur du four + brume de graisse ---------- */
.s-ligne .oven, .s-cuisine .oven { border-radius: 8px; background: radial-gradient(closest-side, rgba(255,160,60,.85), rgba(255,90,20,.35) 45%, transparent 72%);
  mix-blend-mode: screen; animation: oven 3.8s ease-in-out infinite alternate; pointer-events: none; }
.s-ligne .haze, .s-cuisine .haze { overflow: visible; pointer-events: none; }
.s-ligne .haze i, .s-cuisine .haze i { left: -10%; top: 10%; width: 120%; height: 80%; border-radius: 50%;
  background: radial-gradient(closest-side, rgba(220,200,160,.4), rgba(180,160,120,.12) 55%, transparent);
  filter: blur(2.5px); animation: haze 7s ease-in-out infinite alternate; }
@keyframes oven { from { opacity: .45; transform: scale(.92); } to { opacity: 1; transform: scale(1.08); } }
@keyframes haze { from { transform: translateY(6%) translateX(-2%); opacity: .35; } to { transform: translateY(-10%) translateX(3%); opacity: .75; } }

/* ---------- Stationnement : flare + feuilles ---------- */
.s-stationnement .sun { width: 55%; aspect-ratio: 1; transform: translate(-50%, -50%); border-radius: 50%;
  background: radial-gradient(closest-side, rgba(255,250,210,.95), rgba(255,220,120,.45) 35%, transparent 70%);
  mix-blend-mode: screen; animation: sunflare 6s ease-in-out infinite alternate; pointer-events: none; }
.s-stationnement .lvs.park i { --s: 1; left: -8%; width: calc(9px * var(--s)); height: calc(6px * var(--s)); border-radius: 0 80% 0 80%;
  background: linear-gradient(135deg, #d4a03a, #8a5a18); box-shadow: 0 1px 1px rgba(0,0,0,.35);
  animation: leaf 8.5s cubic-bezier(.45,.1,.6,.9) infinite; opacity: 0; }
.k-detail.s-stationnement .lvs.park i { width: calc(18px * var(--s)); height: calc(11px * var(--s)); animation-name: leafd; }
.s-stationnement .lvs.park i:nth-child(2) { background: linear-gradient(135deg, #c45a2a, #7a3010); }
.s-stationnement .lvs.park i:nth-child(3) { background: linear-gradient(135deg, #b9c24a, #6f7a1f); }
@keyframes sunflare { from { opacity: .55; transform: translate(-50%, -50%) scale(.9); } to { opacity: 1; transform: translate(-50%, -50%) scale(1.15); } }

/* ---------- La passe : lampes chauffantes + vapeur ---------- */
.s-passe .lamps { pointer-events: none; }
.s-passe .lamps i { --s: 1; top: 10%; left: 10%; width: 22%; height: 70%; border-radius: 50%;
  background: radial-gradient(closest-side, rgba(255,200,100,.7), rgba(255,140,40,.25) 50%, transparent);
  mix-blend-mode: screen; animation: lamp 3.2s ease-in-out infinite alternate; transform: scale(var(--s)); }
.s-passe .pst { width: 0; height: 0; pointer-events: none; }
.s-passe .pst i { --s: 1; left: -16px; top: -16px; width: 32px; height: 32px; border-radius: 50%;
  background: radial-gradient(closest-side, rgba(255,245,230,.7), rgba(255,245,230,.2) 55%, transparent);
  animation: wisp 5.2s ease-out infinite; }
.k-detail.s-passe .pst i { left: -28px; top: -28px; width: 56px; height: 56px; }
@keyframes lamp { from { opacity: .4; } to { opacity: 1; } }

/* ---------- Salle (hors pool) : étincelles du lustre ---------- */
.s-salle .spark { pointer-events: none; }
.s-salle .spark i { --s: 1; left: 45%; top: 40%; width: calc(5px * var(--s)); height: calc(5px * var(--s)); border-radius: 50%;
  background: radial-gradient(closest-side, #fffce8, rgba(255,230,160,.6) 40%, transparent);
  box-shadow: 0 0 6px rgba(255,230,160,.8); animation: spark 2.8s ease-in-out infinite; opacity: 0; }
.k-detail.s-salle .spark i { width: calc(9px * var(--s)); height: calc(9px * var(--s)); }
@keyframes spark { 0%, 100% { opacity: 0; transform: scale(.4); } 40% { opacity: 1; transform: scale(1.2); } 70% { opacity: .5; } }

/* ---------- Animations réduites ---------- */
body.reduce .lph .kb, body.reduce .lph i, body.reduce .lrev .lcard, body.reduce .lrev .lface::after { animation: none !important; }
body.reduce .s-toilette .bub, body.reduce .s-fumeur .smk, body.reduce .s-fumeur .lvs, body.reduce .s-congel .flick, body.reduce .s-buffet_froid .chill, body.reduce .s-buffet_chaud .heat, body.reduce .s-ligne .haze, body.reduce .s-ligne .oven, body.reduce .s-cuisine .haze, body.reduce .s-cuisine .oven, body.reduce .s-stationnement .lvs, body.reduce .s-stationnement .sun, body.reduce .s-passe .pst, body.reduce .s-passe .lamps, body.reduce .s-salle .spark { display: none; }
body.reduce .lph .kb { transform: translateY(calc(var(--fy, .5) * -100%)) scale(1.04); }
body.reduce .lph.k-detail .kb { transform: scale(1.02); }
body.reduce .lpop .lph.k-detail .kb { transform: translateY(calc(var(--fy, .5) * -100%)) scale(1.02); }
body.reduce .lrev { display: none; }
@media (prefers-reduced-motion: reduce) { .lph .kb, .lph i { animation: none !important; } .lrev { display: none; } }
/* (placée en dernier, plus spécifique : les raccourcis « animation: » ci-dessus ne doivent pas annuler la phase) */
.lph.lph.lph .kb, .lph.lph.lph i { animation-delay: calc(var(--ph, 0) * -1s + var(--d, 0s)); animation-iteration-count: infinite; }
.lph.lph.lph .kb { animation-delay: calc(var(--ph, 0) * -1s); animation-direction: alternate; }
