/*! tailwindcss v4.3.3 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial}}}@layer theme{:root,:host{--font-sans:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--ease-out:cubic-bezier(0, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}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;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);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}:-moz-focusring:where(:not(iframe)){outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.fixed{position:fixed}.relative{position:relative}.static{position:static}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.block{display:block}.hidden{display:none}.transform{transform:var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,)}.resize{resize:both}}:root{--color-bg:#f2efe9;--color-surface:#faf8f4;--color-surface-hover:#e9e5de;--color-text:#0a0a0a;--color-muted:#55524d;--color-rule:#d9d4cb;--color-rule-strong:#b9b3a7;--color-strong:#0a0a0a;--color-focus:#0a0a0a;--color-sheet:#ededea;--color-sheet-text:#171717;--color-sheet-rule:#8a8a86;--shadow-overlay:0 12px 40px #00000024;--grain-opacity:.45;--atlas-max:1200px;--atlas-gutter:clamp(16px, 4vw, 72px);--header-h:72px;--body:"Barlow", system-ui, sans-serif;--display:"Big Shoulders Display", "Arial Narrow", Impact, sans-serif;--type-hero:clamp(3.5rem, 11vw, 9rem);--type-section:clamp(2.5rem, 5.5vw, 4rem);--type-experience:clamp(1.75rem, 2.6vw, 2.25rem);--type-credential:clamp(2rem, 3.2vw, 2.75rem);--type-resume:clamp(2.25rem, 4vw, 3.25rem);--type-contact:clamp(2.75rem, 6vw, 5rem);--type-email:clamp(1.75rem, 3vw, 2.5rem);--type-dialog:clamp(2.25rem, 4.5vw, 3.5rem);--space-section:clamp(72px, 8vw, 112px);--space-heading:clamp(40px, 4vw, 56px);--motion-fast:.18s;--motion-medium:.42s;--motion-enter:.65s;--ease-out:cubic-bezier(.22, 1, .36, 1);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:var(--body);font-synthesis:none;text-rendering:optimizelegibility}:root[data-theme=dark]{--color-bg:#0a0a0a;--color-surface:#171717;--color-surface-hover:#202020;--color-text:#f0ede8;--color-muted:#9b9892;--color-rule:#262626;--color-rule-strong:#3d3d3d;--color-strong:#f4f1ec;--color-focus:#f0ede8;--shadow-overlay:0 16px 48px #0009;--grain-opacity:.5;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}@media (width>=1200px) and (height<=1150px){:root{--space-section:96px;--space-heading:48px}}*{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--color-bg);transition:background var(--motion-medium);scrollbar-gutter:stable}body{min-width:320px;color:var(--color-text);transition:background var(--motion-medium), color var(--motion-medium);background:0 0;margin:0;position:relative;overflow-x:hidden}#root{max-width:100%;overflow:clip}button,input{font:inherit;color:inherit}a{color:inherit;text-underline-offset:.25em}button,a{-webkit-tap-highlight-color:transparent;touch-action:manipulation}:focus-visible{outline:2px solid var(--color-focus);outline-offset:4px}::selection{background:var(--color-text);color:var(--color-bg)}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:var(--color-bg)}::-webkit-scrollbar-thumb{background:var(--color-muted);border:3px solid var(--color-bg)}.skip-link{z-index:1000;background:var(--color-text);color:var(--color-bg);padding:12px 16px;position:fixed;top:12px;left:12px;transform:translateY(-180%)}.skip-link:focus{transform:none}body:before{content:"";z-index:-1;background:radial-gradient(60% 55% at 78% 62%, var(--color-text), transparent 70%), radial-gradient(40% 40% at 6% 0%, var(--color-text), transparent 70%);height:min(100svh,960px);position:absolute;inset:0 0 auto}@supports (color:color-mix(in lab, red, red)){body:before{background:radial-gradient(60% 55% at 78% 62%, color-mix(in srgb, var(--color-text) 11%, transparent), transparent 70%), radial-gradient(40% 40% at 6% 0%, color-mix(in srgb, var(--color-text) 5%, transparent), transparent 70%)}}body:before{pointer-events:none}body:after{content:"";z-index:60;mix-blend-mode:overlay;opacity:var(--grain-opacity);pointer-events:none;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='.85' numOctaves='2' stitchTiles='stitch'/><feColorMatrix type='saturate' values='0'/></filter><rect width='100%25' height='100%25' filter='url(%23n)'/></svg>");background-size:200px 200px;position:fixed;inset:0}.hero-eyebrow,.section-eyebrow,.hero-facts dt,.project-meta,.experience-list time,.credential-layout time,.inspection-dialog header p,.site-footer,.system-status,.contact-copy-status{font:500 11px/1.5 var(--body);letter-spacing:.22em;text-transform:uppercase;color:var(--color-muted)}.site-header{height:var(--header-h);z-index:50;padding-inline:max(var(--atlas-gutter), calc((100% - var(--atlas-max)) / 2));border-bottom:1px solid var(--color-rule);background:var(--color-bg);justify-content:space-between;align-items:center;gap:24px;display:flex;position:fixed;inset:0 0 auto}.wordmark{align-items:center;gap:12px;text-decoration:none;display:flex}.wordmark span{border:1px solid var(--color-strong);width:34px;height:34px;font:700 15px/1 var(--display);border-radius:8px;place-items:center;display:grid}.wordmark small{font:700 1.25rem/1 var(--display);letter-spacing:.04em;text-transform:uppercase}.site-nav{gap:clamp(16px,2.4vw,36px);display:flex}.site-nav a{color:var(--color-muted);font:500 12px/1 var(--body);letter-spacing:.16em;text-transform:uppercase;transition:color var(--motion-fast) var(--ease-out);text-decoration:none;position:relative}.site-nav a:hover,.site-nav a[aria-current=location]{color:var(--color-strong)}.site-nav a:after{content:"";background:var(--color-strong);opacity:.45;transform-origin:0;height:1px;position:absolute;bottom:-10px;left:0;right:0;transform:scaleX(0)}.site-nav a:hover:after,.site-nav a[aria-current=location]:after{transform:scaleX(1)}.site-nav a[aria-current=location]:after{opacity:1}.nav-resume{display:none}.header-tools{justify-content:flex-end;align-items:center;gap:10px;display:flex}.header-resume{border:1px solid var(--color-rule-strong);color:var(--color-text);font:600 12px/1 var(--body);letter-spacing:.16em;text-transform:uppercase;transition:background var(--motion-fast) var(--ease-out), color var(--motion-fast) var(--ease-out);border-radius:999px;padding:11px 20px;text-decoration:none}.header-resume:hover{border-color:var(--color-strong);background:var(--color-surface-hover);color:var(--color-text)}.theme-switch,.nav-toggle{font:500 12px/1 var(--body);letter-spacing:.16em;text-transform:uppercase;cursor:pointer;background:0 0;border:0;padding:10px}.theme-switch span{background:linear-gradient(90deg,currentColor 50%,#0000 50%);border:1px solid;border-radius:50%;width:8px;height:8px;margin-right:8px;display:inline-block}.nav-toggle{display:none}@media (width<=1100px){.site-nav{gap:16px}.site-nav a{letter-spacing:.1em;font-size:11px}.header-resume{letter-spacing:.12em;padding:10px 16px}}@media (width<=900px){.site-header{--header-h:64px}.header-resume{display:none}.nav-resume{display:block}.site-nav{top:var(--header-h);background:var(--color-bg);border-bottom:1px solid var(--color-text);columns:2;padding:20px;display:none;position:absolute;left:0;right:0}.site-nav.is-open{grid-template-columns:1fr 1fr;display:grid}.site-nav a{padding:10px}.nav-toggle{display:block}}@media (width<=600px){.site-header{padding-inline:16px}.wordmark{gap:8px}.theme-switch{font-size:0}.theme-switch span{margin:0}}.section,.hero,.site-footer{z-index:1;width:min(var(--atlas-max), calc(100% - (var(--atlas-gutter) * 2)));margin-inline:auto;position:relative}.section{padding:var(--space-section) 0;scroll-margin-top:76px}.section+.section{border-top:1px solid var(--color-rule)}.section-heading{margin-bottom:var(--space-heading);position:relative}.section-eyebrow{margin:0 0 14px}.section-heading h2{font:700 var(--type-section)/.92 var(--display);letter-spacing:-.03em;text-transform:uppercase;text-wrap:balance;margin:0;scroll-margin-top:76px}.section-heading:after{content:attr(data-number);content:attr(data-number) / "";font:700 clamp(3.5rem, 9vw, 7rem)/.8 var(--display);color:var(--color-text);position:absolute;bottom:-.05em;right:0}@supports (color:color-mix(in lab, red, red)){.section-heading:after{color:color-mix(in srgb, var(--color-text) 9%, transparent)}}.section-heading:after{pointer-events:none}@media (width<=600px){.section,.hero,.site-footer{width:calc(100% - 32px)}.section{padding-block:64px}.section-heading{margin-bottom:40px}}.hero{min-height:min(100svh,940px);padding:calc(var(--header-h) + clamp(40px, 8vh, 96px)) 0 clamp(40px, 7vh, 80px);flex-direction:column;justify-content:center;display:flex}.hero-eyebrow{margin:0 0 20px}.hero-name{font:700 var(--type-hero)/.9 var(--display);letter-spacing:-.03em;text-transform:uppercase;text-wrap:balance;margin:0}.hero-statement{max-width:44ch;color:var(--color-muted);margin:clamp(20px,3vh,32px) 0 0;font-size:clamp(1.0625rem,1.6vw,1.3rem);line-height:1.55}.hero-actions{flex-wrap:wrap;align-items:center;gap:12px;margin-top:clamp(28px,4vh,40px);display:flex}.hero-actions .hero-link{color:var(--color-muted);transition:color var(--motion-fast) var(--ease-out);padding:8px 4px;font-size:14px;font-weight:500}.hero-actions .hero-link:hover{color:var(--color-strong)}.hero-facts{border-top:1px solid var(--color-rule);grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;max-width:760px;margin:clamp(48px,9vh,96px) 0 0;padding-top:20px;display:grid}.hero-facts dt{margin-bottom:6px}.hero-facts dd{margin:0;font-size:15px;line-height:1.5}@media (width<=600px){.hero{min-height:auto;padding:calc(var(--header-h) + 40px) 0 96px}.hero-facts{grid-template-columns:1fr;gap:16px}}.system-status{align-items:center;gap:8px;display:flex}.status-light{border:1px solid;border-radius:50%;width:8px;height:8px;display:inline-block}.status-light.online{background:currentColor}.status-light.unavailable{background:linear-gradient(45deg,#0000 45%,currentColor 45% 55%,#0000 55%);border-radius:1px}.action-primary,.action-secondary{border:1px solid var(--color-strong);background:var(--color-strong);color:var(--color-bg);font:600 12px/1 var(--body);letter-spacing:.16em;text-transform:uppercase;cursor:pointer;transition:background var(--motion-fast) var(--ease-out), color var(--motion-fast) var(--ease-out), border-color var(--motion-fast) var(--ease-out), transform var(--motion-fast) var(--ease-out);border-radius:999px;justify-content:center;align-items:center;gap:8px;padding:16px 28px;text-decoration:none;display:inline-flex}.action-primary:hover{background:var(--color-strong)}@supports (color:color-mix(in lab, red, red)){.action-primary:hover{background:color-mix(in srgb, var(--color-strong) 85%, var(--color-bg))}}.action-secondary{border-color:var(--color-rule-strong);color:var(--color-text);background:0 0}.action-secondary:hover{border-color:var(--color-strong);background:var(--color-surface-hover);color:var(--color-text)}.action-secondary:disabled{cursor:wait;opacity:.7}.projects-intro{max-width:52ch;color:var(--color-muted);margin:0 0 40px;line-height:1.7}.project-group-title{font:700 clamp(1.4rem, 2vw, 1.6rem)/1 var(--display);letter-spacing:.01em;text-transform:uppercase;margin:0 0 20px}.project-list{grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;margin:0 0 clamp(40px,6vw,64px);padding:0;list-style:none;display:grid}.project-list:last-child{margin-bottom:0}.project-card{border:1px solid var(--color-rule);background:var(--color-surface);height:100%;transition:border-color var(--motion-fast) var(--ease-out), transform var(--motion-fast) var(--ease-out);border-radius:16px;flex-direction:column;gap:12px;padding:clamp(20px,2.4vw,32px);display:flex}.project-card:hover{border-color:var(--color-muted)}.project-card:has(:focus-visible){border-color:var(--color-muted)}@supports (color:color-mix(in lab, red, red)){.project-card:hover{border-color:color-mix(in srgb, var(--color-muted) 55%, var(--color-rule))}.project-card:has(:focus-visible){border-color:color-mix(in srgb, var(--color-muted) 55%, var(--color-rule))}}.project-meta{margin:0}.project-card h4{font:700 clamp(1.75rem, 2.6vw, 2.25rem)/1 var(--display);letter-spacing:-.01em;margin:0}.project-summary,.project-proof{margin:0;line-height:1.6}.project-summary{color:var(--color-text)}.project-proof{border-top:1px solid var(--color-rule);color:var(--color-muted);padding-top:12px;font-size:15px}.project-tech{flex-wrap:wrap;gap:8px;margin:4px 0 0;padding:0;list-style:none;display:flex}.project-tech li{border:1px solid var(--color-rule-strong);color:var(--color-muted);font:500 11px/1 var(--body);letter-spacing:.12em;text-transform:uppercase;border-radius:999px;padding:8px 13px}.project-actions{flex-wrap:wrap;align-items:center;gap:12px 20px;margin-top:auto;padding-top:12px;display:flex}.project-actions .action-primary{padding:14px 24px;font-size:12px}.project-link,.text-link{color:var(--color-text);font:500 12px/1.4 var(--body);letter-spacing:.14em;text-transform:uppercase}@media (width<=900px){.project-list{grid-template-columns:1fr}}.experience-list article{border-top:1px solid var(--color-rule);grid-template-columns:25% 1fr;padding:28px 0 52px;display:grid}.experience-list aside{font:500 12px/1.5 var(--body);flex-direction:column;gap:14px;display:flex}.experience-list h3{max-width:28ch;font:700 var(--type-experience)/1 var(--display);letter-spacing:-.01em;text-wrap:balance;margin:0}.experience-list .role-scope{color:var(--color-muted);font:500 .55em/1.2 var(--body);letter-spacing:.02em;margin-top:6px;display:block}.experience-list .org{color:var(--color-text);margin:8px 0 14px;font-weight:600}.experience-list article>div>p,.experience-list li{max-width:75ch;line-height:1.65}.experience-list li{margin-block:10px}@media (width<=600px){.experience-list article{grid-template-columns:1fr;gap:24px}.experience-list aside{flex-direction:row;justify-content:space-between}}.skills-copy{max-width:56ch;color:var(--color-muted);margin:0 0 36px;line-height:1.7}.skill-groups{grid-template-columns:repeat(3,minmax(0,1fr));gap:32px 28px;display:grid}.skill-group{border-top:1px solid var(--color-rule);flex-direction:column;gap:14px;padding-top:16px;display:flex}.skill-group h3{font:700 clamp(1.4rem, 2vw, 1.6rem)/1 var(--display);letter-spacing:.01em;text-transform:uppercase;margin:0}.skill-group ul{flex-wrap:wrap;gap:8px;margin:0;padding:0;list-style:none;display:flex}.skill-chip{border:1px solid var(--color-rule-strong);color:var(--color-text);font:500 11px/1 var(--body);letter-spacing:.12em;text-transform:uppercase;cursor:pointer;transition:border-color var(--motion-fast) var(--ease-out), background var(--motion-fast) var(--ease-out);background:0 0;border-radius:999px;padding:8px 13px}.skill-chip:hover{border-color:var(--color-strong);background:var(--color-surface)}.skill-group-more{color:var(--color-muted);font:500 12px/1.4 var(--body);letter-spacing:.14em;text-transform:uppercase;text-underline-offset:.25em;cursor:pointer;background:0 0;border:0;align-self:flex-start;padding:4px 0;text-decoration:underline}.skill-group-more:hover{color:var(--color-strong)}@media (pointer:coarse){.skill-chip,.skill-group-more{min-height:44px}}@media (width<=1050px){.skill-groups{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=600px){.skill-groups{grid-template-columns:1fr}}.credential-layout{grid-template-columns:1fr 1.2fr;gap:10vw;display:grid}.credential-layout article h3{font:700 var(--type-credential)/1 var(--display);letter-spacing:-.01em;margin:0 0 25px}.credential-layout p{color:var(--color-muted);line-height:1.6}.thesis{border-top:1px solid var(--color-rule);margin-top:40px;padding-top:20px}.credential-layout ol{margin:0;padding:0;list-style:none}.credential-layout li{border-top:1px solid var(--color-rule);padding:22px 0;font-size:15px;line-height:1.45}.credential-layout li div{min-width:0}.credential-layout li small.credential-meta{color:var(--color-muted);font:600 12px var(--body);letter-spacing:0;text-transform:none;margin-top:7px;display:block}.credential-layout li small.credential-meta .credential-in-progress{color:var(--color-text);font-weight:600}@media (width<=900px){.credential-layout{grid-template-columns:1fr}}@media (width<=600px){.credential-layout{gap:60px}}.contact-section{padding-bottom:100px}.contact-block{justify-items:start;gap:28px;display:grid}.contact-email{max-width:100%;font:700 clamp(2rem, 7vw, 4.5rem)/1 var(--display);letter-spacing:-.01em;overflow-wrap:anywhere;text-decoration-thickness:2px}.contact-availability{align-items:center;gap:10px;margin:0;font-size:15px;line-height:1.5;display:flex}.contact-actions{flex-wrap:wrap;gap:12px;display:flex}.contact-copy-status{min-height:1.5em;margin:-12px 0 0}.contact-links{border-top:1px solid var(--color-rule);flex-wrap:wrap;gap:12px 28px;width:100%;margin:0;padding:24px 0 0;list-style:none;display:flex}@media (width<=600px){.contact-section{padding-bottom:64px}}.site-footer{border-top:1px solid var(--color-rule);grid-template-columns:1fr 1fr minmax(0,2fr);align-items:center;gap:12px 32px;padding:25px 0 35px;display:grid}.site-footer .footer-brand{color:var(--color-text);font:700 1.125rem/1 var(--display);letter-spacing:.04em}.site-footer p{margin:0}.site-footer p,.site-footer .system-status{letter-spacing:.14em}@media (width<=600px){.site-footer{grid-template-columns:1fr}}.inspection-dialog{overscroll-behavior:contain;background:var(--color-surface);width:min(1000px,100% - 32px);max-height:min(90dvh,940px);color:var(--color-text);box-shadow:var(--shadow-overlay);opacity:0;border:0;border-radius:16px;margin:auto;padding:0;position:fixed;inset:0;overflow:auto;transform:scale(.985)}.inspection-dialog[open]{animation:inspection-open .22s var(--ease-out) forwards}@keyframes inspection-open{to{opacity:1;transform:scale(1)}}.inspection-dialog::backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#000000b8}body:has(.inspection-dialog[open]){overflow:hidden}.inspection-dialog article{padding:clamp(25px,5vw,70px)}.inspection-dialog header{border-bottom:1px solid var(--color-text);grid-template-columns:1fr auto;align-items:start;padding-bottom:25px;display:grid}.inspection-dialog header p{grid-column:1}.inspection-dialog .dialog-status{color:var(--color-muted);grid-row:3}.inspection-dialog h2{font:700 var(--type-dialog)/.95 var(--display);letter-spacing:-.02em;text-transform:uppercase;margin:0}.inspection-dialog header button{cursor:pointer;background:0 0;border:0;grid-area:1/2/3}.dialog-lead{max-width:55ch;font-size:clamp(1.2rem,2vw,1.7rem);line-height:1.45}.dialog-architecture{border-top:1px solid var(--color-text);margin-top:clamp(45px,7vw,80px)}.dialog-section-heading{justify-content:space-between;align-items:baseline;gap:24px;padding:18px 0 28px;display:flex}.dialog-section-heading h3,.dialog-section-heading p{font:500 12px var(--body);color:var(--color-muted);margin:0}.architecture-figure{margin:0 0 58px}.architecture-figure figcaption{grid-template-columns:minmax(180px,.5fr) 1fr;align-items:baseline;gap:24px;margin-bottom:18px;display:grid}.architecture-figure h4{font:400 clamp(1.8rem, 4vw, 3rem)/1 var(--display);letter-spacing:-.025em;margin:0}.architecture-figure figcaption p{max-width:62ch;color:var(--color-muted);margin:0;font-size:12px;line-height:1.6}.architecture-diagram-frame{border:1px solid var(--color-sheet-rule);position:relative;overflow-x:auto}@supports (color:color-mix(in lab, red, red)){.architecture-diagram-frame{border:1px solid color-mix(in srgb, var(--color-sheet-rule) 55%, transparent)}}.architecture-diagram-frame{background:var(--color-sheet);color:var(--color-sheet-text);scrollbar-color:var(--color-sheet-rule) var(--color-sheet);box-shadow:inset 0 0 0 5px var(--color-sheet);padding:12px}.architecture-diagram-frame:before,.architecture-diagram-frame:after{z-index:1;color:var(--color-sheet-rule);font:500 12px var(--body);pointer-events:none;position:absolute}.architecture-diagram-frame:before{content:"ARCHITECTURE SHEET";top:8px;left:10px}.architecture-diagram-frame:after{content:"REPOSITORY-DERIVED";bottom:8px;right:10px}.architecture-diagram-frame img{width:100%;min-width:0;height:auto;padding:22px 10px;display:block}.architecture-summary{border-bottom:1px solid var(--color-rule);padding:14px 0}.architecture-summary summary{cursor:pointer;min-height:44px;font:500 12px var(--body);align-items:center;display:flex}.architecture-summary li{color:var(--color-muted);margin-block:10px;font-size:13px;line-height:1.6}.dialog-grid{grid-template-columns:1fr 1fr;gap:30px 60px;margin:50px 0;display:grid}.dialog-grid h3,.skill-inspection-list h3{font:500 12px var(--body);color:var(--color-strong)}.dialog-grid p,.dialog-grid li,.skill-inspection-list p{font-size:13px;line-height:1.6}.skill-inspection-list{border-top:1px solid var(--color-rule);grid-template-columns:1fr 1fr;margin:50px 0;display:grid}.skill-inspection-list section{border-bottom:1px solid var(--color-rule);padding:20px}.skill-inspection-list section.is-emphasized{background:var(--color-strong)}@supports (color:color-mix(in lab, red, red)){.skill-inspection-list section.is-emphasized{background:color-mix(in srgb, var(--color-strong) 10%, transparent)}}.skill-inspection-list section.is-emphasized{box-shadow:inset 3px 0 0 var(--color-strong)}.dialog-actions{flex-wrap:wrap;align-items:center;gap:26px;display:flex}.dialog-actions>a:not(.action-primary){color:var(--color-muted);font:500 12px var(--body)}@media (width<=600px){.inspection-dialog{width:calc(100% - 16px);max-height:calc(100dvh - 16px)}.inspection-dialog article{padding:24px 18px 36px}.inspection-dialog h2{font-size:clamp(2.6rem,14vw,4.5rem)}.dialog-section-heading{display:block}.dialog-section-heading p{margin-top:8px}.dialog-grid,.skill-inspection-list{grid-template-columns:1fr}.architecture-figure figcaption{grid-template-columns:1fr;gap:10px}.architecture-diagram-frame img{min-width:680px}}.portfolio-assistant{z-index:70;position:fixed;bottom:24px;right:24px}.portfolio-assistant-trigger{border:1px solid var(--color-text);background:var(--color-bg);box-shadow:0 8px 24px var(--color-text);border-radius:999px;padding:11px 15px}@supports (color:color-mix(in lab, red, red)){.portfolio-assistant-trigger{box-shadow:0 8px 24px color-mix(in srgb, var(--color-text) 14%, transparent)}}.portfolio-assistant-trigger{font:600 12px/1 var(--body);letter-spacing:.16em;text-transform:uppercase;cursor:pointer}.portfolio-assistant-trigger span{background:var(--color-strong);width:22px;height:22px;color:var(--color-bg);border-radius:50%;place-items:center;margin-right:10px;display:inline-grid}.portfolio-assistant-panel{background:var(--color-surface);border:1px solid var(--color-text);width:min(420px,100vw - 32px);height:min(650px,100vh - 130px);box-shadow:var(--shadow-overlay);grid-template-rows:auto 1fr auto;display:grid;position:absolute;bottom:55px;right:0}.portfolio-assistant-panel[hidden]{display:none}.portfolio-assistant-panel header{border-bottom:1px solid var(--color-rule);justify-content:space-between;padding:18px;display:flex}.portfolio-assistant-panel h2{font:700 2rem var(--display);letter-spacing:0;text-transform:uppercase;margin:3px 0}.portfolio-assistant-panel small{font:500 12px var(--body);color:var(--color-strong)}.portfolio-assistant-panel header button{cursor:pointer;background:0 0;border:0}.portfolio-assistant-panel .assistant-actions{align-items:flex-start;gap:10px;display:flex}.portfolio-assistant-panel .assistant-actions button{color:var(--color-muted);font:500 12px var(--body)}.portfolio-assistant-panel .assistant-actions button:hover,.portfolio-assistant-panel .assistant-actions button:focus-visible{color:var(--color-text);text-decoration:underline}.portfolio-assistant .assistant-subtitle{max-width:230px;color:var(--color-muted);margin:4px 0 0;font-size:11px;line-height:1.4}.portfolio-assistant .messages{padding:18px;overflow:auto}.portfolio-assistant .message{border-bottom:1px solid var(--color-rule);padding:12px 0}.portfolio-assistant .message .message-label{font:500 12px var(--body);color:var(--color-strong)}.portfolio-assistant .assistant-content,.portfolio-assistant .assistant-empty,.portfolio-assistant .messages>p{font-size:13px;line-height:1.55}.portfolio-assistant .assistant-content p{margin:8px 0 0}.portfolio-assistant .assistant-content p:first-child{margin-top:8px}.portfolio-assistant .assistant-content ul,.portfolio-assistant .assistant-content ol{margin:8px 0 0;padding-left:20px}.portfolio-assistant .assistant-content li{margin:5px 0;padding-left:3px}.portfolio-assistant .assistant-content strong{color:var(--color-text);font-weight:700}.portfolio-assistant .assistant-content code{border:1px solid var(--color-rule);font:500 .9em var(--body);color:var(--color-strong);padding:1px 4px}.portfolio-assistant .message.user{margin-left:15%}.portfolio-assistant .message.error{color:var(--color-text)}.portfolio-assistant .assistant-empty>p{margin-top:0}.portfolio-assistant .assistant-suggestions{flex-wrap:wrap;gap:7px;margin-top:14px;display:flex}.portfolio-assistant .assistant-suggestions button{border:1px solid var(--color-rule);color:var(--color-text);text-align:left;font:400 12px/1.35 var(--body);cursor:pointer;background:0 0;padding:8px 9px}.portfolio-assistant .assistant-suggestions button:hover,.portfolio-assistant .assistant-suggestions button:focus-visible{border-color:var(--color-strong);color:var(--color-strong)}.portfolio-assistant .assistant-loading{color:var(--color-muted);font-size:12px}.portfolio-assistant .message-sources{font:500 12px var(--body);margin-top:8px}.portfolio-assistant .message-source-group+.message-source-group{margin-top:8px}.portfolio-assistant .message-sources-label{color:var(--color-muted);text-transform:uppercase;display:block}.portfolio-assistant .message-sources ul{flex-wrap:wrap;gap:4px 8px;margin:3px 0 0;padding:0;list-style:none;display:flex}.portfolio-assistant .message-sources li{margin:0}.portfolio-assistant .message-sources .message-project-list li{flex-wrap:wrap;align-items:center;gap:0 8px;display:flex}.portfolio-assistant .message-sources a{min-height:32px;color:var(--color-strong);align-items:center;padding:4px 2px;text-decoration:none;display:inline-flex}.portfolio-assistant .message-sources a:hover,.portfolio-assistant .message-sources a:focus-visible{text-decoration:underline}.portfolio-assistant .message-sources .message-repository-link{color:var(--color-muted);font-size:10px}.portfolio-assistant .assistant-usage{color:var(--color-muted);font:400 12px var(--body);margin:8px 0 0}.portfolio-assistant-panel form{border-top:1px solid var(--color-rule);padding:16px}.portfolio-assistant-panel label{font:500 12px var(--body);margin-bottom:8px;display:block}.portfolio-assistant-panel form>div{grid-template-columns:1fr auto;display:grid}.portfolio-assistant-panel input{border:1px solid var(--color-text);background:0 0;min-width:0;padding:12px}.portfolio-assistant-panel form button{background:var(--color-text);color:var(--color-bg);border:0;padding:0 18px}.portfolio-assistant-panel form button:disabled{opacity:.45}@media (width<=600px){.portfolio-assistant{max-width:calc(100vw - 32px);bottom:16px;right:16px}.portfolio-assistant-trigger{padding:11px 14px}}.arrow{transition:transform var(--motion-fast) var(--ease-out);display:inline-block}.flow-trace{gap:24px;padding-bottom:40px;display:grid}.flow-trace-note{color:var(--color-muted);margin:0;font-size:13px;line-height:1.6}.flow-trace-label{font:500 11px/1.5 var(--body);letter-spacing:.22em;text-transform:uppercase;color:var(--color-muted);margin:0 0 12px}.flow-steps{flex-wrap:wrap;align-items:center;gap:10px 0;margin:0;padding:0;list-style:none;display:flex}.flow-steps li{border:1px solid var(--color-rule-strong);font:500 13px/1.2 var(--body);border-radius:999px;padding:8px 14px;position:relative}.flow-steps li+li{margin-left:28px}.flow-steps li+li:before{content:"";background:var(--color-rule-strong);transform-origin:0;width:28px;height:1px;position:absolute;top:50%;right:100%}@media (width<=600px){.flow-steps{flex-direction:column;align-items:flex-start;gap:0}.flow-steps li+li{margin:16px 0 0}.flow-steps li+li:before{transform-origin:top;width:1px;height:16px;inset:auto auto 100% 18px}}@media (prefers-reduced-motion:no-preference){.hero>*{animation:rise var(--motion-enter) var(--ease-out) backwards}.hero>:nth-child(2){animation-delay:80ms}.hero>:nth-child(3){animation-delay:.16s}.hero>:nth-child(4){animation-delay:.24s}.hero>:nth-child(5){animation-delay:.32s}@keyframes rise{0%{opacity:0;transform:translateY(16px)}}[data-reveal]{transition:opacity .48s var(--ease-out), transform .48s var(--ease-out)}.reveal-on [data-reveal]:not(.is-revealed){opacity:0;transform:translateY(10px)}.project-card:has(:focus-visible){transform:translateY(-3px)}.action-primary:active,.action-secondary:active{transform:translateY(1px)}:is(a,button):is(:hover,:focus-visible)>.arrow[data-dir=right]{transform:translate(3px)}:is(a,button):is(:hover,:focus-visible)>.arrow[data-dir=down]{transform:translateY(3px)}:is(a,button):is(:hover,:focus-visible)>.arrow[data-dir=out]{transform:translate(2px,-2px)}.site-nav a:after{transition:transform var(--motion-fast) var(--ease-out), opacity var(--motion-fast) var(--ease-out)}.theme-switch span{transition:transform var(--motion-medium) var(--ease-out)}:root[data-theme=dark] .theme-switch span{transform:rotate(180deg)}.inspection-dialog[open]::backdrop{animation:backdrop-in .22s var(--ease-out) both}@keyframes backdrop-in{0%{opacity:0}}.flow-steps li{animation:flow-step .3s var(--ease-out) backwards;animation-delay:calc(var(--i) * .7s / var(--n) + .1s)}.flow-steps li+li:before{animation:flow-connector .2s var(--ease-out) backwards;animation-delay:calc(var(--i) * .7s / var(--n))}@keyframes flow-step{0%{opacity:0;transform:translateY(6px)}}@keyframes flow-connector{0%{transform:scaleX(0)}}@media (width<=600px){.flow-steps li+li:before{animation-name:flow-connector-v}@keyframes flow-connector-v{0%{transform:scaleY(0)}}}}@media (hover:hover) and (prefers-reduced-motion:no-preference){.project-card:hover{transform:translateY(-3px)}}.print-resume{display:none}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}.inspection-dialog[open]{opacity:1;animation:none;transform:scale(1)}}@media print{body>:not(#root){display:none}#root>:not(.print-resume){display:none!important}.print-resume{color:#111;font:10pt Arial,sans-serif;display:block!important}.print-resume h1{font-size:20pt}.print-resume h2{border-bottom:1px solid #222;padding-bottom:3px;font-size:12pt}.print-resume h3{font-size:10pt}.print-resume p,.print-resume li{line-height:1.35}.print-resume section{break-inside:avoid}}.visitor-counter{overflow-wrap:anywhere;min-width:0}.visitor-counter button{margin:8px 8px 0 0}.visitor-counter button:disabled{opacity:.6;cursor:default}.visitor-button{border:1px solid var(--color-rule);color:var(--color-text);min-height:44px;font:500 12px/1.4 var(--body);cursor:pointer;background:0 0;padding:12px}.visitor-button:hover:not(:disabled){background:var(--color-surface-hover)}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}
