@font-face{font-family:geist;src:url(../media/GeistVF-s.p.0e569l9b0bre8.woff)format("woff");font-display:optional}@font-face{font-family:geist Fallback;src:local(Arial);ascent-override:85.83%;descent-override:20.52%;line-gap-override:9.33%;size-adjust:107.19%}.geist_81dc496e-module__O2BPfW__className{font-family:geist,geist Fallback}.geist_81dc496e-module__O2BPfW__variable{--font-geist:"geist", "geist Fallback"}
@font-face{font-family:geistMono;src:url(../media/GeistMonoVF-s.1lv5tp2fpjxdz.woff)format("woff");font-display:optional}@font-face{font-family:geistMono Fallback;src:local(Arial);ascent-override:69.97%;descent-override:16.73%;line-gap-override:7.61%;size-adjust:131.49%}.geistmono_45378b77-module__YPCdAa__className{font-family:geistMono,geistMono Fallback}.geistmono_45378b77-module__YPCdAa__variable{--font-geist-mono:"geistMono", "geistMono Fallback"}
:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--color-paper:#fbf9f7;--color-paper-2:#f4f1ed;--color-paper-3:#e9e6e0;--color-ink:#131c22;--color-ink-2:#353e45;--color-rule:#cccac6;--color-rule-2:#aaa7a3;--color-muted:#565f65;--color-neutral:#404950;--color-accent:#0091ce;--color-accent-soft:#c1e8ff;--color-accent-ink:#0e171e;--color-focus:#008bcc;--color-nav-surface:#ffffff9e;--color-nav-border:#4d4d4d3d;--color-nav-highlight:#ffffffe0;--color-nav-active:#d1d1d1d1;--color-nav-selection:#bebebe6b;--color-nav-focus:#1f1f1fd9;--color-photo-surface:color-mix(in srgb, var(--color-paper) 82%, transparent);--color-photo-border:color-mix(in srgb, var(--color-rule-2) 28%, transparent);--color-photo-highlight:color-mix(in srgb, var(--color-paper) 90%, transparent);--color-shadow:#181b1e1f;--font-display:var(--font-geist), ui-sans-serif, sans-serif;--font-body:var(--font-geist), ui-sans-serif, sans-serif;--font-outlier:var(--font-geist-mono), ui-monospace, monospace;--display-weight:700;--body-weight:400;--tracking-display:-.035em;--tracking-label:.08em;--text-xs:.75rem;--text-sm:.875rem;--text-base:1rem;--text-md:1.25rem;--text-lg:1.5625rem;--text-xl:1.953rem;--text-2xl:2.441rem;--text-3xl:3.052rem;--text-display-s:clamp(2.45rem, 6vw, 4rem);--text-display:clamp(2.75rem, 7vw, 5.25rem);--space-3xs:.25rem;--space-2xs:.5rem;--space-xs:.75rem;--space-sm:1rem;--space-md:1.5rem;--space-lg:2rem;--space-xl:3rem;--space-2xl:4.5rem;--space-3xl:7rem;--space-4xl:9rem;--page-gutter:clamp(1rem, 4vw, 3rem);--page-width:92rem;--banner-height:5rem;--measure:65ch;--rule-hair:1px;--rule-fine:2px;--radius-card:1.25rem;--radius-pill:999px;--radius-input:.75rem;--shadow-card:0 1.25rem 3.5rem -2.25rem var(--color-shadow);--ease-out:cubic-bezier(.16, 1, .3, 1);--ease-in:cubic-bezier(.7, 0, .84, 0);--ease-in-out:cubic-bezier(.65, 0, .35, 1);--dur-micro:.12s;--dur-short:.22s;--dur-long:.42s;--dur-carousel:.72s;--z-base:1;--z-raised:10;--z-sticky:20;--z-sticky-nav:30;--z-dropdown:100;--z-modal:400;--z-toast:500;--z-tooltip:600}@supports (color:lab(0% 0 0)){:root{--color-paper:lab(98.1559% .22471 1.50434);--color-paper-2:lab(95.3776% .340879 2.25897);--color-paper-3:lab(91.3231% .460207 3.0156);--color-ink:lab(9.53119% -2.59429 -5.78384);--color-ink-2:lab(25.7784% -2.61214 -5.52479);--color-rule:lab(81.4575% .342518 2.25997);--color-rule-2:lab(68.6974% .344396 2.2612);--color-muted:lab(39.6994% -2.36845 -4.90373);--color-neutral:lab(30.4189% -2.48939 -5.21342);--color-accent:lab(55.8642% -19.1669 -46.9915);--color-accent-soft:lab(89.6791% -9.7121 -16.8585);--color-accent-ink:lab(7.23336% -2.52666 -6.34827);--color-focus:lab(53.3183% -18.9223 -58.2534);--color-nav-surface:lab(100% 0 0/.62);--color-nav-border:lab(32.72% -.0000149012 0/.24);--color-nav-highlight:lab(100% 0 0/.88);--color-nav-active:lab(83.76% -.0000298023 0/.82);--color-nav-selection:lab(76.8% -.0000298023 0/.42);--color-nav-focus:lab(11.84% 0 0/.85);--color-shadow:lab(9.49083% -.351779 -2.95578/.12)}}.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--color-paper:#0c0d0f;--color-paper-2:#151618;--color-paper-3:#202225;--color-ink:#f0eeeb;--color-ink-2:#c5c4c1;--color-rule:#313335;--color-rule-2:#4b4d50;--color-muted:#96a0a6;--color-neutral:#afb9bf;--color-accent:#5bc4fc;--color-accent-soft:#002d42;--color-accent-ink:#060e14;--color-focus:#57cbff;--color-nav-surface:#030303c2;--color-nav-border:#b7b7b738;--color-nav-highlight:#ffffff1c;--color-nav-active:#2e2e2ec2;--color-nav-selection:#4d4d4d61;--color-nav-focus:#f2f2f2e6;--color-photo-surface:color-mix(in srgb, var(--color-paper) 82%, transparent);--color-photo-border:color-mix(in srgb, var(--color-rule-2) 32%, transparent);--color-photo-highlight:color-mix(in srgb, var(--color-ink) 8%, transparent);--color-shadow:#0000014d}@supports (color:lab(0% 0 0)){.dark{--color-paper:lab(3.69165% -.113092 -.928384);--color-paper-2:lab(7.21025% -.220872 -1.80841);--color-paper-3:lab(12.9794% -.286572 -2.22795);--color-ink:lab(94.2119% .224888 1.50446);--color-ink-2:lab(79.1318% .225633 1.50496);--color-rule:lab(21.1035% -.251517 -1.86331);--color-rule-2:lab(32.7004% -.304237 -2.23729);--color-muted:lab(65.2369% -2.60919 -4.3542);--color-neutral:lab(74.5173% -2.61596 -4.35774);--color-accent:lab(74.5977% -18.7152 -37.3213);--color-accent-soft:lab(16.4944% -8.01653 -17.736);--color-accent-ink:lab(3.70207% -1.413 -4.08212);--color-focus:lab(76.8177% -23.452 -53.1173);--color-nav-surface:lab(.903296% 0 0/.76);--color-nav-border:lab(74.48% -.0000298023 0/.22);--color-nav-highlight:lab(100% 0 0/.11);--color-nav-active:lab(18.8% 0 0/.76);--color-nav-selection:lab(32.72% -.0000149012 0/.38);--color-nav-focus:lab(95.36% 0 0/.9);--color-shadow:lab(.111885% -.00698119 -.0974357/.3)}}
*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border:0 solid #e5e7eb}:before,:after{--tw-content:""}html,:host{-webkit-text-size-adjust:100%;tab-size:4;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;line-height:1.5}body{line-height:inherit;margin:0}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-feature-settings:normal;font-variation-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-feature-settings:inherit;font-variation-settings:inherit;font-family:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:#0000;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{margin:0;padding:0;list-style:none}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}[hidden]{display:none}html{scroll-behavior:smooth;overflow-x:clip}body{background:var(--color-paper);min-height:100vh;color:var(--color-ink);font-family:var(--font-body);font-size:var(--text-base);font-weight:var(--body-weight);text-rendering:optimizelegibility;margin:0;line-height:1.6;overflow-x:clip}*,:before,:after{box-sizing:border-box}:focus-visible{outline:var(--rule-fine) solid var(--color-focus);outline-offset:var(--space-3xs)}::selection{background:var(--color-accent-soft);color:var(--color-ink)}h1,h2,h3,p{margin:0}h1,h2,h3{overflow-wrap:anywhere;min-width:0;color:var(--color-ink);font-family:var(--font-display);font-style:normal;font-weight:var(--display-weight);letter-spacing:var(--tracking-display)}a{color:inherit;text-decoration:none}button,a{-webkit-tap-highlight-color:transparent}button{font:inherit}svg{display:block}.hidden{display:none}.blur{--tw-blur:blur(8px);filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.visually-hidden{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;width:1px;height:1px;position:absolute;overflow:hidden}.shell{width:min(100%, var(--page-width));padding-inline:var(--page-gutter);margin-inline:auto}.site-header{inset:var(--space-sm) 0 auto;z-index:50;padding-inline:var(--space-sm);pointer-events:none;justify-items:center;display:grid;position:fixed}.nav-pill{align-items:center;gap:var(--space-md);width:min(100%,44rem);min-height:3.5rem;padding:var(--space-2xs) var(--space-2xs) var(--space-2xs) var(--space-md);border:var(--rule-hair) solid var(--color-nav-border);border-radius:var(--radius-pill);background:var(--color-nav-surface);color:var(--color-ink);-webkit-backdrop-filter:blur(var(--space-md));backdrop-filter:blur(var(--space-md));pointer-events:auto;justify-content:space-between;display:flex}.nav-pill :focus-visible{outline-color:var(--color-nav-focus)}.wordmark{min-height:44px;color:var(--color-ink);font-family:var(--font-outlier);font-size:var(--text-sm);letter-spacing:-.03em;white-space:nowrap;transition:color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);align-items:center;font-weight:700;line-height:1;display:inline-flex}.wordmark span{color:var(--color-accent)}.nav-pill .wordmark span{color:var(--color-ink)}.nav-links{align-items:center;gap:var(--space-2xs);display:none}.nav-link,.mobile-nav-link,.footer-links a,.primary-cta,.social-link,.text-link{white-space:nowrap}.nav-link{isolation:isolate;border-radius:var(--radius-pill);min-height:44px;padding-inline:var(--space-sm);color:var(--color-ink-2);font-size:var(--text-sm);transition:transform var(--dur-micro) var(--ease-out);justify-content:center;align-items:center;font-weight:600;line-height:1;display:inline-flex;position:relative}.nav-active-indicator{z-index:-1;border-radius:inherit;pointer-events:none;background:var(--color-nav-selection);-webkit-backdrop-filter:blur(var(--space-sm));backdrop-filter:blur(var(--space-sm));transform-origin:50%;animation:nav-indicator-enter var(--dur-short) var(--ease-out) both;position:absolute;inset:0}@keyframes nav-indicator-enter{0%{opacity:.55;transform:scale(.88)}to{opacity:1;transform:scale(1)}}.nav-link-label{z-index:1;position:relative}.nav-link[aria-current=page]{color:var(--color-ink)}.nav-actions{align-items:center;gap:var(--space-3xs);display:flex}.icon-button,.menu-button{border-radius:var(--radius-pill);min-width:44px;min-height:44px;color:var(--color-ink);cursor:pointer;transition:background-color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);background:0 0;border:0;place-items:center;line-height:1;display:inline-grid}.icon-button svg{width:1.05rem;height:1.05rem}.theme-icon-dark,.dark .theme-icon-light{display:none}.dark .theme-icon-dark{display:block}.menu-button{padding-inline:var(--space-sm);font-size:var(--text-xs)}.mobile-navigation{width:min(calc(100% - var(--space-lg)), 32rem);margin-top:var(--space-2xs);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper-2);color:var(--color-ink);box-shadow:var(--shadow-card);pointer-events:auto}.mobile-navigation>div{padding:var(--space-2xs);display:grid}.mobile-nav-link{border-radius:var(--radius-input);min-height:48px;padding-inline:var(--space-sm);color:var(--color-ink-2);transition:background-color var(--dur-short) var(--ease-out), color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);justify-content:space-between;align-items:center;font-weight:600;line-height:1;display:flex}.mobile-nav-link[aria-current=page]{background:var(--color-nav-active);color:var(--color-ink)}.home-hero{min-height:min(40rem, calc(100svh - var(--space-4xl)));gap:var(--space-xl);padding-block:var(--space-xl) var(--space-3xl);grid-template-columns:minmax(0,1fr);align-items:center;display:grid}.hero-copy{justify-items:start;gap:var(--space-md);min-width:0;display:grid}.hero-role{color:var(--color-neutral);font-size:var(--text-sm);letter-spacing:-.02em}.hero-copy h1,.about-copy h1{max-width:13ch;font-size:var(--text-display);line-height:1.02}.hero-copy h1 span{color:var(--color-accent)}.hero-lede,.about-copy>p:last-of-type{max-width:36rem;color:var(--color-ink-2);font-size:var(--text-md);line-height:1.55}.primary-cta{border:var(--rule-fine) solid var(--color-accent);border-radius:var(--radius-pill);min-height:46px;padding-inline:var(--space-md);background:var(--color-paper);color:var(--color-ink);transition:background-color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);justify-content:center;align-items:center;font-weight:650;line-height:1;display:inline-flex}.social-links{gap:var(--space-2xs) var(--space-sm);margin-top:var(--space-xs);flex-wrap:wrap;display:flex}.social-link{align-items:center;gap:var(--space-2xs);min-height:44px;color:var(--color-ink-2);font-size:var(--text-sm);transition:color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);font-weight:600;line-height:1;display:inline-flex}.photo-frame{aspect-ratio:4/5;border:var(--rule-hair) solid var(--color-photo-border);border-radius:min(18vw, 7rem) min(18vw, 7rem) var(--radius-card) var(--radius-card);background:var(--color-photo-surface);width:min(100%,25rem);color:var(--color-ink);box-shadow:inset 0 var(--rule-hair) 0 var(--color-photo-highlight), var(--shadow-card);-webkit-backdrop-filter:blur(var(--space-xl)) saturate(105%);backdrop-filter:blur(var(--space-xl)) saturate(105%);animation:photo-settle var(--dur-long) var(--ease-out) both;justify-self:center;margin:0;position:relative;overflow:clip}@keyframes photo-settle{0%{transform:translateY(var(--space-2xs)) scale(.99)}to{transform:translateY(0)scale(1)}}.photo-frame img{object-fit:cover;object-position:center;width:100%;height:100%}.stats-section{gap:var(--space-lg);padding-block:var(--space-lg) var(--space-2xl);grid-template-columns:minmax(0,1fr);align-items:end;display:grid}.stats-intro{gap:var(--space-2xs);display:grid}.stats-intro h2{font-size:var(--text-xl);line-height:1.08}.stats-grid{gap:var(--space-lg);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;display:grid}.stat-item{min-width:0}.stat-item dd{color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-3xl);font-weight:var(--display-weight);letter-spacing:var(--tracking-display);margin:0;line-height:1}.stat-item dt{margin-top:var(--space-2xs);color:var(--color-muted);font-size:var(--text-sm)}.stats-status{color:var(--color-muted);font-size:var(--text-xs);grid-column:1/-1}.skills-section,.projects-section{padding-block:var(--space-3xl)}.resume-section{padding-block:var(--space-2xl)}.skills-section{border-top:var(--rule-hair) solid var(--color-rule)}.section-heading{gap:var(--space-sm);min-width:0;margin-bottom:var(--space-xl);grid-template-columns:minmax(0,1fr);align-items:end;display:grid}.section-heading h2{font-size:var(--text-2xl);line-height:1.08}.section-heading p{max-width:36rem;color:var(--color-ink-2)}.skills-grid{border-top:var(--rule-hair) solid var(--color-rule);border-left:var(--rule-hair) solid var(--color-rule);grid-template-columns:repeat(2,minmax(0,1fr));margin:0;padding:0;list-style:none;display:grid}.skills-grid li{align-items:center;gap:var(--space-sm);min-width:0;min-height:6rem;padding:var(--space-md);border-right:var(--rule-hair) solid var(--color-rule);border-bottom:var(--rule-hair) solid var(--color-rule);color:var(--color-ink);font-weight:650;display:flex}.skills-grid svg{width:var(--space-md);height:var(--space-md);color:var(--color-ink-2);flex:none}.projects-grid{gap:var(--space-2xl) var(--space-lg);grid-template-columns:minmax(0,1fr);display:grid}.project-card{align-content:start;gap:var(--space-md);min-width:0;display:grid}.project-media{aspect-ratio:16/10;border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper-2);min-width:0;color:var(--color-ink);display:block;position:relative;overflow:clip}.project-image{object-fit:cover;transition:transform var(--dur-long) var(--ease-out)}.project-placeholder{align-content:end;gap:var(--space-xs);min-height:100%;padding:var(--space-lg);background:var(--color-paper-2);color:var(--color-ink);display:grid}.project-placeholder span{color:var(--color-muted);font-size:var(--text-xs);letter-spacing:var(--tracking-label);text-transform:uppercase}.project-placeholder strong{max-width:24ch;font-family:var(--font-display);font-size:var(--text-xl);line-height:1.1}.project-body{gap:var(--space-sm);min-width:0;display:grid}.project-heading{justify-content:space-between;align-items:start;gap:var(--space-sm);min-width:0;display:flex}.project-heading h3{margin-top:var(--space-3xs);font-size:var(--text-lg);line-height:1.2}.project-subject,.resume-date{color:var(--color-muted);font-size:var(--text-xs);font-variant-numeric:tabular-nums;letter-spacing:var(--tracking-label)}.project-status{align-items:center;gap:var(--space-2xs);color:var(--color-ink-2);font-size:var(--text-xs);white-space:nowrap;flex:none;display:inline-flex}.project-status:before{width:var(--space-2xs);height:var(--space-2xs);border:var(--rule-hair) solid currentColor;border-radius:var(--radius-pill);content:""}.project-status.is-complete:before{background:var(--color-accent);color:var(--color-ink)}.project-description{max-width:var(--measure);color:var(--color-ink-2)}.project-tools{max-width:var(--measure);color:var(--color-muted);font-size:var(--text-sm)}.project-tools span{margin-right:var(--space-2xs);color:var(--color-ink);font-weight:650}.project-action{align-items:center;gap:var(--space-xs) var(--space-md);flex-wrap:wrap;min-height:44px;display:flex}.text-link{align-items:center;gap:var(--space-2xs);min-height:44px;color:var(--color-ink);text-decoration:underline;-webkit-text-decoration-color:var(--color-accent);text-decoration-color:var(--color-accent);text-underline-offset:var(--space-3xs);transition:color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);font-weight:650;line-height:1;display:inline-flex}.text-link svg{width:.8em;height:.8em}.project-note{color:var(--color-muted);font-size:var(--text-sm)}.about-page{padding-bottom:var(--space-2xl)}.about-intro{gap:var(--space-2xl);padding-block:var(--space-2xl) var(--space-3xl);grid-template-columns:minmax(0,1fr);align-items:start;display:grid}.about-copy{justify-items:start;gap:var(--space-md);min-width:0;display:grid}.profile-facts{border-top:var(--rule-hair) solid var(--color-rule);margin:0}.profile-facts>div{gap:var(--space-md);min-width:0;padding-block:var(--space-md);border-bottom:var(--rule-hair) solid var(--color-rule);grid-template-columns:minmax(6.5rem,.45fr) minmax(0,1fr);display:grid}.profile-facts dt{color:var(--color-muted);font-size:var(--text-xs)}.profile-facts dd{overflow-wrap:anywhere;min-width:0;color:var(--color-ink);margin:0;font-weight:600}.resume-list{border-top:var(--rule-hair) solid var(--color-rule);margin:0;padding:0;list-style:none}.resume-heading{margin-bottom:var(--space-lg);grid-template-columns:minmax(0,1fr)}.resume-entry{gap:var(--space-sm);min-width:0;padding-block:var(--space-lg);border-bottom:var(--rule-hair) solid var(--color-rule);grid-template-columns:minmax(0,1fr);display:grid}.resume-content{min-width:0}.resume-organization{color:var(--color-muted);font-size:var(--text-sm);font-weight:650}.resume-content h3{margin-top:var(--space-3xs);font-size:var(--text-md);line-height:1.25}.resume-context{margin-top:var(--space-2xs);color:var(--color-ink-2);font-size:var(--text-sm)}.resume-summary{margin-top:var(--space-sm);color:var(--color-ink-2)}.resume-highlights{gap:var(--space-2xs);margin:var(--space-sm) 0 0;padding-left:var(--space-md);color:var(--color-ink-2);list-style:outside;display:grid}.resume-highlights li{padding-left:var(--space-3xs)}.resume-highlights li::marker{color:currentColor}.site-footer{gap:var(--space-xl);padding-block:var(--space-2xl) var(--space-xl);display:grid}.footer-statement{max-width:28ch;color:var(--color-ink);font-family:var(--font-display);font-size:var(--text-2xl);font-weight:var(--display-weight);letter-spacing:var(--tracking-display);line-height:1.08}.footer-meta{gap:var(--space-md);padding-top:var(--space-md);border-top:var(--rule-hair) solid var(--color-rule);flex-direction:column;display:flex}.footer-links{gap:var(--space-xs) var(--space-md);color:var(--color-muted);font-size:var(--text-sm);flex-wrap:wrap;align-items:center;display:flex}.footer-links a{min-height:44px;color:var(--color-ink-2);transition:color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);align-items:center;line-height:1;display:inline-flex}@media (hover:hover) and (pointer:fine){.icon-button:hover,.menu-button:hover,.mobile-nav-link:hover{background:var(--color-nav-active);color:var(--color-ink)}.primary-cta:hover{background:var(--color-accent-soft);color:var(--color-ink);transform:translateY(-1px)}.social-link:hover,.text-link:hover,.footer-links a:hover,.wordmark:hover{color:var(--color-ink);transform:translateY(-1px)}.project-media[href]:hover .project-image,.project-media[href]:focus-visible .project-image{transform:scale(1.025)}}.nav-link:active,.icon-button:active,.menu-button:active,.mobile-nav-link:active,.primary-cta:active,.social-link:active,.text-link:active,.footer-links a:active,.wordmark:active{transform:translateY(1px)}.project-media[href]:active .project-image{transform:scale(1)}.nav-link[aria-disabled=true],.icon-button:disabled,.menu-button:disabled,.mobile-nav-link[aria-disabled=true],.primary-cta[aria-disabled=true],.social-link[aria-disabled=true],.text-link[aria-disabled=true],.footer-links a[aria-disabled=true],.wordmark[aria-disabled=true],.project-media[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}@media (max-width:39.999rem){.home-page .projects-section:last-child,.about-page,.about-page .resume-section:last-child{padding-bottom:0}.site-footer{padding-top:var(--space-xl)}}@media (min-width:40rem){.home-page .projects-section:last-child,.about-page .resume-section:last-child{padding-bottom:var(--space-2xl)}.about-page{padding-bottom:0}.nav-links{display:flex}.menu-button,.mobile-navigation{display:none}.skills-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.projects-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.resume-entry{gap:var(--space-xl);grid-template-columns:minmax(9rem,.35fr) minmax(0,1fr)}.footer-meta{flex-direction:row;justify-content:space-between;align-items:center}}@media (min-width:60rem){.stats-section{gap:var(--space-2xl);grid-template-columns:minmax(0,1fr) minmax(24rem,.7fr)}.skills-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.home-hero{gap:var(--space-2xl);padding-block:var(--space-xl) var(--space-2xl);transform:translateY(calc(-1 * var(--space-sm)));grid-template-columns:minmax(0,7fr) minmax(0,5fr)}.photo-frame{justify-self:end}.section-heading{gap:var(--space-2xl);grid-template-columns:minmax(0,1fr) minmax(18rem,.7fr)}.compact-heading{grid-template-columns:minmax(0,.7fr) minmax(18rem,1fr)}.compact-heading p{text-align:right;justify-self:end}.about-intro{gap:var(--space-3xl);grid-template-columns:minmax(0,1fr) minmax(20rem,.75fr)}}@media (pointer:coarse){.primary-cta,.social-link,.text-link,.footer-links a{min-height:48px}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.15s!important;animation-duration:.15s!important;animation-iteration-count:1!important}.project-image,.photo-frame,.nav-active-indicator,.primary-cta,.social-link,.text-link,.footer-links a,.wordmark{transform:none!important}.photo-frame,.nav-active-indicator{animation:none!important}}.project-page{padding-bottom:var(--space-xl)}.project-case-study{width:min(100%,72rem);margin-inline:auto}.project-breadcrumb{align-items:center;gap:var(--space-xs);min-width:0;padding-block:var(--space-lg) var(--space-sm);color:var(--color-muted);font-size:var(--text-sm);display:flex}.project-breadcrumb a{align-items:center;gap:var(--space-2xs);min-height:44px;color:var(--color-ink-2);white-space:nowrap;transition:color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);font-weight:650;display:inline-flex}.project-breadcrumb a svg{width:.8em;height:.8em}.project-breadcrumb>span:last-child{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}.project-case-header{gap:var(--space-xl);padding-block:var(--space-xl);display:grid}.project-case-title{justify-items:start;gap:var(--space-md);min-width:0;max-width:var(--measure);display:grid}.project-case-title h1{max-width:14ch;font-size:var(--text-display-s);line-height:1.02}.project-case-lede{max-width:58ch;color:var(--color-ink-2);font-size:var(--text-md);line-height:1.55}.project-case-links{gap:var(--space-xs) var(--space-md);flex-wrap:wrap;display:flex}.project-case-facts{gap:var(--space-lg);padding-block:var(--space-md);border-block:var(--rule-hair) solid var(--color-rule);grid-template-columns:minmax(0,1fr);margin:0;display:grid}.project-case-facts div{gap:var(--space-3xs);min-width:0;display:grid}.project-case-facts dt{color:var(--color-muted);font-size:var(--text-xs);letter-spacing:var(--tracking-label);text-transform:uppercase}.project-case-facts dd{min-width:0;color:var(--color-ink);overflow-wrap:anywhere;margin:0;font-weight:650}.project-case-media{width:min(100%, var(--measure));gap:var(--space-xs);margin:0;display:grid}.project-case-media-frame{aspect-ratio:16/10;border-radius:var(--radius-card);background:var(--color-paper-2);min-width:0;position:relative;overflow:clip}.project-case-media img{object-fit:cover}.project-case-media-treasure-hunt-robot img{object-position:center 56%}.project-case-media figcaption{color:var(--color-muted);font-size:var(--text-xs);line-height:1.5}.project-document{width:min(100%, var(--measure));gap:var(--space-xl);padding-block:var(--space-xl);display:grid}.project-case-header+.project-document{padding-block-start:0}.project-prose-section{gap:var(--space-sm);min-width:0;display:grid}.project-prose-section h2{color:var(--color-ink);font-size:var(--text-md);line-height:1.2}.project-prose-section>p,.project-document-close{color:var(--color-ink-2);line-height:1.7}.project-detail-list{gap:0;margin:0;padding:0;display:grid}.project-detail-list>div{gap:var(--space-2xs);padding-block:var(--space-md);border-block-start:var(--rule-hair) solid var(--color-rule);display:grid}.project-detail-list>div:last-child{border-block-end:var(--rule-hair) solid var(--color-rule)}.project-detail-list dt{color:var(--color-ink);font-size:var(--text-base);font-weight:700;line-height:1.35}.project-detail-list dd{color:var(--color-ink-2);margin:0;line-height:1.7}.project-stack{gap:var(--space-2xs);color:var(--color-ink-2);flex-wrap:wrap;margin:0;padding:0;list-style:none;display:flex}.project-stack li{align-items:center;gap:var(--space-2xs);display:inline-flex}.project-stack li:not(:last-child):after{color:var(--color-muted);content:"·"}.project-document-close{padding-block-start:var(--space-sm)}.project-document-close a{align-items:center;gap:var(--space-2xs);color:var(--color-ink);text-decoration:underline;-webkit-text-decoration-color:var(--color-accent);text-decoration-color:var(--color-accent);text-underline-offset:var(--space-3xs);white-space:nowrap;font-weight:700;display:inline-flex}.project-document-close svg{width:.8em;height:.8em}@media (hover:hover) and (pointer:fine){.project-breadcrumb a:hover,.project-document-close a:hover{color:var(--color-ink);transform:translateY(-1px)}}.project-breadcrumb a:active,.project-document-close a:active{transform:translateY(1px)}.project-breadcrumb a[aria-disabled=true],.project-document-close a[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}@media (min-width:40rem){.project-case-facts{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (min-width:60rem){.project-case-header{padding-block:var(--space-2xl) var(--space-xl)}}@media (pointer:coarse){.project-breadcrumb a,.project-document-close a{min-height:48px}}@media (prefers-reduced-motion:reduce){.project-breadcrumb a,.project-document-close a{transform:none!important}}.site-main{padding-top:var(--banner-height)}.site-header{z-index:var(--z-sticky-nav);border-bottom:var(--rule-hair) solid var(--color-rule);background:var(--color-paper);pointer-events:auto;padding-inline:0;display:block;inset:0 0 auto}.nav-edge{min-height:var(--banner-height);justify-content:space-between;align-items:center;gap:var(--space-lg);display:flex}.nav-edge-actions{align-items:center;gap:var(--space-2xs);display:flex}.nav-route-link{align-items:center;gap:var(--space-2xs);border:var(--rule-hair) solid var(--color-rule-2);border-radius:var(--radius-pill);min-height:44px;padding-inline:var(--space-sm);color:var(--color-ink);font-size:var(--text-sm);white-space:nowrap;transition:background-color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);font-weight:650;line-height:1;display:inline-flex}.site-footer{gap:var(--space-sm);padding-block:var(--space-lg);border-top:var(--rule-hair) solid var(--color-rule);grid-template-columns:minmax(0,1fr);align-items:center}.footer-tagline{color:var(--color-muted);font-size:var(--text-sm)}@media (hover:hover) and (pointer:fine){.site-header .icon-button:hover,.nav-route-link:hover{background:var(--color-paper-2);color:var(--color-ink);transform:none}.site-header .wordmark:hover,.site-footer .wordmark:hover,.site-footer .footer-links a:hover{transform:none}}.nav-route-link:active{transform:translateY(1px)}.nav-route-link[aria-disabled=true]{opacity:.5;cursor:not-allowed;pointer-events:none}@media (max-width:39.999rem){.site-footer{padding-top:var(--space-xl)}}@media (min-width:60rem){.site-footer{gap:var(--space-xl);grid-template-columns:auto minmax(0,1fr) auto}.footer-tagline{justify-self:start}.footer-links{justify-content:flex-end}}@media (pointer:coarse){.nav-route-link{min-height:48px}}@media (prefers-reduced-motion:reduce){.nav-route-link{transform:none!important}}.text-link,.project-breadcrumb a,.project-document-close a{text-underline-offset:var(--rule-fine)}.projects-carousel{gap:var(--space-lg);display:grid}.projects-carousel-toolbar{gap:var(--space-sm);padding-block:var(--space-sm);border-block:var(--rule-hair) solid var(--color-rule);align-items:center;display:grid}.projects-carousel-status{gap:var(--space-3xs) var(--space-sm);min-width:0;color:var(--color-muted);font-size:var(--text-sm);font-variant-numeric:tabular-nums;flex-wrap:wrap;display:flex}.projects-carousel-status span:first-child{color:var(--color-ink);font-weight:650}.projects-carousel-controls{gap:var(--space-2xs);grid-template-columns:repeat(2,minmax(0,1fr));min-width:0;display:grid}.projects-carousel-control{justify-content:center;align-items:center;gap:var(--space-2xs);border:var(--rule-hair) solid var(--color-rule-2);border-radius:var(--radius-pill);min-width:0;min-height:44px;padding-inline:var(--space-sm);background:var(--color-paper);color:var(--color-ink);font-size:var(--text-sm);white-space:nowrap;cursor:pointer;transition:background-color var(--dur-short) var(--ease-out), color var(--dur-short) var(--ease-out), transform var(--dur-micro) var(--ease-out);font-weight:650;line-height:1;display:inline-flex}.projects-carousel-control svg{flex:none;width:.8em;height:.8em}.projects-carousel-control.is-hover{background:var(--color-paper-2);color:var(--color-ink)}.projects-carousel-control:focus-visible,.projects-carousel-control.is-focus{outline:var(--rule-fine) solid var(--color-focus);outline-offset:var(--space-3xs)}.projects-carousel-control:active,.projects-carousel-control.is-active{transform:translateY(1px)}.projects-carousel-control:disabled,.projects-carousel-control[aria-disabled=true]{border-color:var(--color-rule);background:var(--color-paper-2);color:var(--color-muted);opacity:.55;cursor:not-allowed}.projects-carousel-control[data-state=loading]{background:var(--color-paper-2);color:var(--color-ink-2);cursor:wait}.projects-carousel-control[data-state=error]{border-color:var(--color-focus);background:var(--color-paper);color:var(--color-ink)}.projects-carousel-control[data-state=success]{border-color:var(--color-accent);background:var(--color-paper);color:var(--color-ink)}.projects-carousel-control-spinner{animation:projects-carousel-spin calc(var(--dur-long) * 2) linear infinite}.projects-carousel-preview{gap:var(--space-lg);width:min(100%,40rem);padding:var(--space-lg);border:var(--rule-hair) solid var(--color-rule);border-radius:var(--radius-card);background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);display:grid}.projects-carousel-preview h2{font-size:var(--text-lg)}.projects-carousel-preview-list{gap:var(--space-2xs);display:grid}.projects-carousel-preview-row{gap:var(--space-2xs);padding-block:var(--space-2xs);border-bottom:var(--rule-hair) solid var(--color-rule);grid-template-columns:minmax(0,1fr);align-items:center;display:grid}.projects-carousel-preview-row>span{color:var(--color-muted);font-size:var(--text-sm)}@keyframes projects-carousel-spin{to{transform:rotate(1turn)}}@media (hover:hover) and (pointer:fine){.projects-carousel-control:hover{background:var(--color-paper-2);color:var(--color-ink)}}@media (min-width:40rem){.projects-carousel-toolbar{grid-template-columns:minmax(0,1fr) auto}.projects-carousel-controls{display:flex}.projects-carousel-preview-row{grid-template-columns:minmax(7rem,.4fr) minmax(0,1fr)}.projects-carousel-preview-row .projects-carousel-control{justify-self:start}}@media (pointer:coarse){.projects-carousel-control{min-height:48px}}@media (prefers-reduced-motion:reduce){.projects-carousel-control,.projects-carousel-control-spinner{transform:none!important}.projects-carousel-control-spinner{animation:none!important}}.projects-carousel-stage,.projects-carousel-viewport{min-width:0}.projects-carousel-stage{position:relative}.projects-carousel-viewport{display:grid;overflow:clip}.projects-carousel-page{visibility:hidden;pointer-events:none;grid-area:1/1}.projects-carousel-page.is-current,.projects-carousel-page.is-outgoing{visibility:visible}.projects-carousel-page.is-current{pointer-events:auto}.projects-carousel-arrows{justify-content:space-between;align-items:center;gap:var(--space-sm);padding-top:var(--space-sm);display:flex}.projects-carousel-arrow{width:var(--space-xl);min-width:var(--space-xl);min-height:var(--space-xl);aspect-ratio:1;border-color:var(--color-muted);background:var(--color-paper);color:var(--color-ink-2);padding-inline:0}.projects-carousel-arrow svg{width:var(--space-sm);height:var(--space-sm)}.projects-carousel-arrow.is-hover{background:var(--color-paper-2);color:var(--color-ink)}.projects-carousel-arrow:active,.projects-carousel-arrow.is-active{transform:none}.projects-carousel-arrow:disabled,.projects-carousel-arrow[aria-disabled=true]{border-color:var(--color-rule);background:var(--color-paper-2);color:var(--color-muted);opacity:.55;cursor:not-allowed}.projects-carousel-arrow[data-state=loading]{background:var(--color-paper-2);color:var(--color-ink-2)}.projects-carousel-arrow[data-state=error]{border-color:var(--color-focus);background:var(--color-paper);color:var(--color-ink)}.projects-carousel-arrow[data-state=success]{border-color:var(--color-accent);background:var(--color-paper);color:var(--color-ink)}.projects-carousel-page.is-current.is-forward{animation:projects-carousel-enter-forward var(--dur-carousel) var(--ease-out) both}.projects-carousel-page.is-outgoing.is-forward{animation:projects-carousel-exit-forward var(--dur-carousel) var(--ease-out) both}.projects-carousel-page.is-current.is-backward{animation:projects-carousel-enter-backward var(--dur-carousel) var(--ease-out) both}.projects-carousel-page.is-outgoing.is-backward{animation:projects-carousel-exit-backward var(--dur-carousel) var(--ease-out) both}.projects-carousel .project-image{transition:none}@keyframes projects-carousel-enter-forward{0%{transform:translate(100%)}to{transform:translate(0)}}@keyframes projects-carousel-exit-forward{0%{transform:translate(0)}to{transform:translate(-100%)}}@keyframes projects-carousel-enter-backward{0%{transform:translate(-100%)}to{transform:translate(0)}}@keyframes projects-carousel-exit-backward{0%{transform:translate(0)}to{transform:translate(100%)}}@media (min-width:60rem){.projects-carousel-stage.has-navigation{padding-inline:calc(var(--space-xl) + var(--space-sm))}.projects-carousel-stage.has-navigation .projects-carousel-arrows{pointer-events:none;padding-top:0;position:absolute;inset:0}.projects-carousel-stage.has-navigation .projects-carousel-arrow{pointer-events:auto}}@media (hover:hover) and (pointer:fine){.projects-carousel-arrow:hover{background:var(--color-paper-2);color:var(--color-ink)}.projects-carousel .project-media[href]:hover .project-image,.projects-carousel .project-media[href]:focus-visible .project-image{transform:none}}@media (prefers-reduced-motion:reduce){.projects-carousel-page.is-current.is-forward,.projects-carousel-page.is-current.is-backward,.projects-carousel-page.is-outgoing.is-forward,.projects-carousel-page.is-outgoing.is-backward{animation-duration:var(--dur-micro)!important}}.projects-carousel-viewport{gap:var(--space-sm);overscroll-behavior-inline:contain;scroll-snap-type:x mandatory;scrollbar-width:none;touch-action:pan-x pan-y;-webkit-overflow-scrolling:touch;display:flex;overflow:auto clip}.projects-carousel-viewport::-webkit-scrollbar{display:none}.projects-carousel-mobile-clone{scroll-snap-align:start;scroll-snap-stop:always;pointer-events:none;flex:0 0 100%;min-width:0}.projects-carousel-mobile-clone>.project-card{scroll-snap-align:none;scroll-snap-stop:normal;flex:none;width:100%;height:100%}.projects-carousel-page,.projects-carousel-page.is-current{visibility:visible;pointer-events:auto;display:contents}.projects-carousel .project-card{scroll-snap-align:start;scroll-snap-stop:always;flex:0 0 100%;min-width:0}.projects-carousel-arrows{display:none}@media (min-width:40rem){.projects-carousel-mobile-clone{display:none}.projects-carousel-viewport{overscroll-behavior-inline:auto;scroll-snap-type:none;scrollbar-width:auto;touch-action:auto;gap:0;display:grid;overflow:clip}.projects-carousel-page,.projects-carousel-page.is-current{grid-area:1/1;display:grid}.projects-carousel-page{visibility:hidden;pointer-events:none}.projects-carousel-page.is-current,.projects-carousel-page.is-outgoing{visibility:visible}.projects-carousel-page.is-current{pointer-events:auto}.projects-carousel .project-card{scroll-snap-align:none;scroll-snap-stop:normal;flex:none}.projects-carousel-arrows{display:flex}}
