@font-face{font-family:Pixelify Sans;src:url(/fonts/pixelify-sans.woff2)format("woff2");font-weight:400 700;font-style:normal;font-display:swap}:root{--ink:#1a1a1a;--muted:#6b6b6b;--background:#fff;--border:#e7e7e7;--surface:#f4f2f7;--purple:#7a59d0;--purple-light:#a989ec;--teal:#66ceb1;--teal-deep:#3bacb6;--yellow:#fec132;--coral:#f76463;--orange:#fd8b0f;--accent:var(--purple);--radius:4px;--max-width:1280px;--display:"Pixelify Sans", ui-monospace, "Liberation Mono", monospace}:root[data-theme=dark]{--ink:#f1f0ee;--muted:#9a9aa2;--background:#17171b;--border:#33333c;--surface:#22222a}*{box-sizing:border-box}body{max-width:var(--max-width);background:var(--background);color:var(--ink);margin:0 auto;padding:0 20px;font-family:system-ui,sans-serif;line-height:1.6}a{color:inherit}h1,h2,h3{font-family:var(--display);letter-spacing:-.02em}h1{margin:0 0 .5rem;font-size:2.5rem;line-height:1.15}h2{margin-top:3.5rem}section>h2{text-align:center}.pixel-bar{width:48px;margin:.6rem auto 0;display:flex}.pixel-bar span{width:12px;height:8px}.pixel-bar span:first-child{background:var(--purple)}.pixel-bar span:nth-child(2){background:var(--teal)}.pixel-bar span:nth-child(3){background:var(--yellow)}.pixel-bar span:nth-child(4){background:var(--coral)}.js .pixel-bar span{opacity:0}.js .pixel-bar.is-visible span{animation:.3s steps(4,end) forwards pixel-drop}.js .pixel-bar.is-visible span:nth-child(2){animation-delay:90ms}.js .pixel-bar.is-visible span:nth-child(3){animation-delay:.18s}.js .pixel-bar.is-visible span:nth-child(4){animation-delay:.27s}@keyframes pixel-drop{0%{opacity:1;transform:translateY(-26px)}to{opacity:1;transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.js .pixel-bar span{opacity:1;animation:none}}.pixel-reveal{aspect-ratio:var(--aspect);border:2px solid var(--ink);border-radius:var(--radius);box-shadow:6px 6px 0 var(--ink);position:relative;overflow:hidden}.pixel-reveal-slide{opacity:0;display:block;position:absolute;inset:0}.pixel-reveal-slide.is-active{opacity:1}.pixel-reveal img{object-fit:cover;width:100%;height:100%;display:block}.pixel-reveal-grid{display:none}.js .pixel-reveal-grid{z-index:1;grid-template-columns:repeat(var(--cols), 1fr);grid-template-rows:repeat(var(--rows), 1fr);display:grid;position:absolute;inset:0}.js .pixel-reveal-grid span,.js .pixel-reveal img{opacity:0}.js .pixel-reveal.is-visible .is-active .pixel-reveal-grid span{animation:.3s steps(4,end) forwards pixel-drop}.js .pixel-reveal.is-visible .is-active .pixel-reveal-grid{animation:.45s steps(5,end) forwards pixel-dissolve;animation-delay:var(--settled)}.js .pixel-reveal.is-visible .is-active img{animation:.45s steps(5,end) forwards pixel-resolve;animation-delay:var(--settled)}@keyframes pixel-dissolve{to{opacity:0}}@keyframes pixel-resolve{to{opacity:1}}@media (prefers-reduced-motion:reduce){.js .pixel-reveal-grid{display:none}.js .pixel-reveal img{opacity:1;animation:none}.pixel-reveal-slide{opacity:0}.pixel-reveal-slide:first-child{opacity:1}}header{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem;padding:1.5rem 0;display:flex}.brand{align-items:center;text-decoration:none;display:flex}.brand .logo{width:auto;height:45px;display:block}.logo rect{animation:.34s steps(4,end) backwards logo-drop}@keyframes logo-drop{0%{transform:translateY(-600px)}to{transform:translateY(0)}}@media (prefers-reduced-motion:reduce){.logo rect{animation:none}}nav{font-family:var(--display);align-items:center;gap:1.25rem;font-size:.9rem;display:flex}.theme-toggle{color:var(--muted);border:2px solid var(--border);border-radius:var(--radius);cursor:pointer;background:0 0;justify-content:center;align-items:center;padding:.35rem;transition:color .1s steps(2,end),border-color .1s steps(2,end);display:inline-flex}.theme-toggle:hover{color:var(--ink);border-color:var(--ink)}.theme-icon{width:18px;height:18px;display:block}.icon-sun,:root[data-theme=dark] .icon-moon{display:none}:root[data-theme=dark] .icon-sun{display:block}nav a{color:var(--muted);border-bottom:3px solid #0000;padding-bottom:3px;text-decoration:none;transition:color .1s steps(2,end),border-color .1s steps(2,end)}nav a:hover{color:var(--ink);border-bottom-color:var(--accent)}.intro{align-items:center;gap:2.5rem;padding:2.5rem 0;display:grid}@media (width>=820px){.intro{grid-template-columns:1fr 1fr}}.intro p{color:var(--muted);font-size:1.15rem}.intro-figure{margin:0 6px 6px 0;display:block}.hero-terminal{background:var(--background);border:2px solid var(--ink);border-radius:var(--radius);box-shadow:6px 6px 0 var(--ink);overflow:hidden}.term-bar{background:var(--surface);border-bottom:2px solid var(--ink);align-items:center;gap:.5rem;padding:.6rem .8rem;display:flex}.term-dot{border:2px solid var(--ink);width:12px;height:12px}.term-dot:first-child{background:var(--coral)}.term-dot:nth-child(2){background:var(--yellow)}.term-dot:nth-child(3){background:var(--teal)}.term-title{color:var(--muted);font-family:var(--display);margin-left:.4rem;font-size:.9rem}.term-body{white-space:pre-wrap;word-break:break-word;min-height:15rem;font-family:var(--display);color:var(--ink);margin:0;padding:1.1rem 1.2rem 1.4rem;font-size:1.05rem;line-height:1.8}.term-body .prompt{color:var(--teal-deep);font-weight:700}.term-body .cmd{color:var(--ink);font-weight:700}.term-body .out{color:var(--purple)}.term-body .out.muted{color:var(--muted)}.term-cursor{vertical-align:text-bottom;background:var(--teal-deep);width:.55em;height:1.05em;margin-left:1px;animation:1s steps(2,end) infinite term-blink;display:inline-block}.term-cursor.is-still{animation:none}@keyframes term-blink{50%{opacity:0}}.about p{color:var(--muted)}.about{text-align:center}.actions{flex-wrap:wrap;gap:1rem;margin-top:1.25rem;display:flex}.button{background:var(--accent);color:#fff;font-family:var(--display);border:2px solid var(--ink);border-radius:var(--radius);box-shadow:4px 4px 0 var(--ink);padding:.7rem 1.4rem;font-weight:700;text-decoration:none;transition:transform .1s steps(2,end),box-shadow .1s steps(2,end);display:inline-block}.button:hover{box-shadow:6px 6px 0 var(--ink);transform:translate(-2px,-2px)}.button:active{box-shadow:0 0 0 var(--ink);transform:translate(4px,4px)}.button-alt{background:var(--teal);color:var(--ink)}.grid{grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1.25rem;margin-top:1.5rem;display:grid}.grid article{background:var(--background);border:2px solid var(--ink);border-radius:var(--radius);padding:1.4rem;transition:transform .1s steps(2,end),box-shadow .1s steps(2,end)}.grid article:hover{box-shadow:6px 6px 0 var(--accent);transform:translate(-3px,-3px)}.grid h3{margin:0 0 .5rem}.grid article a{color:var(--accent);font-size:.9rem;font-weight:700;text-decoration:none}section>p>a{color:var(--accent);border-bottom:3px solid var(--accent);font-size:.9rem;font-weight:700;text-decoration:none}@media (width>=560px){.grid-2,.grid-3{grid-template-columns:1fr 1fr}}@media (width>=900px){.grid-3{grid-template-columns:repeat(3,1fr)}}.service-icon{width:28px;height:28px;margin-bottom:.75rem}.service h3{margin:0 0 .4rem}.service p{color:var(--muted);margin:0}.grid-2 article:first-child .service-icon{color:var(--purple)}.grid-2 article:nth-child(2) .service-icon{color:var(--teal)}.grid-2 article:nth-child(3) .service-icon{color:var(--orange)}.grid-2 article:nth-child(4) .service-icon{color:var(--coral)}.grid-2 article:first-child:hover{box-shadow:6px 6px 0 var(--purple)}.grid-2 article:nth-child(2):hover{box-shadow:6px 6px 0 var(--teal)}.grid-2 article:nth-child(3):hover{box-shadow:6px 6px 0 var(--yellow)}.grid-2 article:nth-child(4):hover{box-shadow:6px 6px 0 var(--coral)}.card-image{aspect-ratio:16/9;object-fit:cover;border:2px solid var(--ink);border-radius:var(--radius);width:100%;margin-bottom:1rem;display:block}.tech{flex-wrap:wrap;justify-content:center;gap:.9rem;margin-top:1.5rem;padding:0;list-style:none;display:flex}.tech li{border:2px solid var(--ink);border-radius:var(--radius);flex-direction:column;align-items:center;gap:.5rem;width:84px;padding:.8rem .4rem;font-size:.75rem;font-weight:700;transition:transform .1s steps(2,end),box-shadow .1s steps(2,end);display:flex}.tech img{width:36px;height:36px}:root[data-theme=dark] .tech img[alt=Express]{filter:invert()}.tech li{--tile-accent:var(--purple)}.tech li:hover{border-color:var(--tile-accent);box-shadow:4px 4px 0 var(--tile-accent);transform:translate(-2px,-2px)}footer{border-top:3px solid var(--ink);color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:1rem;margin-top:5rem;padding:2rem 0;font-size:.9rem;display:flex}footer a{color:var(--accent);font-weight:700;text-decoration:none}.social{align-items:center;gap:1rem;margin:0;display:flex}.social a{transition:transform .1s steps(2,end),color .1s steps(2,end);display:flex}.social a:hover{color:var(--ink);transform:translateY(-2px)}.social-icon{width:22px;height:22px}.tech-chips{flex-wrap:wrap;gap:.35rem;margin:0 0 .75rem;padding:0;list-style:none;display:flex}.tech-chips li{background:var(--surface);border:2px solid var(--ink);border-radius:var(--radius);color:var(--ink);font-family:var(--display);white-space:nowrap;padding:.2rem .55rem;font-size:.82rem;line-height:1.5}.write-up{max-width:680px;margin-inline:auto}.write-up .meta{color:var(--muted);align-items:center;gap:.5rem;margin-top:-.25rem;font-size:.85rem;display:flex}.pixel-link{font-family:var(--display);align-items:center;gap:.5rem;font-weight:700;text-decoration:none;display:inline-flex}.pixel-arrow{flex:none;width:1.4em;height:.7em;transition:transform .1s steps(2,end)}.pixel-arrow.is-left{transform:scaleX(-1)}.pixel-link:hover .pixel-arrow{transform:translate(3px)}.pixel-link:hover .pixel-arrow.is-left{transform:scaleX(-1)translate(3px)}@media (prefers-reduced-motion:reduce){.pixel-arrow{transition:none}}.repo-link{align-items:center;gap:.4rem;font-size:1rem;font-weight:600;display:inline-flex}.repo-icon{width:1.2em;height:1.2em}.write-up-image{object-fit:cover;border:2px solid var(--ink);border-radius:var(--radius);width:100%;max-height:420px;margin:1.5rem 0;display:block}.write-up pre{border:2px solid var(--ink);border-radius:var(--radius);margin:1.5rem 0;padding:1rem 1.15rem;font-size:.85rem;line-height:1.7;overflow-x:auto}.write-up :not(pre)>code{background:var(--border);border-radius:3px;padding:.1rem .35rem;font-size:.85em}.write-up p>img{border:2px solid var(--ink);border-radius:var(--radius);width:100%;max-width:100%;height:auto;margin:1.5rem 0;display:block}.shots{grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:1.5rem;margin:1.5rem 0;display:grid}.shots.shots-stacked{grid-template-columns:1fr}.shots figure{margin:0}.shots img{border:2px solid var(--ink);border-radius:var(--radius);width:100%;height:auto;display:block}.shots figcaption{color:var(--muted);text-align:center;margin-top:.5rem;font-size:.85rem}
