.cat{pointer-events:none;z-index:9990;opacity:0;transform-origin:0 0;will-change:transform;width:74px;height:54px;transition:opacity .2s;position:fixed;top:0;left:0}.cat.on{opacity:1}.cat:not(.on) *{animation-play-state:paused!important}.cat svg{width:100%;height:100%;transition:transform .14s ease-out;display:block;overflow:visible}.cat .part{transform-box:fill-box}.cat .leg{transform-origin:50% 0}.cat .tail{transform-origin:100% 100%;animation:.9s ease-in-out infinite alternate cat-wag}.cat .eye{transform-origin:50%;animation:4s infinite cat-blink}.cat .stars{opacity:0;transform-box:fill-box;transform-origin:50%}.cat.run .leg{animation:.34s linear infinite cat-leg}.cat.run .leg.b{animation-delay:-.17s}.cat.run .bob{animation:.34s ease-in-out infinite cat-bob}.cat.run .tail{animation-duration:.4s}.cat.leap .leg,.cat.fall .leg{animation:.16s linear infinite cat-leg}.cat.leap .leg.b,.cat.fall .leg.b{animation-delay:-.08s}.cat.typing .leg{animation:.14s linear infinite cat-tap}.cat.typing .leg.b{animation-delay:-.07s}.cat.grab .leg{animation:.5s ease-in-out infinite cat-leg}.cat.grab .leg.b{animation-delay:-.25s}.cat.stumble svg{transform-origin:50% 100%;animation:.5s ease-out cat-stumble}.cat-kb{z-index:9991;pointer-events:none;opacity:0;transform-origin:50% 100%;will-change:transform;width:40px;height:16px;position:fixed;top:0;left:0}.cat-kb.on{opacity:1;animation:.15s cubic-bezier(.3,1.6,.5,1) cat-kb-in}.cat-kb svg{width:100%;height:100%;display:block;overflow:visible}.cat-kb.on .key:nth-child(3n){animation:.18s linear infinite cat-key}.cat-kb.on .key:nth-child(3n+1){animation:.18s linear -.06s infinite cat-key}.cat-kb.on .key:nth-child(3n+2){animation:.18s linear -.12s infinite cat-key}.cat.drop .leg{animation:none;rotate:32deg}.cat.drop .leg.b{rotate:18deg}.cat.drop .tail{animation:none;rotate:-28deg}.cat.land svg{transform-origin:50% 100%;animation:.26s ease-out cat-land}.cat.reach svg{transform-origin:50% 60%;transform:scale(1.18,.92)}.cat.dazed svg{transform-origin:50% 100%;transform:scale(1.08,.82)}.cat.dazed .tail{animation-play-state:paused}.cat.dazed .stars{opacity:1;animation:.9s linear infinite cat-orbit}.cat-bubble{z-index:9992;pointer-events:none;opacity:0;white-space:nowrap;font-family:var(--mono);color:#17140f;background:#fff;border:2px solid #17140f;border-radius:.9rem;padding:.35rem .75rem;font-size:.8rem;font-weight:500;transition:opacity .18s;position:fixed;top:0;left:0;box-shadow:2px 3px #0003}.cat-bubble:after{content:"";background:#fff;border-bottom:2px solid #17140f;border-right:2px solid #17140f;width:10px;height:10px;position:absolute;bottom:-7px;left:50%;transform:translate(-50%)rotate(45deg)}.cat-bubble.show{opacity:1;animation:.25s cubic-bezier(.3,1.6,.5,1) cat-bubble-pop}@keyframes cat-bubble-pop{0%{opacity:0;scale:.4}}@keyframes cat-land{0%{transform:scale(1.16,.78)}55%{transform:scale(.97,1.05)}to{transform:none}}@keyframes cat-tap{0%,to{rotate:-12deg}50%{rotate:14deg}}@keyframes cat-stumble{0%{transform:scale(1.14,.78)}35%{transform:scale(.96,1.06)rotate(-6deg)}65%{transform:rotate(4deg)}to{transform:none}}@keyframes cat-kb-in{0%{scale:.3}}@keyframes cat-key{50%{fill:#f2c94c}}@keyframes cat-leg{0%,to{rotate:-42deg}50%{rotate:42deg}}@keyframes cat-bob{0%,50%,to{translate:0}25%,75%{translate:0 -3px}}@keyframes cat-wag{0%{rotate:-14deg}to{rotate:16deg}}@keyframes cat-blink{0%,95%,to{scale:1}97%{scale:1 .1}}@keyframes cat-orbit{to{rotate:360deg}}.jan{pointer-events:none;z-index:9985;transform-origin:0 0;will-change:transform;width:56px;height:78px;position:fixed;top:0;left:0}.jan svg{--arm:-50deg;width:100%;height:100%;transition:transform .14s ease-out;display:block;overflow:visible}.jan .part{transform-box:fill-box}.jan .jleg{transform-origin:50% 0}.jan .jarm{transform-box:view-box;transform-origin:34px 29px;rotate:var(--arm)}.jan .flush,.jan .brow,.jan .steam,.jan .stars,.jan .spark{opacity:0}.jan .spark{transform-box:fill-box;transform-origin:20% 60%}.jan.hit .spark{opacity:1;animation:.18s ease-out jan-spark}.jan.walk .jleg{animation:.7s linear infinite jan-leg}.jan.walk .jleg.b{animation-delay:-.35s}.jan.walk .jbob{animation:.7s ease-in-out infinite jan-bob}.jan.run .jleg,.jan.mad .jleg{animation:.3s linear infinite jan-leg}.jan.run .jleg.b,.jan.mad .jleg.b{animation-delay:-.15s}.jan.run .jbob,.jan.mad .jbob{animation:.3s ease-in-out infinite jan-bob}.jan.air .jleg{animation:.2s linear infinite jan-leg}.jan.air .jleg.b{animation-delay:-.1s}.jan.mad .flush{opacity:.55}.jan.mad .brow{opacity:1}.jan.mad .steam{opacity:1;animation:.5s ease-out infinite jan-steam}.jan.dazed svg{transform-origin:50% 100%;transform:scale(1.08,.85)}.jan.dazed .stars{opacity:1;transform-box:fill-box;transform-origin:50%;animation:.9s linear infinite jan-orbit}.jan.climb .jleg{animation:.22s linear infinite jan-climb}.jan.climb .jleg.b{animation-delay:-.11s}.jan.climb .jbob{animation:.22s ease-in-out infinite jan-bob}.jan-ladder{z-index:9984;pointer-events:none;will-change:transform, height;background:repeating-linear-gradient(#0000 0 9px,#17140f 9px 10.5px,#c58a4a 10.5px 13.5px,#17140f 13.5px 15px,#0000 15px 24px) 0 100%;width:28px;display:none;position:fixed;top:0;left:0}.jan-ladder:before,.jan-ladder:after{content:"";box-sizing:border-box;background:#c58a4a;border:2px solid #17140f;border-radius:3px;width:6px;position:absolute;top:0;bottom:0}.jan-ladder:before{left:0}.jan-ladder:after{right:0}.jan-crate{z-index:9984;pointer-events:none;will-change:transform;box-sizing:border-box;background:linear-gradient(135deg,#0000 44%,#17140f 44% 56%,#0000 56%),linear-gradient(#17140f 0 3px,#0000 3px calc(100% - 3px),#17140f calc(100% - 3px)),#c58a4a;border:2.5px solid #17140f;border-radius:4px;width:30px;height:26px;display:none;position:fixed;top:0;left:0}@keyframes jan-climb{0%,to{translate:0 -4px;rotate:-16deg}50%{translate:0 2px;rotate:16deg}}@keyframes jan-leg{0%,to{rotate:-30deg}50%{rotate:30deg}}@keyframes jan-bob{25%,75%{translate:0 -2px}0%,50%,to{translate:0}}@keyframes jan-spark{0%{scale:.3}to{scale:1.2}}@keyframes jan-steam{0%{opacity:1;translate:0 2px}to{opacity:0;translate:0 -8px}}@keyframes jan-orbit{to{rotate:360deg}}[data-orig-text].jan-hit{animation:.22s ease-out jan-text-hit}@keyframes jan-text-hit{30%{translate:0 3px}}:root{--cat-fur:#f4a14a;--cat-fur2:#e08a2e;--cat-stripe:#c9741f;--cat-belly:#fff3e0;--cat-ear:#f7a6b5;--cat-nose:#e8647c;--cat-eye:#17140f;--bg:#f3eee4;--ink:#17140f;--muted:#6b6558;--line:#d9d1c0;--card:#fbf8f1;--accent:#e8431f;--serif:"Fraunces", Georgia, serif;--sans:"Inter", system-ui, sans-serif;--mono:"JetBrains Mono", ui-monospace, monospace}@media (prefers-color-scheme:dark){:root{--bg:#12100d;--ink:#f1ebdd;--muted:#a39b88;--line:#2c2820;--card:#1b1814;--accent:#ff6a45}}*{box-sizing:border-box;margin:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);font-family:var(--sans);-webkit-font-smoothing:antialiased;line-height:1.6}a{color:inherit}::selection{background:var(--accent);color:var(--bg)}.mono{font-family:var(--mono);letter-spacing:.04em;font-size:.8rem}.eyebrow{color:var(--accent);text-transform:uppercase;margin-bottom:1.5rem}.progress{z-index:10;height:3px;position:fixed;inset:0 0 auto}.progress span{background:var(--accent);transform-origin:0;height:100%;display:block;transform:scaleX(0)}.rail{z-index:5;font-family:var(--mono);flex-direction:column;gap:.4rem;font-size:1rem;display:flex;position:fixed;top:50%;left:1.5rem;transform:translateY(-50%)}.rail a{color:var(--muted);border-radius:.6rem;align-items:center;gap:.9rem;padding:.7rem .8rem;text-decoration:none;transition:background .2s,color .2s;display:flex}.rail a:hover{background:color-mix(in srgb, var(--accent) 10%, transparent);color:var(--ink)}.rail .lbl{opacity:0;font-size:1rem;transition:all .25s;transform:translate(-6px)}.rail a:hover .lbl,.rail a.active .lbl{opacity:1;transform:none}.rail a.active{color:var(--accent)}.rail .num{font-weight:500}.rail .num:after{content:"";vertical-align:middle;background:currentColor;border-radius:2px;width:2rem;height:4px;margin-left:.6rem;transition:width .25s;display:inline-block}.rail a.active .num:after{width:3.2rem}.topnav{z-index:6;padding:1.4rem 2rem;position:fixed;top:0;right:0}.topnav nav{align-items:center;gap:.5rem;display:flex}.topnav a{font-family:var(--mono);color:var(--muted);border-radius:999px;padding:.65rem 1.15rem;font-size:1rem;text-decoration:none;transition:all .2s}.topnav a:hover{color:var(--ink);background:color-mix(in srgb, var(--ink) 8%, transparent)}.topnav a.brand{font-family:var(--serif);letter-spacing:-.01em;color:var(--ink);margin-right:.6rem;padding-left:0;font-size:1.3rem;font-weight:600}.topnav a.brand:hover{color:var(--accent);background:0 0}.topnav a.fun{color:var(--accent);border:1px dashed var(--accent)}.topnav a.fun:hover{background:var(--accent);color:var(--bg)}.socials{z-index:6;gap:.6rem;display:flex;position:fixed;bottom:1.5rem;right:1.5rem}.socials a{width:3.5rem;height:3.5rem;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:50%;place-items:center;transition:all .2s;display:grid}.socials a:hover{color:var(--bg);background:var(--accent);border-color:var(--accent);transform:translateY(-2px)}.socials svg{width:1.55rem;height:1.55rem}main{padding-left:clamp(0px,17vw,14rem)}.screen{max-width:62rem;padding:6rem 2rem}.projects{max-width:78rem;padding:6rem 2rem}.screen{flex-direction:column;justify-content:center;min-height:100svh;display:flex}h1{font-family:var(--serif);letter-spacing:-.03em;font-size:clamp(3rem,11vw,8.5rem);font-weight:600;line-height:.95}.dot{color:var(--accent)}.lede{color:var(--muted);max-width:34rem;margin-top:2rem;font-size:clamp(1.1rem,2.2vw,1.5rem)}.typewriter{position:relative}.typewriter .ghost{visibility:hidden}.typewriter.done:not([data-caret=stay]) .caret{display:none}.typewriter .live{position:absolute;inset:0}.caret{vertical-align:text-bottom;background:var(--accent);width:.1em;height:1.05em;margin-left:2px;animation:1s step-end infinite blink;display:inline-block}@keyframes blink{50%{opacity:0}}.scroll-cue{color:var(--muted);width:fit-content;margin-top:4rem;text-decoration:none;animation:2s ease-in-out infinite bob}@keyframes bob{50%{transform:translateY(6px)}}.statement{font-family:var(--serif);letter-spacing:-.02em;max-width:18ch;font-size:clamp(2.2rem,6vw,4.5rem);line-height:1.05}.statement em{color:var(--accent);font-style:italic}.body{max-width:36rem;color:var(--muted);margin-top:2rem;font-size:1.15rem}.facts{flex-wrap:wrap;gap:.6rem;margin-top:2.5rem;padding:0;list-style:none;display:flex}.facts li,.tags li{border:1px solid var(--line);border-radius:999px;padding:.25rem .8rem}.reveal{opacity:0;transition:opacity .8s,transform .8s;transform:translateY(24px)}.reveal.in{opacity:1;transform:none}.projects{padding-bottom:12rem}.stack{gap:2rem;display:grid}.card{top:calc(4rem + var(--i) * 1.2rem);background:var(--card);border:1px solid var(--line);border-radius:1.2rem;grid-template-columns:1.5fr 1fr;gap:2.5rem;min-height:26rem;padding:1.6rem;text-decoration:none;transition:border-color .2s;display:grid;position:sticky;box-shadow:0 20px 40px -24px #00000040}a.card:hover{border-color:var(--accent)}.thumb{aspect-ratio:16/10;background:radial-gradient(circle at 20% 20%, color-mix(in srgb, var(--accent) 35%, transparent), transparent 60%), repeating-linear-gradient(45deg, var(--line) 0 1px, transparent 1px 14px), var(--bg);border-radius:.8rem;align-self:center;place-items:center;display:grid;overflow:hidden}.thumb img{object-fit:cover;object-position:top left;width:100%;height:100%;display:block}.thumb span{font-family:var(--serif);color:var(--accent);font-size:8rem;line-height:1}.info{flex-direction:column;justify-content:center;gap:.6rem;padding:.5rem .5rem .5rem 0;display:flex}.meta{color:var(--muted)}.card h3{font-family:var(--serif);letter-spacing:-.01em;font-size:2.6rem;font-weight:600}.arrow{color:var(--accent);margin-left:.3rem}.info>p:not(.meta){color:var(--muted);font-size:1.1rem}.tags{flex-wrap:wrap;gap:.5rem;margin-top:.5rem;padding:0;list-style:none;display:flex}.form{gap:1rem;max-width:36rem;margin-top:2.5rem;display:grid}.form .row{grid-template-columns:1fr 1fr;gap:1rem;display:grid}.form label{gap:.4rem;display:grid}.form label span{color:var(--muted)}.form input,.form textarea{font:inherit;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:.7rem;width:100%;padding:.75rem .9rem;transition:border-color .2s}.form textarea{resize:vertical}.form input:focus,.form textarea:focus{border-color:var(--accent);outline:none}.hp{position:absolute;left:-9999px}.actions{flex-wrap:wrap;align-items:center;gap:1rem;display:flex}.send{cursor:pointer;background:var(--accent);color:var(--bg);border:none;border-radius:999px;padding:.8rem 1.6rem;font-size:.9rem;transition:all .2s}.send:hover{transform:translateY(-2px)}.send:disabled{opacity:.6;cursor:wait;transform:none}.small{color:var(--muted);min-height:1.2em}.choose{text-align:center;flex-direction:column;justify-content:center;align-items:center;min-height:100svh;padding:6rem 2rem;display:flex}.choose-title{font-size:clamp(2.5rem,8vw,6rem)}.choices{flex-wrap:wrap;justify-content:center;gap:1.5rem;margin-top:3rem;display:flex}.choice{font-family:var(--mono);letter-spacing:.06em;cursor:pointer;border:2px solid var(--ink);background:var(--card);color:var(--ink);border-radius:1rem;padding:1.4rem 2.2rem;font-size:1.05rem;transition:all .2s}.choice:hover{background:var(--accent);border-color:var(--accent);color:var(--bg);transform:translateY(-3px)}@media (width<=800px){.rail{display:none}.topnav{width:100%;padding:.6rem .5rem}.topnav nav{flex-wrap:wrap;justify-content:flex-end;gap:0}.topnav a{padding:.45rem .55rem;font-size:.78rem}.topnav a.brand{margin-right:.2rem;font-size:1rem}.socials a,.hut{width:3rem;height:3rem}.form .row{grid-template-columns:1fr}.socials{bottom:1rem;right:1rem}main{padding-left:0}.card{grid-template-columns:1fr;min-height:0}.thumb{aspect-ratio:16/10;height:auto}.thumb span{font-size:4rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.reveal{opacity:1;transition:none;transform:none}.scroll-cue{animation:none}}@media (pointer:fine){html.has-cursor,html.has-cursor *{cursor:none!important}}.cursor,.plumes{pointer-events:none;z-index:9999;position:fixed;top:0;left:0}.cursor{transform-origin:20px 4px;opacity:0;will-change:transform;filter:drop-shadow(1px 2px #0000002e);width:40px;height:56px;margin:-4px 0 0 -20px}.cursor.on{opacity:1}.cursor svg{transform-origin:20px 4px;width:100%;height:100%;transition:transform .15s;display:block;overflow:visible}.cursor.hover svg{transform:scale(1.25)}.cursor.down svg{transform:scale(.85)}.plume{pointer-events:none;z-index:9998;will-change:transform, opacity;width:14px;height:14px;position:fixed;top:0;left:0}.hut-wrap{position:relative}.hut{cursor:pointer;width:3.5rem;height:3.5rem;color:var(--ink);background:var(--card);border:1px solid var(--line);border-radius:50%;place-items:center;padding:0;transition:all .2s;display:grid}.hut:hover,.hut[aria-expanded=true]{color:var(--bg);background:var(--accent);border-color:var(--accent);transform:translateY(-2px)}.hut svg{width:2rem;height:2rem}.hut-panel{background:var(--card);border:1px solid var(--line);border-radius:1rem;width:17rem;padding:1rem;position:absolute;bottom:calc(100% + .8rem);right:0;box-shadow:0 20px 40px -20px #00000059}.hut-panel[hidden]{display:none}.hut-title{color:var(--accent);text-transform:uppercase;margin-bottom:.7rem}.hut-options{grid-template-columns:1fr 1fr;gap:.5rem;display:grid}.hut-options button{cursor:pointer;background:var(--bg);color:var(--ink);border:2px solid var(--line);border-radius:.8rem;justify-items:center;gap:.3rem;padding:.6rem .3rem;font-size:.7rem;display:grid}.hut-options button:hover{border-color:var(--muted)}.hut-options button[aria-pressed=true]{border-color:var(--accent)}.hut-options svg{width:2rem;height:2.8rem}.hut-tip{color:var(--muted);margin-top:.8rem;font-size:.7rem;line-height:1.4}[contenteditable=true]{outline:2px dashed var(--accent);outline-offset:6px;border-radius:.3rem}@media (prefers-color-scheme:dark){.cursor{filter:drop-shadow(0 0 1px #ffffffb3)}}.cursor .layer{position:absolute;inset:0}.cursor .hug-back,.cursor .hug-front{transform-origin:20px 40px;display:none}.cursor.hugging .hug-back,.cursor.hugging .hug-front{animation:.3s cubic-bezier(.3,1.6,.5,1) hug-pop;display:block}.cursor.strain .hug-back,.cursor.strain .hug-front{animation:90ms linear infinite hug-tremble}.hug-svg{width:100%;height:100%;display:block;overflow:visible}.hug-svg .part{transform-box:fill-box}.hug-all{transform-origin:50% 100%;animation:1.8s ease-in-out infinite hug-breathe}.htail{transform-origin:100% 0;animation:1.1s ease-in-out infinite alternate cat-wag}.heye{transform-origin:50%;animation:4s infinite cat-blink}.cursor.strain .htail{animation-duration:.18s}.cursor.strain .harm{animation:.18s ease-in-out infinite alternate hug-grip}@keyframes hug-pop{0%{opacity:0;scale:.3}to{opacity:1;scale:1}}@keyframes hug-breathe{50%{scale:1.03 1.025}}@keyframes hug-tremble{0%,to{translate:-.9px}50%{translate:.9px .4px}}@keyframes hug-grip{0%{translate:0 -1px}to{translate:.8px 1px}}.hut-options .cat-name{color:var(--muted);font-size:.62rem}.hut-grip{gap:.4rem;margin-top:.9rem;display:grid}.hut-grip .hut-title{justify-content:space-between;margin:0;display:flex}.hut-grip b{color:var(--ink)}.hut-grip input[type=range]{width:100%;accent-color:var(--accent);cursor:pointer;margin:0}.grip-ends{color:var(--muted);justify-content:space-between;font-size:.62rem;display:flex}.grip-ends i{font-style:normal}.typed-word{z-index:5;font-family:var(--mono);letter-spacing:0;color:var(--accent);white-space:pre;margin:0;padding:0;font-size:20px;font-weight:500;position:absolute}.typed-word.bye{opacity:0;transition:opacity .6s}.cursor .bobber{transform-origin:20px 4px;animation:2.64s ease-in-out infinite cursor-bob;position:absolute;inset:0}@keyframes cursor-bob{0%,50%,to{rotate:0deg}25%{rotate:3deg}75%{rotate:-3deg}}@media (prefers-reduced-motion:reduce){.cursor .bobber{animation:none}}
