:root{--bg:#030507;--cyan:#7ff6ff;--white:#e8fbff;--accent:#ff7a59;--dim:#c8f0ff73;--mono:"JetBrains Mono", Consolas, "Courier New", monospace}*{box-sizing:border-box;margin:0;padding:0}html,body{background:var(--bg);width:100%;height:100%;color:var(--white);font-family:var(--mono);-webkit-font-smoothing:antialiased;overflow:hidden}#scene{cursor:grab;width:100%;height:100%;display:block;position:fixed;inset:0}body.portal-hover #scene{cursor:pointer}body.dragging,body.dragging #scene{cursor:grabbing}body.dragging{-webkit-user-select:none;user-select:none}.vignette{pointer-events:none;background:radial-gradient(#0000 45%,#000000d9 100%);position:fixed;inset:0}.scanlines{pointer-events:none;opacity:.18;mix-blend-mode:overlay;background:repeating-linear-gradient(#ffffff0d 0 1px,#0000 1px 3px);position:fixed;inset:0}#loader{z-index:10;background:var(--bg);cursor:pointer;place-items:center;transition:opacity 1.2s,visibility 1.2s;display:grid;position:fixed;inset:0}#loader.done{opacity:0;visibility:hidden}.loader-inner{width:min(600px,86vw)}#ecg{width:100%;height:80px;margin-bottom:24px;display:block}#log{min-height:9em;color:var(--cyan);white-space:pre;font-size:13px;line-height:1.8;overflow:hidden}#log .ok{color:var(--accent)}.bar{background:#7ff6ff26;height:1px;margin:18px 0 10px}#bar-fill{background:var(--cyan);width:0;height:100%;box-shadow:0 0 10px var(--cyan)}.loader-foot{color:var(--dim);letter-spacing:.1em;justify-content:space-between;font-size:11px;display:flex}#hud{z-index:5;pointer-events:none;transition:opacity 1.5s .6s;position:fixed;inset:0}#hud.hidden{opacity:0}.corner{letter-spacing:.14em;font-size:11px;line-height:1.9;position:absolute}.tl{top:28px;left:32px}.tr{pointer-events:auto;top:22px;right:26px}.bl{bottom:28px;left:32px}.br{text-align:right;color:var(--accent);bottom:28px;right:32px}.dim{color:var(--dim)}.dot{background:var(--accent);width:6px;height:6px;box-shadow:0 0 8px var(--accent);border-radius:50%;margin-right:10px;animation:1.4s ease-in-out infinite pulse;display:inline-block}@keyframes pulse{50%{opacity:.25}}#lang{color:var(--dim);font:inherit;letter-spacing:.1em;cursor:pointer;background:0 0;border:1px solid #7ff6ff40;padding:6px 12px;font-size:12px;transition:border-color .3s}#lang:hover{border-color:var(--cyan)}#sound{color:var(--cyan);font:inherit;letter-spacing:.1em;cursor:pointer;background:0 0;border:1px solid #7ff6ff40;align-items:center;gap:8px;margin-right:8px;padding:6px 12px;font-size:12px;transition:border-color .3s,color .3s;display:inline-flex}#sound:hover{border-color:var(--cyan)}#sound.off{color:var(--dim)}#sound i{background:linear-gradient(currentColor,currentColor) 0/2px 40% no-repeat,linear-gradient(currentColor,currentColor) 4px/2px 100% no-repeat,linear-gradient(currentColor,currentColor) 8px/2px 60% no-repeat,linear-gradient(currentColor,currentColor) 12px/2px 80% no-repeat;width:14px;height:10px;animation:1.2s ease-in-out infinite alternate eq;display:inline-block}#sound.off i{background:linear-gradient(currentColor,currentColor) 0/100% 1px no-repeat;animation:none}@keyframes eq{to{transform:scaleY(.5)}}@media (prefers-reduced-motion:reduce){#sound i{animation:none}}#lang i{opacity:.4;margin:0 8px;font-style:normal}#lang [data-lang].active{color:var(--cyan);text-shadow:0 0 8px var(--cyan)}#tagline{white-space:nowrap;letter-spacing:.35em;color:var(--dim);font-size:clamp(12px,1.3vw,15px);transition:opacity 1s,top .8s;position:absolute;top:calc(50% + min(16vw,150px));left:50%;transform:translate(-50%)}#scroll-hint{letter-spacing:.25em;color:var(--dim);text-align:center;white-space:nowrap;font-size:10px;position:absolute;bottom:30px;left:50%;transform:translate(-50%)}#scroll-hint i{background:linear-gradient(var(--cyan), transparent);width:1px;height:36px;margin:12px auto 0;animation:2s ease-in-out infinite drip;display:block}@keyframes drip{0%{transform-origin:top;transform:scaleY(0)}50%{transform-origin:top;transform:scaleY(1)}51%{transform-origin:bottom}to{transform-origin:bottom;transform:scaleY(0)}}html,body{touch-action:none;overscroll-behavior:none}#tagline,#scroll-hint{transition:opacity 1s,top .8s}body[data-layer]:not([data-layer="1"]) #tagline,body[data-layer]:not([data-layer="1"]) #scroll-hint{opacity:0!important}#memory{opacity:0;visibility:hidden;border-left:1px solid #7ff6ff40;width:min(440px,36vw);padding-left:22px;transition:opacity .6s,visibility .6s;position:absolute;top:50%;left:56%;transform:translateY(-50%)}#memory.show{opacity:1;visibility:visible}#memory.show:before{content:"";background:var(--cyan);width:1px;height:40%;box-shadow:0 0 10px var(--cyan);animation:1.4s ease-out forwards sweep;position:absolute;top:0;left:-1px}@keyframes sweep{0%{opacity:1;top:0}to{opacity:0;top:60%}}.mem-head{letter-spacing:.2em;margin-bottom:22px;font-size:11px}#mem-time{letter-spacing:.25em;color:var(--accent);margin-bottom:10px;font-size:13px}#mem-title{letter-spacing:.04em;color:var(--white);text-shadow:0 0 18px #7ff6ff59;margin-bottom:16px;font-size:clamp(20px,2.2vw,30px);font-weight:600;line-height:1.35}#mem-body{color:#dcf5ffb8;font-size:14px;line-height:1.9}#mem-nav,#proj-nav{pointer-events:auto;opacity:0;visibility:hidden;flex-direction:column;gap:14px;transition:opacity .8s,visibility .8s;display:flex;position:absolute;top:50%;right:34px;transform:translateY(-50%)}#mem-nav button,#proj-nav button{cursor:pointer;background:0 0;border:1px solid #7ff6ff73;width:8px;height:8px;padding:0;transition:all .3s;transform:rotate(45deg)}#mem-nav button:hover,#mem-nav button:focus-visible,#proj-nav button:hover,#proj-nav button:focus-visible{border-color:var(--cyan);outline:none}#mem-nav button.active,#proj-nav button.active{background:var(--cyan);border-color:var(--cyan);box-shadow:0 0 10px var(--cyan)}#mem-hint{letter-spacing:.25em;white-space:nowrap;opacity:0;font-size:10px;transition:opacity .8s;position:absolute;bottom:30px;left:50%;transform:translate(-50%)}body[data-layer="2"] #mem-nav{opacity:1;visibility:visible}body[data-layer="2"] #mem-hint{opacity:1}#skill-labels{pointer-events:none;position:absolute;inset:0}.skill-label{white-space:nowrap;font:inherit;letter-spacing:.12em;cursor:pointer;color:var(--white);border:1px solid rgba(127, 246, 255, calc(.08 + var(--depth,1) * .22));opacity:0;visibility:hidden;pointer-events:auto;background:#0305078c;padding:3px 8px;font-size:11px;transition:opacity .6s,visibility .6s,color .3s,border-color .3s,box-shadow .3s;position:absolute;top:0;left:0}body.skills-ready .skill-label{opacity:calc(.35 + var(--depth,1) * .65);visibility:visible}.skill-label.linked{color:var(--cyan);border-color:#7ff6ff8c}.skill-label.active,.skill-label:hover,.skill-label:focus-visible{color:var(--accent);border-color:var(--accent);outline:none;box-shadow:0 0 12px #ff7a5966;opacity:1!important}#skill{opacity:0;visibility:hidden;border-left:1px solid #7ff6ff40;width:min(340px,30vw);padding-left:22px;transition:opacity .8s .6s,visibility .8s .6s;position:absolute;top:50%;left:62%;transform:translateY(-50%)}#skill-name{letter-spacing:.04em;color:var(--white);text-shadow:0 0 18px #7ff6ff59;margin-bottom:22px;font-size:clamp(24px,2.6vw,36px);font-weight:600}.skill-meta{letter-spacing:.2em;justify-content:space-between;margin-bottom:8px;font-size:11px;display:flex}#skill-pct{color:var(--accent)}.skill-bar{background:#7ff6ff26;height:2px;margin-bottom:24px}#skill-fill{background:var(--cyan);width:0;height:100%;box-shadow:0 0 10px var(--cyan);transition:width .9s cubic-bezier(.2,.8,.2,1)}#skill-links{color:var(--cyan);min-height:1.9em;font-size:13px;line-height:1.9}#skill-hint{letter-spacing:.25em;white-space:nowrap;opacity:0;font-size:10px;transition:opacity .8s;position:absolute;bottom:30px;left:50%;transform:translate(-50%)}body[data-layer="3"] #skill{opacity:1;visibility:visible}body[data-layer="3"] #skill-hint{opacity:1}body[data-layer="3"] #mem-nav,body[data-layer="3"] #mem-hint{opacity:0;visibility:hidden}#project{opacity:0;visibility:hidden;border-left:1px solid #7ff6ff40;width:min(420px,34vw);padding-left:22px;transition:opacity .6s,visibility .6s;position:absolute;top:50%;left:58%;transform:translateY(-50%)}#project.show{opacity:1;visibility:visible}#project.show:before{content:"";background:var(--cyan);width:1px;height:40%;box-shadow:0 0 10px var(--cyan);animation:1.4s ease-out forwards sweep;position:absolute;top:0;left:-1px}#proj-year{letter-spacing:.25em;color:var(--accent);min-height:1em;margin-bottom:10px;font-size:13px}#proj-title{letter-spacing:.04em;color:var(--white);text-shadow:0 0 18px #7ff6ff59;margin-bottom:16px;font-size:clamp(22px,2.4vw,32px);font-weight:600;line-height:1.35}#proj-body{color:#dcf5ffb8;margin-bottom:18px;font-size:14px;line-height:1.9}#proj-tags{flex-wrap:wrap;gap:8px;margin-bottom:26px;list-style:none;display:flex}#proj-tags li{letter-spacing:.15em;color:var(--cyan);border:1px solid #7ff6ff4d;padding:3px 8px;font-size:10px}#proj-link{letter-spacing:.2em;color:var(--bg);background:var(--cyan);pointer-events:auto;padding:10px 18px;font-size:12px;text-decoration:none;transition:background .3s,box-shadow .3s,color .3s;display:inline-block;box-shadow:0 0 16px #7ff6ff73}#proj-link:hover,#proj-link:focus-visible,body.portal-hover #proj-link{background:var(--accent);outline:none;box-shadow:0 0 22px #ff7a5999}#proj-link[aria-disabled=true]{color:var(--dim);box-shadow:none;cursor:default;background:0 0;border:1px dashed #c8f0ff4d}body.portal-hover{cursor:pointer}#proj-link.denied{animation:.5s steps(2,end) 2 denied}@keyframes denied{50%{color:var(--accent);border-color:var(--accent)}}#proj-hint{letter-spacing:.25em;white-space:nowrap;opacity:0;font-size:10px;transition:opacity .8s;position:absolute;bottom:30px;left:50%;transform:translate(-50%)}body[data-layer="4"] #proj-nav{opacity:1;visibility:visible}body[data-layer="4"] #proj-hint{opacity:1}#contact{opacity:0;visibility:hidden;border-left:1px solid #7ff6ff40;width:min(440px,36vw);padding-left:22px;transition:opacity .8s .4s,visibility .8s .4s;position:absolute;top:50%;left:58%;transform:translateY(-50%)}#contact.show{opacity:1;visibility:visible}#contact.show:before{content:"";background:var(--cyan);width:1px;height:40%;box-shadow:0 0 10px var(--cyan);animation:1.4s ease-out .4s forwards sweep;position:absolute;top:0;left:-1px}#contact-title{letter-spacing:.04em;color:var(--white);text-shadow:0 0 18px #7ff6ff59;margin-bottom:14px;font-size:clamp(24px,2.6vw,36px);font-weight:600;line-height:1.3}#contact-body{color:#dcf5ffb8;margin-bottom:26px;font-size:14px;line-height:1.9}#contact-channels{margin-bottom:30px;list-style:none}#contact-channels li{border-bottom:1px solid #7ff6ff1a;grid-template-columns:76px 1fr auto;align-items:center;gap:12px;padding:12px 0;display:grid}.ch-label{letter-spacing:.2em;font-size:10px}.ch-value{color:var(--cyan);pointer-events:auto;text-overflow:ellipsis;white-space:nowrap;font-size:14px;text-decoration:none;transition:color .3s,text-shadow .3s;overflow:hidden}a.ch-value[href]:hover,a.ch-value[href]:focus-visible{color:var(--accent);text-shadow:0 0 10px #ff7a5980;outline:none}.ch-copy,#disconnect{font:inherit;letter-spacing:.15em;cursor:pointer;pointer-events:auto;color:var(--dim);background:0 0;border:1px solid #7ff6ff40;padding:5px 10px;font-size:10px;transition:all .3s}.ch-copy:hover,.ch-copy:focus-visible,#disconnect:hover,#disconnect:focus-visible{color:var(--cyan);border-color:var(--cyan);outline:none}.contact-foot{letter-spacing:.15em;justify-content:space-between;align-items:center;font-size:10px;display:flex}#disconnect{color:var(--accent);border-color:#ff7a5966}#disconnect:hover,#disconnect:focus-visible{color:var(--bg);background:var(--accent);border-color:var(--accent)}#contact-hint{letter-spacing:.25em;white-space:nowrap;opacity:0;font-size:10px;transition:opacity .8s;position:absolute;bottom:30px;left:50%;transform:translate(-50%)}body[data-layer="5"] #contact-hint{opacity:1}@media (prefers-reduced-motion:reduce){#memory.show:before,#project.show:before,#contact.show:before{opacity:0;animation:none}}@media (width<=640px){.tl,.bl{left:18px}.tr{right:14px}.br{right:18px}.bl{bottom:130px}.br{max-width:45vw;bottom:130px}#tagline{white-space:normal;text-align:center;letter-spacing:.2em;width:86vw;line-height:1.8}#scroll-hint{white-space:normal;width:80vw;line-height:1.8}#memory{width:auto;inset:auto 9vw 180px;transform:none}#mem-title{font-size:20px}#mem-body{font-size:13px}#mem-nav,#proj-nav{top:38%;right:16px}#mem-hint{white-space:normal;text-align:center;width:80vw;line-height:1.8}#skill{width:auto;inset:auto 9vw 150px;transform:none}#skill-name{font-size:22px}#skill-hint{white-space:normal;text-align:center;width:80vw;line-height:1.8}.skill-label{padding:2px 6px;font-size:10px}#project{width:auto;inset:auto 9vw 140px;transform:none}#proj-title{font-size:20px}#proj-body{margin-bottom:12px;font-size:13px}#proj-tags{margin-bottom:16px}#proj-hint{white-space:normal;text-align:center;width:80vw;line-height:1.8}#contact{width:auto;inset:auto 9vw 110px;transform:none}#contact-title{font-size:21px}#contact-body{margin-bottom:14px;font-size:13px}#contact-channels{margin-bottom:18px}#contact-channels li{grid-template-columns:56px 1fr auto;padding:9px 0}.ch-value{font-size:13px}#contact-hint{white-space:normal;text-align:center;width:80vw;line-height:1.8;bottom:22px}}
