.margin-doodles{pointer-events:none;position:absolute;inset:0}.margin-doodle{top:var(--top);width:var(--size);rotate:var(--tilt);position:absolute}.margin-doodle--left{right:calc(100% - var(--gutter) + 12px)}.margin-doodle--right{left:calc(100% - var(--gutter) + 12px)}@media (width<=1279px){.margin-doodle{display:none}.margin-doodle--lead{top:.75rem;right:var(--gutter);width:min(56px, calc(var(--size) * .6));display:block;left:auto}}@media (width<=600px){.margin-doodle--lead{width:44px;top:.5rem}}.footer{padding:3rem var(--gutter) 2.5rem;color:var(--ink-soft);text-align:center;font-size:1.05rem}.footer p{margin:.2rem 0}.footer__made{opacity:.8;font-size:.95rem}.footer__link{color:inherit;-webkit-text-decoration:underline wavy var(--crayon-red);text-decoration:underline wavy var(--crayon-red);text-underline-offset:4px}.footer__link:hover{color:var(--ink-red)}.footer{position:relative}.footer .margin-doodle--left{right:auto;left:max(4%, var(--gutter))}.footer .margin-doodle--right{right:max(4%, var(--gutter));left:auto}.billo-walk{z-index:65;pointer-events:none;animation:billo-fade .7s ease-in var(--total) both;position:fixed;inset:0;overflow:hidden}.billo-paw{opacity:0;width:22px;animation:billo-step .18s ease-out var(--d) forwards;position:absolute;translate:-50% -50%}.billo-paw__svg{width:100%;fill:var(--crayon-graphite);opacity:.8}.billo-walk__sign{width:170px;position:absolute;translate:-50%;rotate:-4deg}@keyframes billo-step{0%{opacity:0;scale:1.25}to{opacity:1;scale:1}}@keyframes billo-fade{0%{opacity:1}to{opacity:0}}@media (prefers-reduced-motion:reduce){.billo-paw{opacity:1;animation:none}}.nav{z-index:50;transition:background-color .3s;position:fixed;inset:0 0 auto}.nav--scrolled{background-color:color-mix(in srgb, var(--paper) 97%, transparent);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.nav__inner{width:min(var(--max-width), 100%);height:64px;padding:0 var(--gutter);justify-content:space-between;align-items:center;gap:1rem;margin:0 auto;display:flex}.nav__logo{padding:.25rem;display:block}.nav__logo,.nav__tools{flex:none}.nav__list{align-items:center;gap:clamp(2.6rem,4.5vw,3.6rem);margin:0;padding:0 0 0 40px;list-style:none;display:flex}.nav__link{padding:.4rem .1rem;text-decoration:none;display:block;position:relative}.nav__arrow{opacity:0;pointer-events:none;width:34px;transition:opacity .2s;position:absolute;top:50%;right:calc(100% + 6px);translate:0 -50%}.nav__arrow.is-shown{opacity:1}.nav__tools{align-items:center;gap:.25rem;display:flex}.nav__sketchpad{border:2.5px solid var(--crayon-purple);background:color-mix(in srgb, var(--crayon-purple) 10%, var(--paper));color:var(--ink);font-family:var(--font-hand,inherit);white-space:nowrap;border-radius:16px 6px 14px 8px/8px 14px 6px 16px;margin-right:.35rem;padding:.2rem .8rem;font-size:1.1rem;line-height:1.4;text-decoration:none;transition:background .15s,rotate .15s}.nav__sketchpad:hover,.nav__sketchpad:focus-visible{background:color-mix(in srgb, var(--crayon-purple) 22%, var(--paper));rotate:-2deg}.nav__theme{cursor:pointer;background:0 0;border:0;padding:.4rem}.nav__theme svg{width:30px}.nav__toggle{cursor:pointer;background:0 0;border:0;padding:.5rem;display:none}.nav__toggle svg{width:34px}.nav__underline{width:min(var(--max-width), 100%);padding:0 var(--gutter);pointer-events:none;margin:0 auto;position:absolute;inset:auto 0 -6px}@media (width<=999px){.nav nav{display:none}.nav__toggle{display:block}}.nav-sheet{z-index:60;padding:var(--gutter);background-color:var(--paper);place-items:center;animation:.25s sheet-in;display:grid;position:fixed;inset:0}@keyframes sheet-in{0%{opacity:0;transform:translateY(-12px)}}.nav-sheet__close{top:14px;right:var(--gutter);cursor:pointer;background:0 0;border:0;padding:.6rem;position:absolute}.nav-sheet__close svg{width:26px}.nav-sheet__list{gap:1.6rem;margin:0;padding:0;list-style:none;display:grid}.nav-sheet__link{align-items:center;gap:1rem;text-decoration:none;display:flex}.nav-sheet__arrow{flex:none;width:54px}.page-break{pointer-events:none;--tear-fibres:#fffdf8;--tear-shadow:#6e552d38;--tape:#ecdeaa9e;--tape-edge:#967d4640;height:30px;position:relative}:root[data-theme=dark] .page-break{--tear-fibres:#e8e5da47;--tear-shadow:#00000073;--tape:#ece2c452;--tape-edge:#00000040}.page-break__tear{width:100%;height:100%;display:block}.page-break__fibres{fill:var(--tear-fibres)}.page-break__shadow{fill:var(--tear-shadow)}.page-break__tape{background:repeating-linear-gradient(90deg, transparent 0 9px, var(--tape-edge) 9px 10px) 0 0 / 100% 100%, var(--tape);background-blend-mode:soft-light;width:clamp(70px,9vw,110px);height:28px;box-shadow:0 1px 1px var(--tape-edge);clip-path:polygon(3% 0,97% 0,100% 12%,96% 25%,100% 38%,96% 50%,100% 63%,96% 75%,100% 88%,97% 100%,3% 100%,0 88%,4% 75%,0 63%,4% 50%,0 38%,4% 25%,0 12%);position:absolute;top:1px;translate:-50%}.sound-toggle{right:max(12px, calc(var(--gutter) / 2));z-index:40;border:2px solid color-mix(in srgb, var(--ink-soft) 60%, transparent);background:color-mix(in srgb, var(--paper) 92%, transparent);color:var(--ink-soft);font:inherit;border-radius:14px 4px 12px 5px/5px 12px 4px 14px;padding:.15rem .7rem;font-size:.95rem;position:fixed;bottom:12px}.sound-toggle:hover,.sound-toggle[aria-pressed=true]{color:var(--ink)}.lab{min-height:100vh;padding:var(--gutter);grid-template-rows:1fr auto;grid-template-columns:minmax(0,1fr);gap:1.5rem;display:grid}.lab__canvas{flex-direction:column;justify-content:center;align-items:center;gap:2rem;min-height:50vh;display:flex}.lab__doodles{flex-wrap:wrap;justify-content:center;align-items:flex-end;gap:clamp(1rem,5vw,4rem);display:flex}.lab__doodle{width:auto;height:clamp(90px,20vw,180px)}.lab__hint{color:var(--ink-soft);font-size:.85rem}.lab__text{width:min(900px,100%)}.lab__panel{border:2px dashed var(--ink-soft);border-radius:14px 18px 12px 20px;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));align-items:end;gap:1rem 1.5rem;width:min(900px,100%);margin:0 auto;padding:1.25rem;font-size:1.1rem;display:grid}.lab__panel label{gap:.25rem;display:grid}.lab__wide{grid-column:1/-1}.lab__panel textarea,.lab__panel button{font:inherit;color:inherit}.lab__panel textarea{border:2px solid var(--ink-soft);resize:vertical;background:#ffffff80;border-radius:8px;padding:.5rem}.lab__panel input[type=range]{accent-color:var(--crayon-red)}.lab__check{align-items:center;gap:.5rem;display:flex!important}.lab__colours{border:0;gap:.5rem;margin:0;padding:0;display:flex}.lab__colours legend{margin-bottom:.25rem}.lab__colours button{cursor:pointer;border:0;border-radius:50% 45% 55% 48%;width:28px;height:28px}.lab__colours button[aria-pressed=true]{outline:3px solid var(--ink);outline-offset:2px}.lab__buttons{gap:.75rem;display:flex}.lab__buttons button{border:2px solid var(--ink);white-space:nowrap;cursor:pointer;background:0 0;border-radius:12px 8px 14px 9px;padding:.35rem 1rem}.lab__buttons button:hover{background:var(--paper-shade)}.lab__meta{color:var(--ink-soft);grid-column:1/-1;margin:0;font-size:1rem}.project-card{--accent:var(--accent-day);--chip-colour:var(--accent);will-change:transform;flex-direction:column;gap:1.1rem;height:100%;padding:1rem 1rem 1.4rem;transition:transform .25s;display:flex;position:relative}:root[data-theme=dark] .project-card{--accent:var(--accent-night)}.project-card>.crayon-shape{will-change:transform}li:nth-child(odd)>.project-card{transform:rotate(-.4deg)}li:nth-child(2n)>.project-card{transform:rotate(.5deg)}li>.project-card.is-active{transform:rotate(0)translateY(-3px)}.project-card__scene{aspect-ratio:16/10;isolation:isolate;contain:layout paint;background:var(--paper-shade);border-radius:6px 10px 7px 12px;position:relative;overflow:hidden}.project-card__scene.is-asleep *,.project-card__scene.is-asleep :before,.project-card__scene.is-asleep :after{will-change:auto!important;transition:none!important;animation:none!important}.project-card__scene>:not(.project-card__stamp){position:absolute;inset:0}.project-card__stamp{z-index:2;border:3px solid var(--crayon-red);color:var(--ink-red);text-transform:uppercase;letter-spacing:.06em;background:color-mix(in srgb, var(--paper) 85%, transparent);border-radius:6px 3px 7px 4px;padding:.15rem .9rem;font-size:1.1rem;position:absolute;top:12px;right:-6px;transform:rotate(8deg)}.project-card__body{flex-direction:column;flex:1;gap:.55rem;padding:0 .35rem;display:flex}.project-card__title{font-size:inherit;font-weight:inherit;margin:0 0 .1rem}.project-card__body p{margin:0}.project-card__tagline{color:color-mix(in srgb, var(--accent) 78%, var(--ink-shift));font-size:1.15rem;line-height:1.3}.project-card__description{font-size:1.08rem;line-height:1.45}.project-card__stack{flex-wrap:wrap;gap:.45rem;margin:.3rem 0 0;padding:0;list-style:none;display:flex}.project-card__stack .chip{font-size:.95rem}.project-card__links{gap:1.4rem;padding-top:.5rem;font-size:1.15rem;display:flex;margin-top:auto!important}.project-card .project-card__links a{-webkit-text-decoration-color:var(--accent);text-decoration-color:var(--accent)}.placeholder-scene{color:var(--accent);background:repeating-linear-gradient(-45deg, transparent 0 14px, color-mix(in srgb, var(--accent) 8%, transparent) 14px 16px), var(--paper-shade);place-content:center;justify-items:center;gap:.25rem;display:grid}.placeholder-scene__initials{font-size:clamp(2.5rem,7vw,4rem);line-height:1}.placeholder-scene__note{color:var(--ink-soft);font-size:1rem}@media (prefers-reduced-motion:reduce){.project-card{transition:none}}.section-heading{font-size:inherit;font-weight:inherit;margin:0 0 1.75rem}.section-heading--small{margin-bottom:1.25rem}.section{width:min(var(--max-width), 100%);padding:clamp(4rem, 10vw, 7rem) var(--gutter);margin:0 auto;position:relative}.section p{margin:0 0 1rem}.section a{-webkit-text-decoration-color:var(--crayon-blue);text-decoration-color:var(--crayon-blue);text-underline-offset:5px;text-decoration-style:wavy;text-decoration-thickness:1.5px}.section a:hover{color:var(--crayon-blue)}.about{grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);align-items:start;gap:clamp(2.5rem,6vw,5.5rem);display:grid}.about__story p{max-width:58ch;font-size:clamp(1.15rem,1.6vw,1.3rem)}.about__school{padding-top:.5rem}.timeline{padding:.25rem 0 .25rem 3rem;position:relative}.timeline__list{gap:2.2rem;margin:0;padding:0;list-style:none;display:grid}.timeline__rail{width:4px;position:absolute;top:.6rem;bottom:.6rem;left:.9rem}.timeline__stop{gap:.1rem;display:grid;position:relative}.timeline__dot{width:1.6rem;position:absolute;top:.15rem;left:-2.75rem}.timeline__years{color:var(--ink-soft);font-size:1rem}.timeline__name{font-size:1.3rem;line-height:1.25}.timeline__detail{color:var(--ink-soft)}@media (width<=820px){.about{grid-template-columns:minmax(0,1fr)}}.contact{grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);align-items:start;gap:clamp(2.5rem,6vw,5rem);display:grid}.contact__intro p{max-width:40ch;font-size:clamp(1.15rem,1.6vw,1.3rem)}.contact__socials{flex-wrap:wrap;gap:.5rem 1.6rem;margin:1.5rem 0 0;padding:0;font-size:1.3rem;list-style:none;display:flex}.contact__card{padding:clamp(1.4rem,3vw,2.2rem);position:relative}.contact__form{gap:1.4rem;display:grid}.field{gap:.2rem;display:grid}.field label{color:var(--ink-soft);font-size:1.05rem}.field input,.field textarea{border:0;border-bottom:2px solid color-mix(in srgb, var(--ink) 35%, transparent);width:100%;color:var(--ink);font:inherit;background:0 0;border-radius:0;padding:.3rem .1rem;font-size:1.25rem}.field textarea{resize:vertical;background-image:repeating-linear-gradient(to bottom, transparent 0, transparent calc(2rem - 2px), color-mix(in srgb, var(--crayon-blue) 28%, transparent) calc(2rem - 2px), color-mix(in srgb, var(--crayon-blue) 28%, transparent) 2rem);background-attachment:local;border-bottom:0;min-height:9rem;line-height:2rem}.field input:focus,.field textarea:focus{border-bottom-color:var(--crayon-purple);outline:none}.field textarea:focus{box-shadow:inset 0 -2px 0 var(--crayon-purple)}.field--invalid input{border-bottom-color:var(--crayon-red)}.field__error,.contact__error{color:var(--ink-red);margin:0;font-size:1rem}.contact__trap{width:1px;height:1px;position:absolute;left:-9999px;overflow:hidden}.contact__actions{flex-wrap:wrap;align-items:center;gap:1rem 1.5rem;display:flex}.contact__send{color:var(--ink);font:inherit;cursor:pointer;background:0 0;border:0;padding:.45rem 1.5rem;font-size:1.3rem;transition:transform .15s;position:relative}.contact__send:hover:not(:disabled){transform:rotate(-2deg)scale(1.04)}.contact__send:disabled{cursor:progress;opacity:.7}.contact__sent{text-align:center;justify-items:center;gap:1rem;padding:2rem 0;font-size:1.3rem;display:grid}.contact__check{width:80px}.contact__again{color:var(--ink-soft);font:inherit;-webkit-text-decoration:underline wavy var(--crayon-purple);text-decoration:underline wavy var(--crayon-purple);text-underline-offset:5px;cursor:pointer;background:0 0;border:0}@media (width<=820px){.contact{grid-template-columns:minmax(0,1fr)}}.hats__intro{color:var(--ink-soft)}.hats__icpc{background:color-mix(in srgb, var(--crayon-yellow) 22%, transparent);border-radius:6px 14px 8px 12px;align-items:center;gap:1rem;width:fit-content;max-width:100%;margin:1.75rem 0 .5rem;padding:.8rem 1.4rem .8rem 1rem;display:flex;transform:rotate(-.6deg)}.hats__icpc p{margin:0;font-size:clamp(1.1rem,1.6vw,1.25rem)}.hats__icpc strong{color:var(--ink-red);font-weight:400}.hats__icpc-star{flex:none;width:3.2rem}.hats__group{color:var(--ink-soft);margin:2.5rem 0 0;font-size:1.3rem;font-weight:400}.hats__grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,280px),1fr));gap:clamp(1.5rem,3vw,2.25rem);margin:1.25rem 0 0;padding:0;list-style:none;display:grid}.hat-card{flex-direction:column;gap:.2rem;padding:1.3rem 1.4rem 1.5rem;display:flex;position:relative}.hat-card__dates{color:var(--ink-soft);font-size:.95rem}.hat-card__now{background:color-mix(in srgb, var(--crayon-green) 20%, transparent);color:var(--ink-green);border-radius:999px;padding:0 .4rem}.hat-card__title{color:var(--card-ink);margin:.15rem 0 0;font-size:1.35rem;font-weight:400;line-height:1.2}.hat-card__org{font-size:1.05rem}.hat-card__chips{flex-wrap:wrap;gap:.5rem;margin:.8rem 0 0;padding:0;list-style:none;display:flex}.hat-card .chip{--chip-colour:var(--card-colour)}.hero{min-height:100svh;padding:calc(var(--gutter) * 1.5) var(--gutter) calc(var(--gutter) * 2.5);place-items:center;display:grid;position:relative}.hero__inner{width:min(var(--max-width), 100%);grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);align-items:center;gap:clamp(2.5rem,6vw,6rem);display:grid}.hero__words{position:relative}.hero__title{font-size:inherit;margin:0}.hero__sparkle{width:clamp(66px,10vw,126px);position:absolute;top:-14%;right:2%}.hero__tagline{max-width:32ch;color:var(--ink-soft);opacity:0;margin:1.5rem 0 0;font-size:clamp(1.15rem,1.9vw,1.5rem);line-height:1.4;transition:opacity .6s,transform .6s;transform:translateY(10px)}.hero__tagline.is-visible{opacity:1;transform:none}.hero__resume{color:var(--ink);-webkit-text-decoration:underline wavy var(--crayon-red);text-decoration:underline wavy var(--crayon-red);text-underline-offset:6px;opacity:0;pointer-events:none;margin-top:1rem;font-size:clamp(1.15rem,1.7vw,1.3rem);text-decoration-thickness:1.5px;transition:opacity .6s .15s,transform .6s .15s;display:inline-block;transform:translateY(10px)}.hero__resume.is-visible{opacity:1;pointer-events:auto;transform:none}.hero__resume:hover{color:var(--ink-red)}.hero__portrait{justify-self:center;width:min(100%,420px);position:relative;translate:-14px}.hero__frame{aspect-ratio:1;position:relative}.hero__photo{background:radial-gradient(circle at 50% 38%,#fcebb4 0%,#f5d98a 70%,#efcd78 100%);border-radius:50%;animation:.65s cubic-bezier(.34,1.56,.64,1) hero-photo-in;position:absolute;inset:17.7419%;overflow:hidden;transform:rotate(-2deg);box-shadow:0 8px 22px #46321429}@keyframes hero-photo-in{0%{transform:scale(.82)rotate(-8deg)}}@media (prefers-reduced-motion:reduce){.hero__photo{animation:none}}.hero__photo img{object-fit:cover;width:100%;height:100%}.hero__rings{position:absolute;inset:0}.hero__cat{cursor:pointer;transform-origin:50% 90%;width:27%;position:absolute;bottom:-4%;left:-24%}.hero__cat:hover,.hero__cat:focus-visible{animation:.6s ease-in-out billo-wiggle}@keyframes billo-wiggle{25%{transform:rotate(-7deg)}60%{transform:rotate(5deg)}}@media (prefers-reduced-motion:reduce){.hero__cat:hover,.hero__cat:focus-visible{animation:none}}.hero__flower{width:22%;position:absolute;bottom:-10%;right:-16%}.hero__billo{width:max-content;max-width:min(28rem,92vw);color:var(--ink-soft);-webkit-text-decoration:underline wavy var(--crayon-orange);text-decoration:underline wavy var(--crayon-orange);text-underline-offset:5px;opacity:0;pointer-events:none;font-size:1.1rem;line-height:1.35;text-decoration-thickness:1.5px;transition:opacity .5s .3s,transform .5s .3s;position:absolute;top:calc(100% + 1.4rem);left:-8%;transform:rotate(-3deg)translateY(6px)}.hero__billo.is-visible{opacity:1;pointer-events:auto;transform:rotate(-3deg)}.hero__billo:hover{color:var(--ink)}.hero__control{bottom:calc(var(--gutter) * .75);color:var(--ink-soft);font:inherit;cursor:pointer;background:0 0;border:0;padding:.25rem .9rem;font-size:1.05rem;position:absolute;left:50%;transform:translate(-50%)}.hero__control:hover{color:var(--ink);text-underline-offset:5px;-webkit-text-decoration:underline wavy;text-decoration:underline wavy}@media (width<=820px){.hero__inner{grid-template-columns:minmax(0,1fr);gap:2.5rem}.hero__words{justify-self:center;width:min(100%,520px)}.hero__portrait{width:min(70%,320px);translate:none}.hero__sparkle{top:-18%;right:0}.hero__cat{width:30%;left:-26%}.hero__flower{width:25%;right:-22%}.hero__billo{text-align:center;width:min(88vw,24rem);max-width:none;left:50%;translate:-50%}}.projects__intro{max-width:60ch;color:var(--ink-soft)}.projects__grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,440px),1fr));gap:clamp(2rem,4vw,3rem) clamp(1.5rem,3.5vw,2.75rem);margin:2.25rem 0 0;padding:0;list-style:none;display:grid}.projects__grid>li{content-visibility:auto;contain-intrinsic-size:auto 720px;overflow-clip-margin:24px}.sketch{grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:center;gap:clamp(2rem,6vw,5rem);display:grid}.sketch__words p{max-width:50ch;font-size:clamp(1.15rem,1.6vw,1.3rem)}.sketch__list{max-width:52ch;margin:0 0 1.25rem;padding:0;font-size:clamp(1.05rem,1.4vw,1.18rem);list-style:none}.sketch__list li{margin:0 0 .55rem;padding-left:1.4rem;position:relative}.sketch__list li:before{content:"✓";color:var(--crayon-green);font-family:var(--font-hand);font-weight:700;position:absolute;left:0}.sketch__note{color:var(--ink-soft)}.sketch__actions{flex-wrap:wrap;gap:.9rem 1.2rem;margin-top:1.5rem;display:flex}.section .sketch__button{border:2.5px solid var(--crayon-red);background:color-mix(in srgb, var(--crayon-red) 10%, var(--paper));color:var(--ink);font:inherit;border-radius:16px 6px 14px 8px/8px 14px 6px 16px;padding:.35rem 1.1rem;font-size:1.15rem;text-decoration:none}.section .sketch__button:hover{color:var(--ink);background:color-mix(in srgb, var(--crayon-red) 20%, var(--paper))}.section .sketch__button--ghost{border-color:var(--crayon-graphite);background:0 0}.sketch__box{justify-content:space-between;align-items:flex-end;gap:1rem;padding:2rem 1.75rem 1.75rem;display:flex;position:relative}.sketch__crayons{align-items:flex-end;gap:.4rem;display:flex}.sketch__crayon{width:20px;height:calc(88px + var(--i) * 3px);border:2px solid var(--crayon-graphite);background:linear-gradient(#ffffff8c, #ffffff8c) 0 55% / 100% 26% no-repeat, var(--c);clip-path:polygon(50% 0,100% 18%,100% 100%,0 100%,0 18%);transform:rotate(calc((var(--i) - 4) * 2deg));border-radius:9px 9px 3px 3px}.sketch__doodle{flex:none;width:clamp(70px,9vw,110px)}@media (width<=820px){.sketch{grid-template-columns:minmax(0,1fr)}.sketch__crayon{width:16px;height:calc(70px + var(--i) * 2px)}}.skills__intro{color:var(--ink-soft)}.skills__grid{grid-template-columns:repeat(auto-fill,minmax(min(100%,300px),1fr));gap:clamp(1.5rem,3vw,2.25rem);margin:2rem 0 0;padding:0;list-style:none;display:grid}.skill-card{padding:1.4rem 1.4rem 1.6rem;position:relative}.skill-card__title{color:var(--card-ink);margin:0 0 .9rem;font-size:1.45rem;font-weight:400}.skill-card__chips{flex-wrap:wrap;gap:.55rem;margin:0;padding:0;list-style:none;display:flex}.skill-card .chip{--chip-colour:var(--card-colour)}
