/* One lighting composition for native foregrounds. Never filter learning UI.
   Keep the actual storm-light impulse: chapter grading must not replace it. */
#gameScene{
 --stone-grade:calc(.94 + var(--world-blend,0)*.02 - var(--elite-blend,0)*.18);
 --actor-grade:calc(1.04 - var(--elite-blend,0)*.10);
 --world-saturation:calc(1.06 - var(--world-blend,0)*.04 - var(--elite-blend,0)*.08);
 --grove-warmth:calc(.14 * (1 - var(--world-blend,0)));
}
#gameScene .bridge-tile,#gameScene .bridge-support{filter:sepia(var(--grove-warmth)) saturate(var(--world-saturation)) contrast(1.08) brightness(calc((var(--stone-grade) + var(--storm-light,0)*.65)*var(--tile-shade,1)));}
/* Lane variety: mirrored plain plates and piers; fragments and floor line unchanged. */
#gameScene .bridge-tile[data-flip='true'] > img,#gameScene .bridge-support[data-flip='true'] > img{transform:scaleX(-1);}
/* Portal lighting already uses distance to the gate on its parent layer. */
#gameScene .portal-layer img{filter:none;}
#gameScene .character-sprite{filter:sepia(calc(var(--grove-warmth)*.35)) saturate(var(--world-saturation)) contrast(1.06) brightness(calc(var(--actor-grade) + var(--storm-light,0)*.65)) drop-shadow(0 2px 3px #08172090);}
#gameScene .team[data-victor='true'] .character-sprite{filter:saturate(var(--world-saturation)) brightness(var(--actor-grade)) drop-shadow(0 0 5px #f1ce8199);}
