.project[data-astro-cid-mspuyifq]{position:relative;height:100%;display:flex;flex-direction:column;gap:var(--space-3)}.project-head[data-astro-cid-mspuyifq]{display:flex;flex-wrap:nowrap;align-items:flex-start;gap:var(--space-3)}.project-head[data-astro-cid-mspuyifq] h3[data-astro-cid-mspuyifq]{flex:1 1 auto}.title-link[data-astro-cid-mspuyifq]{text-decoration:none;color:inherit}.title-link[data-astro-cid-mspuyifq]:hover{color:var(--accent)}.stretched-link[data-astro-cid-mspuyifq]:after{content:"";position:absolute;inset:0;z-index:1}.repo-link[data-astro-cid-mspuyifq]{position:relative;z-index:2;margin-left:auto;color:var(--ink-soft);display:flex;align-items:center;flex:0 0 auto}.repo-link[data-astro-cid-mspuyifq]:hover{color:var(--accent)}.badge[data-astro-cid-mspuyifq]{align-self:flex-start;font-family:var(--font-mono);font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.14em;padding:.2rem var(--space-3);border-radius:var(--radius-pill);background:var(--accent);color:var(--paper)}.project-desc[data-astro-cid-mspuyifq]{color:var(--ink-soft)}.project-footer[data-astro-cid-mspuyifq]{margin-top:auto;display:flex;flex-direction:column;align-items:flex-start;gap:var(--space-3)}.tech[data-astro-cid-mspuyifq]{list-style:none;display:flex;flex-wrap:wrap;gap:var(--space-2)}.tech[data-astro-cid-mspuyifq] li[data-astro-cid-mspuyifq]{font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-soft);background:var(--surface-2);border:var(--border-width) solid var(--line);border-radius:var(--radius);padding:.1rem var(--space-2)}.cup[data-astro-cid-5vdryrg6]{fill:var(--ink)}.steam[data-astro-cid-5vdryrg6]{fill:var(--accent)}.course[data-astro-cid-xgzpnzj7]{height:100%;display:flex;flex-direction:column;gap:var(--space-3)}.course-cover[data-astro-cid-xgzpnzj7]{aspect-ratio:4 / 3;display:grid;place-items:center;border-radius:var(--radius);border:var(--border-width) solid var(--line);background:radial-gradient(ellipse 70% 70% at 28% 20%,color-mix(in srgb,var(--accent) 10%,transparent),transparent 70%),var(--surface)}.course-cover[data-astro-cid-xgzpnzj7] svg{height:62%;width:auto}.course-head[data-astro-cid-xgzpnzj7] h3[data-astro-cid-xgzpnzj7]{text-align:center}.course-desc[data-astro-cid-xgzpnzj7]{color:var(--ink-soft)}.topics[data-astro-cid-xgzpnzj7]{margin-top:auto;list-style:none;display:flex;flex-wrap:wrap;gap:var(--space-2)}.topics[data-astro-cid-xgzpnzj7] li[data-astro-cid-xgzpnzj7]{font-family:var(--font-mono);font-size:var(--step--1);color:var(--ink-soft);background:var(--surface-2);border:var(--border-width) solid var(--line);border-radius:var(--radius);padding:.1rem var(--space-2)}.course-repo[data-astro-cid-xgzpnzj7]{align-self:flex-end;display:flex;border-radius:50%;color:var(--ink);transition:color .15s ease,background .15s ease}.course-repo[data-astro-cid-xgzpnzj7]:hover{color:var(--paper);background:var(--accent)}.about-card[data-astro-cid-etpcdapu]{width:16rem;max-width:100%;margin-inline:auto;background:var(--surface);border:var(--border-width) solid var(--line);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm)}.about-card-photo[data-astro-cid-etpcdapu]{width:100%;aspect-ratio:4 / 5;object-fit:cover}.about-card-plate[data-astro-cid-etpcdapu]{padding:var(--space-3) var(--space-4) var(--space-4);border-top:3px solid var(--accent);text-align:center}.about-card-name[data-astro-cid-etpcdapu]{font-family:var(--font-display);font-weight:700}.about-card-links[data-astro-cid-etpcdapu]{justify-content:center;margin-top:var(--space-2);gap:var(--space-2)}.splash[data-astro-cid-mlbag6b5]{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;background:var(--paper)}.splash[data-astro-cid-mlbag6b5][hidden]{display:none}.splash-line[data-astro-cid-mlbag6b5]{font-family:var(--font-display);font-weight:600;font-size:clamp(2.8rem,1.8rem + 6vw,6rem);line-height:1.12;letter-spacing:-.05em;color:var(--ink);white-space:nowrap;opacity:0}.splash[data-astro-cid-mlbag6b5].is-playing .splash-line[data-astro-cid-mlbag6b5]{animation:splash-in .5s ease-out both}.splash-mark[data-astro-cid-mlbag6b5]{font-family:var(--font-mono);font-weight:700;color:var(--accent)}.splash-initial[data-astro-cid-mlbag6b5]{color:var(--ink)}.splash-rest[data-astro-cid-mlbag6b5]{display:inline-grid;grid-template-columns:1fr}.splash-rest-text[data-astro-cid-mlbag6b5]{min-width:0;overflow:clip;padding-inline-end:.08em;padding-bottom:.35em;margin-bottom:-.35em}.splash[data-astro-cid-mlbag6b5].is-playing .splash-rest[data-astro-cid-mlbag6b5]{animation:splash-collapse .7s cubic-bezier(.65,0,.35,1) 1.5s both}.splash[data-astro-cid-mlbag6b5].is-playing .splash-rest-text[data-astro-cid-mlbag6b5]{animation:splash-rest-out .5s ease-in 1.5s both}.splash[data-astro-cid-mlbag6b5].is-playing{animation:splash-fade-out .45s ease-in 2.7s both}@keyframes splash-in{0%{opacity:0;transform:scale(.96)}to{opacity:1;transform:scale(1)}}@keyframes splash-collapse{0%{grid-template-columns:1fr}to{grid-template-columns:0fr}}@keyframes splash-rest-out{0%{opacity:1}to{opacity:0}}@keyframes splash-fade-out{0%{opacity:1}to{opacity:0}}.hero[data-astro-cid-xhaoqxbd]{position:relative;padding-block:clamp(3rem,10vw,6rem);text-align:center}.hero-copy[data-astro-cid-xhaoqxbd]{position:relative;z-index:1;background:radial-gradient(ellipse 70% 65% at 50% 50%,color-mix(in srgb,var(--paper) 78%,transparent),transparent 72%);border-radius:var(--radius-lg);padding-block:var(--space-4)}.hero-copy[data-astro-cid-xhaoqxbd] h1[data-astro-cid-xhaoqxbd]{font-size:clamp(2.8rem,1.8rem + 6vw,6rem);letter-spacing:-.05em}.hero-fade[data-astro-cid-xhaoqxbd]{padding-inline-end:.08em;margin-inline-end:-.08em;background:linear-gradient(to bottom,var(--ink),color-mix(in srgb,var(--ink) 55%,transparent));-webkit-background-clip:text;background-clip:text;color:transparent}.hero-name[data-astro-cid-xhaoqxbd]{color:var(--accent)}.hero-intro[data-astro-cid-xhaoqxbd]{margin-top:var(--space-4);margin-inline:auto;font-size:var(--step-1);color:var(--ink-soft)}.hero-actions[data-astro-cid-xhaoqxbd]{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--space-3);margin-top:var(--space-7)}.btn-new[data-astro-cid-xhaoqxbd]{position:absolute;top:0;right:var(--space-3);transform:translateY(-50%);z-index:1;font-family:var(--font-mono);font-size:.6rem;font-weight:700;text-transform:uppercase;letter-spacing:.12em;line-height:1;padding:.25rem var(--space-2);border-radius:var(--radius-pill);background:var(--accent);color:var(--paper);box-shadow:0 0 0 var(--border-width) var(--paper),var(--glow);pointer-events:none}.stack-section[data-astro-cid-xhaoqxbd]{padding-block:var(--space-6);border-block:var(--border-width) solid var(--line-faint);background:color-mix(in srgb,var(--ink) 2%,transparent);opacity:.6;transition:opacity .3s ease}.stack-section[data-astro-cid-xhaoqxbd]:hover,.stack-section[data-astro-cid-xhaoqxbd]:focus-within{opacity:1}.stack-marquee[data-astro-cid-xhaoqxbd]{overflow:hidden;cursor:grab;user-select:none;-webkit-user-select:none;mask-image:linear-gradient(to right,transparent,black 8%,black 92%,transparent);-webkit-mask-image:linear-gradient(to right,transparent,black 8%,black 92%,transparent)}.stack-marquee[data-astro-cid-xhaoqxbd].is-dragging{cursor:grabbing}.stack-track[data-astro-cid-xhaoqxbd]{display:flex;width:max-content;animation:stack-scroll 26s linear infinite}.stack-group[data-astro-cid-xhaoqxbd]{display:flex;gap:var(--space-8);list-style:none;padding-inline-end:var(--space-8)}.stack-group[data-astro-cid-xhaoqxbd] li[data-astro-cid-xhaoqxbd]{font-family:var(--font-mono);font-size:var(--step-0);white-space:nowrap;color:var(--ink-soft)}@keyframes stack-scroll{0%{transform:translate(0)}to{transform:translate(-10%)}}@media(prefers-reduced-motion:reduce){.stack-track[data-astro-cid-xhaoqxbd]{animation:none}.stack-group[data-astro-cid-xhaoqxbd][aria-hidden]{display:none}}.about-grid[data-astro-cid-xhaoqxbd]{margin-top:var(--space-6);display:grid;gap:var(--space-5)}.about-aside[data-astro-cid-xhaoqxbd]{margin-top:var(--space-6)}@media(min-width:48rem){.about-grid[data-astro-cid-xhaoqxbd]{grid-template-columns:1fr 24rem;align-items:start}.about-aside[data-astro-cid-xhaoqxbd]{margin-top:calc(-1 * (var(--space-6) + var(--step-3) * 1.12))}}.section-intro[data-astro-cid-xhaoqxbd]+.card-list[data-astro-cid-xhaoqxbd],.section-intro[data-astro-cid-xhaoqxbd]+.empty[data-astro-cid-xhaoqxbd],.section-intro[data-astro-cid-xhaoqxbd]+.btn[data-astro-cid-xhaoqxbd]{margin-top:var(--space-6)}.heading-row[data-astro-cid-xhaoqxbd]{display:flex;flex-wrap:wrap;align-items:baseline;gap:var(--space-3)}.badge[data-astro-cid-xhaoqxbd]{position:relative;top:-.25rem;font-family:var(--font-mono);font-size:.65rem;font-weight:700;text-transform:uppercase;letter-spacing:.14em;padding:.2rem var(--space-3);border-radius:var(--radius-pill);background:var(--accent);color:var(--paper)}.card-list[data-astro-cid-xhaoqxbd]{list-style:none;display:grid;gap:var(--space-4)}.posts-grid[data-astro-cid-xhaoqxbd],.courses-grid[data-astro-cid-xhaoqxbd]{justify-items:start}.posts-grid[data-astro-cid-xhaoqxbd]>li[data-astro-cid-xhaoqxbd],.courses-grid[data-astro-cid-xhaoqxbd]>li[data-astro-cid-xhaoqxbd]{width:100%;max-width:24rem}@media(min-width:48rem){.card-list[data-astro-cid-xhaoqxbd]:has(>li+li){grid-template-columns:repeat(2,1fr)}.posts-grid[data-astro-cid-xhaoqxbd]:has(>li+li),.courses-grid[data-astro-cid-xhaoqxbd]:has(>li+li){grid-template-columns:repeat(2,minmax(0,24rem))}.projects-grid[data-astro-cid-xhaoqxbd]:has(>li+li){grid-template-columns:1.4fr 1fr}}.blog-view-all[data-astro-cid-xhaoqxbd]{margin-top:var(--space-6)}.contact-grid[data-astro-cid-xhaoqxbd]{display:grid;gap:var(--space-6)}@media(min-width:48rem){.contact-grid[data-astro-cid-xhaoqxbd]{grid-template-columns:1fr 1fr;align-items:start}}.contact-form[data-astro-cid-xhaoqxbd]{display:grid;gap:var(--space-4);max-width:36rem}.field-row[data-astro-cid-xhaoqxbd]{display:grid;gap:var(--space-4)}@media(min-width:30rem){.field-row[data-astro-cid-xhaoqxbd]{grid-template-columns:1fr 1fr}}.field[data-astro-cid-xhaoqxbd] input[data-astro-cid-xhaoqxbd],.field[data-astro-cid-xhaoqxbd] textarea[data-astro-cid-xhaoqxbd]{width:100%;font:inherit;color:var(--ink);background:var(--surface-2);border:var(--border-width) solid var(--line);border-radius:var(--radius-pill);padding:var(--space-4) var(--space-5);transition:border-color .15s ease,background-color .15s ease}.field[data-astro-cid-xhaoqxbd] input[data-astro-cid-xhaoqxbd]:hover,.field[data-astro-cid-xhaoqxbd] textarea[data-astro-cid-xhaoqxbd]:hover{border-color:var(--line-strong)}.field[data-astro-cid-xhaoqxbd] input[data-astro-cid-xhaoqxbd]:focus,.field[data-astro-cid-xhaoqxbd] textarea[data-astro-cid-xhaoqxbd]:focus{border-color:var(--accent)}.field[data-astro-cid-xhaoqxbd] input[data-astro-cid-xhaoqxbd]:focus-visible,.field[data-astro-cid-xhaoqxbd] textarea[data-astro-cid-xhaoqxbd]:focus-visible{outline-width:var(--border-width)}.field[data-astro-cid-xhaoqxbd] input[data-astro-cid-xhaoqxbd]::placeholder,.field[data-astro-cid-xhaoqxbd] textarea[data-astro-cid-xhaoqxbd]::placeholder{color:var(--ink-soft);opacity:1}.field[data-astro-cid-xhaoqxbd] textarea[data-astro-cid-xhaoqxbd]{border-radius:var(--radius-lg);resize:vertical;min-height:8rem}.contact-form-actions[data-astro-cid-xhaoqxbd]{display:flex;align-items:center;gap:var(--space-3)}.contact-reset[data-astro-cid-xhaoqxbd]{display:grid;place-items:center;width:2.75rem;height:2.75rem;color:var(--ink-soft);background:var(--surface-2);border:var(--border-width) solid var(--line);border-radius:var(--radius-pill);cursor:pointer;transition:color .15s ease,border-color .15s ease}.contact-reset[data-astro-cid-xhaoqxbd]:hover{color:var(--accent);border-color:var(--line-strong)}.contact-reset[data-astro-cid-xhaoqxbd][hidden]{display:none}.contact-status[data-astro-cid-xhaoqxbd]{margin-top:var(--space-6);max-width:32rem;padding:var(--space-4) var(--space-5);border:var(--border-width) solid var(--line);border-radius:var(--radius-lg);background:var(--surface-2);color:var(--ink-soft)}.contact-status[data-astro-cid-xhaoqxbd][hidden],.contact-email-row[data-astro-cid-xhaoqxbd][hidden]{display:none}.contact-email-row[data-astro-cid-xhaoqxbd]{margin-top:var(--space-3);display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);font-family:var(--font-mono);font-size:var(--step--1)}.copy-email[data-astro-cid-xhaoqxbd]{font:inherit;color:var(--ink);background:var(--surface-2);border:var(--border-width) solid var(--line);border-radius:var(--radius-pill);padding:var(--space-2) var(--space-4);cursor:pointer;transition:border-color .15s ease}.copy-email[data-astro-cid-xhaoqxbd]:hover{border-color:var(--line-strong)}.contact-noscript[data-astro-cid-xhaoqxbd]{margin-top:var(--space-6);display:flex;flex-wrap:wrap;align-items:center;gap:var(--space-3);color:var(--ink-soft)}
