/* Registered 384px Blender layers, all anchored at the physical threshold. */
.portal-layer { position:absolute; left:94%; bottom:var(--baseline); width:calc(var(--sprite)*var(--portal-scale,1.08)); height:calc(var(--sprite)*var(--portal-scale,1.08)); transform:translate(-50%,15%); pointer-events:none; }
.portal-layer img { position:absolute; inset:0; width:100%; height:100%; }
.portal-rear { z-index:2; }
.portal-rear:not([data-failed='true'])::before {content:'';position:absolute;left:50%;top:85%;width:32%;height:8%;transform:translate(-50%,-50%);border-radius:50%;background:#101b1ddd;filter:blur(3px);z-index:-1;}
.portal-rear::after {content:'';position:absolute;left:50%;top:85%;width:44%;height:7%;transform:translate(-50%,-50%);background:radial-gradient(ellipse,var(--accent),transparent 68%);opacity:calc(var(--portal-charge,.36)*.32);pointer-events:none;}
.portal-front { z-index:4; }
.exit-portal { left:4%; }
.portal-membrane,.portal-runes { position:absolute; inset:0; background:var(--accent); mask-size:100% 100%; mask-repeat:no-repeat; }
.portal-membrane { mask-image:var(--portal-mask,none); opacity:calc(var(--portal-charge,.16)*.55); background:radial-gradient(ellipse,#e7faff 0%,var(--accent) 35%,#12273c 85%); }
.portal-runes { mask-image:var(--portal-runes,none); opacity:var(--portal-charge,.16); filter:brightness(1.8); }
.exit-portal .portal-membrane,.exit-portal .portal-runes { opacity:.65; }
.portal-rear[data-failed='true']::before { content:''; position:absolute; inset:13% 27% 9%; border:7px solid #69736a; border-radius:50%; background:radial-gradient(ellipse,#112b2aaa,var(--accent)); opacity:.8; }
.portal-front[data-failed='true']::after { content:''; position:absolute; inset:13% 27% 9%; border-right:7px solid #899080; border-radius:50%; }
.team > .hud,.team > .prompt,.team > .answer-panel,.team > .keyboard,.team > .power-panel { z-index:6; }
.landscape[data-transition='active'] { animation:none; transform:translateX(var(--world-shake,0px)); }
.landscape[data-transition='active']::after { background:linear-gradient(#08121738,transparent 25%,transparent 88%,#08121738),rgba(176,218,255,var(--world-flash,0)); }
/* Both worlds retain their geometry and damage slots throughout the blend. */
.world-material-base,.world-material-next {position:absolute;inset:0;width:100%;height:100%;pointer-events:none;}
.world-material-base {opacity:calc(1 - var(--world-blend,0));}
.world-material-next {opacity:var(--world-blend,0);}
[data-next-failed='true'] > .world-material-base,[data-base-failed='true'] > .world-material-next {opacity:1;}
.portal-layer img {z-index:0;}
.portal-membrane,.portal-runes {z-index:1;}
.portal-membrane {opacity:calc(.76 + var(--portal-charge,.36)*.18);background:#07192d;}
.portal-membrane::before,.portal-membrane::after {content:'';position:absolute;inset:var(--aperture-top,19%) var(--aperture-right,27%) var(--aperture-bottom,11%) var(--aperture-left,28%);border-radius:50%;background:repeating-conic-gradient(from var(--portal-flow,0deg),#092235 0deg,var(--accent) 35deg,#ecffff 55deg,#19435a 80deg,#07192d 130deg,#092235 180deg);filter:blur(2px);}
.portal-membrane::after {inset:var(--aperture-top,19%) var(--aperture-right,27%) var(--aperture-bottom,11%) var(--aperture-left,28%);background:radial-gradient(ellipse,#040e23 26%,#0d274de8 47%,#0b263d55 66%,transparent 75%);}
.portal-runes {filter:drop-shadow(0 0 3px var(--accent)) brightness(1.9);}
.team[data-portal-phase='enter'] .entry-portal .portal-membrane {filter:brightness(1.5);}
.exit-portal .portal-membrane {opacity:.86;}
.portal-rear[data-failed='true']::before {inset:7% 19% 13%;border-radius:46% 46% 5% 5%;border:8px solid #788b87;background:#10253a;}
.portal-front[data-failed='true']::after {inset:7% 19% 13%;border-radius:46% 46% 5% 5%;border-right:8px solid #afb8a6;}
/* The light front stays inside the world; input surfaces keep their contrast. */
.ambient-world::after {content:'';position:absolute;inset:-15% -20%;opacity:calc(var(--rift-sweep,0)*.48);background:linear-gradient(104deg,transparent calc(var(--rift-front,100%) - 18%),#b4dded66 calc(var(--rift-front,100%) - 8%),#eaffffbf var(--rift-front,100%),#bce9ef33 calc(var(--rift-front,100%) + 6%),transparent calc(var(--rift-front,100%) + 22%));}
#gameScene[data-motion='reduced'] .portal-membrane::before,#gameScene[data-motion='reduced'] .portal-membrane::after {display:none;}
/* Activation follows the edge of the physical gate; the opening stays side-on. */
.team[data-portal-phase='enter'] .entry-portal.portal-front,
.team[data-portal-phase='exit'] .exit-portal.portal-front {filter:drop-shadow(0 0 4px var(--accent));}
.portal-rear[data-failed='true']::before,.portal-front[data-failed='true']::after {
  inset:calc(var(--aperture-top,19%) - 5%) calc(var(--aperture-right,45%) - 3%) calc(var(--aperture-bottom,11%) - 4%) calc(var(--aperture-left,45%) - 3%);
  border-width:3px;
}
