/* ═══════════════════════════════════════════════════════════
   LE SEUIL — l'épée dans le rocher.

   Rideau d'accueil, à la toute première arrivée sur le fief : on libère
   Excalibur en maintenant l'écran appuyé trois secondes, puis on entre.
   Palette forcée en nuit, même sous le thème clair : l'intro reste une
   forge nocturne. js/seuil.js pilote la jauge via la variable --p (0 → 1).
   ═══════════════════════════════════════════════════════════ */

/* pas de défilement tant que l'épreuve dure */
html[data-seuil="on"], html[data-seuil="on"] body { overflow: hidden; }

/* masqué d'emblée quand l'intro ne doit pas jouer (posé dans le <head>) */
html[data-seuil-skip] #seuil { display: none; }

#seuil {
  --p: 0;                       /* progression du tirage (0 → 1), posée par js/seuil.js */
  --s-fond:   #0b1730;
  --s-fond2:  #050a16;
  --s-or:     #FFB703;
  --s-fer:    #F1FAEE;
  --s-sang:   #E63946;
  --s-pierre: #2a2118;
  --s-pierre2:#4a3a24;

  position: fixed;
  inset: 0;
  z-index: 450;                 /* au-dessus de la herse (400), sous la dague (500) */
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: clamp(1.4rem, 4vh, 2.6rem);
  padding: clamp(1.2rem, 5vh, 3rem);
  color: var(--s-fer);
  background:
    radial-gradient(120% 90% at 50% 42%, rgba(255,183,3,.10), transparent 55%),
    radial-gradient(140% 120% at 50% 120%, var(--s-fond), var(--s-fond2) 70%);
  overflow: hidden;
  user-select: none;
  -webkit-user-select: none;
  -webkit-tap-highlight-color: transparent;
  transition: opacity .9s ease;
}
#seuil.seuil--parti { opacity: 0; pointer-events: none; }

/* grain discret pour ne pas laisser le fond trop plat */
#seuil::after {
  content: "";
  position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(circle at 50% 46%, transparent 60%, rgba(0,0,0,.55));
  mix-blend-mode: multiply;
}

/* ─────────────── la scène : rocher + épée ─────────────── */
.seuil-tirer {
  position: relative;
  -webkit-appearance: none; appearance: none;
  border: 0;
  background: transparent;
  color: inherit;
  cursor: grab;
  padding: 0;
  width: min(78vw, 340px);
  touch-action: none;                 /* le maintien ne défile pas la page */
  outline: none;
}
.seuil-tirer:active { cursor: grabbing; }
.seuil-tirer:focus-visible { outline: 2px solid var(--s-or); outline-offset: 14px; border-radius: 12px; }
.seuil-scene { width: 100%; height: auto; display: block; overflow: visible; }

/* halo derrière l'épée : s'intensifie à mesure qu'on tire */
.seuil-halo {
  transform-box: view-box;
  transform-origin: 130px 150px;
  opacity: calc(.25 + var(--p) * .75);
  transform: scale(calc(.85 + var(--p) * .5));
  transition: opacity .12s linear;
}

/* l'épée : elle monte hors du rocher, portée par --p */
.seuil-epee {
  transform: translateY(calc(var(--p) * -82px));
  transition: transform .1s linear;
}
/* respiration d'attente : seulement avant le premier contact, pour ne pas
   court-circuiter la remontée pilotée par --p ensuite */
#seuil:not([data-tire]) .seuil-epee { animation: seuil-bob 3.4s ease-in-out infinite; }
@keyframes seuil-bob {
  0%, 100% { transform: translateY(0); }
  50%      { transform: translateY(-4px); }
}

.seuil-lame   { fill: url(#seuil-acier); stroke: rgba(255,255,255,.35); stroke-width: .6; }
.seuil-fuller { stroke: rgba(13,26,51,.6); stroke-width: 2; }
.seuil-garde, .seuil-pommeau { fill: var(--s-or); stroke: #6b4a05; stroke-width: 1; }
.seuil-gemme  { fill: var(--s-sang); }
.seuil-grip   { fill: #3a2a16; stroke: #6b4a05; stroke-width: 1; }
.seuil-pierre  { fill: var(--s-pierre); stroke: #120c06; stroke-width: 1.5; }
.seuil-pierre2 { fill: var(--s-pierre2); opacity: .5; }
.seuil-fente   { fill: #050a16; }

/* étincelles à l'instant de la délivrance */
.seuil-eclat { opacity: 0; transform-box: view-box; transform-origin: 130px 205px; }
#seuil[data-etat="ouvert"] .seuil-eclat {
  animation: seuil-eclat .5s ease-out forwards;
}
@keyframes seuil-eclat {
  0%   { opacity: 0; transform: scale(.2); }
  40%  { opacity: 1; }
  100% { opacity: 0; transform: scale(1.9); }
}
#seuil[data-etat="ouvert"] .seuil-halo { opacity: 1; transform: scale(1.8); transition: transform .5s ease-out, opacity .5s ease-out; }

/* ─────────────── consigne + jauge ─────────────── */
.seuil-consigne {
  margin: 0;
  text-align: center;
  font-family: var(--blackletter, 'Pirata One', serif);
  font-weight: 400;
  font-size: clamp(1.3rem, 3.6vw, 2rem);
  color: var(--s-fer);
  letter-spacing: .02em;
  text-shadow: 0 2px 20px rgba(0,0,0,.6);
}
.seuil-consigne small {
  display: block;
  margin-top: .5rem;
  font-family: 'Inter', system-ui, sans-serif;
  font-weight: 500;
  font-size: .62rem;
  letter-spacing: .32em;
  text-transform: uppercase;
  color: var(--s-or);
  opacity: .85;
}
#seuil[data-etat="ouvert"] .seuil-consigne { opacity: 0; transition: opacity .3s ease; }

.seuil-jauge {
  width: min(70vw, 300px);
  height: 4px;
  border-radius: 999px;
  background: rgba(241,250,238,.14);
  overflow: hidden;
}
.seuil-jauge-fill {
  display: block;
  height: 100%;
  width: calc(var(--p) * 100%);
  background: linear-gradient(90deg, var(--s-or), #ffe08a);
  box-shadow: 0 0 12px rgba(255,183,3,.7);
  transition: width .08s linear;
}

/* ─────────────── passer l'intro ─────────────── */
.seuil-passer {
  position: absolute;
  bottom: clamp(1.1rem, 4vh, 2.2rem);
  right: clamp(1.1rem, 4vw, 2.2rem);
  -webkit-appearance: none; appearance: none;
  border: 1px solid rgba(241,250,238,.28);
  background: rgba(5,10,22,.4);
  color: rgba(241,250,238,.75);
  font-family: 'Inter', system-ui, sans-serif;
  font-size: .72rem;
  font-weight: 600;
  letter-spacing: .14em;
  text-transform: uppercase;
  padding: .7em 1.2em;
  border-radius: 999px;
  cursor: pointer;
  transition: color .25s, border-color .25s, background .25s, transform .25s;
}
.seuil-passer:hover,
.seuil-passer:focus-visible {
  color: var(--s-fond2);
  background: var(--s-or);
  border-color: var(--s-or);
  transform: translateY(-2px);
  outline: none;
}

/* ─────────────── mouvement réduit : aucun rocher ───────────────
   (js/seuil.js retire déjà le seuil ; ce filet couvre le cas sans JS
    des préférences système.) */
@media (prefers-reduced-motion: reduce) {
  #seuil { transition: none; }
  .seuil-epee, #seuil:not([data-tire]) .seuil-epee { animation: none; }
}
