.hero[data-astro-cid-ge2uvauf]{align-items:center;padding:clamp(3rem,8vw,6rem) 0 clamp(4rem,8vw,6rem);display:flex}@media (width>=700px) and (height>=600px){.hero[data-astro-cid-ge2uvauf]{min-height:min(78vh,760px)}}.boot[data-astro-cid-ge2uvauf]{font-size:var(--text-sm);color:var(--quiet);margin-bottom:clamp(1.25rem,3vw,2rem)}.boot[data-astro-cid-ge2uvauf] p[data-astro-cid-ge2uvauf]{margin:0 0 .25rem}.ok[data-astro-cid-ge2uvauf],.ps1[data-astro-cid-ge2uvauf],.dollar[data-astro-cid-ge2uvauf]{color:var(--accent)}.prompt[data-astro-cid-ge2uvauf]{color:var(--text)}.dollar[data-astro-cid-ge2uvauf]{margin-right:.6ch}.caret[data-astro-cid-ge2uvauf]{background:var(--accent);animation:1.05s step-end infinite blink}.cursor[data-astro-cid-ge2uvauf]{color:var(--accent);margin-left:.1ch;animation:1.05s step-end infinite blink}.caret[data-astro-cid-ge2uvauf]{vertical-align:text-bottom;width:.6em;height:1.15em;margin-left:.15em;display:none}.name[data-astro-cid-ge2uvauf]{font-size:var(--text-hero);letter-spacing:-.045em;margin:0 0 clamp(1.5rem,3vw,2.25rem) -.05em;font-weight:800;line-height:.95}.line[data-astro-cid-ge2uvauf]{padding-bottom:.06em;display:block;overflow:hidden}.line-inner[data-astro-cid-ge2uvauf]{display:inline-block;position:relative}@keyframes blink{50%{opacity:0}}.line-inner[data-astro-cid-ge2uvauf]:before,.line-inner[data-astro-cid-ge2uvauf]:after{content:attr(data-text);content:attr(data-text) / "";opacity:0;pointer-events:none;position:absolute;inset:0}.line-inner[data-astro-cid-ge2uvauf]:before{color:var(--accent)}.line-inner[data-astro-cid-ge2uvauf]:after{color:var(--quiet)}.name[data-astro-cid-ge2uvauf].is-glitching .line-inner[data-astro-cid-ge2uvauf]:before{animation:.42s steps(2,end) glitch-a}.name[data-astro-cid-ge2uvauf].is-glitching .line-inner[data-astro-cid-ge2uvauf]:after{animation:.42s steps(2,end) glitch-b}@media (hover:hover) and (pointer:fine){.name[data-astro-cid-ge2uvauf]:hover .line-inner[data-astro-cid-ge2uvauf]:before{animation:.42s steps(2,end) glitch-a}.name[data-astro-cid-ge2uvauf]:hover .line-inner[data-astro-cid-ge2uvauf]:after{animation:.42s steps(2,end) glitch-b}}@keyframes glitch-a{0%{opacity:.9;clip-path:inset(10% 0 62%);transform:translate(-.04em)}30%{clip-path:inset(55% 0 20%);transform:translate(.035em)}60%{clip-path:inset(30% 0 45%);transform:translate(-.02em)}to{opacity:0;clip-path:inset(80% 0 5%);transform:none}}@keyframes glitch-b{0%{opacity:.7;clip-path:inset(65% 0 10%);transform:translate(.04em)}40%{clip-path:inset(15% 0 70%);transform:translate(-.03em)}to{opacity:0;clip-path:inset(40% 0);transform:none}}.role[data-astro-cid-ge2uvauf]{max-width:62ch}.lead[data-astro-cid-ge2uvauf]{font-size:var(--text-lg);margin-bottom:.4rem;font-weight:500}.facts[data-astro-cid-ge2uvauf]{font-size:var(--text-sm);color:var(--quiet);flex-wrap:wrap;gap:.25rem .9rem;display:flex}.rest[data-astro-cid-ge2uvauf]{flex-wrap:wrap;gap:.25rem .9rem;display:inline-flex}.pipe[data-astro-cid-ge2uvauf]{color:var(--accent)}@media (width<=620px){.pipe-break[data-astro-cid-ge2uvauf]{display:none}}.actions[data-astro-cid-ge2uvauf]{flex-wrap:wrap;gap:.75rem;margin-top:2.25rem;display:flex}.icon-btn[data-astro-cid-ge2uvauf]{width:2.75rem;height:2.75rem;padding:0;position:relative}.icon-btn[data-astro-cid-ge2uvauf]:hover{color:var(--accent)}.icon-btn[data-astro-cid-ge2uvauf]:active{color:var(--on-accent)}.tip[data-astro-cid-ge2uvauf]{border:1px solid var(--line);background:var(--card);color:var(--text);font-size:var(--text-xs);white-space:nowrap;pointer-events:none;opacity:0;border-radius:4px;padding:.2rem .5rem;transition:opacity .15s;position:absolute;bottom:calc(100% + .5rem);left:50%;transform:translate(-50%)}.tip-ps[data-astro-cid-ge2uvauf]{color:var(--accent)}.icon-btn[data-astro-cid-ge2uvauf]:hover .tip[data-astro-cid-ge2uvauf],.icon-btn[data-astro-cid-ge2uvauf]:focus-visible .tip[data-astro-cid-ge2uvauf]{opacity:1}.hero[data-astro-cid-ge2uvauf][data-state=boot] .cmd[data-astro-cid-ge2uvauf]{visibility:hidden}.hero[data-astro-cid-ge2uvauf][data-state=boot] .caret[data-astro-cid-ge2uvauf],.hero[data-astro-cid-ge2uvauf][data-state=typing] .caret[data-astro-cid-ge2uvauf]{display:inline-block}.hero[data-astro-cid-ge2uvauf][data-state=boot] .cursor[data-astro-cid-ge2uvauf],.hero[data-astro-cid-ge2uvauf][data-state=typing] .cursor[data-astro-cid-ge2uvauf]{visibility:hidden}.hero[data-astro-cid-ge2uvauf][data-state] .boot-line[data-astro-cid-ge2uvauf]{animation:.3s both fade}.hero[data-astro-cid-ge2uvauf][data-state] .line-inner[data-astro-cid-ge2uvauf]{transition:transform .85s var(--ease)}.hero[data-astro-cid-ge2uvauf][data-state] .line[data-astro-cid-ge2uvauf]+.line[data-astro-cid-ge2uvauf] .line-inner[data-astro-cid-ge2uvauf]{transition-delay:90ms}.hero[data-astro-cid-ge2uvauf][data-state=boot] .line-inner[data-astro-cid-ge2uvauf],.hero[data-astro-cid-ge2uvauf][data-state=typing] .line-inner[data-astro-cid-ge2uvauf]{transform:translateY(105%)}.hero[data-astro-cid-ge2uvauf][data-state] .role[data-astro-cid-ge2uvauf],.hero[data-astro-cid-ge2uvauf][data-state] .actions[data-astro-cid-ge2uvauf]{transition:opacity .6s var(--ease) .35s, transform .6s var(--ease) .35s, visibility 0s linear .35s}.hero[data-astro-cid-ge2uvauf][data-state] .actions[data-astro-cid-ge2uvauf]{transition-delay:.5s}.hero[data-astro-cid-ge2uvauf][data-state=boot] [data-astro-cid-ge2uvauf]:is(.role,.actions),.hero[data-astro-cid-ge2uvauf][data-state=typing] [data-astro-cid-ge2uvauf]:is(.role,.actions){opacity:0;visibility:hidden;transform:translateY(12px)}@keyframes fade{0%{opacity:0}}.portrait[data-astro-cid-idcj4gp7]{width:min(100%, var(--photo-w,270px));background:var(--card);box-shadow:0 18px 40px -20px var(--shadow);border-radius:10px;margin:0 auto;padding:.75rem;position:relative}[data-astro-cid-idcj4gp7]:where(.portrait){border:1px solid var(--line)}.portrait[data-astro-cid-idcj4gp7] picture{border:1px solid var(--line);border-radius:8px;display:block;overflow:hidden}.portrait[data-astro-cid-idcj4gp7] .img{width:100%;height:auto}html.js .reveal .portrait[data-astro-cid-idcj4gp7] .img{transition:transform .7s var(--ease);transform:scale(1.03)}html.js .reveal.is-in .portrait[data-astro-cid-idcj4gp7] .img{transform:none}@media (prefers-reduced-motion:reduce){html.js .reveal .portrait[data-astro-cid-idcj4gp7] .img{transform:none}}.empty[data-astro-cid-idcj4gp7]{aspect-ratio:760/900;text-align:center;font-size:var(--text-xs);color:var(--quiet);place-items:center;padding:1rem;display:grid}.cert[data-astro-cid-7capmw4s]{flex-direction:column;padding:1.75rem 2rem;display:flex}.cert[data-astro-cid-7capmw4s] h4[data-astro-cid-7capmw4s]{letter-spacing:-.015em;text-wrap:balance;font-weight:650;line-height:1.15;font-size:var(--text-lg);margin-bottom:.3rem}.status[data-astro-cid-7capmw4s]{font-size:var(--text-xs);color:var(--quiet);align-items:center;gap:.45rem;margin-bottom:.9rem;display:inline-flex}.dot[data-astro-cid-7capmw4s]{border:1px solid var(--quiet);border-radius:50%;width:7px;height:7px}.earned[data-astro-cid-7capmw4s]{color:var(--text)}.earned[data-astro-cid-7capmw4s] .dot[data-astro-cid-7capmw4s]{background:var(--accent);border-color:var(--accent);box-shadow:0 0 8px var(--accent)}.issuer[data-astro-cid-7capmw4s]{margin-bottom:.2rem}.date[data-astro-cid-7capmw4s]{font-size:var(--text-xs)}.verify[data-astro-cid-7capmw4s]{font-size:var(--text-sm);align-self:flex-start;margin-top:auto}.contact-form[data-astro-cid-vekgkm42]{gap:1.25rem;display:grid}.field[data-astro-cid-vekgkm42]{gap:.4rem;display:grid}.label-row[data-astro-cid-vekgkm42]{justify-content:space-between;align-items:baseline;gap:1rem;display:flex}label[data-astro-cid-vekgkm42]{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--soft)}textarea[data-astro-cid-vekgkm42]{resize:vertical;min-height:9rem;line-height:1.6}.field-error[data-astro-cid-vekgkm42]{min-height:0;font-size:var(--text-sm);color:var(--accent);margin:0}.field-error[data-astro-cid-vekgkm42]:empty{display:none}.counter[data-astro-cid-vekgkm42]{font-size:var(--text-xs);color:var(--quiet)}.counter[data-astro-cid-vekgkm42].near{color:var(--accent)}.trap[data-astro-cid-vekgkm42]{width:1px;height:1px;position:absolute;left:-10000px;overflow:hidden}.actions[data-astro-cid-vekgkm42]{flex-wrap:wrap;align-items:center;gap:.75rem 1.25rem;display:flex}.privacy-note[data-astro-cid-vekgkm42]{font-size:var(--text-sm);margin:0}.privacy-note[data-astro-cid-vekgkm42] a[data-astro-cid-vekgkm42]{color:var(--quiet)}.privacy-note[data-astro-cid-vekgkm42] a[data-astro-cid-vekgkm42]:hover{color:var(--text)}.send[data-astro-cid-vekgkm42]:disabled{cursor:progress;opacity:.85}.status[data-astro-cid-vekgkm42]{font-size:var(--text-base);color:var(--text);margin:0}.status[data-astro-cid-vekgkm42]:empty{display:none}.status[data-astro-cid-vekgkm42]:focus{outline:none}.status[data-astro-cid-vekgkm42]:not(:empty){animation:appear .2s var(--ease) both}.status[data-astro-cid-vekgkm42] .st{color:var(--quiet);white-space:pre}.status[data-astro-cid-vekgkm42][data-kind=ok] .st,.status[data-astro-cid-vekgkm42][data-kind=fail] .st,.status[data-astro-cid-vekgkm42][data-kind=wait] .st{color:var(--accent)}.status[data-astro-cid-vekgkm42] .cursor{vertical-align:text-bottom;background:var(--accent);width:.55em;height:1.05em;margin-left:.25em;animation:1s step-end infinite blink;display:inline-block}@keyframes appear{0%{opacity:0;transform:translateY(4px)}}@media (prefers-reduced-motion:reduce){.status[data-astro-cid-vekgkm42] .cursor{animation:none}}.about[data-astro-cid-lcdefpme]{--photo-w:270px;align-items:start;gap:2.5rem;display:grid}@media (width>=700px){.about[data-astro-cid-lcdefpme]{--photo-w:240px;grid-template-columns:var(--photo-w) minmax(0, 1fr);align-items:center;column-gap:2.5rem}}@media (width>=900px){.about-grid[data-astro-cid-lcdefpme] .section-head[data-astro-cid-lcdefpme]{grid-column:1/span 2}.about-grid[data-astro-cid-lcdefpme] .section-body[data-astro-cid-lcdefpme]{grid-column:3/-1}.about[data-astro-cid-lcdefpme]{--photo-w:240px}}.prose[data-astro-cid-lcdefpme]{text-wrap:pretty;max-width:50ch;line-height:1.75}.prose[data-astro-cid-lcdefpme] p[data-astro-cid-lcdefpme]{margin:0}.prose[data-astro-cid-lcdefpme] p[data-astro-cid-lcdefpme]+p[data-astro-cid-lcdefpme]{margin-top:1.25rem}.more[data-astro-cid-lcdefpme]{font-size:var(--text-sm);margin-top:.25rem}.timeline[data-astro-cid-lcdefpme]{margin:0;padding:0;list-style:none}.timeline[data-astro-cid-lcdefpme]>li[data-astro-cid-lcdefpme]{border-left:1px solid var(--line);gap:.25rem 2rem;padding:0 0 2.75rem 1.5rem;display:grid;position:relative}.timeline[data-astro-cid-lcdefpme]>li[data-astro-cid-lcdefpme]:before{content:"";background:var(--accent);width:7px;height:7px;box-shadow:0 0 10px var(--accent);border-radius:50%;position:absolute;top:.45rem;left:-4px}.timeline[data-astro-cid-lcdefpme]>li[data-astro-cid-lcdefpme]:last-child{padding-bottom:0}@media (width>=700px){.timeline[data-astro-cid-lcdefpme]>li[data-astro-cid-lcdefpme]{grid-template-columns:12.5rem minmax(0,1fr)}}.when[data-astro-cid-lcdefpme]{font-size:var(--text-sm);color:var(--quiet);margin:.1rem 0 0}.timeline[data-astro-cid-lcdefpme] h3[data-astro-cid-lcdefpme]{font-size:var(--text-lg);margin-bottom:.2rem}.org[data-astro-cid-lcdefpme]{color:var(--quiet);margin-bottom:.6rem}.points[data-astro-cid-lcdefpme]{max-width:64ch;margin:0;padding-left:1.1rem}.points[data-astro-cid-lcdefpme] li[data-astro-cid-lcdefpme]+li[data-astro-cid-lcdefpme]{margin-top:.3rem}.points[data-astro-cid-lcdefpme] li[data-astro-cid-lcdefpme]::marker{color:var(--accent)}.modules[data-astro-cid-lcdefpme]{margin-top:1rem}.modules-label[data-astro-cid-lcdefpme]{font-size:var(--text-sm);color:var(--quiet);margin-bottom:.5rem}.skills[data-astro-cid-lcdefpme]{margin:0}.skill-row[data-astro-cid-lcdefpme]{border-bottom:1px solid var(--line);gap:.6rem 2rem;padding:1.1rem 0;display:grid}.skill-row[data-astro-cid-lcdefpme]:first-child{padding-top:0}@media (width>=700px){.skill-row[data-astro-cid-lcdefpme]{grid-template-columns:12.5rem minmax(0,1fr);align-items:baseline}}dt[data-astro-cid-lcdefpme]{font-weight:600}dd[data-astro-cid-lcdefpme]{margin:0}.writeups-list[data-astro-cid-lcdefpme]{margin-top:2.5rem}.cert-group[data-astro-cid-lcdefpme]+.cert-group[data-astro-cid-lcdefpme]{margin-top:2rem}.cert-group-title[data-astro-cid-lcdefpme]{font-size:var(--text-sm);color:var(--quiet);margin-bottom:.75rem;font-weight:600}.certs[data-astro-cid-lcdefpme]{gap:1.25rem;display:grid}@media (width>=560px){.certs[data-astro-cid-lcdefpme]{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width>=1100px){.certs[data-astro-cid-lcdefpme]{grid-template-columns:repeat(3,minmax(0,1fr))}}.contact-card[data-astro-cid-lcdefpme]{max-width:640px}.term[data-astro-cid-lcdefpme]{padding:0;overflow:hidden}.term-bar[data-astro-cid-lcdefpme]{border-bottom:1px solid var(--line);background:color-mix(in srgb, var(--bg) 55%, var(--card));font-size:var(--text-xs);color:var(--quiet);align-items:center;gap:.9rem;padding:.6rem 1rem;display:flex}.dots[data-astro-cid-lcdefpme]{gap:.35rem;display:inline-flex}.dots[data-astro-cid-lcdefpme] span[data-astro-cid-lcdefpme]{background:var(--quiet-line);border-radius:50%;width:.55rem;height:.55rem}.term-title[data-astro-cid-lcdefpme]{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.term-title[data-astro-cid-lcdefpme] .prompt[data-astro-cid-lcdefpme]{color:var(--accent)}.term-body[data-astro-cid-lcdefpme]{padding:clamp(1.1rem,3vw,1.5rem)}.term-bar[data-astro-cid-lcdefpme]{z-index:3;position:relative}.form-spider[data-astro-cid-lcdefpme]{z-index:2;pointer-events:none;width:20px;display:none;position:absolute;top:0;left:0}.form-spider[data-astro-cid-lcdefpme].is-on{display:block}.thread[data-astro-cid-lcdefpme]{width:1px;height:var(--len,0);background:var(--quiet-line);transform-origin:50% 0;transition:transform .45s ease-in;position:absolute;bottom:calc(100% - 3px);left:6.1px}.thread[data-astro-cid-lcdefpme].is-gone{transform:scaleY(0)}.swing[data-astro-cid-lcdefpme]{transform-origin:6.6px calc(-1 * var(--len,0px));position:absolute;inset:0}.form-spider[data-astro-cid-lcdefpme].is-swinging .swing[data-astro-cid-lcdefpme]{animation:3.4s ease-in-out infinite spider-swing}@keyframes spider-swing{0%,to{transform:rotate(var(--swing,0deg))}25%,75%{transform:rotate(0)translateY(1px)}50%{transform:rotate(calc(var(--swing,0deg) * -1))}}.dots[data-astro-cid-lcdefpme] span[data-astro-cid-lcdefpme]{transition:background-color .2s}.term[data-astro-cid-lcdefpme][data-light=sending] .dots[data-astro-cid-lcdefpme] span[data-astro-cid-lcdefpme]{animation:.9s ease-in-out infinite dot-pulse}.term[data-astro-cid-lcdefpme][data-light=sending] .dots[data-astro-cid-lcdefpme] span[data-astro-cid-lcdefpme]:nth-child(2){animation-delay:.3s}.term[data-astro-cid-lcdefpme][data-light=sending] .dots[data-astro-cid-lcdefpme] span[data-astro-cid-lcdefpme]:nth-child(3){animation-delay:.6s}.term[data-astro-cid-lcdefpme][data-light=ok] .dots[data-astro-cid-lcdefpme] span[data-astro-cid-lcdefpme],.term[data-astro-cid-lcdefpme][data-light=fail] .dots[data-astro-cid-lcdefpme] span[data-astro-cid-lcdefpme]:first-child{background:var(--accent)}@keyframes dot-pulse{0%,to{background:var(--quiet-line)}35%{background:var(--accent)}}@media (prefers-reduced-motion:reduce){.form-spider[data-astro-cid-lcdefpme]{display:none}.term[data-astro-cid-lcdefpme][data-light=sending] .dots[data-astro-cid-lcdefpme] span[data-astro-cid-lcdefpme]{background:var(--accent)}}.form-note[data-astro-cid-lcdefpme]{margin:0}.contact-actions[data-astro-cid-lcdefpme]{margin-top:1.25rem}.alt-contact[data-astro-cid-lcdefpme]{border-top:1px solid var(--line);font-size:var(--text-sm);color:var(--quiet);flex-wrap:wrap;align-items:center;gap:.25rem .5rem;margin:1.5rem 0 0;padding-top:1.25rem;display:flex}.alt-contact[data-astro-cid-lcdefpme] a[data-astro-cid-lcdefpme]{align-items:center;min-height:2rem;display:inline-flex}
