.signal-wakeup{--wake-color:#a599f7;display:block;background:#000;isolation:isolate;color:#e7def8}
.wake-map,.wake-shade{position:absolute;inset:0;pointer-events:none}.wake-map{z-index:-3;overflow:hidden}.wake-map img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:51% 49%;transition:opacity 1.1s ease,filter 1.2s ease;opacity:0}.wake-map .wake-terrain{opacity:.12;filter:blur(5px) brightness(.45) saturate(.3)}
.wake-shade{z-index:-1;background:radial-gradient(ellipse at 50% 42%,rgba(0,0,0,.77),rgba(0,0,0,.28) 65%,rgba(0,0,0,.55)),linear-gradient(0deg,rgba(0,0,0,.86),transparent 35%,transparent 80%,rgba(0,0,0,.7))}
.wake-header,.wake-footer{position:absolute;left:clamp(1rem,4vw,4rem);right:clamp(1rem,4vw,4rem);display:flex;justify-content:space-between;align-items:center;gap:1rem;font:500 .875rem/1.5 ui-monospace,monospace;letter-spacing:.12em;color:var(--wake-color)}.wake-header{top:1.5rem}.wake-footer{bottom:1.3rem}.wake-footer>span{font-size:.75rem}.wake-footer button{background:transparent;border:0;color:#c4b9d9;padding:.65rem;cursor:pointer;font-size:.875rem}
.wake-center{position:absolute;inset:12% 1rem auto;display:flex;align-items:center;flex-direction:column;text-align:center}.wake-emblem{position:relative;width:clamp(180px,26vh,310px);aspect-ratio:1}.wake-logo{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;opacity:0;transition:opacity 1s ease,filter 1s ease;filter:drop-shadow(0 0 18px var(--wake-color))}.wake-logo-core{opacity:.9}.wake-halo{position:absolute;inset:-8%;border:1px solid var(--wake-color);border-radius:50%;opacity:.15;transition:opacity 1s;transform:scale(1)}
.wake-center h1{font:600 clamp(1.6rem,4vw,3.25rem)/1.2 ui-sans-serif,system-ui;letter-spacing:.22em;margin:1rem 0;color:var(--wake-color);transition:color 1s,text-shadow 1s,opacity 1s;text-shadow:0 0 25px color-mix(in srgb,var(--wake-color),transparent 75%)}#wake-status{font:500 1.05rem/1.5 ui-monospace,monospace;margin:.2rem 0;color:#ece0ff}#wake-detail{font:400 .875rem/1.6 ui-sans-serif,system-ui;color:#b9aed0;margin:.4rem 0;max-width:32rem}
.wake-dialogue{position:absolute;left:50%;bottom:5rem;transform:translateX(-50%) translateY(8px);width:min(620px,calc(100% - 2rem));opacity:0;visibility:hidden;transition:opacity .45s,transform .45s;padding:1.2rem 1.4rem;background:linear-gradient(110deg,rgba(12,7,24,.92),rgba(12,7,24,.65));border:1px solid color-mix(in srgb,var(--wake-color),transparent 72%);border-left:2px solid var(--wake-color);border-radius:2px}.wake-dialogue.visible{opacity:1;visibility:visible;transform:translateX(-50%)}.wake-dialogue small{font:.75rem/1.5 ui-monospace,monospace;letter-spacing:.2em;color:var(--wake-color)}#wake-thought{font:400 1rem/1.5 ui-sans-serif,system-ui;margin:.5rem 0 1rem;color:#e5d9f4}#wake-actions{display:flex;gap:.6rem;flex-wrap:wrap}#wake-actions button{flex:1;padding:.8rem 1rem;min-height:48px;background:rgba(36,21,66,.55);border:1px solid color-mix(in srgb,var(--wake-color),transparent 55%);color:#e8ddfa;font:500 .9rem/1.4 ui-sans-serif,system-ui;cursor:pointer;transition:background .2s,border-color .2s}#wake-actions button:hover{background:rgba(71,44,111,.65);border-color:var(--wake-color)}.signal-wakeup button:focus-visible{outline:2px solid var(--wake-color);outline-offset:4px}
.signal-wakeup[data-phase=null] .wake-logo-core{opacity:0}.signal-wakeup[data-phase=null] .wake-logo-null{opacity:.48;filter:brightness(.55)}.signal-wakeup[data-phase=null] .wake-terrain{opacity:.015;filter:blur(8px) brightness(.12)}.signal-wakeup[data-phase=null] h1{color:#685978;text-shadow:0 0 20px #000;opacity:.55;mask-image:linear-gradient(110deg,#000 8%,transparent 42%,#000 60%,transparent 95%)}.signal-wakeup.contact-received[data-phase=null] .wake-logo-null{opacity:.7;filter:brightness(.8)}
.signal-wakeup[data-phase=apex] .wake-logo-core{opacity:0}.signal-wakeup[data-phase=apex] .wake-logo-apex{opacity:1}.signal-wakeup[data-phase=apex] .wake-terrain{opacity:.28;filter:sepia(1) saturate(.8) brightness(.65)}.signal-wakeup[data-phase=apex] *{animation-play-state:paused!important}
.wake-map .wake-anchor{clip-path:polygon(4% 27%,26% 20%,34% 45%,32% 63%,13% 76%,3% 59%)}.wake-map .wake-flow{clip-path:polygon(32% 59%,65% 55%,79% 71%,67% 93%,35% 92%,24% 75%)}.wake-map .wake-shift{clip-path:polygon(30% 24%,52% 22%,61% 45%,58% 59%,33% 61%,32% 47%)}.wake-map .wake-surge{clip-path:polygon(56% 24%,82% 21%,96% 40%,95% 59%,69% 65%,59% 54%)}.wake-map .wake-flux{clip-path:polygon(27% 6%,69% 1%,76% 24%,56% 30%,51% 22%,32% 24%)}
.revealed-anchor .wake-anchor,.revealed-flow .wake-flow,.revealed-shift .wake-shift,.revealed-surge .wake-surge,.revealed-flux .wake-flux{opacity:.7}.signal-wakeup[class*=revealed-] .wake-terrain{opacity:.24;filter:brightness(.65) saturate(.85)}.signal-wakeup[class*=revealed-] .wake-halo{animation:wakeBreathe 4s ease-in-out infinite}.signal-wakeup[class*=revealed-] .wake-emblem:after{content:'';position:absolute;inset:0;background:var(--wake-color);mix-blend-mode:color;mask:url('assets/connection/core.webp') center/contain no-repeat;opacity:.85;transition:background .8s;pointer-events:none}.wake-channel{display:flex;gap:.7rem;flex-wrap:wrap;justify-content:center;margin-top:.8rem}.wake-channel[hidden]{display:none}.wake-channel span{font:.75rem/1.5 ui-monospace,monospace;opacity:.3;transition:opacity .7s,color .7s}.wake-channel span.online{opacity:1}.wake-channel span:nth-child(1){color:#67e1a2}.wake-channel span:nth-child(2){color:#66bdff}.wake-channel span:nth-child(3){color:#ba8aff}.wake-channel span:nth-child(4){color:#ff758c}.wake-channel span:nth-child(5){color:#ffae6b}
.signal-wakeup.all-connected .wake-logo-core{opacity:0}.signal-wakeup.all-connected .wake-logo-prism{opacity:1}.signal-wakeup.all-connected .wake-emblem:after{opacity:0}.signal-wakeup.all-connected .wake-terrain{opacity:.83;filter:none}.signal-wakeup.all-connected .wake-district{opacity:0}.signal-wakeup.all-connected h1{color:#ede5ff;text-shadow:-1px 0 #71d7ff,1px 0 #ed91e9,0 0 30px #9e83c0}.signal-wakeup.all-connected .wake-halo{opacity:.25}
.connected-city-map{position:fixed;inset:0;z-index:0;pointer-events:none;background:linear-gradient(rgba(8,4,19,.66),rgba(8,4,19,.9)),url('assets/connection/aetheridge-v2.webp') center/cover;opacity:0;transition:opacity 1.2s}.connected-city-map:after{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 50% 40%,transparent,rgba(10,4,26,.5))}body[data-screen=gateway][data-connection-phase=connected] .connected-city-map{opacity:1}body[data-screen=gateway][data-connection-phase=connected] .app-shell{position:relative;z-index:1}body[data-screen=gateway][data-connection-phase=connected] .ambient,body[data-screen=gateway][data-connection-phase=connected] #ego-core-os{opacity:.25}
@keyframes wakeBreathe{50%{opacity:.35;transform:scale(1.035)}}
@media(max-width:600px){.wake-header{font-size:.75rem;letter-spacing:.05em}.wake-center{top:12%}.wake-emblem{width:clamp(150px,23vh,230px)}.wake-center h1{margin:.65rem 0}.wake-dialogue{bottom:4.5rem;padding:1rem}.wake-footer>span{max-width:55%;font-size:.75rem}.wake-map img{object-fit:contain;transform:scale(1.55)}#wake-actions button{flex-basis:100%}.wake-channel{gap:.5rem}}
@media(max-height:650px){.wake-center{top:10%;}.wake-emblem{width:145px}.wake-dialogue{bottom:3.5rem;padding:.7rem 1rem}.wake-center h1{font-size:1.5rem;margin:.4rem 0}#wake-detail{margin:.2rem 0}#wake-thought{margin:.3rem 0 .5rem}}
@media(prefers-reduced-motion:reduce){.signal-wakeup *,.connected-city-map{animation:none!important;transition:none!important}.wake-map .wake-terrain{filter:none}.wake-map img{transition:none!important}}
/* Pulse rhythm: the emblem answers first, then the surrounding field. */
.wake-wave{position:absolute;inset:-7%;border:1px solid var(--wake-color);border-radius:50%;opacity:0;pointer-events:none}.wake-wave-second{inset:-4%}.signal-wakeup[class*=revealed-] .wake-wave{animation:signalPulseWave 3.2s ease-out infinite}.signal-wakeup[class*=revealed-] .wake-wave-second{animation-delay:.24s}.signal-wakeup[class*=revealed-] .wake-logo-core{animation:signalEmblemPulse 3.2s ease-in-out infinite}.signal-wakeup.all-connected .wake-logo-prism{animation:signalEmblemPulse 3.2s ease-in-out infinite}.signal-wakeup.all-connected .wake-logo-core{animation:none}.signal-wakeup[data-phase=null] .wake-wave,.signal-wakeup[data-phase=apex] .wake-wave{animation:none;opacity:0}
.signal-wakeup.pulse-beat:not([data-phase=null]):not([data-phase=apex]) .wake-shade:after{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at center,transparent 35%,color-mix(in srgb,var(--wake-color),transparent 83%));animation:signalFieldAnswer 1.05s ease-out both;pointer-events:none}.signal-wakeup.contact-received[data-phase=null] .wake-logo-null{animation:signalContactAnswer 1.2s ease-out both}.signal-wakeup.contact-received[data-phase=null] .wake-halo{animation:signalContactAnswer 1.2s ease-out both}
.wake-facet-light{position:absolute;inset:0;pointer-events:none;background:linear-gradient(110deg,transparent 35%,rgba(205,235,255,.45) 49%,transparent 60%);mask:url('assets/connection/core.webp') center/contain no-repeat;opacity:0}.signal-wakeup[class*=revealed-] .wake-facet-light{opacity:.65;animation:signalFacetSweep 5s ease-in-out infinite}
.connected-city-map:before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 51% 48%,rgba(151,93,237,.15),transparent 55%);animation:connectedCityPulse 4.8s ease-in-out infinite}.connected-city-map:after{animation:connectedCityPulse 4.8s ease-in-out infinite reverse}body[data-screen=gateway][data-connection-phase=connected] .gateway-brand img{animation:signalEmblemPulse 4.8s ease-in-out infinite}
.raylene-voice-control{position:fixed;z-index:100002;left:clamp(1rem,4vw,4rem);top:4.5rem;padding:.7rem .9rem;border:1px solid rgba(181,157,239,.4);background:rgba(14,7,30,.9);color:#e6d7ff;font:500 .875rem/1.4 ui-sans-serif,system-ui;cursor:pointer;border-radius:4px}.raylene-voice-control[hidden]{display:none}.raylene-voice-control:focus-visible{outline:2px solid #c7a7ff;outline-offset:3px}body:not(.system-boot-active) .raylene-voice-control{top:auto;bottom:1rem;left:1rem}
@keyframes signalPulseWave{0%{opacity:.32;transform:scale(.87)}75%,100%{opacity:0;transform:scale(1.7)}}@keyframes signalEmblemPulse{0%,100%{transform:scale(1);filter:drop-shadow(0 0 14px var(--wake-color,#a88bdf))}14%{transform:scale(1.022);filter:drop-shadow(0 0 27px var(--wake-color,#a88bdf))}25%{transform:scale(1.005)}35%{transform:scale(1.014)}}@keyframes signalFieldAnswer{0%{opacity:.7}100%{opacity:0}}@keyframes signalContactAnswer{0%,100%{opacity:.4}35%{opacity:.95}}@keyframes signalFacetSweep{0%,100%{transform:translateX(-2%);opacity:0}40%{opacity:.55}70%{transform:translateX(2%);opacity:0}}@keyframes connectedCityPulse{0%,100%{opacity:.35}35%{opacity:.9}}
@media(prefers-reduced-motion:reduce){.wake-wave,.wake-facet-light{display:none}.signal-wakeup *,.connected-city-map:before,.connected-city-map:after,body[data-screen=gateway][data-connection-phase=connected] .gateway-brand img{animation:none!important}}
/* Keep the recovered map above the terminal's inherited background layers. */
.signal-wakeup .wake-map{z-index:0}.signal-wakeup .wake-shade{z-index:1}.signal-wakeup .wake-header,.signal-wakeup .wake-footer,.signal-wakeup .wake-center,.signal-wakeup .wake-dialogue{z-index:2}
/* Signal typography and replies belong to the same luminous field. */
.signal-wakeup{--look-x:0px;--look-y:0px;--wake-color:#a599f7}
.signal-wakeup .wake-center{inset:11% 1rem auto}.signal-wakeup .wake-emblem{width:clamp(205px,29vh,340px);transform:scale(calc(1 + var(--voice-energy)*.026));transition:transform .1s linear}
.signal-wakeup .wake-center h1{background:none;-webkit-text-fill-color:currentColor;font-weight:500;letter-spacing:.3em;font-size:clamp(1.65rem,3.2vw,3rem);margin:1.5rem 0 1rem;text-indent:.3em}
.signal-wakeup #wake-status{font-family:ui-sans-serif,system-ui;font-size:clamp(1.08rem,1.4vw,1.3rem);font-weight:400;letter-spacing:.045em;line-height:1.5}.signal-wakeup #wake-detail{font-size:.88rem;letter-spacing:.045em;margin-top:.5rem;color:#b9afcc}
.signal-wakeup.text-arrive #wake-status,.signal-wakeup.text-arrive #wake-detail{animation:wakeTextArrive .75s cubic-bezier(.2,.7,.2,1) both}.signal-wakeup.text-arrive #wake-detail{animation-delay:.12s}.signal-wakeup[data-phase=apex] #wake-status,.signal-wakeup[data-phase=apex] #wake-detail{animation:none;opacity:1}
.signal-wakeup .wake-header,.signal-wakeup .wake-footer{font-size:.7rem;letter-spacing:.18em;opacity:.78}.signal-wakeup .wake-header{top:1.7rem}.signal-wakeup .wake-footer{bottom:1.4rem}.signal-wakeup .wake-footer button{font-size:.76rem;letter-spacing:.04em}
.signal-wakeup .wake-dialogue{bottom:8%;width:min(570px,calc(100% - 3rem));padding:1rem 0;background:radial-gradient(ellipse,rgba(10,5,20,.72),transparent 75%);border:0;text-align:center}.signal-wakeup .wake-dialogue small{display:block;font-size:.63rem;letter-spacing:.28em;opacity:.55}.signal-wakeup #wake-thought{font-size:.88rem;color:#b5a9c5;min-height:1.1rem;margin:.55rem 0 .7rem}
.signal-wakeup #wake-actions{justify-content:center;gap:1rem}.signal-wakeup #wake-actions button{position:relative;flex:0 1 auto;min-width:170px;min-height:52px;padding:.8rem 1.4rem;border:0;border-bottom:1px solid color-mix(in srgb,var(--wake-color),transparent 73%);background:transparent;color:#ede5fa;letter-spacing:.025em;border-radius:0;transition:color .3s,background .3s,box-shadow .3s,transform .3s}
.signal-wakeup #wake-actions button::before,.signal-wakeup #wake-actions button::after{position:absolute;top:50%;transform:translateY(-50%);color:var(--wake-color);opacity:.35;transition:opacity .3s,transform .3s}.signal-wakeup #wake-actions button::before{content:'[';left:.3rem}.signal-wakeup #wake-actions button::after{content:']';right:.3rem}.signal-wakeup #wake-actions button:hover,.signal-wakeup #wake-actions button:focus-visible{color:var(--wake-color);background:linear-gradient(transparent, color-mix(in srgb,var(--wake-color),transparent 93%));box-shadow:0 12px 22px -20px var(--wake-color);transform:translateY(-2px)}.signal-wakeup #wake-actions button:hover::before,.signal-wakeup #wake-actions button:hover::after{opacity:1}.signal-wakeup #wake-actions button:focus-visible{outline:1px solid var(--wake-color);outline-offset:5px}
.signal-wakeup .wake-channel{gap:1.1rem;margin-top:1.1rem}.signal-wakeup .wake-channel span{font-size:.64rem;letter-spacing:.08em;opacity:.2}.signal-wakeup .wake-channel span.online{opacity:.8;text-shadow:0 0 12px currentColor}
/* A recovered city: slight depth, routes travelling outward, suspended dust. */
.signal-wakeup .wake-map{transform:translate(var(--look-x),var(--look-y)) scale(1.025);transition:transform 1.8s ease-out}.signal-wakeup .wake-map img{object-position:center}.signal-wakeup .wake-shade{background:radial-gradient(ellipse at 50% 37%,rgba(0,0,0,.65),rgba(0,0,0,.16) 65%,rgba(0,0,0,.46)),linear-gradient(0deg,rgba(0,0,0,.7),transparent 38%,transparent 80%,rgba(0,0,0,.5))}
.signal-wakeup.all-connected .wake-terrain{opacity:.85;filter:brightness(calc(.9 + var(--voice-energy)*.16)) saturate(1.08)}
.wake-dust,.wake-routes{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:1}.wake-dust{overflow:hidden;opacity:0;transition:opacity 1.4s}.wake-dust i{position:absolute;left:var(--dust-x);top:var(--dust-y);width:2px;height:2px;border-radius:50%;background:var(--wake-color);box-shadow:0 0 8px var(--wake-color);opacity:.35;animation:wakeDustDrift var(--dust-duration) var(--dust-delay) ease-in-out infinite}.signal-wakeup[data-phase=apex] .wake-dust,.signal-wakeup[class*=revealed-] .wake-dust{opacity:.65}.signal-wakeup[data-phase=null] .wake-dust{opacity:0}.signal-wakeup[data-phase=apex] .wake-dust i{animation-play-state:paused}
.wake-route{fill:none;stroke-width:2.2;stroke-linecap:round;opacity:0;stroke-dasharray:24 400;filter:drop-shadow(0 0 5px currentColor);transition:opacity 1s;animation:wakeRouteTravel 6s linear infinite}.wake-route.online{opacity:.5}.wake-route-anchor{stroke:#67e1a2;color:#67e1a2}.wake-route-flow{stroke:#66bdff;color:#66bdff}.wake-route-shift{stroke:#ba8aff;color:#ba8aff}.wake-route-surge{stroke:#ff758c;color:#ff758c}.wake-route-flux{stroke:#ffae6b;color:#ffae6b}.signal-wakeup.all-connected .wake-route.online{opacity:.32;stroke-width:1.5}
/* Voice energy is smoothed: a soft response to speech and its echo, never a strobe. */
.wake-voice-ring,.wake-contact-ring{position:absolute;inset:-15%;border:1px solid var(--wake-color);border-radius:50%;pointer-events:none;opacity:0}.wake-voice-ring{transform:scale(calc(.96 + var(--voice-energy)*.15));opacity:calc(var(--voice-energy)*.48);box-shadow:0 0 calc(5px + var(--voice-energy)*25px) color-mix(in srgb,var(--wake-color),transparent 80%)}
.creator-voice-present .signal-wakeup:not([data-phase=null]):not([data-phase=apex]) .wake-halo{opacity:calc(.12 + var(--voice-energy)*.4);box-shadow:0 0 calc(var(--voice-energy)*35px) color-mix(in srgb,var(--wake-color),transparent 75%)}
.signal-wakeup .wake-emblem::before{content:'';position:absolute;inset:-45%;background:radial-gradient(ellipse,color-mix(in srgb,var(--wake-color),transparent 77%),transparent 62%);opacity:calc(.13 + var(--voice-energy)*.55);pointer-events:none;transition:opacity .12s}.signal-wakeup[data-phase=null] .wake-emblem::before{opacity:0}.signal-wakeup.contact-transmitting .wake-contact-ring{animation:wakeContactRipple 1.6s ease-out both}
.signal-wakeup.all-connected .wake-map{animation:wakeWorldResolve 2.2s cubic-bezier(.2,.8,.2,1) both}.signal-wakeup.all-connected .wake-logo-prism{filter:drop-shadow(0 0 calc(18px + var(--voice-energy)*18px) #c9a4ed)}
.raylene-voice-control{top:4rem;background:rgba(10,5,20,.38);border:0;border-bottom:1px solid rgba(201,178,239,.25);border-radius:0;font-size:.7rem;letter-spacing:.04em;padding:.55rem .1rem;color:#b9a6d0}.raylene-voice-control:hover{color:#f0e5ff}
.connected-city-map{background-image:linear-gradient(rgba(8,4,19,.66),rgba(8,4,19,.9)),url('assets/connection/aetheridge-dream.webp')}
@keyframes wakeTextArrive{from{opacity:0;filter:blur(4px);transform:translateY(5px)}to{opacity:1;filter:blur(0);transform:translateY(0)}}@keyframes wakeDustDrift{0%,100%{transform:translate3d(0,0,0);opacity:.16}50%{transform:translate3d(10px,-28px,0);opacity:.55}}@keyframes wakeRouteTravel{to{stroke-dashoffset:-848}}@keyframes wakeContactRipple{0%{opacity:.65;transform:scale(.7)}100%{opacity:0;transform:scale(1.65)}}@keyframes wakeWorldResolve{from{filter:blur(2px);opacity:.7}to{filter:blur(0);opacity:1}}
@media(max-width:600px){.signal-wakeup .wake-center{top:13%}.signal-wakeup .wake-emblem{width:clamp(175px,25vh,250px)}.signal-wakeup .wake-center h1{margin:1.1rem 0 .7rem;font-size:1.7rem;letter-spacing:.22em}.signal-wakeup .wake-dialogue{bottom:9%;width:calc(100% - 3rem)}.signal-wakeup #wake-actions{gap:.3rem}.signal-wakeup #wake-actions button{flex-basis:100%;max-width:300px}.signal-wakeup .wake-header{font-size:.58rem;letter-spacing:.08em}.signal-wakeup .wake-channel{gap:.7rem}.signal-wakeup .wake-map img{object-fit:cover;transform:none}}
@media(max-height:650px){.signal-wakeup .wake-center{top:9%}.signal-wakeup .wake-emblem{width:145px}.signal-wakeup .wake-center h1{font-size:1.6rem;margin:.7rem 0 .5rem}.signal-wakeup .wake-dialogue{bottom:7%;padding:0}.signal-wakeup #wake-thought{margin:.2rem 0}.signal-wakeup #wake-actions button{min-height:44px}.signal-wakeup .wake-channel{margin-top:.6rem}}
@media(prefers-reduced-motion:reduce){.signal-wakeup .wake-dust,.signal-wakeup .wake-routes,.signal-wakeup .wake-contact-ring,.signal-wakeup .wake-voice-ring{display:none}.signal-wakeup .wake-map,.signal-wakeup .wake-emblem{transform:none!important}.signal-wakeup #wake-actions button:hover{transform:none}.signal-wakeup .wake-center #wake-status,.signal-wakeup .wake-center #wake-detail{opacity:1;filter:none;animation:none}.signal-wakeup.all-connected .wake-map{opacity:1;filter:none;animation:none}}
/* District light spreads softly rather than cutting a shape out of the city. */
.signal-wakeup .wake-map .wake-anchor{clip-path:none;mask-image:radial-gradient(ellipse 27% 34% at 23% 47%,#000 25%,transparent 100%)}
.signal-wakeup .wake-map .wake-flow{clip-path:none;mask-image:radial-gradient(ellipse 30% 31% at 56% 76%,#000 25%,transparent 100%)}
.signal-wakeup .wake-map .wake-shift{clip-path:none;mask-image:radial-gradient(ellipse 24% 32% at 43% 43%,#000 25%,transparent 100%)}
.signal-wakeup .wake-map .wake-surge{clip-path:none;mask-image:radial-gradient(ellipse 28% 31% at 78% 43%,#000 25%,transparent 100%)}
.signal-wakeup .wake-map .wake-flux{clip-path:none;mask-image:radial-gradient(ellipse 27% 27% at 54% 19%,#000 25%,transparent 100%)}
.signal-wakeup .wake-center h1{color:var(--wake-color)}.signal-wakeup[data-phase=null] .wake-center h1{color:#685978}.signal-wakeup.all-connected .wake-center h1{color:#ede5ff}

/* Creator atmosphere: blue air, suspended gold, pearl light. */
body{--voice-energy:0;--voice-air:0}
.wake-aurora,.wake-clouds,.wake-wings{position:absolute;pointer-events:none;inset:0;width:100%;height:100%;z-index:1}
.wake-aurora{background:radial-gradient(ellipse at 20% 30%,#6397da55,transparent 48%),radial-gradient(ellipse at 80% 20%,#ffe7b83b,transparent 50%);mix-blend-mode:screen;opacity:0;transition:opacity 2s;filter:blur(32px);transform:scale(calc(1 + var(--voice-energy)*.08))}
.signal-wakeup[class*=revealed-] .wake-aurora{opacity:calc(.14 + var(--voice-energy)*.5 + var(--voice-air)*.4)}
.wake-clouds{background:radial-gradient(ellipse at 8% 55%,#b8d3ed55,transparent 42%),radial-gradient(ellipse at 93% 60%,#e0d8cb44,transparent 43%);filter:blur(35px);opacity:0;transition:opacity 2s,transform 5s;mix-blend-mode:screen}
.signal-wakeup[data-phase=apex] .wake-clouds{opacity:.38;transform:scale(.95)}
.signal-wakeup[class*=revealed-] .wake-clouds{opacity:calc(.1 + var(--voice-air)*.45);transform:scale(1.16)}
.wake-wings{top:4%;height:66%;stroke:url(#wingLight);fill:none;stroke-width:.65;opacity:0;filter:drop-shadow(0 0 5px #d9eaff);transition:opacity 2s,transform 3s;transform:scale(.85)}
.signal-wakeup[data-phase=apex] .wake-wings{opacity:.25}
.signal-wakeup[class*=revealed-] .wake-wings{opacity:calc(.08 + var(--voice-energy)*.34);transform:scale(calc(1 + var(--voice-air)*.08))}
.signal-wakeup.all-connected .wake-wings{opacity:.23;transform:scale(1.12)}
.signal-wakeup .wake-shade{background:radial-gradient(ellipse at 50% 35%,#050c1e9c,transparent 68%),linear-gradient(0deg,#071021bb,transparent 45%,#07102144)}
.signal-wakeup[data-phase=null] .wake-shade{background:#000e}
.signal-wakeup[data-phase=apex] .wake-terrain{opacity:.4;filter:sepia(.45) brightness(.7) saturate(.65)}
.signal-wakeup.all-connected .wake-terrain{opacity:1;filter:brightness(calc(.92 + var(--voice-energy)*.22)) saturate(1.06)}
.signal-wakeup.all-connected .wake-center h1{color:#f2f6ff;text-shadow:0 0 28px #9acbff88,0 0 60px #ffe2b044}
.signal-wakeup #wake-detail{color:#c2cedd}
.signal-wakeup.voice-bloom .wake-aurora:after{content:'';position:absolute;inset:0;border-radius:50%;background:radial-gradient(ellipse,#e8f2ff44,transparent 60%);animation:creatorLightBloom 2.2s ease-out both}
.signal-wakeup.voice-bloom .wake-voice-ring{animation:creatorVoiceWave 2.2s ease-out both}
.signal-wakeup.all-connected .wake-map{animation:creatorWorldReveal 3s cubic-bezier(.16,.8,.2,1) both}
.connected-city-map{background-image:linear-gradient(#08142699,#081426df),url('assets/connection/aetheridge-dream.webp')}
@keyframes creatorWorldReveal{from{filter:blur(5px);transform:scale(1.09);opacity:.6}to{filter:blur(0);transform:scale(1.025);opacity:1}}
@keyframes creatorLightBloom{from{opacity:.6;transform:scale(.65)}to{opacity:0;transform:scale(1.4)}}
@keyframes creatorVoiceWave{from{opacity:.4;transform:scale(.98)}to{opacity:0;transform:scale(1.8)}}
@media(max-width:600px){.wake-wings{width:150%;left:-25%;top:7%;height:55%}}
@media(prefers-reduced-motion:reduce){.wake-wings,.wake-clouds,.wake-aurora{display:none}.signal-wakeup.all-connected .wake-map{animation:none;transform:none}}

/* Keep the opening light enough for audio playback on modest devices. */
body.system-boot-active .app-shell{visibility:hidden}
body.system-boot-active .app-shell *,body.system-boot-active .ambient *,body.system-boot-active #ego-core-os *{animation-play-state:paused!important}
.signal-wakeup .wake-map{will-change:transform;contain:paint}
.signal-wakeup.all-connected .wake-terrain{filter:brightness(.94) saturate(1.06)}
.signal-wakeup .wake-aurora{transform:none;filter:none}
.signal-wakeup .wake-clouds{filter:none}
.signal-wakeup .wake-emblem{transition:none}
.signal-wakeup .wake-voice-ring{box-shadow:none}
.signal-wakeup .wake-emblem::before{transition:none}
.signal-wakeup.all-connected .wake-logo-prism{filter:drop-shadow(0 0 20px #c9a4ed)}
.signal-wakeup.heart-beat .wake-contact-ring{animation:openingHeartbeat 1.3s ease-out both}
@keyframes openingHeartbeat{0%{opacity:0;transform:scale(.97)}8%{opacity:.32;transform:scale(1.015)}18%{opacity:.09;transform:scale(1.025)}26%{opacity:.23;transform:scale(1.04)}100%{opacity:0;transform:scale(1.45)}}
@media(prefers-reduced-motion:reduce){.signal-wakeup.heart-beat .wake-contact-ring{animation:none;display:none}}

/* The city answers the same double heartbeat as the emblem and audio. */
.signal-wakeup .wake-map::after{content:'';position:absolute;inset:0;pointer-events:none;background:radial-gradient(ellipse at 51% 46%,color-mix(in srgb,var(--wake-color),transparent 63%) 0%,color-mix(in srgb,var(--wake-color),transparent 82%) 35%,transparent 70%);mix-blend-mode:screen;opacity:0}
.signal-wakeup.heart-beat .wake-map::after{animation:cityHeartbeatLight 1.35s ease-out both}
.signal-wakeup .wake-aurora::before{content:'';position:absolute;inset:0;border:2px solid color-mix(in srgb,var(--wake-color),transparent 75%);border-radius:50%;opacity:0;pointer-events:none}
.signal-wakeup.heart-beat .wake-aurora::before{animation:cityHeartbeatSpread 1.35s ease-out both}
@keyframes cityHeartbeatLight{0%{opacity:0;transform:scale(.94)}8%{opacity:.6;transform:scale(1)}18%{opacity:.15;transform:scale(1.02)}26%{opacity:.48;transform:scale(1.035)}100%{opacity:0;transform:scale(1.12)}}
@keyframes cityHeartbeatSpread{0%{opacity:0;transform:scale(.25)}8%{opacity:.4}26%{opacity:.24}100%{opacity:0;transform:scale(1.2)}}
@media(prefers-reduced-motion:reduce){.signal-wakeup .wake-map::after,.signal-wakeup .wake-aurora::before{display:none}}

/* A quiet, readable contact becomes a living city. */
.signal-wakeup[data-phase=null] .wake-center h1{opacity:.7;mask-image:none;color:#8c99b3}
.signal-wakeup[data-phase=null] #wake-status{color:#d0daeb}
.signal-wakeup[data-phase=null] .wake-logo-null{opacity:.7;filter:brightness(.85)}
.signal-wakeup .wake-dialogue{bottom:auto;top:70%;padding:.4rem 0}
.signal-wakeup .wake-center{inset:9% 1rem auto}
.signal-wakeup #wake-thought{min-height:0}
.signal-wakeup .wake-emblem{width:clamp(190px,27vh,310px)}
.signal-wakeup .wake-center h1{margin:1.1rem 0 .65rem}
.wake-city-heart{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;z-index:1;pointer-events:none;opacity:0;mix-blend-mode:screen;filter:brightness(1.4) saturate(1.2);mask-image:radial-gradient(ellipse at 50% 55%,#000 25%,transparent 85%);will-change:opacity}
.signal-wakeup .wake-map::after,.signal-wakeup .wake-aurora::before{display:none}
.signal-wakeup .wake-routes,.signal-wakeup .wake-wave,.signal-wakeup .wake-facet-light{display:none}
.signal-wakeup .wake-logo-core,.signal-wakeup .wake-logo-prism,.signal-wakeup .wake-halo{animation:none!important}
.signal-wakeup .wake-wings{stroke-width:1.1}
.signal-wakeup[data-phase=apex] .wake-wings{opacity:.4}
.signal-wakeup[class*=revealed-] .wake-wings{opacity:calc(.16 + var(--voice-energy)*.3)}
.signal-wakeup.all-connected .wake-terrain{transition:opacity 3.5s ease,filter 3.5s ease;opacity:.92}
.signal-wakeup.all-connected .wake-map{animation:none;transition:transform 3s ease}
.signal-wakeup .wake-header{opacity:.45}
.signal-wakeup .wake-dust{opacity:.25}
@media(max-height:650px){.signal-wakeup .wake-center{top:8%}.signal-wakeup .wake-emblem{width:130px}.signal-wakeup .wake-dialogue{top:auto;bottom:7%}}
@media(max-width:600px){.signal-wakeup .wake-dialogue{top:69%;bottom:auto}.signal-wakeup .wake-center{top:11%}}
@media(prefers-reduced-motion:reduce){.wake-city-heart{display:none}}

/* Restore the city routes alongside the shared heartbeat. */
.signal-wakeup .wake-routes{display:block;opacity:.8}
.signal-wakeup .wake-route{stroke-width:2;animation:wakeRouteTravel 6s linear infinite}
.signal-wakeup.all-connected .wake-route.online{opacity:.4}
@media(prefers-reduced-motion:reduce){.signal-wakeup .wake-routes{display:none}}

/* Prism becomes a passage: color gathers into pearl, then the station emerges. */
body.station-arriving #gateway{visibility:hidden}
.prism-arrival{position:fixed;inset:0;z-index:100010;overflow:hidden;pointer-events:none;background:transparent;animation:prismVeil 4.3s ease both}
.prism-arrival-colors,.prism-arrival-pearl,.prism-arrival-rays{position:absolute;inset:-25%;pointer-events:none;transform-origin:50% 40%}
.prism-arrival-colors{background:radial-gradient(ellipse at 35% 38%,#76e9bdcc,transparent 45%),radial-gradient(ellipse at 65% 38%,#8bccffdd,transparent 45%),radial-gradient(ellipse at 50% 62%,#bb9bffdd,transparent 48%),radial-gradient(ellipse at 30% 65%,#ffb9cdcc,transparent 42%),radial-gradient(ellipse at 75% 63%,#ffcf9fcc,transparent 44%);animation:prismColorGather 4.3s cubic-bezier(.2,.65,.2,1) both}
.prism-arrival-pearl{background:radial-gradient(ellipse at 50% 40%,#ffffff 0%,#f7fcff 16%,#e5f2ffd9 29%,transparent 54%);animation:prismPearlExpand 4.3s cubic-bezier(.2,.65,.2,1) both}
.prism-arrival-rays{background:repeating-conic-gradient(from 15deg at 50% 40%,transparent 0deg 12deg,#ffffff38 14deg,transparent 16deg 28deg);mask-image:radial-gradient(ellipse,#000,transparent 65%);animation:prismRaysExpand 4.3s ease both}
.prism-arrival-skip{position:fixed;right:2rem;bottom:1.5rem;z-index:100011;border:0;background:#18284088;color:#edf5ff;padding:.65rem 1rem;font:400 .8rem/1.4 system-ui;cursor:pointer}
.prism-arrival-skip:focus-visible{outline:2px solid #8bccff;outline-offset:4px}
@keyframes prismVeil{0%{opacity:0}14%,65%{opacity:1}100%{opacity:0}}
@keyframes prismColorGather{0%{transform:scale(.35);opacity:0}18%{opacity:1}43%,62%{transform:scale(1.35);opacity:1}100%{transform:scale(1.55);opacity:0}}
@keyframes prismPearlExpand{0%{transform:scale(.08);opacity:0}14%{opacity:.9}40%,60%{transform:scale(3.8);opacity:1}100%{transform:scale(4.2);opacity:0}}
@keyframes prismRaysExpand{0%{transform:scale(.3) rotate(-6deg);opacity:0}22%{opacity:.7}58%{transform:scale(1.5) rotate(5deg);opacity:.45}100%{transform:scale(1.8) rotate(8deg);opacity:0}}
@media(prefers-reduced-motion:reduce){.prism-arrival{display:none}}
