/* Cinematic finish: grade native materials and light the existing geometry.
   The landscape stays continuous; no camera, learning or touch surface moves. */
#gameScene {
  --stone-grade:calc(.84 + var(--world-blend,0)*.06 - var(--elite-blend,0)*.18);
  --actor-grade:calc(1.09 - var(--elite-blend,0)*.07);
  --world-saturation:calc(1.07 - var(--world-blend,0)*.08 - var(--elite-blend,0)*.04);
  --grove-warmth:calc(.19 * (1 - var(--world-blend,0)));
}
#gameScene .landscape img {
  filter:saturate(.84) contrast(1.08) brightness(calc(.82 + var(--world-blend,0)*.06 - var(--elite-blend,0)*.06));
}
#gameScene .landscape::after {
  z-index:3;pointer-events:none;
  background:radial-gradient(ellipse at 30% 18%,transparent 25%,#04121e40 78%,#020b164d),
    linear-gradient(180deg,#040d1b38,transparent 26%,transparent 60%,#030e216b);
}
#gameScene .landscape[data-transition='active']::after {
  background:radial-gradient(ellipse at 30% 18%,transparent 25%,#04121e40 78%,#020b164d),
    linear-gradient(180deg,#040d1b38,transparent 26%,transparent 60%,#030e216b),
    rgba(176,218,255,var(--world-flash,0));
}
/* Broad light in the world, detailed contrast at the runner. */
#gameScene .ambient-world::before {
  inset:-18% -8%;
  background:linear-gradient(112deg,transparent 7%,#fff2c512 13%,#ffebbc30 17%,transparent 23%,
    transparent 31%,#fff5d61c 36%,transparent 43%,transparent 52%,#ffe6b414 57%,transparent 63%);
  opacity:calc(.9 * (1 - var(--world-blend,0)));
  animation:none;
}
#gameScene .ambient-world::after {
  background:radial-gradient(ellipse at 16% 8%,#ffe6a838,transparent 56%),
    radial-gradient(ellipse at 80% 80%,#143d591f,transparent 64%);
  opacity:calc(1 - var(--world-blend,0));
}
#gameScene .mist-far {
  top:24%;height:34%;
  background:radial-gradient(ellipse at 28% 55%,#e0ddc438,transparent 58%),
    radial-gradient(ellipse at 83% 60%,#b0d9e330,transparent 52%);
}
#gameScene .mist-near {
  bottom:3%;height:36%;
  background:radial-gradient(ellipse at 18% 70%,#c3d6d322,transparent 56%),
    radial-gradient(ellipse at 72% 75%,#b9d5e632,transparent 50%);
}
#gameScene[data-scene='sky-ruins'] .mist-far {
  background:radial-gradient(ellipse at 36% 70%,#ebeffb60,transparent 58%),
    radial-gradient(ellipse at 80% 50%,#d0e2f740,transparent 55%);
}
#gameScene[data-scene='storm-sanctum'] .mist-far {
  background:radial-gradient(ellipse at 32% 55%,#7d95b73b,transparent 57%),
    radial-gradient(ellipse at 77% 60%,#a7b6d035,transparent 54%);
}
/* Shadows follow actual alpha; broken and collapsed plates stay absent. */
#gameScene .bridge-tile {
  filter:sepia(var(--grove-warmth)) saturate(var(--world-saturation)) contrast(1.16)
    brightness(calc((var(--stone-grade) + var(--storm-light,0)*.65)*var(--tile-shade,1)))
    drop-shadow(0 4px 3px #020b16a8);
}
#gameScene .bridge-support {
  filter:sepia(var(--grove-warmth)) saturate(var(--world-saturation)) contrast(1.18)
    brightness(calc(var(--stone-grade)*.86 + var(--storm-light,0)*.65))
    drop-shadow(-3px 4px 4px #020b1680);
}
#gameScene .character-sprite {
  filter:sepia(calc(var(--grove-warmth)*.25)) saturate(var(--world-saturation)) contrast(1.1)
    brightness(calc(var(--actor-grade) + var(--storm-light,0)*.65))
    drop-shadow(0 2px 2px #020b16cc);
}
.world-figure::before {filter:blur(2px);background:#020911d9;}
.ground-seal {background:radial-gradient(ellipse,#d8f5ff22,transparent 65%);}
/* Gate light touches the floor; the registered native silhouette is preserved. */
.portal-rear:not([data-failed='true'])::before {
  width:42%;height:9%;background:radial-gradient(ellipse,#020b16ee,#020b1680 45%,transparent 72%);
  filter:blur(2px);
}
.portal-rear::after {
  width:78%;height:13%;
  background:radial-gradient(ellipse,#e0fbff88,var(--accent) 25%,transparent 70%);
  opacity:calc(.08 + var(--portal-charge,.28)*.4);
}
.portal-front:not([data-failed='true'])::before {
  content:'';position:absolute;inset:8% 22% 8%;z-index:-1;pointer-events:none;
  background:radial-gradient(ellipse,var(--accent),transparent 68%);
  filter:blur(8px);opacity:calc(.08 + var(--portal-charge,.28)*.5);
}
.team[data-stage='3'] .portal-front:not([data-failed='true'])::before {
  background:radial-gradient(ellipse,#ffe1a3,transparent 68%);
}
.portal-runes {filter:brightness(2) drop-shadow(0 0 3px var(--accent));}
.team[data-portal-phase='enter'] .entry-portal .portal-runes {
  filter:brightness(2.6) drop-shadow(0 0 7px var(--accent));
}
/* These brighter accents exist only for the already committed action. */
.world-figure .magic-trail {filter:drop-shadow(0 0 4px var(--accent));}
.hex-shot {filter:drop-shadow(0 0 3px #f2dcff) drop-shadow(0 0 7px #a76be9);}
.hex-burst i {filter:drop-shadow(0 0 5px #d0acff);}
.hex-burst[data-blocked='true'] i {filter:hue-rotate(290deg) saturate(.4) drop-shadow(0 0 5px #caefff);}
.ward[data-phase='raise'] img,.ward[data-phase='impact'] img {
  filter:brightness(calc(1.08 + var(--ward-impact,0))) drop-shadow(0 0 5px var(--accent));
}
/* The tablet remains the only stone reading surface. */
.team[data-input-open='true'] .prompt {
  filter:drop-shadow(0 5px 6px #020b16b0) drop-shadow(0 0 3px var(--accent));
}
.prompt::after {
  left:40px;right:76px;bottom:13px;
  background:linear-gradient(90deg,transparent,var(--accent) 10%,#e1dab4 48%,transparent 90%);
}
.team[data-input-open='true'] .prompt::after {opacity:.8;}
.base-form {text-shadow:0 2px 2px #020b16,0 0 12px #020b1660;}
.team .team-mark {
  filter:saturate(1.18) contrast(1.1) drop-shadow(0 2px 2px #020b16)
    drop-shadow(0 0 calc(1px + var(--turn-pulse,0)*6px) var(--accent));
}
.team-title strong {text-shadow:0 2px 3px #020b16,0 0 9px #020b16;}
/* Tactile dark keycaps retain their original positions and hit targets. */
.key-row button,.team-b .key-row button {
  backdrop-filter:none;
  background:linear-gradient(155deg,#344449eb,#14252dec 62%,#091821f2);
  border-color:#c7b88999;
  box-shadow:inset 0 1px 0 #f4e7b94d,inset 0 -3px 0 #030d17b3,0 3px 5px #020b1660;
}
.key-row button::before {opacity:.1;}
.key-row .enter-key,.team-b .key-row .enter-key {
  background:linear-gradient(145deg,#344d55,#112a36 70%);
  border-color:var(--accent);box-shadow:inset 0 1px 0 #d0eef54d,inset 0 -3px 0 #030d17b3,0 0 8px #020b1680;
}
.key-row button:not(:disabled):active {
  background:linear-gradient(155deg,#49636b,#203943);
  box-shadow:inset 0 0 15px var(--accent);color:#fff;
}
.team .power-panel {
  background:linear-gradient(125deg,#182e36eb,#0a1b25e6 70%);
  border-color:#aa9c7280;
  box-shadow:inset 0 1px 0 #e8d5a133,inset 0 -2px 0 #020b1666,
    0 4px 10px #020b1680,0 0 calc(var(--ready-pulse,0)*18px) #f5d99480;
}
.charge-pips i:not(.filled) {opacity:.72;background:linear-gradient(125deg,#768386,#293a40 44%,#596a6c 48%,#17282f);}
.power-buttons button:disabled {opacity:.64;}
.power-panel[data-power] .power-buttons button {backdrop-filter:none;}
.answer-panel output {text-shadow:0 2px 2px #020b16,0 0 7px #020b16,1px 0 1px #020b16,-1px 0 1px #020b16;}
/* Camp polish is visual; the dim beacon still lights only through real progress. */
.setup-card {border-color:#bda67580;box-shadow:0 25px 100px #000c,inset 0 0 0 1px #eee2bd0d;}
.setup-journey {
  background-image:linear-gradient(180deg,#10212c12,#07151de0 80%,#06121b),url('../media/race-v2/grove-clean.png');
}
.setup-journey::before {
  content:'';position:absolute;inset:0;pointer-events:none;z-index:-1;
  background:linear-gradient(112deg,transparent 5%,#fff0c52b 19%,transparent 30%),
    radial-gradient(ellipse at 15% 0%,#e9d1a12b,transparent 60%);
}
.setup-journey h1 {color:#fff0ce;text-shadow:0 3px 3px #020b1666,0 10px 28px #020b1680;}
.setup-options {background:radial-gradient(ellipse at 45% 0%,#223640,#10232d 58%,#0a1b25);}
.faction-pair img {filter:saturate(1.15) contrast(1.08) drop-shadow(0 5px 5px #020b16);}
.form-choices button {background:linear-gradient(145deg,#243b44,#142a34);box-shadow:inset 0 1px 0 #d8d0ac14;}
.form-choices button[aria-pressed='true'] {background:linear-gradient(145deg,#414c43,#223a3d);box-shadow:inset 0 2px 0 #ddc587;}
.setup-options .start-button {background:linear-gradient(165deg,#f4e2b4,#d6b67c 70%,#b68e50);box-shadow:inset 0 1px 0 #fff6d6,0 4px 12px #020b1655;}
/* No new ambient animation, whole-screen flashes or persistent extra light. */
#gameScene[data-motion='reduced'] .portal-front::before {display:none;}
@media(prefers-reduced-transparency:reduce) {
  .key-row button,.team-b .key-row button {background:#142a34;}
  .team .power-panel {background:#10232d;}
}
