:root{--violet:#b45cff;--violet-deep:#471163;--paper:#f8f4ff}
*{box-sizing:border-box}
html{background:#000;scroll-behavior:smooth}
body{margin:0;min-height:100vh;overflow-x:hidden;background:radial-gradient(circle at 50% 20%,#130719 0,#050207 34rem,#000 68rem);color:var(--paper);font-family:"Times New Roman",Times,serif}
body:before{content:"";position:fixed;inset:0;z-index:5;pointer-events:none;opacity:.16;background-image:linear-gradient(rgba(255,255,255,.035) 1px,transparent 1px);background-size:100% 4px;mix-blend-mode:screen}
main{width:100%;padding:0 clamp(18px,5vw,84px) 18vh}
.opening{height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center}
.lambda{font-size:clamp(68px,9vw,108px);font-weight:normal;line-height:1;color:#fff;text-shadow:0 0 24px rgba(180,92,255,.28),0 0 90px rgba(180,92,255,.2);animation:breathe 4.8s ease-in-out infinite}
.hint{margin-top:24px;font:10px/1.5 ui-monospace,SFMono-Regular,Menlo,monospace;letter-spacing:.38em;text-transform:uppercase;color:#756b79}
.block{position:relative;isolation:isolate;min-height:82vh;display:grid;place-items:center;overflow:hidden;margin:0 auto 8vh;padding:clamp(48px,10vh,110px) clamp(20px,8vw,112px);border-top:1px solid rgba(180,92,255,.08)}
.block:before{content:"";position:absolute;z-index:-2;width:min(76vw,900px);aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(132,42,174,.28) 0,rgba(89,24,119,.12) 28%,transparent 68%);filter:blur(24px);opacity:.52;transform:scale(.78);transition:opacity 1.8s ease,transform 2.4s cubic-bezier(.2,.8,.2,1)}
.block:nth-of-type(even):before{transform:translateX(-18%) scale(.74)}
.block:nth-of-type(odd):before{transform:translateX(18%) scale(.82)}
.block.revealed:before{opacity:.88;transform:scale(1)}
.block:nth-of-type(even).revealed:before{transform:translateX(-8%) scale(1)}
.block:nth-of-type(odd).revealed:before{transform:translateX(8%) scale(1)}
.ascii-field{position:absolute;inset:8% 4%;z-index:-1;width:92%;height:84%;opacity:.2;pointer-events:none;mask-image:radial-gradient(ellipse,#000 15%,transparent 72%);transition:opacity 1.4s ease}
.encoded,.decoded{grid-area:1/1;width:min(860px,100%);line-height:1.8}
.encoded{color:#d8bded;font:clamp(11px,1.15vw,14px)/1.9 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;letter-spacing:.09em;word-break:break-word;opacity:.82;filter:blur(0);transform:translateY(0);text-shadow:0 0 12px rgba(180,92,255,.45);transition:opacity .9s ease,filter .9s ease,transform .9s ease;animation:signal 3.6s steps(1,end) infinite}
.decoded{font-size:clamp(23px,2.8vw,36px);letter-spacing:.045em;opacity:1;transform:translateY(18px);transition:transform 1s ease}
.decoded .word{display:inline-block;opacity:0;filter:blur(7px);transform:translateY(13px);transition:opacity .72s ease,filter .72s ease,transform .72s ease}
.block.revealed .encoded{opacity:0;filter:blur(9px);transform:translateY(-28px);pointer-events:none;transition-delay:1.6s}
.block.revealed .decoded{transform:translateY(0);transition-delay:1.72s}
.block.revealed .decoded .word{opacity:1;filter:blur(0);transform:translateY(0);transition-delay:calc(1.72s + var(--word-index)*36ms)}
.block.revealed .ascii-field{opacity:.07}
.final{min-height:100vh;border-top:0}
.final:before{opacity:.8;background:radial-gradient(circle,rgba(166,58,214,.4) 0,rgba(89,24,119,.13) 34%,transparent 70%)}
.final .decoded{width:min(1100px,100%);font-size:clamp(40px,6vw,82px);line-height:1.15;text-align:center;text-shadow:0 0 42px rgba(180,92,255,.2)}
@keyframes breathe{50%{opacity:.72;transform:scale(.97);text-shadow:0 0 14px rgba(180,92,255,.2),0 0 58px rgba(180,92,255,.14)}}
@keyframes signal{0%,91%,100%{transform:translate(0,0)}92%{transform:translate(1px,-1px)}93%{transform:translate(-2px,1px)}94%{transform:translate(0,0)}}
@media(max-width:700px){
 main{padding-inline:16px}
 .block{min-height:78vh;margin-bottom:5vh;padding:56px 18px}
 .encoded{font-size:11px;line-height:1.78;letter-spacing:.055em}
 .decoded{font-size:22px;line-height:1.55}
}
@media(prefers-reduced-motion:reduce){
 html{scroll-behavior:auto}
 .lambda,.encoded{animation:none}
 .encoded,.decoded,.decoded .word,.ascii-field,.block:before{transition-duration:.01ms!important;transition-delay:0s!important}
}
