@import url('https://fonts.googleapis.com/css2?family=DM+Mono:wght@400;500&family=Noto+Kufi+Arabic:wght@400;500;600;700&family=Noto+Naskh+Arabic:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,500;0,600;1,500&display=swap');
:root{--violet:#7c5cfc;--violet-soft:#bda4ff;--ink:#eee5ff;--gold:#ffd892;--pink:#e3a9d2;--base:#160d2c;--mono:'DM Mono',monospace;--arabic:'Noto Kufi Arabic',Tahoma,sans-serif;--naskh:'Noto Naskh Arabic',serif;--serif:'Playfair Display',Georgia,serif}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;overflow-x:hidden;color:var(--ink);background:var(--base);font-family:var(--arabic)}button,input{font:inherit}button{cursor:pointer}a{color:inherit}button:focus-visible,a:focus-visible,label:focus-visible{outline:2px solid var(--gold);outline-offset:4px}#space-canvas{position:fixed;z-index:0;inset:0;width:100%;height:100%;display:block;touch-action:none}.film-grain{position:fixed;z-index:8;inset:0;pointer-events:none;opacity:.05;background-image:url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence baseFrequency='.8' numOctaves='4' stitchTiles='stitch' type='fractalNoise'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.42'/%3E%3C/svg%3E")}.space-ui{position:relative;z-index:2;min-height:100vh;pointer-events:none}.space-ui button,.space-ui a,.space-ui label{pointer-events:auto}.space-topbar{position:fixed;z-index:10;top:0;right:0;left:0;display:flex;align-items:center;justify-content:space-between;height:72px;padding:0 32px;border-bottom:1px solid rgba(255,255,255,.1);background:linear-gradient(180deg,rgba(22,13,44,.78),transparent);backdrop-filter:blur(8px)}.space-logo{display:block;width:122px;height:54px}.space-logo img{width:100%;height:100%;object-fit:contain;mix-blend-mode:screen}.world-status{display:flex;align-items:center;gap:8px;color:#b9a8d2;font:9px var(--mono);letter-spacing:.07em;direction:ltr}.world-status span{width:6px;height:6px;border-radius:50%;background:#8ee0b4;box-shadow:0 0 13px #8ee0b4}.world-status small{color:#756485}.top-controls{display:flex;align-items:center;gap:17px;direction:ltr}.top-controls button{padding:0;border:0;color:#c8b9df;background:none;font:9px var(--mono)}.journey-meter{position:relative;width:72px;height:2px;background:rgba(255,255,255,.17)}.journey-meter i{position:absolute;inset:0 auto 0 0;width:0;background:var(--gold);transition:width .15s}.intro-copy{position:fixed;z-index:5;top:50%;left:50%;width:min(640px,calc(100% - 38px));transform:translate(-50%,-45%);transition:opacity .7s,transform .7s}.is-live .intro-copy{opacity:0;transform:translate(-50%,-62%);pointer-events:none}.intro-code{padding:26px 29px 25px;border:1px solid rgba(210,187,255,.22);border-radius:20px;background:rgba(40,20,73,.35);box-shadow:0 25px 90px rgba(0,0,0,.25),inset 0 1px rgba(255,255,255,.08);backdrop-filter:blur(18px);transform:rotateX(2deg) rotateY(-4deg);animation:floatPanel 6s ease-in-out infinite}.code-topline{display:flex;justify-content:space-between;margin-bottom:19px;color:#dfd3f1;font:10px var(--mono);direction:ltr}.code-topline small{color:#88759d}.code-lines{font:12px/2.12 var(--mono);direction:ltr}.code-lines p{display:grid;grid-template-columns:30px 1fr;margin:0}.code-lines b{color:#6f5e85;font-weight:400;text-align:right;padding-right:12px}.code-lines span{color:#c9bddc}.code-lines em{color:#dc91fa;font-style:normal}.code-lines strong{color:#82d8c2;font-weight:500}.code-lines mark{color:#f3d680;background:none}.code-lines i{color:#c5b1ff;font-style:normal;animation:blink 1.1s infinite}.run-button{display:flex;align-items:center;gap:9px;margin:24px auto 0;padding:12px 13px;border:1px solid rgba(255,255,255,.33);border-radius:30px;color:#24133b;background:#fff0ce;box-shadow:0 12px 28px rgba(13,4,28,.25);transition:.25s}.run-button:hover{transform:translateY(-3px);box-shadow:0 19px 35px rgba(13,4,28,.35)}.run-button span{display:grid;place-items:center;width:19px;height:19px;border-radius:50%;color:#fff;background:var(--violet);font-size:8px}.run-button b{font-size:11px;font-weight:500}.run-button kbd{padding:3px 5px;border:1px solid #e4d1ae;border-radius:4px;color:#9d875e;background:#ffebbb;font:8px var(--mono)}.intro-hint{margin:15px 0 0;color:#a28db7;text-align:center;font-size:10px}.is-live .intro-code{animation:dissolve .65s both}.journey-layer{position:fixed;z-index:4;inset:0;pointer-events:none}.stop-copy{position:absolute;top:50%;right:7%;width:min(510px,44vw);opacity:0;transform:translateY(-42%) translateX(-18px);transition:opacity .7s,transform .7s}.stop-copy.is-active{opacity:1;transform:translateY(-42%) translateX(0)}.stop-kicker{display:block;margin-bottom:16px;color:var(--gold);font:9px var(--mono);letter-spacing:.1em;direction:ltr}.stop-copy h1,.stop-copy h2{margin:0;color:#f5edff;font-size:clamp(38px,5vw,76px);font-weight:600;letter-spacing:-.08em;line-height:1.13}.stop-copy h1 i,.stop-copy h2 i{color:#cbb4ff;font-family:var(--naskh);font-weight:500}.stop-copy p{max-width:360px;margin:22px 0 0;color:#b8a8c9;font-size:12px;line-height:2}.stop-copy small{display:block;margin-top:24px;color:#9684aa;font:9px var(--mono)}.stop-copy code{color:#f6d38b;font:10px var(--mono)}.photo-config,.world-action{display:inline-flex;align-items:center;gap:10px;margin-top:24px;padding:10px 0;border:0;border-bottom:1px solid rgba(255,216,146,.55);color:var(--gold);background:transparent;font-size:11px}.photo-config span,.world-action span{font-size:17px}.finale-stop{right:50%;width:min(500px,90vw);text-align:center;transform:translate(50%,-42%)}.finale-stop.is-active{transform:translate(50%,-42%)}.finale-stop p{margin-right:auto;margin-left:auto}.finale-stop .world-action{border-bottom:0;border:1px solid rgba(255,216,146,.5);padding:12px 17px;border-radius:30px}.replay-star{display:block;margin:34px auto 0;border:0;color:var(--gold);background:none;font-size:24px}.replay-star small{display:block;margin:2px 0 0;color:#a391b2;font:8px var(--mono)}.final-message{position:fixed;z-index:12;inset:0;display:grid;place-items:center;background:rgba(19,7,36,.28);pointer-events:auto}.final-message-inner{width:min(670px,calc(100% - 38px));padding:35px 6%;border-right:1px solid rgba(255,216,146,.75);text-align:right;animation:messageIn .7s both}.final-message-inner #final-message-copy p{margin:0 0 21px;color:#f9f1ff;font:500 clamp(21px,3vw,34px)/1.8 var(--naskh)}.final-replay{margin-top:12px;padding:10px 0;border:0;border-bottom:1px solid rgba(255,216,146,.5);color:var(--gold);background:none;font-size:11px}.final-replay span{margin-right:11px}.journey-scroll{position:relative;z-index:1;height:0;pointer-events:none}.is-live~.journey-scroll{height:auto}.scroll-stop{height:100vh}.fallback-mode #space-canvas,.fallback-mode .space-ui,.fallback-mode .journey-scroll{display:none}.webgl-fallback{position:fixed;z-index:80;inset:0;display:grid;place-items:center;align-content:center;gap:14px;padding:30px;text-align:center;color:var(--ink);background:#f5eaff}.webgl-fallback img{width:180px}.webgl-fallback h1{font:600 34px var(--naskh)}.webgl-fallback p{max-width:360px;font-size:13px}.webgl-fallback a{color:var(--violet)}.toast{position:fixed;z-index:20;right:50%;bottom:28px;padding:11px 16px;border:1px solid rgba(255,216,146,.35);color:#f8eaff;background:rgba(31,13,54,.88);font-size:10px;opacity:0;transform:translateX(50%) translateY(14px);transition:.3s}.toast.show{opacity:1;transform:translateX(50%) translateY(0)}@keyframes floatPanel{50%{transform:rotateX(2deg) rotateY(-4deg) translateY(-9px)}}@keyframes blink{0%,45%{opacity:1}46%,100%{opacity:0}}@keyframes dissolve{to{opacity:0;filter:blur(10px);transform:scale(.94) translateY(-10px)}}@keyframes messageIn{from{opacity:0;transform:translateY(17px)}to{opacity:1;transform:none}}
@media(max-width:700px){.space-topbar{height:62px;padding:0 15px}.space-logo{width:98px;height:47px}.world-status{display:none}.top-controls{gap:10px}.journey-meter{width:48px}.intro-copy{width:calc(100% - 27px)}.intro-code{padding:22px 16px 21px;border-radius:15px}.code-lines{font-size:10px}.code-lines p{grid-template-columns:25px 1fr}.code-lines b{padding-right:8px}.code-topline{font-size:8px}.code-topline small{font-size:7px}.run-button{margin-top:20px}.stop-copy{top:50%;right:8%;width:84%;transform:translateY(-42%) translateX(-11px)}.stop-copy.is-active{transform:translateY(-42%) translateX(0)}.stop-copy h1,.stop-copy h2{font-size:47px}.stop-copy p{font-size:11px}.finale-stop{right:50%;width:86%;transform:translate(50%,-42%)}.finale-stop.is-active{transform:translate(50%,-42%)}.final-message-inner{padding:25px 7%}.final-message-inner #final-message-copy p{font-size:22px}.film-grain{opacity:.03}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}.intro-code{animation:none}}

/* The world and its scroll distance become available only after ignition. */
.journey-layer { opacity: 0; transition: opacity .55s ease; }
.is-live .journey-layer { opacity: 1; }
.is-live .journey-scroll { height: 600vh; }

/* Keep the lightweight fallback out of the way unless the module or WebGL genuinely fails. */
.webgl-fallback[hidden] { display: none !important; }
.webgl-fallback { color: #2a1644; }

/* Native hidden state must always win over layout rules. */
[hidden] { display: none !important; }

.final-signature { margin: 3px 0 0; color: var(--gold); font: 500 16px var(--serif); direction: ltr; text-align: left; }
