.scroll-scrub{--ss-progress:0;isolation:isolate;color:var(--ss-ink);background:var(--ss-bg);position:relative}.scroll-scrub__stage{z-index:0;background:var(--ss-bg);width:100%;height:100dvh;position:sticky;top:0;overflow:hidden}.scroll-scrub__media,.scroll-scrub__layer,.scroll-scrub__picture,.scroll-scrub__poster,.scroll-scrub__video{width:100%;height:100%;position:absolute;inset:0}.scroll-scrub__media{z-index:0}.scroll-scrub__layer{opacity:0;will-change:opacity;margin:0;overflow:hidden}.scroll-scrub__layer:first-child{opacity:1}.scroll-scrub__poster,.scroll-scrub__video{object-fit:cover;object-position:var(--ss-object-position);display:block}.scroll-scrub__poster{z-index:0}.scroll-scrub__video{z-index:1}.scroll-scrub__layer[data-video-painted=true] .scroll-scrub__poster{visibility:hidden}.scroll-scrub__progress{z-index:5;background:color-mix(in srgb, var(--ss-ink) 14%, transparent);pointer-events:none;height:2px;position:absolute;top:0;left:0;right:0}.scroll-scrub__progress span{background:var(--ss-accent);width:100%;height:100%;transform:scaleX(var(--ss-progress));transform-origin:0;display:block}.scroll-scrub__route{z-index:6;pointer-events:auto;justify-content:flex-end;gap:.25rem;display:flex;position:absolute;top:clamp(1rem,3vw,2rem);left:clamp(1rem,4vw,4rem);right:clamp(1rem,4vw,4rem)}.scroll-scrub__route-button{min-height:2.75rem;color:var(--ss-muted);font:inherit;cursor:pointer;background:0 0;border:0;padding:.65rem .9rem}.scroll-scrub__route-button:hover,.scroll-scrub__route-button[aria-current=step]{color:var(--ss-ink)}.scroll-scrub__route-button[aria-current=step]{text-decoration:underline;-webkit-text-decoration-color:var(--ss-accent);text-decoration-color:var(--ss-accent);text-underline-offset:.3em;text-decoration-thickness:.15em}.scroll-scrub__route-button:focus-visible{outline:2px solid var(--ss-accent);outline-offset:3px}.scroll-scrub__story{z-index:3;pointer-events:none;margin-top:-100dvh;position:relative}.scroll-scrub__chapter,.scroll-scrub__connector-band{position:relative}.scroll-scrub__chapter-pin{pointer-events:none;align-items:center;min-height:100dvh;padding:clamp(5rem,9vw,8rem) clamp(1.25rem,6vw,6rem);display:flex;position:sticky;top:0}.scroll-scrub__chapter[data-align=right] .scroll-scrub__chapter-pin{justify-content:flex-end}.scroll-scrub__copy{pointer-events:auto;width:min(40rem,48vw);position:relative}.scroll-scrub__copy:before{z-index:-1;content:"";background:radial-gradient(ellipse at center, color-mix(in srgb, var(--ss-bg) 88%, transparent) 0%, color-mix(in srgb, var(--ss-bg) 58%, transparent) 52%, transparent 76%);pointer-events:none;position:absolute;inset:-3rem -5rem}.scroll-scrub__kicker{max-width:30ch;color:var(--ss-accent);letter-spacing:.12em;text-transform:uppercase;margin:0 0 1rem;font-size:.8rem;font-weight:700}.scroll-scrub__title{max-width:13ch;color:var(--ss-ink);font:inherit;letter-spacing:-.045em;text-wrap:balance;margin:0;font-size:clamp(2.75rem,6vw,6.75rem);font-weight:700;line-height:.94}.scroll-scrub__body{max-width:42ch;color:var(--ss-muted);margin:1.5rem 0 0;font-size:clamp(1rem,1.35vw,1.2rem);line-height:1.55}.scroll-scrub__tags{flex-wrap:wrap;gap:.55rem;margin:1.5rem 0 0;padding:0;list-style:none;display:flex}.scroll-scrub__tags li{border:1px solid color-mix(in srgb, var(--ss-ink) 20%, transparent);color:var(--ss-ink);padding:.45rem .7rem;font-size:.82rem}.scroll-scrub__actions{flex-wrap:wrap;gap:.75rem;margin-top:2rem;display:flex}@media (width<=860px){.scroll-scrub__poster,.scroll-scrub__video{object-position:var(--ss-mobile-position)}.scroll-scrub__route{right:max(.75rem, env(safe-area-inset-right));left:max(.75rem, env(safe-area-inset-left));overscroll-behavior-x:contain;scrollbar-width:thin;justify-content:flex-start;overflow-x:auto}.scroll-scrub__route-button{flex:none}.scroll-scrub__chapter-pin,.scroll-scrub__chapter[data-align=right] .scroll-scrub__chapter-pin{padding:6.5rem max(1.25rem, env(safe-area-inset-right)) calc(4rem + env(safe-area-inset-bottom)) max(1.25rem, env(safe-area-inset-left));justify-content:flex-start;align-items:flex-end}.scroll-scrub__copy{width:min(100%,36rem)}.scroll-scrub__copy:before{background:linear-gradient(to top, var(--ss-bg) 0%, color-mix(in srgb, var(--ss-bg) 82%, transparent) 58%, transparent 100%);inset:-3rem -2rem}.scroll-scrub__title{max-width:14ch;font-size:clamp(2.3rem,11vw,4.5rem)}}@media (prefers-reduced-motion:reduce){.scroll-scrub__chapter{min-height:100dvh!important}.scroll-scrub__connector-band{display:none}.scroll-scrub__progress span{transition:none}}.dy-site{--dy-paper:#f6f4ef;--dy-ink:#1b1a16;--dy-muted:#6d6a61;--dy-line:#ddd8cc;--dy-accent:#3446c9;--dy-dark:#0c0c10;--dy-ivory:#f2efe8;--dy-display:"Outfit", "Segoe UI", system-ui, sans-serif;--dy-mono:"IBM Plex Mono", ui-monospace, "Cascadia Mono", monospace;--dy-script:"Playfair Display", Georgia, "Times New Roman", serif;--dy-hold:130dvh;font-family:var(--dy-display);background:var(--dy-dark);color:var(--dy-ink);position:relative}.dy-hint{z-index:3;width:min(90vw,24rem);font-family:var(--dy-script);letter-spacing:.02em;text-align:center;color:var(--dy-ivory);text-shadow:0 1px 2px #0c0c1080,0 0 28px #0c0c10a6;opacity:0;pointer-events:none;margin:0;font-size:clamp(.95rem,1.9vw,1.3rem);font-style:italic;font-weight:400;line-height:1.2;transition:opacity .7s;position:fixed;top:72dvh;left:50%;transform:translate(-50%)}.dy-hint[data-shown]{opacity:1;animation:3.6s ease-in-out infinite dy-hint-float}.dy-site[data-journey=done] .dy-hint{display:none}@keyframes dy-hint-float{50%{transform:translate(-50%,.3rem)}}@media (prefers-reduced-motion:reduce){.dy-hint{transition:none;position:absolute}.dy-hint[data-shown]{animation:none}}.dy-boot{z-index:60;-webkit-backdrop-filter:blur(26px)saturate(1.2);backdrop-filter:blur(26px)saturate(1.2);background:#f6f4efb8;flex-direction:column;justify-content:center;align-items:center;gap:.5rem;transition:transform .7s cubic-bezier(.7,0,.2,1);display:flex;position:fixed;inset:0}.dy-boot[data-phase=leaving]{transform:translateY(-101%)}.dy-boot__mark{width:clamp(2.25rem,5.5vw,3rem);height:auto;display:block}.dy-boot__meter{flex-direction:column;align-items:center;gap:.9rem;width:min(20rem,70vw);display:flex}.dy-boot__track{background:#1b1a1624;border-radius:999px;width:100%;height:4px;overflow:hidden}.dy-boot__fill{background:#fff;border-radius:999px;height:100%;transition:width .2s linear;display:block;box-shadow:0 0 12px #ffffffe6}.dy-boot__percent{font-family:var(--dy-mono);color:var(--dy-muted);font-variant-numeric:tabular-nums;margin:0;font-size:.8rem}@media (prefers-reduced-motion:reduce){.dy-boot{transition:opacity .5s}.dy-boot[data-phase=leaving]{opacity:0;transform:none}.dy-boot__fill{transition:none}}.dy-site .scroll-scrub__route,.dy-site .scroll-scrub__progress{display:none}.dy-site .scroll-scrub__chapter-pin{visibility:hidden}.dy-site .scroll-scrub{z-index:2}.dy-site[data-journey=done] .scroll-scrub{visibility:hidden}.dy-site[data-journey=done]{background:var(--dy-paper)}.dy-site .scroll-scrub__story:after{content:"";height:var(--dy-hold);display:block}.dy-dissolve{z-index:3;pointer-events:none;position:fixed;inset:0}.dy-site[data-journey=done] .dy-dissolve{display:none}.dy-dissolve__veil{background:var(--dy-paper);opacity:0;will-change:opacity;position:absolute;inset:0}@media (prefers-reduced-motion:reduce){.dy-dissolve{display:none}.dy-content{margin-top:0}}.dy-content{z-index:1;background-color:var(--dy-paper);color:var(--dy-ink);background-image:url(/assets/plates/grain.png);background-repeat:repeat;background-size:480px;margin-top:-100dvh;position:relative}.dy-content section{max-width:72rem;margin:0 auto;padding:6rem 1.5rem;scroll-margin-top:4.5rem;position:relative}.dy-content section:not(:first-of-type):before{content:"";border-top:2px solid var(--dy-muted);width:min(90vw,84rem);position:absolute;top:0;left:50%;transform:translate(-50%)}.dy-kicker{font-family:var(--dy-mono);letter-spacing:.3em;text-transform:uppercase;color:var(--dy-muted);margin:0 0 1rem;font-size:.75rem}.dy-h2{letter-spacing:-.03em;margin:0 0 2.5rem;font-size:clamp(2rem,4vw,3.25rem);font-weight:600;line-height:1}.dy-nav{z-index:5;border-bottom:1px solid var(--dy-line);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#f6f4efdb;align-items:center;gap:clamp(1.5rem,6vw,4rem);padding:.8rem clamp(1.25rem,4vw,2.75rem);display:flex;position:sticky;top:0}.dy-nav__logo{color:inherit;font:inherit;cursor:pointer;background:0 0;border:0;flex:none;align-items:center;gap:.55rem;padding:0;display:flex}.dy-nav__mark{width:1.75rem;height:1.75rem;display:block}.dy-nav__name{font-family:var(--dy-mono);letter-spacing:.08em;white-space:nowrap;font-size:.58rem}.dy-nav__links{flex:1;justify-content:space-evenly;gap:.5rem;min-width:0;display:flex}.dy-nav__link{background-color:#0000;background-image:linear-gradient(var(--dy-accent), var(--dy-accent));color:var(--dy-muted);font-family:var(--dy-mono);letter-spacing:.16em;text-transform:uppercase;cursor:pointer;background-position:0 100%;background-repeat:no-repeat;background-size:0% 1.5px;border:0;padding:.55rem .4rem;font-size:.78rem;transition:background-size .25s,color .25s}.dy-nav__link:hover,.dy-nav__link:focus-visible{color:var(--dy-ink);background-size:100% 1.5px}.dy-nav__logo:focus-visible,.dy-nav__link:focus-visible{outline:2px solid var(--dy-accent);outline-offset:3px}.dy-about{justify-content:space-between;align-items:center;gap:clamp(2rem,6vw,5rem);display:flex}#about{padding-bottom:0}.dy-about__text{flex:auto;min-width:0}.dy-about__portrait{object-fit:cover;border:1px solid var(--dy-line);border-radius:50%;flex:none;width:clamp(10rem,22vw,19rem);height:clamp(10rem,22vw,19rem)}.dy-about__name{letter-spacing:-.03em;margin:0 0 2rem;font-size:clamp(2.25rem,5vw,3.75rem);font-weight:600;line-height:1}.dy-about__role{color:var(--dy-muted);margin:0 0 .75rem;font-size:clamp(1rem,1.6vw,1.25rem)}.dy-about__focus{letter-spacing:-.02em;text-wrap:balance;max-width:22ch;margin:0;font-size:clamp(1.75rem,3.6vw,2.75rem);font-weight:600;line-height:1.15}#bio:before{content:none}#bio{padding-top:0}.dy-bio__text{max-width:60ch;margin:0;font-size:1.15rem;line-height:1.65}.dy-projects__rows{grid-template-columns:repeat(2,1fr);gap:1.25rem;max-width:56rem;margin:0 auto;display:grid}.dy-project{aspect-ratio:1;border:1px solid var(--dy-line);background:#ffffff8c;border-radius:14px;flex-direction:column;display:flex;overflow:hidden}.dy-project__thumb{object-fit:cover;border-bottom:1px solid var(--dy-line);flex:0 0 30%;width:100%;height:auto;min-height:0}.dy-project__text{flex-direction:column;flex:1;min-height:0;padding:1.25rem;display:flex}.dy-project__name{letter-spacing:-.02em;margin:0;font-size:1.15rem;font-weight:600}.dy-project__tagline{font-family:var(--dy-mono);color:var(--dy-muted);margin:.3rem 0 .75rem;font-size:.72rem}.dy-project__body{margin:0;font-size:clamp(.8rem,1vw,.88rem);line-height:1.5}.dy-project__repo{font-family:var(--dy-mono);color:var(--dy-accent);margin-top:.5rem;font-size:.72rem;text-decoration:none;display:inline-block}.dy-project__stack{border-top:1px solid var(--dy-line);font-family:var(--dy-mono);color:var(--dy-muted);margin:.85rem 0 0;padding-top:.7rem;font-size:.72rem}.dy-projects__more{margin:2.5rem 0 0;font-size:1.05rem}.dy-ghlink{color:var(--dy-accent);background-image:linear-gradient(var(--dy-accent), var(--dy-accent));background-position:0 100%;background-repeat:no-repeat;background-size:0% 1.5px;text-decoration:none;transition:background-size .3s;position:relative}.dy-ghlink:hover,.dy-ghlink:focus-visible{background-size:100% 1.5px}.dy-exp__split{grid-template-columns:1.4fr 1fr;gap:4rem;display:grid}.dy-exp__edu{border-left:1px solid var(--dy-line);padding-left:2rem}.dy-exp__role{letter-spacing:-.02em;margin:0 0 .5rem;font-size:1.35rem;font-weight:600}.dy-exp__meta{font-family:var(--dy-mono);color:var(--dy-muted);margin:0 0 1.5rem;font-size:.8rem}.dy-exp__list{margin:0;padding:0;list-style:none}.dy-exp__list li{border-top:1px solid var(--dy-line);max-width:60ch;padding:.9rem 0 .9rem 1.5rem;line-height:1.55;position:relative}.dy-exp__list li:before{content:">";font-family:var(--dy-mono);color:var(--dy-accent);position:absolute;left:0}.dy-exp__school{margin:0 0 .25rem;font-size:1.1rem;font-weight:500}.dy-links__list{border-top:1px solid var(--dy-line);margin:0;padding:0;list-style:none}.dy-links__row{border-bottom:1px solid var(--dy-line);color:inherit;grid-template-columns:1fr auto auto;align-items:baseline;gap:1.5rem;padding:1.75rem 0;text-decoration:none;transition:transform .25s;display:grid}.dy-links__label{letter-spacing:-.02em;font-size:clamp(1.75rem,3.5vw,2.75rem);font-weight:600}.dy-links__detail{font-family:var(--dy-mono);color:var(--dy-muted);font-size:.85rem}.dy-links__arrow{color:var(--dy-muted);opacity:0;font-size:1.3rem;transition:opacity .25s}.dy-links__row:hover,.dy-links__row:focus-visible{transform:translate(8px)}.dy-links__row:hover .dy-links__arrow,.dy-links__row:focus-visible .dy-links__arrow{opacity:1}.dy-cv__split{grid-template-columns:1fr 1.2fr;gap:4rem;display:grid}.dy-cv__summary p{max-width:55ch;margin:0 0 2rem;font-size:1.15rem;line-height:1.65}.dy-download{font-family:var(--dy-mono);letter-spacing:.12em;text-transform:uppercase;color:var(--dy-paper);background:var(--dy-ink);border-radius:10px;padding:1rem 2.25rem;font-size:.9rem;text-decoration:none;transition:transform .15s;display:inline-block}.dy-download:hover{transform:translateY(-2px)}.dy-download:active{transform:translateY(-1px)scale(.99)}.dy-download:focus-visible{outline:2px solid var(--dy-accent);outline-offset:3px}.dy-cv__skills{margin:0}.dy-cv__group{border-top:1px solid var(--dy-line);padding:1.1rem 0}.dy-cv__group dt{font-family:var(--dy-mono);letter-spacing:.18em;text-transform:uppercase;color:var(--dy-muted);margin-bottom:.4rem;font-size:.75rem}.dy-cv__group dd{margin:0;line-height:1.55}.dy-footer{border-top:1px solid var(--dy-line);text-align:center;padding:2rem 1.5rem}.dy-footer p{font-family:var(--dy-mono);letter-spacing:.15em;color:var(--dy-muted);margin:0;font-size:.75rem}@media (width<=860px){.dy-content section{padding:4rem 1.25rem}.dy-about{flex-direction:column-reverse;align-items:flex-start;gap:2rem}.dy-about__portrait{width:9rem;height:9rem}.dy-nav{gap:.9rem}.dy-nav__name{display:none}.dy-nav__links{overscroll-behavior-x:contain;justify-content:flex-start;overflow-x:auto}.dy-nav__link{flex:none}.dy-projects__rows{grid-template-columns:1fr}.dy-project{aspect-ratio:auto}.dy-project__thumb{flex:none;height:9rem}.dy-exp__split{grid-template-columns:1fr;gap:3rem}.dy-exp__edu{border-left:none;border-top:1px solid var(--dy-line);padding-top:2rem;padding-left:0}.dy-cv__split{grid-template-columns:1fr;gap:3rem}.dy-links__row{grid-template-columns:1fr auto}.dy-links__detail{display:none}}@media (prefers-reduced-motion:reduce){.dy-site .scroll-scrub__story:after{display:none}.dy-nav__link,.dy-ghlink,.dy-links__row,.dy-links__arrow,.dy-download{transition:none}}.dy-bits__ch{transition:color .26s;display:inline-block}.dy-bits__ch--on{font-family:var(--dy-mono);font-variant-numeric:tabular-nums;color:#1fa14a;animation:.3s both dy-bit-in}@keyframes dy-bit-in{0%{opacity:.15;filter:blur(2px);transform:translateY(-.14em)scale(.9)}}@media (prefers-reduced-motion:reduce){.dy-bits__ch--on{animation:none}}
