@font-face{font-family:__VT323_1ae0f2;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/751eccb0decf5e18-s.woff2) format("woff2");unicode-range:u+0102-0103,u+0110-0111,u+0128-0129,u+0168-0169,u+01a0-01a1,u+01af-01b0,u+0300-0301,u+0303-0304,u+0308-0309,u+0323,u+0329,u+1ea0-1ef9,u+20ab}@font-face{font-family:__VT323_1ae0f2;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/f6590a0f07a97750-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__VT323_1ae0f2;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/b7bd7951037de757-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__VT323_Fallback_1ae0f2;src:local("Arial");ascent-override:89.16%;descent-override:22.29%;line-gap-override:0.00%;size-adjust:89.73%}.__className_1ae0f2{font-family:__VT323_1ae0f2,__VT323_Fallback_1ae0f2;font-weight:400;font-style:normal}.__variable_1ae0f2{--font-pixel:"__VT323_1ae0f2","__VT323_Fallback_1ae0f2"}@font-face{font-family:__Atkinson_Hyperlegible_de3fe8;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/d57a24ec54448a8e-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__Atkinson_Hyperlegible_de3fe8;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/bc08e10e1c60a660-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__Atkinson_Hyperlegible_de3fe8;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/7c309a1f4c99f6b1-s.woff2) format("woff2");unicode-range:u+0100-02ba,u+02bd-02c5,u+02c7-02cc,u+02ce-02d7,u+02dd-02ff,u+0304,u+0308,u+0329,u+1d00-1dbf,u+1e00-1e9f,u+1ef2-1eff,u+2020,u+20a0-20ab,u+20ad-20c4,u+2113,u+2c60-2c7f,u+a720-a7ff}@font-face{font-family:__Atkinson_Hyperlegible_de3fe8;font-style:normal;font-weight:700;font-display:swap;src:url(/_next/static/media/9816a0e0ed309b6c-s.p.woff2) format("woff2");unicode-range:u+00??,u+0131,u+0152-0153,u+02bb-02bc,u+02c6,u+02da,u+02dc,u+0304,u+0308,u+0329,u+2000-206f,u+20ac,u+2122,u+2191,u+2193,u+2212,u+2215,u+feff,u+fffd}@font-face{font-family:__Atkinson_Hyperlegible_Fallback_de3fe8;src:local("Arial");ascent-override:95.60%;descent-override:29.18%;line-gap-override:0.00%;size-adjust:99.37%}.__className_de3fe8{font-family:__Atkinson_Hyperlegible_de3fe8,__Atkinson_Hyperlegible_Fallback_de3fe8;font-style:normal}.__variable_de3fe8{--font-body:"__Atkinson_Hyperlegible_de3fe8","__Atkinson_Hyperlegible_Fallback_de3fe8"}:root{--bg:#f7f7f5;--bg-2:#ededea;--text:#1c1c1e;--muted:#5f6368;--line:#d9d9d4;--accent:#2563eb;--red:#dc2626;--amber:#b45309;--green:#15803d;--n1:#0369a1;--pixel:var(--font-pixel),"VT323",ui-monospace,monospace;--sans:var(--font-body),"Atkinson Hyperlegible",system-ui,sans-serif;--px:4px;color-scheme:light dark}@media (prefers-color-scheme:dark){:root{--bg:#151517;--bg-2:#1f1f22;--text:#ececec;--muted:#9a9aa1;--line:#34343a;--accent:#60a5fa;--red:#f87171;--amber:#fbbf24;--green:#86efac;--n1:#7dd3fc}}*,:after,:before{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{min-height:100vh;display:flex;flex-direction:column;align-items:center;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:1.0625rem;line-height:1.6;-webkit-font-smoothing:antialiased}body,dd,dl,h1,h2,h3,p,ul{margin:0}ul{padding:0;list-style:none}a{color:inherit;text-decoration-color:var(--accent);text-decoration-thickness:2px;text-underline-offset:4px}a:hover{color:var(--accent)}:focus-visible{outline:3px solid var(--amber);outline-offset:3px}::selection{background:var(--accent);color:var(--bg)}.page{width:100%;max-width:46rem;padding:0 1rem}.hero{padding:5rem 0 3.5rem;border-bottom:var(--px) dashed var(--line)}.title-board{position:relative;margin-bottom:2.25rem}.pixel-title{margin:0;line-height:0}.pixel-title-svg{display:block;width:min(100%,30rem);height:auto;touch-action:manipulation;-webkit-user-select:none;user-select:none}.cell{cursor:pointer}.cell-tile{pointer-events:all}.cell-covered .cell-tile{fill:var(--text)}.cell-covered:hover .cell-tile{fill:var(--accent)}.cell-flag .cell-tile{fill:var(--amber)}.cell-flower .cell-tile,.cell-open .cell-tile{fill:none;stroke:var(--line);stroke-width:.1}.cell-num{font-family:var(--pixel);font-size:1.05px;text-anchor:middle;pointer-events:none}.cell-num.n1{fill:var(--n1)}.cell-num.n2{fill:var(--green)}.cell-num.n3{fill:var(--red)}.cell-num.n4{fill:var(--amber)}.cell-flower rect{fill:var(--accent)}.cell-flower .cell-flower-heart{fill:var(--amber)}.cell-exploded .cell-tile{fill:var(--red);stroke:none}.cell-exploded .cell-flower rect{fill:var(--bg)}.mines-status{position:absolute;top:calc(100% + .35rem);left:0;display:flex;flex-wrap:wrap;align-items:baseline;gap:0 1rem;font-family:var(--pixel);font-size:1.35rem;line-height:1.2;color:var(--muted)}.mines-reset{padding:0;border:0;background:none;font:inherit;color:var(--text);text-decoration:underline;text-decoration-color:var(--accent);text-decoration-thickness:2px;text-underline-offset:4px;cursor:pointer}.mines-reset:hover{color:var(--accent)}.hero-bio{max-width:34rem;font-size:1.125rem}.hero-links{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;margin-top:1rem;font-family:var(--pixel);font-size:1.5rem;line-height:1.2}.visually-hidden{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.cat-layer{width:0;height:0;z-index:40}.cat-layer,.wcat{position:absolute;top:0;left:0;pointer-events:none}.wcat{padding:0;border:0;background:none;cursor:pointer;opacity:0;will-change:transform}.wcat.is-ready{opacity:1;transition:opacity .4s}.wcat-sprite{display:block}.wcat-sprite rect{pointer-events:auto}.wcat{--cat-outline:#141414;--cat-fur:#f2b16a;--cat-stripe:#d9813a;--cat-patch:#d9813a;--cat-chest:#fff;--cat-eye:#2a1608;--cat-nose:#f39ab0}.wcat[data-skin=grey]{--cat-fur:#b9b9b9;--cat-stripe:#8a8a8a;--cat-patch:#8a8a8a;--cat-eye:#2a2a2a}.wcat[data-skin=calico]{--cat-fur:#fff;--cat-stripe:#e8913a;--cat-patch:#7d7d7d;--cat-eye:#4fb3d9}.wcat[data-skin=greywhite]{--cat-fur:#9a9a9a;--cat-stripe:#9a9a9a;--cat-patch:#9a9a9a;--cat-eye:#2a2a2a}.wcat[data-skin=witch]{--cat-outline:#0a0a0a;--cat-fur:#2e2e33;--cat-stripe:#26262b;--cat-patch:#26262b;--cat-chest:#2e2e33;--cat-eye:#f59e0b;--cat-nose:#4a4a50;--hat:#45306e;--hat-band:#e8761c;--broom-handle:#9a5b2c;--broom-straw:#e8b64c;--broom-straw-shade:#b9832a}@media (prefers-color-scheme:dark){.wcat[data-skin=witch]{--cat-outline:#6b6b75;--cat-fur:#35303d;--cat-stripe:#2c2833;--cat-patch:#2c2833;--cat-chest:#35303d}}.cat-hat{display:none}.wcat[data-skin=witch] .cat-hat{display:inline}.wcat[data-dir="-1"] .wcat-sprite{transform:scaleX(-1)}.cat-frame{display:none}.wcat[data-frame=play] .cat-frame-play,.wcat[data-frame=ride] .cat-frame-ride,.wcat[data-frame=sit] .cat-frame-sit,.wcat[data-frame=sleep] .cat-frame-sleep,.wcat[data-frame=walk1] .cat-frame-walk1,.wcat[data-frame=walk2] .cat-frame-walk2{display:inline}.cat-zzz{display:none;position:absolute;bottom:14px;right:-4px;font-family:var(--pixel);font-size:15px;line-height:1;color:var(--muted)}.wcat[data-dir="-1"] .cat-zzz{right:auto;left:-4px}.wcat[data-mode=sleep] .cat-zzz{display:block}.cat-zzz span{position:absolute;bottom:0;left:0;opacity:0;animation:zzz 3s steps(6) infinite}.cat-zzz span:nth-child(2){animation-delay:1s}.cat-zzz span:nth-child(3){animation-delay:2s}@keyframes zzz{0%{opacity:0;transform:translate(0)}20%{opacity:1}to{opacity:0;transform:translate(10px,-22px)}}.cat-heart{position:absolute;fill:var(--red);pointer-events:none;animation:heart 1s steps(10) forwards}@keyframes heart{0%{opacity:1;transform:translateY(0) scale(.6)}20%{transform:translateY(-6px) scale(1)}to{opacity:0;transform:translateY(-40px) scale(1)}}@media (prefers-reduced-motion:reduce){.cat-zzz span{animation:none;opacity:1}.cat-zzz span:nth-child(2){transform:translate(5px,-9px)}.cat-zzz span:nth-child(3){transform:translate(10px,-18px)}.cat-heart{animation-timing-function:steps(2)}}.section{padding:3.5rem 0 1rem}.section-title{font-family:var(--pixel);font-weight:400;font-size:2.75rem;line-height:1}.section-intro{color:var(--muted);margin-top:.5rem;max-width:36rem}.project-list{margin-top:1.5rem}.project{padding:1.75rem 0;border-top:2px dashed var(--line)}.project:first-child{border-top:0;padding-top:.5rem}.project-head{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem 1rem}.project-name{font-family:var(--pixel);font-weight:400;font-size:2rem;line-height:1.1}.project-name a{text-decoration:none}.project-name a:hover{text-decoration:underline;text-decoration-color:var(--accent)}.status{display:inline-flex;align-items:center;gap:.5rem;font-size:.875rem;color:var(--muted)}.status-dot{width:8px;height:8px;background:var(--green)}.status-wip .status-dot{background:var(--amber)}.project-summary{margin-top:.35rem;max-width:38rem}.project-details{margin-top:.6rem;color:var(--muted);font-size:.975rem;max-width:38rem}.project-details li{position:relative;padding-left:1.25rem;margin-top:.25rem}.project-details li:before{content:"";position:absolute;left:.15rem;top:.62em;width:6px;height:6px;background:var(--accent)}.project-foot{align-items:center;justify-content:space-between;gap:.75rem 1.5rem;margin-top:1rem}.project-foot,.tags{display:flex;flex-wrap:wrap}.tags{gap:.5rem}.tag{font-family:var(--pixel);font-size:1.15rem;line-height:1;padding:.3rem .55rem .25rem;background:var(--bg-2);box-shadow:0 -2px 0 0 var(--line),0 2px 0 0 var(--line),-2px 0 0 0 var(--line),2px 0 0 0 var(--line)}.project-links{display:flex;flex-wrap:wrap;gap:.25rem 1.25rem;font-size:.95rem}.project-note{font-size:.95rem;color:var(--muted)}.stack{margin-top:1.5rem}.stack-row{display:grid;grid-template-columns:12rem 1fr;gap:.25rem 1.5rem;padding:.85rem 0;border-top:2px dashed var(--line)}.stack-row:first-child{border-top:0}.stack dt{font-family:var(--pixel);font-size:1.5rem;line-height:1.2}.stack dd{color:var(--muted)}.contact{padding-bottom:3rem}.contact-email{display:inline-block;margin-top:1rem;font-family:var(--pixel);font-size:clamp(2rem,7vw,3rem);line-height:1.1;word-break:break-all}.footer{width:calc(100% - 2rem);max-width:44rem;padding:1.5rem 0 2.5rem;display:flex;flex-wrap:wrap;justify-content:space-between;gap:.5rem 1.5rem;border-top:var(--px) dashed var(--line);color:var(--muted);font-size:.9rem}@media (max-width:640px){.hero{padding-top:3.5rem}.pixel-title{margin-bottom:3.5rem}.pixel-title-hint{white-space:normal;width:calc(100vw - 2rem)}.stack-row{grid-template-columns:1fr}}.ps{--ps-cell:1.25rem;--ps-state:var(--muted);display:grid;grid-template-columns:.85fr 1.2fr 1fr;margin-top:1.5rem;border-top:2px dashed var(--line);border-left:2px dashed var(--line)}.ps-active{--ps-state:var(--green)}.ps-idle{--ps-state:var(--amber)}.ps-cell{display:flex;flex-direction:column;justify-content:space-between;gap:1rem;min-width:0;padding:var(--ps-cell);border-right:2px dashed var(--line);border-bottom:2px dashed var(--line)}.ps-label,.ps-state{font-family:var(--pixel);font-size:1.4rem;line-height:1.1}.ps-label{color:var(--muted)}.ps-state{display:flex;align-items:center;gap:.5rem}.ps-dot{flex:none;width:8px;height:8px;background:var(--ps-state)}.ps-active .ps-dot{animation:ps-blink 1.2s steps(1) infinite}@keyframes ps-blink{50%{opacity:.25}}.ps-value{margin-top:.15rem;white-space:nowrap}.ps-app-now,.ps-value{font-family:var(--pixel);font-size:2.6rem;line-height:1}.ps-app-now{overflow-wrap:anywhere;color:var(--accent)}.ps-note{margin-top:.35rem;font-size:.875rem;line-height:1.4;color:var(--muted)}.ps-cell-status{justify-content:flex-start}.ps-ring{display:block;width:100%;max-width:7.5rem;margin:auto}.ps-ring rect{fill:var(--line)}.ps-ring .ps-ring-core{fill:var(--ps-state)}.ps-active .ps-ring rect:not(.ps-ring-core),.ps-loading .ps-ring rect:not(.ps-ring-core){animation:ps-comet 2.4s steps(1) infinite}.ps-loading .ps-ring rect:not(.ps-ring-core){animation-duration:1.2s}@keyframes ps-comet{0%,12%{fill:var(--accent)}24%{fill:var(--accent);opacity:.45}36%,to{fill:var(--line);opacity:1}}.ps-idle .ps-ring rect:nth-child(-n+12):not(.ps-ring-core){fill:var(--amber)}.ps-bar{display:flex;gap:3px}.ps-bar span{flex:1 1 0;max-width:12px;aspect-ratio:1;background:var(--line)}.ps-bar span.is-lit{background:var(--accent)}.ps-hours{grid-template-columns:repeat(24,1fr)}.ps-hours,.ps-hours span{display:grid;gap:2px}.ps-hours i{aspect-ratio:1;background:var(--line)}.ps-hours i.is-lit{background:var(--accent)}.ps-axis{display:flex;justify-content:space-between;margin-top:.3rem;font-family:var(--pixel);font-size:1.05rem;line-height:1;color:var(--muted)}.ps-apps{margin:0;padding:0;list-style:none;display:grid;gap:.8rem}.ps-app-row{display:flex;justify-content:space-between;align-items:baseline;gap:.75rem;margin-bottom:.3rem}.ps-app-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--pixel);font-size:1.5rem;line-height:1}.ps-app-time{flex:none;font-size:.875rem;color:var(--muted)}.ps-empty{color:var(--muted);font-size:.95rem}.ps-counts{display:grid;grid-template-columns:repeat(3,auto);justify-content:space-between;gap:.5rem}.ps-counts dt{font-size:.8rem;color:var(--muted)}.ps-counts dd{font-family:var(--pixel);font-size:1.5rem;line-height:1}.ps-cell-week{grid-column:span 2}.ps-cell-week.is-full{grid-column:1/-1}.ps-week{display:grid;grid-template-columns:repeat(7,1fr);gap:.5rem}.ps-week li{display:flex;flex-direction:column;align-items:center;gap:.3rem;min-width:0}.ps-col{display:grid;gap:3px;width:12px;margin-bottom:.35rem}.ps-col i{aspect-ratio:1;background:var(--line)}.ps-col i.is-lit{background:var(--accent)}.ps-day{font-family:var(--pixel);font-size:1.3rem;line-height:1;padding:.15rem .35rem .05rem}.ps-week li.is-today .ps-day{background:var(--bg-2);box-shadow:0 -2px 0 0 var(--accent),0 2px 0 0 var(--accent),-2px 0 0 0 var(--accent),2px 0 0 0 var(--accent)}.ps-day-val{font-size:.75rem;color:var(--muted);white-space:nowrap}.ps-foot{margin-top:.75rem;font-size:.85rem;color:var(--muted)}.ps-cell.has-tip{position:relative;cursor:help;outline:none}.ps-cell.has-tip:focus-visible{outline:2px solid var(--accent);outline-offset:-6px}.ps-tip{position:absolute;z-index:30;bottom:calc(100% - .75rem);left:.75rem;width:calc(100% - 1.5rem);min-width:14.5rem;max-width:21rem;padding:.75rem .85rem;background:var(--bg);box-shadow:0 -2px 0 0 var(--text),0 2px 0 0 var(--text),-2px 0 0 0 var(--text),2px 0 0 0 var(--text),6px 6px 0 0 var(--line);font-size:.85rem;line-height:1.4;cursor:auto;pointer-events:none;opacity:0;visibility:hidden;transform:translateY(6px);transition:opacity .15s steps(3),transform .15s steps(3),visibility 0s .15s}.ps-cell:nth-child(3n) .ps-tip{left:auto;right:.75rem}.ps-cell.has-tip:focus-within>.ps-tip,.ps-cell.has-tip:hover>.ps-tip{opacity:1;visibility:visible;transform:none;transition-delay:0s}.ps-cell:has(.ps-hours span:hover)>.ps-tip{opacity:0;visibility:hidden}.ps-tip-title{margin-bottom:.4rem;font-family:var(--pixel);font-size:1.35rem;line-height:1.1}.ps-tip dl{display:grid;gap:.2rem}.ps-tip dl div{display:flex;justify-content:space-between;gap:1rem}.ps-tip dt{color:var(--muted)}.ps-tip dd{text-align:right}.ps-tip-note{margin-top:.55rem;padding-top:.5rem;border-top:2px dashed var(--line);color:var(--muted);font-size:.8rem}.ps-hours span{position:relative}.ps-hours span:after{content:attr(data-tip);position:absolute;z-index:31;bottom:calc(100% + 8px);left:50%;transform:translateX(-50%);padding:.2rem .45rem .1rem;background:var(--text);color:var(--bg);font-family:var(--pixel);font-size:1.1rem;line-height:1;white-space:nowrap;pointer-events:none;opacity:0;visibility:hidden}.ps-hours span:nth-child(-n+4):after{left:0;transform:none}.ps-hours span:nth-last-child(-n+4):after{left:auto;right:0;transform:none}.ps-hours span:hover:after{opacity:1;visibility:visible}.ps-hours span:hover i{outline:1px solid var(--text)}@media (max-width:640px){.ps{--ps-cell:1rem;grid-template-columns:1fr 1fr}.ps-cell:nth-child(2){order:1}.ps-cell:nth-child(n+4){order:2}.ps-cell:nth-child(2),.ps-cell:nth-child(n+4){grid-column:1/-1}.ps-app-now,.ps-value{font-size:2.2rem}.ps-day-val{font-size:.65rem}}@media (prefers-reduced-motion:reduce){.ps-dot,.ps-ring rect{animation:none!important}.ps-tip{transform:none;transition:none}}