@font-face{font-family:Grug Hand;src:url(/fonts/GrugHand-Book.ttf)format("truetype");font-weight:350;font-style:normal;font-display:swap}@font-face{font-family:Grug Hand;src:url(/fonts/GrugHand-Regular.ttf)format("truetype");font-weight:400;font-style:normal;font-display:swap}@font-face{font-family:Grug Hand;src:url(/fonts/GrugHand-Medium.ttf)format("truetype");font-weight:500;font-style:normal;font-display:swap}*{box-sizing:border-box;margin:0;padding:0}:root{--font:"Grug Hand", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--bg:#fff;--fg:#0a0a0a;--dim:#4a4a4a;--muted:#8f8f8f;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}html{-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent;cursor:url(/cursors/default.png) 4 0,default;min-height:100%;cursor:-webkit-image-set(url(/cursors/default.png) 1x, url(/cursors/default@2x.png) 2x) 4 0, default;overflow-x:clip}body{min-height:100%;font-family:var(--font);color:var(--fg);-webkit-font-smoothing:antialiased;background:#fff;font-size:18px;font-weight:350;line-height:1.55;overflow-x:clip}a{color:inherit;cursor:url(/cursors/pointer.png) 7 0,pointer;cursor:-webkit-image-set(url(/cursors/pointer.png) 1x, url(/cursors/pointer@2x.png) 2x) 7 0, pointer;-webkit-tap-highlight-color:transparent;text-decoration:none}button{font:inherit;color:inherit;cursor:url(/cursors/pointer.png) 7 0,pointer;cursor:-webkit-image-set(url(/cursors/pointer.png) 1x, url(/cursors/pointer@2x.png) 2x) 7 0, pointer;-webkit-tap-highlight-color:transparent;background:0 0;border:none}.hw{z-index:0;max-width:100%;display:inline-block;position:relative}.hw-base{color:var(--fg);display:inline-block}.page{max-width:34rem;margin:0 auto;padding:7rem 1.5rem}.head{text-align:center}.head h1{letter-spacing:.01em;font-size:1.45rem;font-weight:500}.tagline{color:var(--dim);margin-top:.1rem;font-size:1rem}.home{flex-direction:column;justify-content:center;min-height:100svh;padding-top:2.5rem;padding-bottom:2.5rem;display:flex}.home .head{margin-bottom:3.5rem}.menu{flex-direction:column;align-items:center;gap:.85rem;display:flex}.menu a{color:var(--dim)}.menu a:hover,.menu a:focus-visible{outline:none}.selection-ring{z-index:-1;pointer-events:none;position:absolute;overflow:visible}.selection-ring path{fill:none;stroke:var(--fg);stroke-width:1px;opacity:0;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;stroke-dasharray:1000;stroke-dashoffset:1000px}a:hover .selection-ring path,a:focus-visible .selection-ring path,button:hover .selection-ring path,button:focus-visible .selection-ring path{animation:draw-selection-ring var(--ring-duration,.42s) cubic-bezier(.2, .75, .25, 1) forwards}@keyframes draw-selection-ring{0%{opacity:.88;stroke-dashoffset:1000px}to{opacity:.88;stroke-dashoffset:0}}@media (prefers-reduced-motion:reduce){a:hover .selection-ring path,a:focus-visible .selection-ring path,button:hover .selection-ring path,button:focus-visible .selection-ring path{opacity:.88;stroke-dashoffset:0;animation:none}}.terminal-cta{text-align:center;margin-top:3.25rem}.terminal-cta a,.terminal-cta button{color:var(--dim);transition:color .25s}.terminal-cta a:hover,.terminal-cta button:hover,.terminal-cta a:focus-visible,.terminal-cta button:focus-visible{color:var(--fg);outline:none}.cta-note{color:var(--muted);margin-top:.15rem;font-size:.85rem}.home-link{color:var(--muted);font-size:1.05rem;transition:color .25s}.home-link:hover{color:var(--fg)}.page-title{text-align:center;margin:2.75rem 0 2rem;font-size:1.35rem;font-weight:500}.back{margin-top:3.5rem;width:fit-content;color:var(--muted);margin-inline:auto;transition:color .25s;display:block}.back:hover,.back:focus-visible{color:var(--fg);outline:none}.prose{color:var(--dim)}.prose+.prose{margin-top:.7rem}.rows{list-style:none}.rows li{justify-content:space-between;align-items:baseline;gap:1.25rem;padding:.35rem 0;display:flex}.rows .what{flex-direction:column;display:flex}.row-link{justify-content:space-between;align-items:baseline;gap:1.25rem;width:100%;display:flex}.row-link.is-static{cursor:url(/cursors/default.png) 4 0,default;cursor:-webkit-image-set(url(/cursors/default.png) 1x, url(/cursors/default@2x.png) 2x) 4 0, default}.rows .row-link .what{color:var(--dim);min-width:0;display:block}.role{color:var(--dim)}.rows .what strong{font-weight:500}.rows .degree{color:var(--muted);font-size:.9rem;line-height:1.35}.rows .when{color:var(--muted);text-align:right;flex-shrink:0;font-size:.93rem}.rows .row-link .when,.certs .row-link .issuer{transition:color .25s}a.row-link:hover .when,a.row-link:hover .issuer,a.row-link:hover .role{color:var(--fg)}.works{list-style:none}.works li{padding:.4rem 0 1.15rem}.works li:last-child{padding-bottom:0}.work-title{align-items:baseline;gap:.3rem;font-weight:500;display:inline-flex}.arrow{color:var(--muted);font-size:.8rem;transition:transform .25s,color .25s}.work-title:hover .arrow{color:var(--fg);transform:translate(1px,-2px)}.blurb{color:var(--dim);margin-top:.1rem;font-size:.97rem}.stack{color:var(--muted);font-size:.87rem}.groups{flex-direction:column;gap:1.35rem;display:flex}.group-name{color:var(--fg);margin-bottom:.3rem;font-weight:500}.tags{flex-wrap:wrap;gap:.35rem .9rem;list-style:none;display:flex}.tags li{color:var(--dim);font-size:.95rem}.count{color:var(--muted);margin-bottom:1rem;font-size:.9rem}.certs{list-style:none}.certs li{padding:.24rem 0}.certs .row-link{color:var(--dim);gap:1rem;transition:color .25s}.certs a.row-link:hover{color:var(--fg)}.certs .no-file{color:var(--dim);min-width:0}.certs .issuer{color:var(--muted);text-align:right;flex-shrink:0;font-size:.85rem}@media (max-width:560px){body{font-size:17px}.page{padding:4.5rem 1.35rem}.rows li,.certs li{padding:.45rem 0}.row-link{flex-direction:column;align-items:flex-start;gap:0}.rows .when,.certs .issuer{text-align:left}}@media (hover:none){.hw-base{color:var(--fg)}}.splash{z-index:100;opacity:1;background:#fff;place-items:center;transition:opacity .65s cubic-bezier(.33,0,.2,1) .48s;display:grid;position:fixed;inset:0}.splash.is-leaving{opacity:0;pointer-events:none}.splash-video{opacity:1;clip-path:inset(0 .25% 0 0);filter:brightness(1.008);max-width:70vw;max-height:70vh;transition:opacity .52s cubic-bezier(.4,0,.6,1),transform .9s cubic-bezier(.33,0,.2,1)}.splash.is-leaving .splash-video{opacity:0;transform:scale(1.025)}.splash-skip{text-align:center;color:var(--muted);opacity:0;font-size:.9rem;animation:.6s 1.2s forwards skip-hint;position:absolute;bottom:2.5rem;left:0;right:0}.splash.is-leaving .splash-skip{opacity:0;transition:opacity .2s ease-out;animation:none}@keyframes skip-hint{to{opacity:1}}@media (prefers-reduced-motion:reduce){.splash{display:none}}::view-transition-group(*){animation-duration:.62s;animation-timing-function:cubic-bezier(.22,1,.3,1)}::view-transition-group(wordmark){z-index:20}::view-transition-old(*){animation-duration:.34s;animation-timing-function:ease}::view-transition-new(*){animation-duration:.34s;animation-timing-function:ease}::view-transition-image-pair(*){animation-name:morph-blur;animation-duration:.62s}@keyframes morph-blur{40%{filter:blur(1.4px)}}::view-transition-old(section-about){animation-delay:0s}::view-transition-new(section-about){animation-delay:0s}::view-transition-old(section-experience){animation-delay:40ms}::view-transition-new(section-experience){animation-delay:40ms}::view-transition-old(section-projects){animation-delay:80ms}::view-transition-new(section-projects){animation-delay:80ms}::view-transition-old(section-skills){animation-delay:.12s}::view-transition-new(section-skills){animation-delay:.12s}::view-transition-old(section-education){animation-delay:.16s}::view-transition-new(section-education){animation-delay:.16s}::view-transition-old(section-certificates){animation-delay:.2s}::view-transition-new(section-certificates){animation-delay:.2s}::view-transition-old(section-contact){animation-delay:.24s}::view-transition-new(section-contact){animation-delay:.24s}::view-transition-old(root){opacity:0;animation:none}::view-transition-image-pair(root){animation-name:none}::view-transition-new(root){animation:.34s cubic-bezier(.33,0,.2,1) .13s both fade-in,.56s cubic-bezier(.22,1,.3,1) both settle}:root:active-view-transition-type(nav-back)::view-transition-new(root){animation:.34s cubic-bezier(.33,0,.2,1) .13s both fade-in,.56s cubic-bezier(.22,1,.3,1) both settle-down}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes settle{0%{transform:translateY(10px)}to{transform:translateY(0)}}@keyframes settle-down{0%{transform:translateY(-10px)}to{transform:translateY(0)}}@media (prefers-reduced-motion:reduce){::view-transition-group(*){animation-duration:1ms!important;animation-delay:0s!important}::view-transition-old(*){animation-duration:1ms!important;animation-delay:0s!important}::view-transition-new(*){animation-duration:1ms!important;animation-delay:0s!important}::view-transition-image-pair(*){animation-duration:1ms!important;animation-delay:0s!important}}
