@charset "UTF-8";:root{--bg: #fbfbfb;--bg-rgb: 248, 247, 242;--text: rgba(0, 0, 0, .88);--muted: rgba(0, 0, 0, .62);--color-divider: rgba(0, 0, 0, .06);--color-border-light: rgba(0, 0, 0, .08);--hairline: rgba(0, 0, 0, .1);--border: rgba(0, 0, 0, .12);--color-border-hover: rgba(0, 0, 0, .18);--color-border-chip: rgba(0, 0, 0, .22);--color-ink-faint: rgba(0, 0, 0, .25);--color-ink-low: rgba(0, 0, 0, .55);--color-ink-mid: rgba(0, 0, 0, .72);--color-ink-high: rgba(0, 0, 0, .85);--soft: rgba(0, 0, 0, .04);--color-white: #ffffff;--color-black: #000000;--color-ink-black: #111111;--color-canvas: #f3f3f3;--color-surface: #f6f6f6;--color-stickerwall-mid: #ddd8cc;--color-white-8: rgba(255, 255, 255, .08);--color-white-20: rgba(255, 255, 255, .2);--color-white-92: rgba(255, 255, 255, .92);--color-overlay: rgba(10, 10, 10, .55);--color-overlay-mid: rgba(0, 0, 0, .35);--accent: #c9d82a;--bg-debt-game: radial-gradient(#fffefa 0%, #d2e3fc 100%);--bg-monster: radial-gradient(#f6f4ef 37.95%, #dedace 100%);--bg-tcja: radial-gradient(#fcfff1 0%, #d7cfff 100%);--bg-eclipse: radial-gradient(#fcfff1 0%, #fde8c8 100%);--font-primary: "Inter", system-ui, -apple-system, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, monospace;--font-serif: "Playfair Display", Georgia, serif;--font-size-xs: 14px;--font-size-sm: 16px;--font-size-md: 18px;--font-size-lg: clamp(22px, 2.5vw, 32px);--font-size-xl: 34px;--font-size-xxl: 3.2rem;--font-size-2xs: 12px;--font-size-ui: 13px;--font-size-hero: var(--font-size-xxl);--font-size-display: clamp(40px, 6vw, 50px);--font-weight-regular: 400;--font-weight-semibold: 600;--font-weight-bold: 700;--line-height-condensed: 1.15;--line-height-tight: 1.25;--line-height-snug: 1.25;--line-height-normal: 1.35;--line-height-h1: 66px;--line-height-auto: normal;--line-height-body: 1.55;--line-height-loose: 1.6;--line-height-caption: 1.45;--letter-spacing-exdense: -2px;--letter-spacing-dense: -1px;--letter-spacing-regular: 0px;--letter-spacing-spread: 2px;--letter-spacing-em-hero: -.04em;--letter-spacing-em-dense: -.02em;--letter-spacing-em-tight: -.01em;--letter-spacing-em-wide: .04em;--letter-spacing-em-caps: .12em;--type-h1-size: var(--font-size-hero);--type-h1-weight: var(--font-weight-bold);--type-h1-lh: 1.04;--type-h1-ls: var(--letter-spacing-em-hero);--type-project-title-size: var(--font-size-lg);--type-project-title-weight: var(--font-weight-semibold);--type-project-title-lh: var(--line-height-auto);--type-project-title-ls: var(--letter-spacing-dense);--type-p-size: var(--font-size-sm);--type-p-weight: var(--font-weight-regular);--type-p-lh: var(--line-height-body);--type-p-ls: var(--letter-spacing-regular);--type-skill-label-size: var(--font-size-2xs);--type-skill-label-weight: var(--font-weight-regular);--type-skill-label-lh: var(--line-height-auto);--type-skill-label-ls: var(--letter-spacing-spread);--type-desc-lg-size: var(--font-size-xl);--type-desc-lg-weight: var(--font-weight-regular);--type-desc-lg-lh: var(--line-height-normal);--type-desc-lg-ls: var(--letter-spacing-regular);--type-nav-size: var(--font-size-sm);--type-nav-weight: var(--font-weight-regular);--type-nav-lh: var(--line-height-auto);--type-nav-ls: var(--letter-spacing-spread);--type-job-company-size: var(--font-size-lg);--type-job-company-weight: var(--font-weight-regular);--type-job-company-lh: var(--line-height-snug);--type-job-company-ls: var(--letter-spacing-regular);--type-date-size: var(--font-size-xs);--type-date-weight: var(--font-weight-regular);--type-date-lh: var(--line-height-snug);--type-date-ls: var(--letter-spacing-spread);--space-16: 64px;--space-24: 96px;--space-32: 128px;--description-max-w: 560px;--max: 1080px;--ease-out: cubic-bezier(.25, 0, 0, 1);--ease-in-out: cubic-bezier(.4, 0, .2, 1);--ease-reveal: cubic-bezier(.16, 1, .3, 1);--duration-fast: .2s;--duration-base: .3s;--duration-slow: .5s;--duration-crawl: 1.2s;--radius: 6px;--radius-sm: 12px;--radius-md: 16px;--radius-lg: 24px}*,*:before,*:after{box-sizing:border-box}html{scroll-padding-top:56px}html,body{margin:0;padding:0;font-family:var(--font-primary);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}img{display:block;max-width:100%;height:auto}a{color:inherit}p{margin:0;color:var(--muted);line-height:var(--type-p-lh);text-wrap:balance}h1,h2,h3{margin:0;font-family:var(--font-primary)}.project-title{font-family:var(--font-primary)}:focus-visible{outline:3px solid var(--color-ink-faint);outline-offset:4px}.topNav{position:sticky;top:0;z-index:20;background:var(--bg);border-bottom:1px solid var(--color-divider)}.topNav__inner{margin:0 auto;padding:14px 20px;display:flex;align-items:center;justify-content:space-between;gap:14px}.topNav__brand{text-decoration:none;letter-spacing:var(--letter-spacing-em-tight);font-family:var(--font-mono)}.topNav__links{display:flex;gap:16px;flex-wrap:wrap}.topNav__links a{text-decoration:none;color:var(--color-ink-mid);font-size:var(--font-size-xs);padding:8px 4px;margin:-8px -4px}.topNav__links a:hover{color:var(--text)}.hero{padding:clamp(72px,10vw,120px) 20px 24px}.hero__inner{max-width:var(--max);margin:0 auto;display:grid;grid-template-columns:1fr;gap:18px;align-items:start}.hero__copy h1{font-size:var(--type-h1-size);line-height:var(--type-h1-lh);font-weight:var(--type-h1-weight);letter-spacing:var(--type-h1-ls);text-wrap:balance}.hero__lede{max-width:60ch;margin-top:18px;color:var(--muted);line-height:var(--line-height-loose)}.ctaRow{display:flex;flex-wrap:wrap;gap:10px;margin:2rem 0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--border);padding:12px 18px;min-height:44px;border-radius:999px;font-size:var(--font-size-xs);font-weight:var(--font-weight-semibold);text-decoration:none;background:var(--color-white);color:var(--color-ink-black);transition-property:scale,opacity;transition-duration:.15s;transition-timing-function:ease-out}.btn--primary{background:var(--color-ink-black);color:var(--color-white);border-color:var(--color-border-hover)}.section{padding:clamp(48px,8vw,8rem) 20px}.section--soft{background:var(--soft)}.section__head{max-width:var(--max);margin:0 auto 24px}.section__head h2{font-size:var(--font-size-lg);margin:0 0 8px;letter-spacing:var(--letter-spacing-em-tight);font-weight:var(--font-weight-regular)}.section__head p{margin:0;color:var(--muted);max-width:70ch}.projectGrid{max-width:var(--max);margin:0 auto;display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}@media(min-width:800px){.projectGrid{grid-template-columns:repeat(3,minmax(0,1fr))}}@media(min-width:640px)and (max-width:800px){.projectGrid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.projectGrid{grid-template-columns:1fr}}.projectTile{position:relative;border-radius:var(--radius);overflow:hidden;border:1px solid var(--hairline);background:transparent;display:block;transition:transform var(--duration-fast) var(--ease-out),border-color var(--duration-fast) var(--ease-out)}.projectTile:hover{transform:translateY(-2px);border-color:var(--color-border-hover)}.projectTile__caseStudyLink{position:absolute;inset:0;z-index:1}.projectTile__media{position:relative;width:100%;aspect-ratio:4/3;background:var(--color-canvas)}.projectTile__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scale(1);transition:transform .22s var(--ease-out)}.projectTile:hover .projectTile__img,.projectTile:focus-within .projectTile__img{transform:scale(1.03)}.projectTile__overlay{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:flex-end;padding:16px;gap:8px;z-index:2;pointer-events:none;opacity:0;transform:translateY(6px);filter:blur(4px);transition:opacity var(--duration-fast) var(--ease-out),transform var(--duration-fast) var(--ease-out),filter var(--duration-fast) var(--ease-out);background:linear-gradient(to top,#fff,#fffc 85%,#ffffff4d 98%)}@media(hover:hover)and (pointer:fine){.projectTile:hover .projectTile__overlay,.projectTile:focus-within .projectTile__overlay{opacity:1;transform:translateY(0);filter:blur(0px)}}@media(max-width:640px){.projectTile__overlay{opacity:1;transform:none;position:relative}}.projectTile__title{margin:0;font-size:var(--font-size-md);line-height:var(--line-height-condensed);letter-spacing:var(--letter-spacing-em-tight);color:var(--text);font-weight:var(--font-weight-semibold);font-family:var(--font-primary)}.projectTile__subtitle{margin:0;font-size:var(--font-size-ui);line-height:var(--line-height-normal);color:var(--muted);max-width:52ch}.projectTile__meta{display:grid;gap:8px;margin-top:2px}.projectTile__built{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px;font-size:var(--font-size-2xs);color:var(--text)}.projectTile__sep{color:var(--text);font-family:var(--font-mono)}.projectTile__chips{display:flex;flex-wrap:wrap;gap:8px}.projectTile__liveLink{display:inline-flex;align-items:center;font-family:var(--font-mono);font-size:var(--font-size-2xs);letter-spacing:var(--letter-spacing-em-wide);text-decoration:none;color:var(--color-ink-low);margin-top:2px;align-self:flex-start;pointer-events:auto}.projectTile__liveLink:hover{color:var(--text)}.chip{font-family:var(--font-mono);font-size:var(--font-size-2xs);letter-spacing:var(--letter-spacing-em-wide);padding:6px 10px;border-radius:999px;border:1px solid var(--color-border-chip);background:var(--color-white-8);color:var(--text)}.chip--tile{background:var(--accent);border-color:transparent;color:var(--color-black)}.marquee{overflow:hidden;border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline);padding:10px 0;margin-bottom:32px;max-width:var(--max);margin-left:auto;margin-right:auto}.marquee__track{display:flex;gap:48px;width:max-content;animation:marquee 18s linear infinite;font-family:var(--font-primary);font-size:var(--font-size-ui);letter-spacing:var(--letter-spacing-em-caps);color:var(--muted)}.marquee__track span{white-space:nowrap}@keyframes marquee{0%{transform:translate(0)}to{transform:translate(-50%)}}.projectTile__cta{display:inline-flex;align-items:center;gap:10px;font-weight:var(--font-weight-regular);color:var(--color-white-92);margin-top:2px}.projectTile__arrow{transform:translate(0);transition:transform var(--duration-fast) var(--ease-out)}.projectTile:hover .projectTile__arrow,.projectTile:focus-within .projectTile__arrow{transform:translate(4px)}.capGrid{max-width:var(--max);margin:0 auto;display:grid;gap:12px;grid-template-columns:repeat(2,minmax(0,1fr))}.capCard{border:1px solid var(--border);border-radius:var(--radius);padding:16px;background:var(--color-white)}.capCard h3{margin:0 0 6px;font-size:var(--font-size-sm);letter-spacing:var(--letter-spacing-em-tight)}.capCard p{margin:0;color:var(--muted);line-height:var(--line-height-caption)}.footer{padding:26px 20px 50px;border-top:1px solid var(--color-border-light)}.footer__inner{max-width:var(--max);margin:0 auto;display:flex;gap:12px;justify-content:space-between;align-items:center;flex-wrap:wrap;color:var(--muted);font-size:var(--font-size-xs)}.footer__inner a{display:inline-flex;align-items:center;min-height:44px;padding-inline:2px;color:var(--muted);text-decoration:none}.footer__inner a:hover{color:var(--text)}.dot{margin:0 8px;color:var(--color-ink-faint)}.csNav{position:sticky;top:0;left:0;padding:14px 20px;background:var(--bg);border-bottom:1px solid var(--color-border-light);display:flex;gap:14px;z-index:10;justify-content:space-between}.csNav__brand{font-family:var(--font-mono);font-size:var(--font-size-sm);text-decoration:none;color:var(--color-ink-high)}.csNav__links{display:flex;gap:2rem}.csNav__links a{font-family:var(--font-mono);text-decoration:none;color:var(--color-ink-low)}.csNav__links a:hover{color:var(--color-ink-high)}@media(max-width:640px){.csNav__links{grid-auto-flow:column;grid-auto-columns:max-content;gap:25px}}.cs{max-width:960px;margin:0 auto;padding:70px 20px 120px}.csHero{display:grid;grid-template-columns:.65fr .35fr;gap:2rem;align-items:start;margin-bottom:0}@media(max-width:640px){.csHero{grid-template-columns:1fr;gap:5rem}}.csHero__title{font-size:var(--type-h1-size);line-height:var(--type-h1-lh);font-weight:var(--type-h1-weight);letter-spacing:var(--type-h1-ls);margin:0 0 3rem}.csHero__p{margin:0 0 14px;max-width:45ch;color:var(--muted);line-height:var(--line-height-body)}@media(max-width:640px){.csHero__p{max-width:100%}}.csHero__links{margin-top:25px;display:flex;gap:14px;flex-wrap:wrap;font-weight:var(--font-weight-semibold)}.csLink{font-family:var(--font-mono);font-size:var(--font-size-ui);text-decoration:none;color:var(--color-ink-high);border-bottom:1px solid var(--color-ink-faint)}.csLink:hover{border-bottom-color:var(--color-ink-high)}.csHero__media{margin:0}.csHero__media img,.csHero__media video{width:100%;height:auto;border-radius:0;background:var(--color-surface)}.csBlock,.csBlock-imgR{display:grid;grid-template-columns:1fr 220px;gap:40px;align-items:center;margin:8rem 0}@media(max-width:640px){.csBlock,.csBlock-imgR{grid-template-columns:1fr;gap:16px}}.csBlock-imgR{grid-template-columns:220px 1fr}.csAside{font-size:var(--font-size-xs);line-height:var(--line-height-caption);color:var(--color-ink-low);max-width:26ch}.csFrame{background:var(--color-surface);margin:0}.csFrame img,.csFrame video{width:100%;height:auto}.csFrame--wide{max-width:720px;margin:0 auto}.csFrame--letterbox{max-width:780px;margin:0 auto;overflow:hidden}.csFrame--letterbox img{width:100%;height:auto}.csCenter{margin:70px 0}.csCaption{margin:18px auto 0;max-width:62ch;font-size:var(--font-size-ui);color:var(--color-ink-low);line-height:var(--line-height-caption)}.csCaption--center{text-align:center}.csGridBlock{margin:80px 0}.csGrid{display:grid;gap:14px;grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.csGrid--featured{grid-template-columns:repeat(12,1fr)}.csTile{grid-column:span 4;border-radius:var(--radius-md);overflow:hidden;background:var(--color-white);border:1px solid var(--color-border-light);box-shadow:0 10px 30px #0000000f}.csTile.isFeatured{grid-column:span 12}.csTile img{width:100%;object-fit:cover;display:block;border-radius:var(--radius-sm)}@media(max-width:900px){.csTile{grid-column:span 6}.csTile.isFeatured{grid-column:span 12}}@media(max-width:560px){.csTile{grid-column:span 12}}@media(max-width:640px){.hero__inner{grid-template-columns:1fr}.hero__copy h1{font-size:42px}.capGrid{grid-template-columns:1fr}}.stickerWall{margin:64px 0;background:linear-gradient(to bottom,var(--bg),var(--color-stickerwall-mid),var(--bg));color:var(--color-black)}.stickerWall__inner{position:relative;max-width:800px;margin:0 auto;min-height:560px;border-radius:0;overflow:hidden;background:linear-gradient(to right,var(--color-white-20) 1px,transparent 1px),linear-gradient(to bottom,var(--color-white-20) 1px,transparent 1px);background-size:36px 36px}.sticker{position:absolute;display:grid;place-items:center;background:transparent;border:none;padding:0;line-height:1;filter:drop-shadow(0 12px 18px var(--color-white-20));user-select:none;z-index:11;cursor:pointer;transition-property:scale,filter;transition-duration:.15s;transition-timing-function:ease-out}.sticker:hover{scale:1.04;filter:drop-shadow(0 16px 24px rgba(0,0,0,.18))}.sticker:active{scale:.96}.sticker:focus-visible{outline:2px solid var(--color-white-92);outline-offset:6px;border-radius:999px}.cardStack{position:absolute;inset:0;display:grid;place-items:center;pointer-events:none}.card{pointer-events:auto;width:min(640px,40%);background:var(--color-white);border-radius:var(--radius-lg);padding:24px 28px;box-shadow:0 0 0 1px #0000000f,0 1px 2px -1px #0000000f,0 4px 8px #0000000a,0 8px 32px #0000001a;transition-property:box-shadow;transition-duration:.15s;transition-timing-function:ease-out}@media(max-width:720px){.card{width:70%}}.card__meta{opacity:.7;font-size:var(--font-size-2xs);letter-spacing:.08em;text-transform:uppercase;margin-bottom:14px}.card__title{margin:0 0 10px;font-size:var(--font-size-md);letter-spacing:var(--letter-spacing-em-dense);font-family:var(--font-primary);font-weight:var(--font-weight-semibold);text-wrap:balance}.card__sub{margin:0 0 18px;opacity:.85;text-wrap:pretty}.stickerModal[hidden]{display:none}.stickerModal{position:fixed;inset:0;z-index:999}.stickerModal__backdrop{position:absolute;inset:0;background:var(--color-overlay);backdrop-filter:blur(2px)}.stickerModal__card{position:absolute;left:50%;top:50%;transform:translate(-50%,-52%) rotate(-1deg);width:min(400px,80vw - 2rem);animation:none}.stickerModal:not([hidden]) .stickerModal__card{animation:modalIn .2s ease-out both}.stickerModal__header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.stickerModal__close{flex-shrink:0;width:32px;height:32px;border-radius:50%;border:1px solid var(--hairline);background:transparent;color:var(--muted);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:border-color var(--duration-fast) var(--ease-out),color var(--duration-fast) var(--ease-out),background var(--duration-fast) var(--ease-out)}.stickerModal__close:hover{border-color:#0003;background:#0000000a;color:var(--text)}.stickerModal__close:focus-visible{outline:2px solid var(--text);outline-offset:2px}.stickerModal__body{background:var(--color-white);border-radius:var(--radius-md);padding:1rem;box-shadow:0 24px 70px #00000047}.stickerModal__title{margin:0;font-family:var(--font-mono)}.stickerModal__text{margin:0;line-height:var(--line-height-body)}.polaroid{margin:0}.polaroid__img{width:100%;aspect-ratio:1/1;object-fit:cover;border-radius:var(--radius-sm);display:block;outline:1px solid rgba(0,0,0,.08);outline-offset:-1px}.polaroid__cap{margin-top:.6rem;opacity:.7}.stickerModal__video{width:100%;border-radius:var(--radius-sm);display:block}.stickerModal__caption{margin-top:.6rem;opacity:.7}.stickerModal__embed{width:100%;aspect-ratio:16/9;border-radius:var(--radius-sm);overflow:hidden;background:var(--color-black);box-shadow:0 10px 30px #0000001f}.stickerModal__embed iframe{width:100%;height:100%;border:0;display:block}.burstLayer{position:absolute;inset:0;pointer-events:none;z-index:50}.burstStar{position:absolute;left:0;top:0;will-change:transform,opacity;filter:drop-shadow(0 6px 10px var(--color-border-hover));user-select:none}.btn:active{scale:.96;transition-duration:var(--duration-fast)}.projectTile:has(.projectTile__caseStudyLink:active){transform:scale(.99);transition-duration:var(--duration-fast)}@keyframes modalIn{0%{opacity:0;scale:.96}to{opacity:1;scale:1}}@keyframes fadeSlideIn{0%{opacity:0;transform:translateY(14px);filter:blur(4px)}to{opacity:1;transform:translateY(0);filter:blur(0px)}}@supports (animation-timeline: view()){.career__row--link{animation:fadeSlideIn .45s var(--ease-out) both;animation-timeline:view();animation-range:entry 0% entry 35%}.section__head h2{animation:fadeSlideIn .5s var(--ease-out) both;animation-timeline:view();animation-range:entry 0% entry 40%}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}.marquee__track{animation:none}}.nav__skip[data-astro-cid-v4dcqgr2]{position:absolute;top:-100%;left:0;padding:8px 16px;background:var(--bg);color:var(--text);font-family:var(--font-mono);font-size:var(--font-size-xs);z-index:100;text-decoration:none;border:1px solid var(--border)}.nav__skip[data-astro-cid-v4dcqgr2]:focus{top:0}.nav[data-astro-cid-v4dcqgr2]{position:fixed;top:0;left:0;right:0;height:56px;z-index:20;background:transparent;transition:backdrop-filter var(--duration-fast) var(--ease-out)}.nav[data-astro-cid-v4dcqgr2].nav--scrolled{background:color-mix(in srgb,var(--bg) 88%,transparent);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-bottom:1px solid var(--color-divider)}.nav__inner[data-astro-cid-v4dcqgr2]{max-width:var(--max);height:100%;margin:0 auto;padding:0 20px;display:flex;align-items:center;justify-content:space-between}.nav__brand[data-astro-cid-v4dcqgr2]{text-decoration:none;font-family:var(--font-mono);font-size:var(--font-size-xs);letter-spacing:var(--letter-spacing-em-tight);color:var(--text)}.nav__links[data-astro-cid-v4dcqgr2]{display:flex;gap:20px;list-style:none;margin:0;padding:0}.nav__links[data-astro-cid-v4dcqgr2] a[data-astro-cid-v4dcqgr2]{text-decoration:none;font-size:var(--font-size-ui);letter-spacing:var(--letter-spacing-em-wide);color:var(--muted);transition:color var(--duration-fast) var(--ease-out);display:flex;align-items:center;padding-block:20px}.nav__links[data-astro-cid-v4dcqgr2] a[data-astro-cid-v4dcqgr2]:hover{color:var(--text)}@media(prefers-reduced-motion:reduce){.nav[data-astro-cid-v4dcqgr2],.nav__links[data-astro-cid-v4dcqgr2] a[data-astro-cid-v4dcqgr2]{transition:none}}
