:root{--_build:2;--cream:#f1ead8;--cream-2:#e8dec5;--cream-deep:#dccfa8;--ink:#15161a;--ink-soft:#2a2a30;--ink-mid:#4a4a52;--paper:#fbf7eb;--line:#15161a;--poke-red:#cf3a2f;--poke-yellow:#f2c037;--poke-blue:#2d63b5;--poke-green:#4ea54a;--poke-type-brew:#b67a35;--poke-type-systems:#a0414a;--poke-type-data:#2f7a6a;--dex-badge-ink:#15161a;--ball-orange:#d96b2a;--ball-navy:#1c2c4a;--ball-court:#c98a4b;--ball-line:#ecd9b8;--poke-red-ink:#a52a1d;--ball-orange-ink:#8f3e12;--accent:var(--poke-red);--accent-2:var(--poke-yellow);--accent-3:var(--poke-blue);--accent-ink:var(--poke-red-ink);--win-bg:var(--paper);--win-bar:var(--cream-2);--win-shadow:6px 6px 0 0 var(--ink);--win-red:#ff5f57;--win-amber:#febc2e;--win-green:#28c840;--z-cursor:9999;--z-menu:200;--z-dock:200;--z-modal:500;--ease-out-quint:cubic-bezier(.22, 1, .36, 1)}[data-mode=dark]{--cream:#15161a;--cream-2:#1f2026;--cream-deep:#2a2b32;--ink:#f1ead8;--ink-soft:#d9d3c2;--ink-mid:#a39e90;--paper:#1c1d22;--line:#f1ead8;--win-bg:#1c1d22;--win-bar:#25262c;--win-shadow:6px 6px 0 0 #000;--poke-red:#ff5b4d;--poke-yellow:#ffd24a;--poke-blue:#5a8fff;--ball-orange:#ff8a3d;--ball-court:#e0a76d;--poke-type-brew:#d99b4a;--poke-type-systems:#c85a66;--poke-type-data:#3fa38f;--poke-red-ink:var(--poke-red);--ball-orange-ink:var(--ball-orange);--win-red:#c14a40;--win-amber:#bf8d1e;--win-green:#1f9430}[data-theme=pokemon]{--accent:var(--poke-red);--accent-2:var(--poke-yellow);--accent-3:var(--poke-blue);--accent-ink:var(--poke-red-ink)}[data-theme=basketball]{--accent:var(--ball-orange);--accent-2:var(--ball-navy);--accent-3:var(--ball-court);--accent-ink:var(--ball-orange-ink)}[data-theme=basketball][data-mode=dark]{--accent-2:#5a78b8}*{box-sizing:border-box}html,body{background:var(--cream);color:var(--ink);cursor:none;margin:0;padding:0;font-family:JetBrains Mono,Menlo,monospace;font-size:14px;line-height:1.55;overflow-x:hidden}body{background-image:radial-gradient(circle at 1px 1px, color-mix(in srgb, var(--ink) 10%, transparent) 1px, transparent 0);background-size:18px 18px;background-attachment:fixed;transition:background-color .4s,color .4s}@media (hover:none){html,body{cursor:auto}}::selection{background:var(--accent);color:var(--paper)}button,a{color:inherit;cursor:none;font-family:inherit}a{color:var(--accent-ink);text-decoration:none}a:hover{text-decoration:underline}.pixel-xl,.pixel-lg,.pixel-md,.pixel-sm,.pixel-xs{letter-spacing:.5px;font-family:VT323,JetBrains Mono,monospace;font-weight:400;line-height:.95}.pixel-xl{font-size:clamp(64px,11vw,168px)}.pixel-lg{font-size:clamp(48px,7vw,96px)}.pixel-md{font-size:clamp(32px,4vw,56px)}.pixel-sm{font-size:32px}.pixel-xs{font-size:22px}.label{letter-spacing:1px;text-transform:uppercase;font-family:"Press Start 2P",VT323,monospace;font-size:9px}.label-md{letter-spacing:1.5px;text-transform:uppercase;font-family:"Press Start 2P",VT323,monospace;font-size:11px;line-height:1.5}.mono{font-family:JetBrains Mono,monospace}.window{background:var(--win-bg);border:2px solid var(--line);box-shadow:var(--win-shadow);border-radius:4px;margin-bottom:clamp(40px,7vw,64px);transition:box-shadow .2s,transform .2s;position:relative}.window--tight{margin-bottom:clamp(20px,3.5vw,32px)}.window--generous{margin-bottom:clamp(64px,11vw,112px)}.window-bar{background:var(--win-bar);border-bottom:2px solid var(--line);height:32px;color:var(--ink);border-radius:2px 2px 0 0;align-items:center;gap:10px;padding:0 12px;font-family:JetBrains Mono,monospace;font-size:12px;display:flex;position:relative}.window-bar:after{content:"";pointer-events:none;position:absolute;inset:0}.window-bar .lights{gap:6px;display:flex}.window-bar .lights span{background:var(--ink);border-radius:50%;width:11px;height:11px;display:inline-block}.window-bar .lights span:first-child{background:var(--win-red)}.window-bar .lights span:nth-child(2){background:var(--win-amber)}.window-bar .lights span:nth-child(3){background:var(--win-green)}.window-bar .title{text-align:center;letter-spacing:.3px;flex:1;font-size:13px;font-weight:500}.window-bar .meta{color:var(--ink-mid);font-size:11px}.window-body{padding:32px}@media (width<=700px){.window-body{padding:20px}}.window-statusbar{border-top:2px solid var(--line);color:var(--ink-mid);background:var(--win-bar);border-radius:0 0 2px 2px;justify-content:space-between;align-items:center;padding:6px 12px;font-size:11px;display:flex}.hero-grid{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:0;display:grid}.about-grid{grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);align-items:start;gap:24px;display:grid}.edu-grid{grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:24px;display:grid}.contact-grid{grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);gap:28px;display:grid}@media (width<=820px){.hero-grid,.about-grid,.edu-grid,.contact-grid{grid-template-columns:minmax(0,1fr);gap:16px}.hero-grid>div:first-child{border-right:none!important;border-bottom:2px solid var(--line)!important;padding:28px 22px!important}.hero-grid>aside{padding:22px!important}.about-grid{gap:18px}.window-body{padding:20px!important}.pixel-xl{font-size:clamp(48px,14vw,96px)}.pixel-lg{font-size:clamp(40px,9vw,72px)}.pixel-md{font-size:clamp(28px,6vw,44px)}.menu-bar .item:not(.brand):not([data-keep]),.menu-bar .clock{display:none}.menu-bar .brand{margin-right:8px}}@media (width<=480px){#desktop{padding:52px 10px 88px}.window{box-shadow:4px 4px 0 0 var(--ink)}.pixel-xl{font-size:clamp(40px,12vw,72px)}.hero-grid .row.gap-3.wrap{gap:8px}}@media (height<=820px) and (width>=821px){.hero-left{padding-top:20px!important;padding-bottom:20px!important}.hero-boot-wrap{margin-bottom:12px!important}.hero-tagline{margin:10px 0 14px!important}.hero-grid .pixel-xl{font-size:clamp(56px,9vw,120px)}}#desktop{max-width:1180px;min-height:100vh;margin:0 auto;padding:56px 24px 100px;position:relative}@media (width<=700px){#desktop{padding:56px 12px 96px}}.cursor{pointer-events:none;width:22px;height:22px;z-index:var(--z-cursor);transition:opacity .2s;position:fixed;top:0;left:0;transform:translate(-2px,-2px)}.cursor svg{display:block}.cursor.hover .arrow{display:none}.cursor.hover .pointer{display:block}.cursor .pointer{display:none}.cursor-trail{background:var(--accent);pointer-events:none;width:6px;height:6px;z-index:calc(var(--z-cursor) - 1);opacity:0;border-radius:1px;position:fixed}.menu-bar{background:var(--cream-2);border-bottom:2px solid var(--line);height:36px;z-index:var(--z-menu);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);align-items:center;gap:4px;padding:0 14px;font-family:JetBrains Mono,monospace;font-size:12px;display:flex;position:fixed;top:0;left:0;right:0}.menu-bar .brand{align-items:center;gap:8px;margin-right:14px;font-family:"Press Start 2P",monospace;font-size:10px;display:flex}.menu-bar .brand .glyph{background:var(--accent);border:1.5px solid var(--line);width:18px;height:18px;display:inline-block;position:relative}.menu-bar .brand .glyph:after{content:"";background:var(--paper);position:absolute;inset:4px}.menu-bar .brand .glyph:before{content:"";background:var(--line);z-index:2;height:2px;position:absolute;top:50%;left:0;right:0}.menu-bar .item{cursor:none;-webkit-user-select:none;user-select:none;border-radius:3px;padding:6px 10px}.menu-bar button.item{font:inherit;background:0 0;border:none}.menu-bar .item:hover{background:var(--ink);color:var(--paper)}.menu-bar .spacer{flex:1}.menu-bar .right{color:var(--ink-mid);align-items:center;gap:14px;font-size:11px;display:flex}.menu-bar .right .clock{text-align:right;min-width:95px}.dock{background:var(--cream-2);border:2px solid var(--line);box-shadow:var(--win-shadow);z-index:var(--z-dock);border-radius:8px;align-items:center;gap:6px;padding:6px;display:flex;position:fixed;bottom:16px;left:50%;transform:translate(-50%)}.dock-icon{background:var(--paper);border:1.5px solid var(--line);width:44px;height:44px;color:var(--ink);cursor:none;background-clip:padding-box;border-radius:4px;place-items:center;font-family:"Press Start 2P",monospace;font-size:9px;transition:transform .18s,background .18s,color .18s;display:grid;position:relative}.dock-icon:after{content:attr(data-tip);background:var(--ink);color:var(--paper);white-space:nowrap;pointer-events:none;opacity:0;border-radius:3px;padding:4px 8px;font-size:11px;transition:opacity .15s;position:absolute;bottom:calc(100% + 8px);left:50%;transform:translate(-50%)}.dock-icon:hover:after{opacity:1}.dock-icon:hover{background:var(--accent);color:var(--paper);transform:translateY(-4px)scale(1.08)}.dock-icon-caption{display:none}.dock-divider{background:var(--ink-mid);width:1.5px;height:30px;margin:0 4px}@media (width<=700px){.menu-bar .item{padding:6px;font-size:11px}.menu-bar .brand{font-size:9px}.dock{gap:2px;max-width:calc(100vw - 12px);padding:4px 3px 5px;bottom:8px;overflow-x:auto}.dock-icon{flex-direction:column;flex-shrink:0;justify-content:center;align-items:center;gap:2px;width:36px;height:46px;font-size:8px;display:flex}.dock-icon:after{display:none}.dock-icon-caption{letter-spacing:.1px;color:var(--ink-mid);font-family:JetBrains Mono,monospace;font-size:6px;display:block}.dock-icon:hover .dock-icon-caption{color:inherit}.dock-divider{height:24px;margin:0 2px}input:not([type=range]):not([type=color]),textarea{font-size:16px!important}}.btn{background:var(--paper);border:2px solid var(--line);letter-spacing:.4px;box-shadow:3px 3px 0 0 var(--line);cursor:none;border-radius:3px;align-items:center;gap:8px;padding:10px 18px;font-family:JetBrains Mono,monospace;font-size:13px;font-weight:500;transition:transform .12s,box-shadow .12s,background .12s;display:inline-flex;text-decoration:none!important}.btn:hover{background:var(--accent);color:var(--paper);box-shadow:5px 5px 0 0 var(--line);transform:translate(-2px,-2px)}.btn:active{box-shadow:0 0 0 0 var(--line);transform:translate(2px,2px)}.btn-primary{background:var(--ink);color:var(--paper)}.btn-primary:hover{background:var(--accent);color:var(--paper)}.btn-sm{background:var(--paper);border:1.5px solid var(--line);box-shadow:2px 2px 0 0 var(--line);cursor:none;border-radius:2px;align-items:center;padding:3px 8px;font-family:JetBrains Mono,monospace;font-size:11px;transition:transform .12s,box-shadow .12s,background .12s;display:inline-flex}.btn-sm:hover{background:var(--accent);color:var(--paper);box-shadow:3px 3px 0 0 var(--line);transform:translate(-1px,-1px)}.btn-sm:active{box-shadow:0 0 0 0 var(--line);transform:translate(1px,1px)}.dashed-rule{border:none;border-top:2px dashed var(--ink);opacity:.4;margin:24px 0}.placeholder{background:repeating-linear-gradient(45deg, transparent 0 8px, color-mix(in srgb, var(--ink) 6%, transparent) 8px 16px), var(--cream-2);border:1.5px dashed var(--ink-mid);color:var(--ink-mid);letter-spacing:.5px;text-transform:uppercase;place-items:center;font-family:JetBrains Mono,monospace;font-size:11px;display:grid}.crt-overlay{pointer-events:none;z-index:2;mix-blend-mode:multiply;opacity:0;background:repeating-linear-gradient(#0000 0 2px,#0000000a 2px 3px);transition:opacity .4s;position:fixed;inset:0}[data-mode=dark] .crt-overlay{opacity:.6;mix-blend-mode:multiply;background:repeating-linear-gradient(#0000 0 2px,#ffffff0d 2px 3px)}.reveal.armed{opacity:0;transform:translateY(28px)}.reveal{transition:opacity .7s cubic-bezier(.2,.7,.2,1),transform .7s cubic-bezier(.2,.7,.2,1)}.reveal.in{opacity:1;transform:translateY(0)}.tilt{transform-style:preserve-3d;will-change:transform;transition:transform .2s}@media (width>=700px){.project-card--featured{grid-column:span 2}}.window.armed .project-card{opacity:0;transform:translateY(20px)}.project-card{transition:opacity .5s var(--ease-out-quint), transform .5s var(--ease-out-quint)}.window.in .project-card{opacity:1;transform:translateY(0)}.window.in .project-card:first-child{transition-delay:0s}.window.in .project-card:nth-child(2){transition-delay:70ms}.window.in .project-card:nth-child(3){transition-delay:.14s}.window.in .project-card--featured{transition-duration:.6s;transition-delay:.24s}.window.armed .project-card--featured{transform:translateY(20px)scale(.98)}.window.in .project-card--featured{transform:translateY(0)scale(1)}.window.armed .exp-entry{opacity:0;transform:translateY(20px)}.exp-entry{transition:opacity .5s var(--ease-out-quint), transform .5s var(--ease-out-quint)}.window.in .exp-entry{opacity:1;transform:translateY(0)}.window.in article.exp-entry:first-of-type{transition-delay:0s}.window.in article.exp-entry:nth-of-type(2){transition-delay:90ms}.window.in article.exp-entry:nth-of-type(3){transition-delay:.18s}.window.in article.exp-entry:nth-of-type(4){transition-delay:.27s}@keyframes expNodePulse{0%,to{box-shadow:0 0 0 0 color-mix(in srgb, var(--accent) 55%, transparent)}50%{box-shadow:0 0 0 5px color-mix(in srgb, var(--accent) 0%, transparent)}}.exp-node--current{animation:2.2s ease-in-out infinite expNodePulse}.dex-card{transition:transform .2s var(--ease-out-quint), box-shadow .2s var(--ease-out-quint), opacity .5s var(--ease-out-quint)}.dex-card:hover{box-shadow:7px 7px 0 0 var(--line);transform:translateY(-4px)}.dex-card .dex-glyph{transition:transform .2s var(--ease-out-quint)}.dex-card:hover .dex-glyph{transform:scale(1.08)}.window.armed .dex-card{opacity:0;transform:translateY(20px)}.window.in .dex-card{opacity:1;transform:translateY(0)}.window.in .dex-card:first-child{transition-delay:0s}.window.in .dex-card:nth-child(2){transition-delay:60ms}.window.in .dex-card:nth-child(3){transition-delay:.12s}.window.in .dex-card:nth-child(4){transition-delay:.18s}.window.in .dex-card:nth-child(5){transition-delay:.24s}.window.in .dex-card:nth-child(6){transition-delay:.3s}.window.in .dex-card:hover{transition-delay:0s}.chip-reveal{transition:opacity .4s var(--ease-out-quint), transform .4s var(--ease-out-quint);transition-delay:calc(min(var(--i,0), 14) * 22ms)}.window.armed .chip-reveal{opacity:0;transform:translateY(8px)}.window.in .chip-reveal{opacity:1;transform:translateY(0)}.edu-card{transition:opacity .5s var(--ease-out-quint), transform .5s var(--ease-out-quint)}.window.armed .edu-card{opacity:0;transform:translateY(20px)}.window.in .edu-card{opacity:1;transform:translateY(0)}.window.in .edu-card:first-child{transition-delay:0s}.window.in .edu-card:nth-child(2){transition-delay:90ms}.contact-link{transition:transform .16s var(--ease-out-quint), box-shadow .16s var(--ease-out-quint), background .16s ease, opacity .45s var(--ease-out-quint)}.window.armed .contact-link{opacity:0;transform:translateY(16px)}.window.in .contact-link{opacity:1}.window.in .contact-link:not(:hover):not(:active){transform:translateY(0)}.window.in .contact-link:first-of-type{transition-delay:0s}.window.in .contact-link:nth-of-type(2){transition-delay:70ms}.window.in .contact-link:nth-of-type(3){transition-delay:.14s}.window.in .contact-link:nth-of-type(4){transition-delay:.21s}.contact-link:hover{box-shadow:5px 5px 0 0 var(--line);background:var(--paper);transform:translate(-2px,-2px)}.contact-link:active{box-shadow:1px 1px 0 0 var(--line);transform:translate(1px,1px)}.contact-link-icon{transition:background .16s}.contact-link:hover .contact-link-icon{background:var(--accent)}.contact-link-copied{animation:copiedPop .3s var(--ease-out-quint) both;display:inline-block}@keyframes copiedPop{0%{opacity:0;transform:translateY(-3px)}to{opacity:1;transform:translateY(0)}}.chip{background:var(--cream-2);border:1.5px solid var(--line);letter-spacing:.3px;white-space:nowrap;border-radius:3px;align-items:center;gap:6px;padding:4px 9px;font-family:JetBrains Mono,monospace;font-size:11px;display:inline-flex}.chip-solid{background:var(--ink);color:var(--paper)}.chip-accent{background:var(--accent);color:var(--paper);border-color:var(--line)}@keyframes blink{50%{opacity:0}}.caret{animation:1s step-end infinite blink}.ach-icon{animation:achIconPop .4s var(--ease-out-quint) .12s both;display:inline-block}@keyframes achIconPop{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.ach-ring{border:2px solid var(--accent);pointer-events:none;opacity:0;animation:achRingPulse .6s var(--ease-out-quint) .28s both;position:absolute;inset:-3px}@keyframes achRingPulse{0%{opacity:.9;transform:scale(.95)}to{opacity:0;transform:scale(1.1)}}@keyframes drift{0%,to{transform:translate(0)}50%{transform:translate(4px,-4px)}}@keyframes glitch{0%,to{text-shadow:none;transform:translate(0)}20%{text-shadow:-2px 0 var(--accent), 2px 0 var(--accent-3);transform:translate(-1px)}40%{text-shadow:2px 0 var(--accent-3), -2px 0 var(--accent);transform:translate(1px)}60%{text-shadow:-1px 0 var(--accent);transform:translateY(1px)}}.glitchable:hover{animation:.4s steps(2,end) glitch}@keyframes scanline{0%{transform:translateY(-100%)}to{transform:translateY(100%)}}.modal-backdrop{z-index:var(--z-modal);background:#000000b3;place-items:center;padding:20px;transition:opacity .18s ease-out;display:grid;position:fixed;inset:0;overflow-y:auto}.modal-backdrop.is-entering,.modal-backdrop.is-closing{opacity:0}.modal-backdrop.is-closing{pointer-events:none}.modal-backdrop>.window{transition:opacity .2s var(--ease-out-quint), transform .2s var(--ease-out-quint)}.modal-backdrop.is-entering>.window,.modal-backdrop.is-closing>.window{opacity:0;transform:translateY(14px)scale(.96)}@media (width<=700px){.modal-backdrop{align-items:flex-start;padding:16px}}.game-touch-controls{display:none}@media (pointer:coarse){.game-touch-controls{border-top:1.5px solid var(--line);flex-direction:column;align-items:center;gap:12px;margin-top:18px;padding-top:16px;display:flex}}.game-touch-btn{background:var(--paper);width:50px;height:50px;color:var(--ink);border:2px solid var(--line);box-shadow:2px 2px 0 0 var(--line);cursor:pointer;-webkit-tap-highlight-color:transparent;touch-action:manipulation;-webkit-user-select:none;user-select:none;border-radius:4px;justify-content:center;align-items:center;font-size:18px;line-height:1;transition:transform 80ms,box-shadow 80ms,background 80ms;display:flex}.game-touch-btn:active{box-shadow:0 0 0 0 var(--line);background:var(--accent);color:var(--paper);transform:translate(1px,1px)}.game-touch-btn--wide{letter-spacing:.5px;width:auto;padding:0 16px;font-family:JetBrains Mono,monospace;font-size:10px}.game-dpad{grid-template:".up."50px"left.right"50px".down."50px/50px 50px 50px;gap:4px;display:grid}.game-action-row{gap:10px;display:flex}::-webkit-scrollbar{width:14px;height:14px}::-webkit-scrollbar-track{background:var(--cream-2);border-left:2px solid var(--line)}::-webkit-scrollbar-thumb{background:var(--ink);border:3px solid var(--cream-2);border-radius:0}.row{display:flex}.col{flex-direction:column;display:flex}.gap-2{gap:8px}.gap-3{gap:12px}.gap-4{gap:16px}.gap-5{gap:24px}.gap-6{gap:32px}.center{align-items:center}.between{justify-content:space-between}.wrap{flex-wrap:wrap}.muted{color:var(--ink-mid)}input::placeholder,textarea::placeholder{color:var(--ink-mid);opacity:1}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}button:focus-visible,a:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:1px}@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.reveal.armed{opacity:1;transition:none;transform:none}.window.armed .project-card,.window.armed .project-card--featured,.window.armed .exp-entry,.window.armed .dex-card,.window.armed .chip-reveal,.window.armed .edu-card,.window.armed .contact-link{opacity:1;transform:none}.crt-overlay{display:none}.glitchable:hover{animation:none}.tilt{transition:none}.exp-node--current{animation:none}.hero-portrait-aside{opacity:1!important;transition:none!important;transform:none!important}}html[data-motion=reduced] *{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}html[data-motion=reduced] .reveal.armed{opacity:1;transition:none;transform:none}html[data-motion=reduced] .window.armed .project-card,html[data-motion=reduced] .window.armed .project-card--featured,html[data-motion=reduced] .window.armed .exp-entry,html[data-motion=reduced] .window.armed .dex-card,html[data-motion=reduced] .window.armed .chip-reveal,html[data-motion=reduced] .window.armed .edu-card,html[data-motion=reduced] .window.armed .contact-link{opacity:1;transform:none}html[data-motion=reduced] .crt-overlay{display:none}html[data-motion=reduced] .glitchable:hover{animation:none}html[data-motion=reduced] .tilt{transition:none}html[data-motion=reduced] .exp-node--current{animation:none}html[data-motion=reduced] .hero-portrait-aside{opacity:1!important;transition:none!important;transform:none!important}
