.matrix-side{pointer-events:none;z-index:4;opacity:.6;background:0 0;width:9vw;position:fixed;top:0;bottom:0;overflow:hidden}.matrix-side.left{left:0;-webkit-mask-image:linear-gradient(90deg,#000 15%,#0000);mask-image:linear-gradient(90deg,#000 15%,#0000)}.matrix-side.right{right:0;-webkit-mask-image:linear-gradient(270deg,#000 15%,#0000);mask-image:linear-gradient(270deg,#000 15%,#0000)}.matrix-column{white-space:nowrap;text-align:center;font-family:JetBrains Mono,Courier New,Courier,monospace;font-size:.8rem;line-height:1rem;animation-name:matrixFall,matrixHue;animation-duration:90s,90s;animation-timing-function:linear;animation-iteration-count:infinite;position:absolute;top:0}@keyframes matrixFall{0%{transform:translateY(-100%)}to{transform:translateY(100vh)}}@keyframes matrixHue{0%,to{color:#00ff409a;text-shadow:0 0 6px #00ff409a}33%{color:#0ff;text-shadow:0 0 6px #0ff}45%{color:#ffffff51;text-shadow:0 0 6px #ffffff51}66%{color:#d900ff7b;text-shadow:0 0 6px #d900ff7b}77%{color:#0909099b;text-shadow:0 0 6px #0909099b}}@media (width<=900px){.matrix-side{opacity:.3;width:16vw}}@media (prefers-reduced-motion:reduce){.matrix-side{display:none}}:root{--bg:#07060a;--ink:#ebe7df;--dim:#ebe7df8c;--line:#ebe7df33;--accent:#ecf014;--frame:16px;--pad:clamp(20px, 3.2vw, 48px);--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}html,body,#root{width:100%;height:100%;margin:0;overflow:hidden}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;font-family:JetBrains Mono,ui-monospace,SF Mono,Menlo,Consolas,monospace}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}::selection{background:var(--accent);color:#111}.app{position:fixed;inset:0}.app-container{z-index:0;position:fixed;inset:0;overflow:hidden}canvas{z-index:2;display:block;position:fixed;inset:0}.app>div:has(>canvas){z-index:2;transition:opacity .3s;inset:0;position:fixed!important}.page-open>div:has(>canvas){opacity:.35}.rotating-background:before{content:"";filter:blur(2px)brightness(.1);background-image:url(/textures/background.png);background-position:50%;background-size:cover;animation:120s linear infinite spin;position:absolute;inset:-30%}@keyframes spin{0%{filter:blur()brightness(.1)hue-rotate();transform:rotate(0)scale(1)}to{filter:blur(2px)brightness(.1)hue-rotate(360deg);transform:rotate(360deg)scale(1)}}.dot-grid{background-image:radial-gradient(#ebe7df29 1px,#0000 1.5px);background-size:24px 24px;position:absolute;inset:0}@keyframes static-animation{0%{transform:translate(0)}10%{transform:translate(-5%,-10%)}20%{transform:translate(-15%,5%)}30%{transform:translate(7%,-25%)}40%{transform:translate(-5%,25%)}50%{transform:translate(-15%,10%)}60%{transform:translate(15%)}70%{transform:translateY(15%)}80%{transform:translate(3%,35%)}90%{transform:translate(-10%,10%)}to{transform:translate(0)}}.noise-bg{opacity:.05;pointer-events:none;z-index:3;background:url(/textures/noise.png);width:200%;height:200%;animation:.2s step-end infinite static-animation;position:fixed;inset:-50%}.vignette{pointer-events:none;z-index:3;background:linear-gradient(90deg,#07060ab3,#0000 55%),radial-gradient(#0000 45%,#07060abf 100%);position:fixed;inset:0}.glowing-border-layer{pointer-events:none;z-index:4;border:1px solid #ebe7df80;position:fixed;box-shadow:0 0 18px #ebe7df2e,inset 0 0 18px #ebe7df1a}.hud{inset:var(--frame);padding:var(--pad);pointer-events:none;z-index:10;flex-direction:column;justify-content:space-between;transition:opacity .25s;display:flex;position:fixed}.hud button{pointer-events:auto}.hud-top,.hud-bottom{color:var(--dim);letter-spacing:.22em;justify-content:space-between;align-items:center;font-size:11px;font-weight:500;display:flex}.hud-bottom{justify-content:flex-end}.status-dot{background:var(--accent);width:6px;height:6px;box-shadow:0 0 8px var(--accent);margin-right:10px;display:inline-block}.clock{font-variant-numeric:tabular-nums}.hero{margin-top:auto;margin-bottom:clamp(16px,4vh,40px)}.terminal-title{color:var(--ink);letter-spacing:-.045em;margin:0 0 clamp(24px,4.5vh,44px);font-size:clamp(2.75rem,7.2vw,6.75rem);font-weight:800;line-height:.94;position:relative}.terminal-title .prompt{color:var(--accent);letter-spacing:0;text-shadow:0 0 10px #ecf01499;margin-bottom:.9em;font-size:.24em;display:block}.terminal-title .cursor{background:var(--accent);width:.5em;height:.72em;margin-left:.14em;animation:1.1s step-end infinite blink;display:inline-block;box-shadow:0 0 14px #ecf01480}@keyframes blink{50%{opacity:0}}.button-panel{flex-direction:column;align-items:flex-start;gap:8px;display:flex}.button-panel button{border:1px solid var(--line);width:240px;color:var(--ink);letter-spacing:.2em;text-align:left;cursor:pointer;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#07060a73;padding:12px 16px;font-size:13px;font-weight:700;transition:background .15s,border-color .15s,color .15s,transform .15s,box-shadow .15s}.button-panel .index{color:var(--accent);margin-right:16px;font-weight:500}.button-panel button:hover,.button-panel button.active{background:var(--accent);border-color:var(--accent);color:#111;transform:translate(8px);box-shadow:0 0 24px #ecf01447}.button-panel button:hover .index,.button-panel button.active .index{color:#111}.button-panel button:active{transform:translate(12px)}.page-open .hud-bottom{opacity:0}.content-window{box-sizing:border-box;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);border:1px solid var(--line);border-top:2px solid var(--accent);z-index:20;background:#07060ac7;width:min(680px,52vw);padding:0 clamp(20px,3vw,40px) clamp(20px,3vw,40px);position:fixed;top:clamp(72px,12vh,120px);bottom:clamp(72px,12vh,120px);right:clamp(56px,8vw,140px);overflow-y:auto}.content-header{border-bottom:1px solid var(--line);color:var(--dim);letter-spacing:.2em;background:#07060ae6;justify-content:space-between;align-items:center;margin:0 calc(-1*clamp(20px,3vw,40px));padding:14px clamp(20px,3vw,40px);font-size:11px;display:flex;position:sticky;top:0}.content-header button{border:1px solid var(--line);color:var(--dim);letter-spacing:.2em;cursor:pointer;background:0 0;padding:6px 10px;font-size:11px;transition:color .15s,border-color .15s}.content-header button:hover{color:var(--accent);border-color:var(--accent)}.page h2{letter-spacing:-.03em;text-transform:uppercase;margin:36px 0 20px;font-size:clamp(1.75rem,3.4vw,2.75rem);font-weight:800}.page h2:before{content:"> ";color:var(--accent)}.page p{color:var(--dim);margin:0;font-size:14px;line-height:1.7}.page .lead{max-width:52ch;color:var(--ink);margin-bottom:32px;font-size:15px}.page a{color:var(--ink);text-decoration:underline;-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent);text-underline-offset:4px}.page a:hover{color:var(--accent)}.facts{border-top:1px solid var(--line);margin:0}.facts>div{border-bottom:1px solid var(--line);gap:24px;padding:14px 0;font-size:14px;display:flex}.facts dt{color:var(--dim);letter-spacing:.2em;flex:0 0 110px;font-size:11px;line-height:21px}.facts dd{margin:0}.project-list{border-top:1px solid var(--line);margin:0;padding:0;list-style:none}.project-list>li{border-bottom:1px solid var(--line);gap:20px;padding:20px 0;display:flex}.project-list>li>div{flex:1;min-width:0}.project-list .index,.project-list .year{color:var(--accent);letter-spacing:.2em;font-size:11px;line-height:24px}.project-list .year{color:var(--dim)}.project-list h3{margin:0 0 6px;font-size:16px;font-weight:700}.tags{flex-wrap:wrap;gap:6px;margin:12px 0 0;padding:0;list-style:none;display:flex}.tags li{border:1px solid var(--line);color:var(--dim);letter-spacing:.18em;padding:3px 8px;font-size:10px}@media (width<=900px){.vignette{background:linear-gradient(#0000 40%,#07060ad9),radial-gradient(#0000 45%,#07060abf 100%)}.terminal-title{font-size:clamp(2.5rem,13vw,4.5rem)}.button-panel{align-items:stretch}.button-panel button{width:100%}.button-panel button:hover,.button-panel button.active{transform:none}.hud-bottom{display:none}.page-open .hud{opacity:0;pointer-events:none}.page-open .hud button{pointer-events:none}.content-window{width:auto;inset:56px}}@media (width<=520px){.facts dt{flex-basis:76px}.facts dd{overflow-wrap:anywhere;min-width:0}.content-window{inset:28px}}@media (prefers-reduced-motion:reduce){.rotating-background:before,.noise-bg,.terminal-title .cursor{animation:none}}
