:root{--c-swift-400: #ff6b4a;--c-swift-500: #f05138;--c-swift-700: #c7371f;--c-swift-800: #bd3319;--c-white: #ffffff;--c-gray-25: #fbfbfd;--c-gray-50: #f5f5f7;--c-gray-200: #d2d2d7;--c-gray-700: #515154;--c-gray-900: #1d1d1f;--c-ink-950: #0d0e11;--c-ink-850: #16181d;--c-ink-800: #1c1f25;--c-ink-750: #23262d;--c-ink-400: #8b949e;--c-ink-300: #9aa4b2;--c-ink-100: #e6edf3;--c-blue-light: #0066cc;--c-blue-dark: #4493f8;--c-green-light: #1a7f37;--c-green-dark: #3fb950;--font-display: -apple-system, BlinkMacSystemFont, "SF Pro Display", "Helvetica Neue", Helvetica, "Segoe UI", Roboto, Arial, sans-serif;--font-text: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Helvetica Neue", Helvetica, "Segoe UI", Roboto, Arial, sans-serif;--font-sans: var(--font-text);--font-mono: ui-monospace, "SF Mono", SFMono-Regular, "JetBrains Mono", Menlo, "Cascadia Code", "Roboto Mono", Consolas, monospace;--fs-2xs: .6875rem;--fs-xs: .75rem;--fs-sm: .8125rem;--fs-base: .9375rem;--fs-md: 1.0625rem;--fs-lg: 1.3125rem;--fs-xl: 1.625rem;--fs-2xl: 2.125rem;--fs-3xl: clamp(2rem, 1.35rem + 2.8vw, 3.25rem);--lh-tight: 1.08;--lh-snug: 1.25;--lh-base: 1.47;--fw-regular: 400;--fw-medium: 500;--fw-semibold: 600;--fw-bold: 700;--tr-display-xl: -.015em;--tr-display-lg: -.009em;--tr-display: -.003em;--tr-title: .004em;--tr-heading: .007em;--tr-subhead: .009em;--tr-lede: .011em;--tr-body: -.022em;--tr-small: -.016em;--tr-xsmall: -.01em;--tracking-caps: .08em;--tracking-tight: var(--tr-display);--tracking-snug: var(--tr-subhead);--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-5: 1.25rem;--sp-6: 1.5rem;--sp-8: 2rem;--sp-10: 2.5rem;--sp-12: 3rem;--sp-16: 4rem;--sp-20: 5rem;--sp-24: 6rem;--measure: 68ch;--page-max: 1180px;--page-gutter: clamp(1.125rem, .6rem + 2.4vw, 2.5rem);--r-xs: 4px;--r-sm: 6px;--r-md: 10px;--r-lg: 14px;--r-full: 999px;--dur-1: .11s;--dur-2: .17s;--dur-3: .26s;--ease-out: cubic-bezier(.16, 1, .3, 1);--ease-standard: cubic-bezier(.4, 0, .2, 1);--bg: var(--c-white);--bg-sunken: var(--c-gray-50);--surface: var(--c-white);--surface-2: var(--c-gray-25);--surface-3: var(--c-gray-50);--border: #e3e3e7;--border-strong: var(--c-gray-200);--border-accent: rgba(240, 81, 56, .32);--text: var(--c-gray-900);--text-secondary: var(--c-gray-700);--text-tertiary: #6b6b70;--text-on-accent: var(--c-white);--accent: var(--c-swift-500);--accent-solid: var(--c-swift-700);--accent-solid-hover: var(--c-swift-800);--accent-text: var(--c-swift-700);--accent-wash: rgba(240, 81, 56, .08);--accent-wash-2: rgba(240, 81, 56, .14);--link: var(--c-blue-light);--success: var(--c-green-light);--focus-ring: var(--c-blue-light);--shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 1px rgba(0, 0, 0, .03);--shadow-2: 0 4px 14px rgba(0, 0, 0, .06), 0 1px 3px rgba(0, 0, 0, .04);--grid-line: rgba(0, 0, 0, .045);color-scheme:light}:root[data-theme=dark],:root:not([data-theme=light]){--bg: var(--c-ink-950);--bg-sunken: #08090b;--surface: var(--c-ink-850);--surface-2: var(--c-ink-800);--surface-3: var(--c-ink-750);--border: #262a31;--border-strong: #333942;--border-accent: rgba(255, 107, 74, .34);--text: var(--c-ink-100);--text-secondary: var(--c-ink-300);--text-tertiary: var(--c-ink-400);--text-on-accent: #1a0d09;--accent: var(--c-swift-400);--accent-solid: var(--c-swift-400);--accent-solid-hover: #ff8467;--accent-text: var(--c-swift-400);--accent-wash: rgba(255, 107, 74, .11);--accent-wash-2: rgba(255, 107, 74, .18);--link: var(--c-blue-dark);--success: var(--c-green-dark);--focus-ring: var(--c-blue-dark);--shadow-1: 0 1px 2px rgba(0, 0, 0, .5);--shadow-2: 0 6px 20px rgba(0, 0, 0, .45), 0 1px 3px rgba(0, 0, 0, .4);--grid-line: rgba(255, 255, 255, .045);color-scheme:dark}:root:not([data-theme=light]){color-scheme:light dark}@media(prefers-color-scheme:light){:root:not([data-theme=dark]){--bg: var(--c-white);--bg-sunken: var(--c-gray-50);--surface: var(--c-white);--surface-2: var(--c-gray-25);--surface-3: var(--c-gray-50);--border: #e3e3e7;--border-strong: var(--c-gray-200);--border-accent: rgba(240, 81, 56, .32);--text: var(--c-gray-900);--text-secondary: var(--c-gray-700);--text-tertiary: #6b6b70;--text-on-accent: var(--c-white);--accent: var(--c-swift-500);--accent-solid: var(--c-swift-700);--accent-solid-hover: var(--c-swift-800);--accent-text: var(--c-swift-700);--accent-wash: rgba(240, 81, 56, .08);--accent-wash-2: rgba(240, 81, 56, .14);--link: var(--c-blue-light);--success: var(--c-green-light);--focus-ring: var(--c-blue-light);--shadow-1: 0 1px 2px rgba(0, 0, 0, .04), 0 1px 1px rgba(0, 0, 0, .03);--shadow-2: 0 4px 14px rgba(0, 0, 0, .06), 0 1px 3px rgba(0, 0, 0, .04);--grid-line: rgba(0, 0, 0, .045);color-scheme:light}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--font-text);font-size:var(--fs-base);line-height:var(--lh-base);letter-spacing:var(--tr-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4{margin:0;font-family:var(--font-display);font-weight:var(--fw-semibold);line-height:var(--lh-tight);letter-spacing:var(--tr-display);font-optical-sizing:auto}.tag{letter-spacing:var(--tr-xsmall)}p{margin:0}a{color:inherit;text-decoration:none}ul,ol{margin:0;padding:0;list-style:none}button{font:inherit;color:inherit;background:none;border:none;padding:0;cursor:pointer}::selection{background:var(--accent-wash-2);color:var(--text)}:focus{outline:none}:focus-visible{outline:2px solid var(--focus-ring);outline-offset:2px;border-radius:var(--r-xs)}.page{max-width:var(--page-max);margin:0 auto;padding-inline:var(--page-gutter)}.section{padding-block:clamp(3rem,2rem + 4vw,5.5rem);border-top:1px solid var(--border)}.section-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:var(--sp-3) var(--sp-6);margin-bottom:var(--sp-8)}.section-title{font-size:var(--fs-xl);font-family:var(--font-display);letter-spacing:var(--tr-heading)}.section-note{font-size:var(--fs-sm);color:var(--text-tertiary);max-width:46ch}.eyebrow{font-family:var(--font-mono);font-size:var(--fs-2xs);letter-spacing:var(--tracking-caps);text-transform:uppercase;color:var(--text-tertiary)}.mono{font-family:var(--font-mono);font-variant-numeric:tabular-nums}.measure{max-width:var(--measure)}.muted{color:var(--text-secondary)}.tag{display:inline-flex;align-items:center;transition:border-color var(--dur-1) var(--ease-standard),color var(--dur-1) var(--ease-standard),transform var(--dur-1) var(--ease-standard);font-size:var(--fs-xs);line-height:1;padding:6px 10px;border:1px solid var(--border);border-radius:var(--r-full);color:var(--text-secondary);background:var(--surface);white-space:nowrap}.link{color:var(--link);text-decoration:underline;text-underline-offset:.2em;text-decoration-thickness:1px}.link:hover{text-decoration-thickness:2px}@media(prefers-reduced-transparency:reduce){.topbar{background:var(--bg)!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;border-bottom-color:var(--border)!important}}@media(prefers-contrast:more){:root{--border: var(--text-tertiary);--border-strong: var(--text-secondary);--text-secondary: var(--text)}.tag,.topbar{border-color:var(--text-tertiary)}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}.brand-text{transform:none!important}.secnav .ind{transition:opacity .01ms!important}*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}@media print{:root{--bg: #fff;--text: #000;--text-secondary: #333;--text-tertiary: #555;--border: #ccc}.topbar,.to-top,.theme-toggle{display:none!important}.section{break-inside:avoid;padding-block:1.25rem}a[href^=http]:after{content:" (" attr(href) ")";font-size:.75em;color:#555}}@supports (animation-timeline: view()){@media(prefers-reduced-motion:no-preference){.section-head,kb-snapshot .grid,kb-focus .item,kb-work .row,kb-projects .proj,kb-experience .role,kb-experience .edu,kb-stack .group,kb-contact .panel{animation:rise-in linear both;animation-timeline:view();animation-range:cover 12vh cover 46vh}.section-head{animation-range:cover 8vh cover 40vh}@keyframes rise-in{0%{opacity:0;transform:translate3d(0,22px,0)}to{opacity:1;transform:none}}}}
