:root{--paper: #0f1020;--paper-2: #161a2ef2;--ink: #eee8dc;--ink-2: #b8b2a6;--ink-3: #847f79;--line: #2b3048;--teal: #35c2b5;--marigold: #f0a24a;--rose: #e2688a;--display: "Fraunces", Georgia, "Times New Roman", serif;--pixel: "VT323", "JetBrains Mono", ui-monospace, monospace;--body: "DM Sans", system-ui, -apple-system, "Segoe UI", sans-serif;--mono: "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0}body{background:var(--paper);color:var(--ink);font-family:var(--body);font-size:17px;line-height:1.55;overflow-x:hidden}.mono{font-family:var(--mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase}h1,h2,h3{font-family:var(--display);text-wrap:balance;margin:0;line-height:1.05;font-weight:600}em{font-style:italic;color:var(--teal)}a:focus-visible{outline:2px solid var(--teal);outline-offset:3px}.world{position:fixed;top:0;right:0;bottom:0;left:0;z-index:0}.world canvas{display:block;width:100%!important;height:100%!important}.spacer{position:relative;z-index:0;width:100%;pointer-events:none}.nav{position:fixed;z-index:6;top:env(safe-area-inset-top,0px);left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding-block:18px;padding-left:max(20px,env(safe-area-inset-left,0px));padding-right:max(20px,env(safe-area-inset-right,0px));color:var(--ink-2)}.nav .mark{display:flex;align-items:center;gap:10px;font-family:var(--display);font-style:italic;font-size:18px;letter-spacing:0;text-transform:none;color:var(--ink)}.nav .mark i{width:10px;height:10px;border-radius:50%;background:var(--marigold);display:inline-block}.nav .links{display:flex;gap:22px}.nav a{color:var(--ink-2);text-decoration:none}.nav a:hover{color:var(--ink)}.nav .links svg{display:none}.chapter-ind{position:fixed;z-index:6;top:calc(64px + env(safe-area-inset-top,0px));left:50%;transform:translate(-50%);color:var(--ink-3);text-align:center;transition:opacity .4s;pointer-events:none}.chapter-ind b{color:var(--ink);font-weight:500}.chapter-ind .yr{font-family:var(--display);font-size:15px;letter-spacing:0;text-transform:none;color:var(--ink-2);display:block;margin-top:2px;font-style:italic}.crt{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2;pointer-events:none;background:repeating-linear-gradient(to bottom,#0000 0,#0000 3px,#00000012 3px,#00000012 4px),radial-gradient(ellipse at center,#0000 55%,#00000073)}.dialog{position:fixed;z-index:5;left:50%;transform:translate(-50%) translateY(16px);bottom:calc(22px + env(safe-area-inset-bottom,0px));width:min(860px,calc(100vw - 32px));min-height:136px;padding:18px 26px 22px;cursor:pointer;-webkit-user-select:none;user-select:none;background:#10132a;color:var(--ink);border:2px solid #e9e4d6;border-radius:8px;box-shadow:0 0 0 3px #10132a,0 0 0 5px #e9e4d6,0 20px 50px -20px #000000e6;opacity:0;visibility:hidden;transition:opacity .35s ease,transform .35s ease,visibility 0s linear .35s}.dialog.on{opacity:1;visibility:visible;transform:translate(-50%);transition:opacity .35s ease,transform .35s ease}.dialog-tag{font-family:var(--pixel);font-size:20px;letter-spacing:.04em;color:var(--c);margin-bottom:6px}.dialog-tag b{font-weight:400;color:var(--ink)}.dialog.aside .dialog-tag{color:var(--ink-3)}.dialog-text{margin:0;font-family:var(--pixel);font-size:clamp(22px,2.6vw,30px);line-height:1.22;min-height:2.44em;text-wrap:pretty}.dialog.aside .dialog-text{color:var(--ink-2);font-style:italic}.dialog-text .caret{color:var(--c);animation:caret .9s steps(2) infinite}.dialog-text .rest{visibility:hidden}.dialog-more{position:absolute;right:22px;bottom:12px;font-family:var(--pixel);font-size:22px;color:var(--c);animation:bob 1s ease-in-out infinite}.dialog-more.end{animation:none;color:var(--ink-3)}@keyframes caret{to{opacity:0}}@keyframes bob{0%,to{transform:translateY(0)}50%{transform:translateY(4px)}}.title-card{position:fixed;z-index:6;left:50%;top:34%;transform:translate(-50%,-50%) scale(.96);text-align:center;pointer-events:none;opacity:0;transition:opacity .3s ease,transform .3s ease;text-shadow:0 2px 20px rgba(0,0,0,.9)}.title-card.on{opacity:1;transform:translate(-50%,-50%) scale(1)}.tc-num{font-family:var(--pixel);font-size:clamp(28px,4.5vw,52px);letter-spacing:.12em;color:var(--c)}.tc-year{font-family:var(--pixel);font-size:clamp(60px,11vw,140px);line-height:.95;color:var(--ink)}.tc-kicker{font-family:var(--display);font-style:italic;font-size:clamp(18px,2.4vw,28px);color:var(--ink-2);margin-top:6px}.quest{position:fixed;z-index:6;left:50%;top:calc(110px + env(safe-area-inset-top,0px));transform:translate(-50%,-12px);padding:10px 22px 12px;text-align:center;pointer-events:none;background:#10132a;border:2px solid #e9e4d6;border-radius:6px;box-shadow:0 0 0 3px #10132a,0 0 0 5px #e9e4d6;opacity:0;transition:opacity .3s ease,transform .3s ease}.quest.on{opacity:1;transform:translate(-50%)}.q-label{font-family:var(--pixel);font-size:18px;letter-spacing:.1em;color:var(--marigold)}.q-name{font-family:var(--pixel);font-size:26px;color:var(--ink)}.q-skills{list-style:none;margin:8px 0 0;padding:8px 0 0;border-top:1px dashed var(--line);text-align:left;min-width:260px}.q-skills li{font-family:var(--pixel);font-size:21px;color:var(--ink);line-height:1.25;opacity:0;transform:translate(-8px);animation:skill .25s steps(3) forwards}.q-skills li i{font-style:normal;color:var(--c);margin-right:8px}.q-tools{margin-top:8px;font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);opacity:0;animation:skill .25s steps(3) forwards}@keyframes skill{to{opacity:1;transform:none}}.nav .sound{font:inherit;letter-spacing:inherit;text-transform:inherit;color:var(--ink-2);background:none;border:0;cursor:pointer;padding:0}.nav .sound:hover{color:var(--ink)}.nav .mark{text-decoration:none}.nav a.active{color:var(--ink)}.menu-row{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.menu-row>*{font-family:var(--pixel);font-size:19px;letter-spacing:.06em;color:var(--ink);text-decoration:none;background:#10132a;border:2px solid var(--line);border-radius:4px;padding:5px 14px 6px;cursor:pointer;transition:border-color .15s ease,transform .15s ease}.menu-row>*:hover{border-color:var(--teal);transform:translateY(-2px)}.menu-row>*:focus-visible{outline:2px solid var(--teal);outline-offset:3px}.menu-row>*{display:inline-flex;align-items:center;gap:9px}.menu-row svg{width:18px;height:18px;color:var(--teal)}.chapter-menu{position:fixed;top:0;right:0;bottom:0;left:0;z-index:8;display:grid;place-items:center;background:#080914b8;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);padding:20px}.cm-box{width:min(560px,100%);max-height:calc(100vh - 40px);overflow:auto;padding:22px 24px 18px;background:#10132a;border:2px solid #e9e4d6;border-radius:8px;box-shadow:0 0 0 3px #10132a,0 0 0 5px #e9e4d6}.cm-title{font-family:var(--pixel);font-size:24px;letter-spacing:.12em;color:var(--marigold);margin-bottom:12px}.cm-box ol{list-style:none;margin:0;padding:0;display:grid;gap:4px}.cm-box li button{width:100%;display:grid;grid-template-columns:40px 64px 1fr;gap:12px;align-items:baseline;text-align:left;font-family:var(--pixel);font-size:22px;color:var(--ink);background:none;border:2px solid transparent;border-radius:4px;padding:6px 10px;cursor:pointer}.cm-box li button:hover,.cm-box li button:focus-visible{border-color:var(--c);outline:none;background:#ffffff08}.cm-box li button:hover .cm-num{color:var(--c)}.cm-num{color:var(--ink-3)}.cm-year{color:var(--ink-2)}.cm-close{margin-top:14px;font-family:var(--pixel);font-size:20px;color:var(--ink-3);background:none;border:0;cursor:pointer;padding:4px 0}.cm-close:hover{color:var(--ink)}.page{position:relative;z-index:1;width:min(880px,100%);margin-inline:auto;padding-left:max(20px,env(safe-area-inset-left,0px));padding-right:max(20px,env(safe-area-inset-right,0px));padding-block:110px 80px}.page-head{margin-bottom:40px}.pixel-tag{font-family:var(--pixel);font-size:20px;letter-spacing:.14em;color:var(--marigold);margin-bottom:8px}.page h1{font-size:clamp(40px,7vw,72px);letter-spacing:-.02em}.page-head p{color:var(--ink-2);max-width:62ch;margin:14px 0 0}.page-head p+p{margin-top:10px}.page-foot{margin-top:60px;padding-top:24px;border-top:1px solid var(--line)}.page-foot .email{font-family:var(--mono);color:var(--ink);text-decoration:none;border-bottom:2px solid var(--marigold);padding-bottom:4px}.page-foot .email:hover{color:var(--teal)}.stat-strip{display:flex;flex-wrap:wrap;gap:8px 26px;margin-top:18px;font-family:var(--pixel);font-size:19px;color:var(--ink-3)}.stat-strip b{font-weight:400;color:var(--ink);margin-right:6px;font-size:24px}.projects-page{width:min(1040px,100%)}.projects-page .page-head{margin-bottom:26px}.projects{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px}.project{background:#10132a;border:2px solid var(--line);border-radius:6px;transition:border-color .15s ease}.project:hover,.project.open{border-color:#3d4466}.project.open{grid-column:1 / -1}.p-head{position:relative;display:grid;gap:4px;width:100%;text-align:left;padding:16px 40px 14px 18px;background:none;border:0;color:inherit;font:inherit;cursor:pointer}.p-head:focus-visible{outline:2px solid var(--teal);outline-offset:-4px;border-radius:6px}.p-year{font-family:var(--pixel);font-size:17px;letter-spacing:.06em;color:var(--ink-3)}.project h2{font-family:var(--display);font-size:19px;letter-spacing:-.01em;line-height:1.15;margin:0}.p-tag{margin:2px 0 0;color:var(--ink-2);font-size:14px;line-height:1.4}.p-tools{margin-top:8px;font-family:var(--mono);font-size:10.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3)}.p-more{position:absolute;right:14px;top:12px;font-family:var(--pixel);font-size:24px;color:var(--teal)}.p-link{display:inline-flex;align-items:baseline;gap:6px;margin:-6px 18px 14px;font-family:var(--mono);font-size:11.5px;letter-spacing:.04em;color:var(--marigold);text-decoration:none}.p-link i{font-style:normal;transition:transform .15s ease}.p-link:hover{color:var(--ink)}.p-link:hover i{transform:translate(2px,-2px)}.p-link:focus-visible{outline:2px solid var(--teal);outline-offset:3px;border-radius:2px}.p-body{padding:0 18px 16px;border-top:1px dashed var(--line);margin:0}.p-body>p{margin:12px 0 0;color:var(--ink-2);max-width:70ch;font-size:15px}.p-note{margin:22px 0 0;color:var(--ink-3);font-size:14.5px;max-width:70ch}.p-outcome{margin:12px 0 0;padding:0;list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:4px 20px}.p-outcome li{font-family:var(--pixel);font-size:19px;color:var(--ink);line-height:1.25}.p-outcome li:before{content:"★ ";color:var(--marigold)}.skills-page{width:min(1180px,100%)}.skills-page .page-head{margin-bottom:22px}.skills-h2{font-size:clamp(22px,2.6vw,28px);margin:0 0 10px}.skills-note{margin:0 0 14px;color:var(--ink-2);max-width:60ch;font-size:13.5px;line-height:1.5}.skills-cols{display:grid;gap:36px}.tech-rows{display:grid;gap:6px}.tech-row{display:grid;grid-template-columns:118px 1fr;gap:10px;align-items:start;padding:7px 0;border-top:1px solid var(--line)}.tech-row:last-child{border-bottom:1px solid var(--line)}.tech-row h3{font-family:var(--pixel);font-size:17px;letter-spacing:.06em;color:var(--marigold);font-weight:400;margin:0;padding-top:3px;line-height:1.2}.tech-row ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:5px}.tech-row li{font-family:var(--mono);font-size:11px;letter-spacing:.02em;color:var(--ink);padding:3px 8px;border:1px solid var(--line);border-radius:3px;background:#10132a}.tech-row.highlight h3{color:var(--teal)}.tech-row.highlight li{border-color:var(--teal)}.soft-groups{display:grid;gap:14px}.soft-group h3{font-family:var(--pixel);font-size:19px;letter-spacing:.06em;color:var(--marigold);font-weight:400;margin:0 0 4px}.soft-group ul{list-style:none;margin:0;padding:0;display:grid;gap:2px}.soft-group li{font-size:14px;color:var(--ink);line-height:1.4}.soft-group li i{font-style:normal;color:var(--teal);margin-right:8px;font-family:var(--pixel)}@media (min-width: 960px){.skills-cols{grid-template-columns:1.25fr 1fr;gap:48px;align-items:start}.skills-page .page-head p{font-size:15px}.skills-col.soft{padding-left:32px;border-left:1px solid var(--line)}}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:4;display:grid;align-content:safe center;pointer-events:none;overflow-y:auto;overscroll-behavior:contain;padding-left:max(24px,env(safe-area-inset-left,0px));padding-right:max(24px,env(safe-area-inset-right,0px));padding-block:calc(96px + env(safe-area-inset-top,0px)) 80px}.overlay>*{pointer-events:auto}.overlay.hidden-op{visibility:hidden}.overlay:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;background:linear-gradient(100deg,#0a0b18eb,#0a0b18c7 38%,#0a0b184d 62%,#0a0b1800 85%)}.hero .kicker{display:flex;align-items:center;gap:14px;color:var(--ink-2);margin-bottom:14px;font-family:var(--display);font-style:italic;font-size:17px}.hero .kicker i{width:36px;height:2px;background:var(--marigold);border-radius:2px}.hero h1{font-size:clamp(36px,5.8vw,80px);letter-spacing:-.02em;font-weight:700;max-width:12ch}.hero h1 .w{display:inline-block;transform:translateY(.5em);opacity:0;transition:transform .9s cubic-bezier(.2,.8,.2,1),opacity .9s}body.loaded .hero h1 .w{transform:none;opacity:1}.hero h1 .w:nth-child(2){transition-delay:.08s}.hero h1 .w:nth-child(3){transition-delay:.16s}.hero h1 .it{font-style:italic;font-weight:400;color:var(--teal)}.hero .role{margin-top:14px;color:var(--ink-2);font-size:16px;max-width:52ch}.hero .tag{font-family:var(--display);font-size:clamp(18px,2.1vw,25px);margin-top:12px;max-width:26ch;line-height:1.15;font-weight:400}.hero.leaving{opacity:0;transform:translateY(-30px);transition:opacity 1s ease 1.4s,transform 1.3s ease 1.4s}.hero .start{margin-top:24px;width:fit-content;display:inline-flex;align-items:center;gap:12px;font-family:var(--pixel);font-size:22px;letter-spacing:.1em;color:var(--ink);background:#10132a;border:2px solid #e9e4d6;border-radius:4px;padding:6px 20px 8px 16px;cursor:pointer;box-shadow:0 0 0 3px #10132a,0 0 0 5px #e9e4d6;transition:transform .15s ease}.hero .start i{font-style:normal;color:var(--teal);animation:caret 1s steps(2) infinite}.hero .start:hover{transform:translateY(-2px)}.hero .start:focus-visible{outline:2px solid var(--teal);outline-offset:4px}.hero .cue{margin-top:40px;color:var(--ink-3);display:flex;gap:12px;align-items:center}.hero .cue i{width:2px;height:36px;background:linear-gradient(var(--teal),transparent);display:inline-block;border-radius:2px}.contact-ov .mono{color:var(--ink-3);margin-bottom:14px}.contact-ov h2{font-size:clamp(34px,6vw,80px);letter-spacing:-.02em}.contact-ov .end-line{margin:16px 0 0;color:var(--ink-2);max-width:44ch}.contact-ov .big-link{text-decoration:none}.contact-ov .end-email{margin-top:16px;color:var(--ink-3)}.contact-page h1{max-width:14ch}.contact-blurb p{color:var(--ink-2);max-width:62ch;margin:0}.contact-blurb p+p{margin-top:10px}.contact-page .page-head{margin-bottom:16px}.divider{display:none}.readout{margin:28px 0 0;padding:0}.readout .row{display:grid;gap:6px;padding:0 0 0 18px;margin-bottom:30px;border-left:2px solid transparent;transition:border-color .2s ease}.readout .row:last-child{margin-bottom:0}.readout .row:hover{border-left-color:var(--teal)}.readout .primary:hover{border-left-color:var(--marigold)}.readout dt{display:flex;align-items:center;gap:10px;font-family:var(--pixel);font-size:19px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3)}.readout dt svg{width:17px;height:17px;color:var(--teal);flex:0 0 auto}.readout dt b{display:none}.readout dd{margin:0;font-family:var(--display);font-size:clamp(20px,2.2vw,26px);letter-spacing:-.01em;line-height:1.15;color:var(--ink);word-break:break-word}.readout .primary dd{font-size:clamp(24px,3vw,38px)}.readout .primary dt svg{color:var(--marigold)}.readout dd a{color:inherit;text-decoration:none;display:inline-flex;align-items:baseline;gap:10px}.status-line{display:flex;flex-wrap:wrap;gap:8px 22px;margin:22px 0 0;font-family:var(--pixel);font-size:18px;color:var(--ink-2)}.status-line span{display:inline-flex;align-items:center;gap:8px}.status-line svg{width:16px;height:16px;color:var(--teal)}.status-line b{font-weight:400;color:var(--ink-3)}.status-line .dot{display:inline-block;width:9px;height:9px;border-radius:50%;background:#5fd38a;box-shadow:0 0 10px #5fd38a;animation:caret 1.6s steps(2) infinite}.readout dd a i{font-style:normal;color:var(--teal);font-size:.75em;transition:transform .15s ease}.readout dd a:hover{color:var(--teal)}.readout dd a:hover i{transform:translate(3px,-3px)}.readout dd a:focus-visible{outline:2px solid var(--teal);outline-offset:4px;border-radius:2px}.contact-foot{display:flex;justify-content:space-between;flex-wrap:wrap;gap:10px;color:var(--ink-3)}@media (min-width: 960px) and (min-height: 620px){.contact-page{width:min(1180px,100%);height:100vh;overflow:hidden;display:grid;grid-template-columns:1fr 1px 1fr;grid-template-rows:1fr auto;column-gap:56px;align-items:center;padding-block:calc(84px + env(safe-area-inset-top,0px)) 24px}.contact-page .page-head{margin-bottom:14px}.contact-page .pixel-tag{font-size:17px}.contact-blurb p{font-size:14.5px;line-height:1.5;max-width:56ch}.contact-page h1{font-size:clamp(30px,3.4vw,46px)}.divider{display:block;position:relative;width:1px;height:70%;justify-self:center;background:linear-gradient(to bottom,transparent,var(--line) 15%,var(--line) 85%,transparent)}.divider i{position:absolute;left:50%;top:50%;width:9px;height:9px;transform:translate(-50%,-50%) rotate(45deg);background:var(--paper);border:1px solid var(--marigold)}.readout{margin:0}.readout .row{gap:4px}.readout dt{font-size:16px}.readout dt svg{width:15px;height:15px}.readout dd{font-size:20px}.readout .primary dd{font-size:clamp(20px,2.1vw,27px)}.readout .row{margin-bottom:34px}.contact-foot{grid-column:1 / -1;margin-top:0;padding-top:12px;font-size:11px}}@media (min-width: 960px) and (max-height: 720px){.contact-blurb p+p{display:none}.readout .row{margin-bottom:22px}.contact-page h1{font-size:clamp(28px,3vw,40px)}}@media (max-width: 760px){.nav .links{gap:14px}.dialog{padding:14px 16px 20px;min-height:124px}.dialog-tag{font-size:18px}.nav .sound{display:none}.nav{top:auto;bottom:0;padding:8px 0 calc(8px + env(safe-area-inset-bottom,0px));background:#10132af5;border-top:1px solid var(--line);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px)}.nav .mark{display:none}.nav .links{gap:0;width:100%;justify-content:space-around}.nav .links a{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10px;letter-spacing:.06em;padding:2px 10px}.nav .links svg{display:block;width:20px;height:20px}.nav a.active svg{color:var(--teal)}.page{padding-block:72px 110px}.overlay{padding-block:calc(60px + env(safe-area-inset-top,0px)) 110px}.dialog{bottom:calc(84px + env(safe-area-inset-bottom,0px))}.chapter-ind{top:calc(16px + env(safe-area-inset-top,0px))}.quest{top:calc(60px + env(safe-area-inset-top,0px))}.menu-row>*{font-size:19px;padding:5px 12px 7px}.contact-page{display:flex;flex-direction:column}.contact-left{display:contents}.contact-page .page-head{order:1;margin-bottom:8px}.contact-page .readout{order:2;margin-top:10px}.contact-page .status-line{order:3;margin-top:26px;font-size:16px}.contact-page .contact-blurb{order:4;margin-top:26px;padding-top:18px;border-top:1px solid var(--line)}.contact-blurb p{font-size:14px;line-height:1.5}.contact-page .page-foot{order:5}.contact-page h1{font-size:34px}.readout .row{margin-bottom:22px;padding-left:0;border-left:0}.readout dt{font-size:16px}.readout dd{font-size:20px}.readout .primary dd{font-size:22px}.cm-box li button{grid-template-columns:36px 56px 1fr;font-size:19px}.chapter-ind{top:calc(60px + env(safe-area-inset-top,0px))}}@media (prefers-reduced-motion: reduce){.hero h1 .w{transition:none;transform:none;opacity:1}.chapter-ind{transition:none}.dialog-more,.dialog-text .caret,.hero .start i{animation:none}.q-skills li,.q-tools{animation:none;opacity:1;transform:none}.crt{display:none}}
