:root{--color-bg: #ffffff;--color-bg-dark: #111111;--color-purple: #6b3fa0;--color-yellow: #f5e6a3;--color-slate: #b8c4cc;--color-lavender: #e8e4f0;--color-lilac: #cfc0ef;--color-purple-text: #c9a8e8;--color-purple-accent: #f5e6a3;--color-dark-muted: #8a8a8a;--color-dark-text: #ffffff;--color-border: #eeeeee;--color-border-dark: #333333;--color-text-primary: #111111;--color-text-muted: #595959;--color-text-xmuted: #6e6e6e;--font-display: "Geist", "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", system-ui, sans-serif;--font-body: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--gutter: clamp(1rem, 3.5vw, 2rem);--max: 1280px}*{box-sizing:border-box}html{scroll-behavior:smooth}html,body{margin:0;padding:0;background:var(--color-bg)}body{font-family:var(--font-body);font-weight:400;font-size:16px;line-height:1.6;color:var(--color-text-primary);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}::selection{background:var(--color-purple);color:var(--color-yellow)}p{margin:0 0 1.1em}h1,h2,h3{margin:0;font-family:var(--font-display);font-weight:500;letter-spacing:-.025em;color:var(--color-text-primary)}ul,ol,dl{margin:0;padding:0;list-style:none}a{color:inherit;text-decoration:none}button{font:inherit;background:none;border:0;padding:0;cursor:pointer;color:inherit}a:focus-visible,button:focus-visible{outline:2px solid var(--color-purple);outline-offset:3px}.visually-hidden{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.skip-link{position:fixed;top:.6rem;left:.6rem;z-index:200;padding:.55rem .9rem;background:var(--color-bg-dark);color:var(--color-yellow);font-family:var(--font-mono);font-size:.8rem;letter-spacing:.04em;text-decoration:none;transform:translateY(calc(-100% - 1rem));transition:transform .18s ease}.skip-link:focus{transform:translateY(0);outline:2px solid var(--color-yellow);outline-offset:2px}main:focus{outline:none}.page{max-width:var(--max);margin:0 auto;padding:1.2rem var(--gutter) 0}.bleed{margin-inline:calc(-1 * var(--gutter))}.page,.bleed-wrap{position:relative;z-index:2}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;pointer-events:none;z-index:1;opacity:.035;mix-blend-mode:multiply;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}.topbar{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.4rem 0 2.2rem;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.02em}.topbar__brand{font-family:var(--font-mono);font-size:.82rem;font-weight:500;color:var(--color-text-primary);letter-spacing:.02em;display:inline-flex;align-items:center;min-height:24px;padding:.35rem 0}.topbar__nav{display:flex;gap:1.8rem}.topbar__nav a{color:var(--color-text-muted);transition:color .2s ease;padding:.5rem 0;display:inline-flex;align-items:center;min-height:24px}.topbar__nav a:hover{color:var(--color-text-primary)}.topbar__nav a.active{color:var(--color-purple);font-weight:600}.footer{background:var(--color-bg-dark);color:var(--color-dark-muted);padding:0 var(--gutter) clamp(1.6rem,3vw,2rem);border-top:1px solid var(--color-border-dark)}.footer__inner{max-width:var(--max);margin:0 auto;padding-top:1.2rem;display:flex;flex-wrap:wrap;gap:.6rem 1.2rem;align-items:center;justify-content:space-between;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.06em;text-transform:uppercase}.footer__meta{display:flex;flex-wrap:wrap;gap:.6rem 1rem;align-items:center}.footer__inner a{color:var(--color-yellow);text-decoration:none;transition:color .2s ease;display:inline-flex;align-items:center;min-height:24px;padding:.35rem 0}.footer__inner a:hover{color:var(--color-dark-text)}.label{font-family:var(--font-mono);font-size:.72rem;text-transform:uppercase;letter-spacing:.12em;color:var(--color-text-xmuted)}.block{display:inline-block;padding:.02em .25em .08em;line-height:1;color:var(--color-text-primary)}.block--purple{background:var(--color-purple);color:var(--color-yellow)}.block--yellow{background:var(--color-yellow);color:var(--color-text-primary)}.block--lavender{background:var(--color-lavender);color:var(--color-text-primary)}.block--slate{background:var(--color-slate);color:var(--color-text-primary)}.inline-link{color:var(--color-purple);font-weight:600;background-image:linear-gradient(currentColor,currentColor);background-repeat:no-repeat;background-position:0 100%;background-size:100% 2px;transition:background-size .28s ease,background-color .2s ease,color .2s ease;padding:0 .05em}.inline-link:hover,.inline-link:focus-visible{background:var(--color-yellow);background-image:none;color:var(--color-text-primary)}.meta-list{display:grid;grid-template-columns:auto auto auto;column-gap:.75rem;row-gap:.4rem;align-items:baseline;font-family:var(--font-mono);font-size:.78rem;text-transform:uppercase;letter-spacing:.08em}.meta-list__row{display:contents}.meta-list__key{color:var(--color-text-xmuted);text-align:right}.meta-list__sep{color:var(--color-text-xmuted);text-align:center;letter-spacing:0}.meta-list__value{color:var(--color-text-primary);font-weight:600;text-align:left}.meta-list__row--purple .meta-list__value{color:var(--color-purple)}.portrait-hero{position:relative;padding:clamp(1.5rem,4vw,3rem) 0 clamp(1.5rem,4vw,3rem);isolation:isolate}.portrait-hero__name{font-family:var(--font-display);font-weight:700;font-size:clamp(2.2rem,9vw,7.5rem);line-height:1;letter-spacing:-.04em;text-align:center;margin:0;color:var(--color-text-primary);max-width:14ch;margin-inline:auto;text-wrap:balance}.portrait-hero__stage{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;column-gap:clamp(.8rem,2vw,2rem);margin-top:clamp(-2.5rem,-5vw,-4rem)}.portrait-hero__meta{align-self:center;justify-self:end;margin:0}.portrait-hero__photo{grid-column:2;margin:0;position:relative;z-index:1;width:clamp(240px,38vw,520px)}.portrait-hero__photo:before{content:"";position:absolute;top:-10%;right:-18%;bottom:-10%;left:-18%;background:radial-gradient(ellipse at center,color-mix(in srgb,var(--color-purple) 55%,transparent) 0%,color-mix(in srgb,var(--color-purple) 25%,transparent) 45%,transparent 75%);filter:blur(30px);z-index:-1;pointer-events:none}.portrait-hero__photo img{width:100%;height:auto;display:block;-webkit-mask-image:linear-gradient(to bottom,black 0%,black 70%,rgba(0,0,0,.4) 88%,transparent 100%);mask-image:linear-gradient(to bottom,black 0%,black 70%,rgba(0,0,0,.4) 88%,transparent 100%)}.portrait-hero__tagline{align-self:center;justify-self:start;margin:0;max-width:22ch;font-family:var(--font-display);font-size:clamp(.95rem,1.15vw,1.1rem);font-weight:400;line-height:1.45;color:var(--color-text-primary);text-wrap:balance}.section{padding:clamp(2.5rem,5vw,3.5rem) 0}.section__head{margin-bottom:clamp(1rem,2vw,1.4rem)}.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(.75rem,1.2vw,1.1rem);background:transparent;align-items:stretch;list-style:none;padding:0;margin:0}.tiles>li{display:grid;list-style:none}.tile{position:relative;display:flex;flex-direction:column;gap:.9rem;padding:clamp(1.4rem,2.5vw,2rem);min-height:clamp(240px,24vw,300px);height:100%;color:var(--color-text-primary);border-radius:14px;overflow:hidden;transition:background .42s cubic-bezier(.22,1,.36,1),color .28s ease,transform .32s cubic-bezier(.22,1,.36,1),box-shadow .32s cubic-bezier(.22,1,.36,1),filter .26s ease}.tile--slate{background:var(--color-slate)}.tile--lilac{background:var(--color-lilac)}.tile__label{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:#111111b8}.tile__wip{position:absolute;top:clamp(1.4rem,2.5vw,2rem);right:clamp(1.4rem,2.5vw,2rem);font-family:var(--font-mono);font-size:.62rem;letter-spacing:.14em;text-transform:uppercase;padding:.25rem .55rem;color:var(--color-purple);background:var(--color-bg);border:1px solid currentColor}.tile__title{font-family:var(--font-display);font-weight:600;font-size:clamp(1.5rem,2.2vw,1.9rem);line-height:1.1;letter-spacing:-.025em;margin:0;max-width:14ch}.tile__blurb{margin:0;font-size:.9rem;color:#111111b8;max-width:32ch}.tile__foot{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding-top:1rem}.tile__stack{font-family:var(--font-mono);font-size:.7rem;letter-spacing:.1em;text-transform:uppercase;color:#111111b8}.tile__arrow{font-family:var(--font-display);font-size:1.2rem;color:var(--color-text-primary);transition:transform .22s ease}.tile:hover,.tile:focus-visible{background:var(--color-bg-dark);color:var(--color-yellow);transform:translateY(-3px);box-shadow:0 18px 40px -20px #11111159,0 4px 10px #1111110f;filter:none}.tile:hover .tile__wip,.tile:focus-visible .tile__wip{color:var(--color-yellow);background:transparent}.tile:hover .tile__label,.tile:focus-visible .tile__label,.tile:hover .tile__stack,.tile:focus-visible .tile__stack{color:#f5e6a3a6}.tile:hover .tile__blurb,.tile:focus-visible .tile__blurb{color:#f5e6a3cc}.tile:hover .tile__title,.tile:focus-visible .tile__title{color:var(--color-yellow)}.tile:hover .tile__arrow,.tile:focus-visible .tile__arrow{color:var(--color-yellow);transform:translate(6px)}.page-head{padding:0 0 clamp(2rem,4vw,3rem);border-bottom:1px solid var(--color-border);display:grid;gap:1.2rem}.page-head__label{font-family:var(--font-mono);font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;color:var(--color-text-xmuted)}.page-head__title{font-family:var(--font-display);font-weight:600;font-size:clamp(2.4rem,5.5vw,4.2rem);line-height:1.02;letter-spacing:-.04em;max-width:20ch}.page-head__lede{max-width:56ch;font-size:1rem;color:var(--color-text-muted)}.cv{padding:clamp(2rem,4vw,3rem) 0;border-bottom:1px solid var(--color-border)}.cv:last-of-type{border-bottom:0}.cv__head{margin-bottom:1.4rem}.cv__list{display:flex;flex-direction:column}.cv__item{display:grid;grid-template-columns:11rem 1fr;gap:1.6rem;padding:1.4rem 0;border-top:1px solid var(--color-border)}.cv__item:first-child{border-top:0;padding-top:0}.cv__period{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-xmuted);padding-top:.5rem}.cv__role{font-family:var(--font-display);font-size:1.4rem;font-weight:500;letter-spacing:-.025em;margin:0 0 .2rem}.cv__org{margin:0 0 .5rem;font-family:var(--font-mono);font-size:.78rem;letter-spacing:.04em;color:var(--color-text-muted)}.cv__sep{color:var(--color-border)}.cv__location{color:var(--color-text-muted)}.cv__notes{margin:0;color:var(--color-text-muted);font-size:.95rem;max-width:58ch;line-height:1.55}.cv__groups{display:flex;flex-direction:column;gap:2.8rem}.cv__group{display:grid;grid-template-columns:11rem 1fr;gap:1.6rem}.cv__group-head{position:sticky;top:1.2rem;align-self:start}.cv__company{font-family:var(--font-display);font-size:1.2rem;font-weight:600;letter-spacing:-.02em;margin:0 0 .2rem;display:inline-flex;align-items:baseline;gap:.35rem}.cv__company-loc{margin:0;font-family:var(--font-mono);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-xmuted);transition:color .22s ease}.cv__company-link{display:block;text-decoration:none;color:inherit}.cv__company-link .cv__company-name{background-image:linear-gradient(to right,var(--color-purple),var(--color-purple));background-repeat:no-repeat;background-position:0 100%;background-size:0% 1px;transition:background-size .28s cubic-bezier(.22,1,.36,1),color .22s ease;padding-bottom:2px}.cv__company-arrow{display:inline-block;font-family:var(--font-mono);font-size:.85em;color:var(--color-text-xmuted);transform:translate(-2px);opacity:0;transition:transform .28s cubic-bezier(.22,1,.36,1),opacity .22s ease,color .22s ease}.cv__company-link:hover .cv__company-name,.cv__company-link:focus-visible .cv__company-name{color:var(--color-purple);background-size:100% 1px}.cv__company-link:hover .cv__company-arrow,.cv__company-link:focus-visible .cv__company-arrow{opacity:1;transform:translate(2px,-2px);color:var(--color-purple)}.cv__company-link:hover .cv__company-loc,.cv__company-link:focus-visible .cv__company-loc{color:var(--color-text-muted)}.cv__company-link:focus-visible{outline:2px solid var(--color-purple);outline-offset:6px;border-radius:2px}.cv__roles{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}.cv__group .cv__item{grid-template-columns:9rem 1fr;gap:1.4rem;padding:1.4rem 0;border-top:1px solid var(--color-border)}.cv__group .cv__item:first-child{padding-top:0;border-top:0}.cv__bullets{list-style:none;margin:.6rem 0 0;padding:0;display:flex;flex-direction:column;gap:.5rem;max-width:62ch}.cv__bullets li{position:relative;padding-left:1.1rem;color:var(--color-text-muted);font-size:.95rem;line-height:1.55}.cv__bullets li:before{content:"";position:absolute;left:0;top:.62em;width:.38rem;height:.38rem;background:var(--color-purple);border-radius:50%}.skills{display:flex;flex-direction:column}.skills__row{display:grid;grid-template-columns:11rem 1fr;gap:1.6rem;padding:1rem 0;border-top:1px solid var(--color-border)}.skills__row:first-child{border-top:0;padding-top:0}.skills__row dt{font-family:var(--font-mono);font-size:.78rem;text-transform:uppercase;letter-spacing:.1em;color:var(--color-text-xmuted);padding-top:.45rem}.skills__row dd{margin:0}.skills__list{display:flex;flex-wrap:wrap;gap:.4rem .5rem}.skills__item{padding:.3rem .75rem;font-size:.85rem;color:var(--color-text-primary);background:transparent;border:1px solid var(--color-text-primary);border-radius:2px;transition:background .2s ease,color .2s ease}.skills__item:hover{background:var(--color-text-primary);color:var(--color-yellow)}.about{padding:clamp(2rem,4vw,3rem) 0}.about__body{max-width:62ch}.about__body p{font-size:1.05rem;line-height:1.65;color:var(--color-text-primary)}.about__body p+p{margin-top:1.1rem}.snapshots{padding:clamp(2.5rem,5vw,4rem) 0;border-top:1px solid var(--color-border)}.photo-marquee{position:relative;width:100vw;margin-inline:calc(50% - 50vw);overflow:hidden;padding:.4rem 0;mask-image:linear-gradient(to right,transparent 0,black 6%,black 94%,transparent 100%);-webkit-mask-image:linear-gradient(to right,transparent 0,black 6%,black 94%,transparent 100%)}.photo-marquee__track{list-style:none;padding:0;margin:0;display:flex;align-items:stretch;width:max-content;gap:clamp(.6rem,1vw,1rem);animation:photo-marquee 52s linear infinite;will-change:transform}.photo-marquee:hover .photo-marquee__track,.photo-marquee:focus-within .photo-marquee__track{animation-play-state:paused}.photo-marquee[data-paused=true] .photo-marquee__track{animation-play-state:paused}.photo-marquee-toggle{padding:.4rem .8rem;font-family:var(--font-mono);font-size:.7rem;letter-spacing:.12em;text-transform:uppercase;color:var(--color-text-primary);background:var(--color-bg);border:1px solid var(--color-text-primary);cursor:pointer;transition:background .2s ease,color .2s ease;min-height:24px}.photo-marquee-toggle:hover,.photo-marquee-toggle:focus-visible{background:var(--color-text-primary);color:var(--color-yellow)}.snapshots__head{display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1.6rem}.photo-marquee__item{flex:none;height:clamp(240px,30vw,380px);border-radius:10px;overflow:hidden;background:var(--color-border)}.photo-marquee__item img{height:100%;width:auto;display:block;object-fit:cover;filter:saturate(.95)}@keyframes photo-marquee{0%{transform:translate(0)}to{transform:translate(-33.333%)}}.elsewhere{padding:clamp(2rem,4vw,3rem) 0;border-top:1px solid var(--color-border)}.elsewhere__head{margin-bottom:1rem}.elsewhere__list{display:grid;gap:0;max-width:52rem}.elsewhere__row{display:grid;grid-template-columns:11rem 1fr;gap:1.6rem;align-items:baseline;padding:.9rem 0;border-top:1px solid var(--color-border)}.elsewhere__row:first-child{border-top:0}.elsewhere__label{font-family:var(--font-mono);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-xmuted)}.elsewhere__link{font-family:var(--font-display);font-size:1.1rem;font-weight:500;letter-spacing:-.015em;color:var(--color-text-primary);background-image:linear-gradient(currentColor,currentColor);background-repeat:no-repeat;background-position:0 100%;background-size:0% 1px;transition:background-size .28s ease,color .2s ease}.elsewhere__link:hover,.elsewhere__link:focus-visible{background-size:100% 1px;color:var(--color-purple)}.scroll-progress{position:fixed;top:0;left:0;right:0;height:2px;z-index:100;pointer-events:none;background:transparent}.scroll-progress__bar{height:100%;width:100%;background:var(--color-purple);transform:scaleX(0);transform-origin:0 50%}@supports (animation-timeline: scroll()){.scroll-progress__bar{animation:scroll-progress linear both;animation-timeline:scroll(root)}@keyframes scroll-progress{to{transform:scaleX(1)}}}.page-transition{animation:page-enter .42s cubic-bezier(.22,1,.36,1) both}@keyframes page-enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@supports (animation-timeline: view()){.portrait-hero,.tiles,.page-head,.cv,.about,.snapshots,.elsewhere{animation:reveal-up linear both;animation-timeline:view();animation-range:entry 0% cover 25%}@keyframes reveal-up{0%{opacity:0;transform:translateY(28px)}to{opacity:1;transform:none}}}@media(max-width:900px){.portrait-hero__stage{grid-template-columns:1fr;row-gap:1.4rem;margin-top:clamp(-1.6rem,-3vw,-2rem);justify-items:center}.portrait-hero__meta,.portrait-hero__tagline{justify-self:center;text-align:center}.portrait-hero__photo{grid-column:auto;order:-1}.tiles{grid-template-columns:1fr}.cv__item,.cv__group .cv__item,.cv__group,.skills__row,.elsewhere__row{grid-template-columns:1fr;gap:.5rem}.cv__group{gap:.9rem}.cv__group-head{position:static}.cv__period,.skills__row dt{padding-top:0}}@media(max-width:560px){.topbar__nav{gap:1.1rem}.portrait-hero__name{font-size:clamp(2.2rem,12vw,4rem);letter-spacing:-.035em}.portrait-hero__tagline{font-size:.95rem}}@media(prefers-reduced-motion:reduce){.photo-marquee__track,.page-transition{animation:none!important}@supports (animation-timeline: view()){.portrait-hero,.tiles,.page-head,.cv,.about,.snapshots,.elsewhere{animation:none!important}}@supports (animation-timeline: scroll()){.scroll-progress__bar{animation:none!important;transform:scaleX(0)}}*{transition-duration:.01ms!important}}
