@font-face{font-family:GeistSans;src:url(../media/Geist_Variable-s.p.2-i4fw5gbtlb7.woff2)format("woff2");font-display:swap;font-weight:100 900}@font-face{font-family:GeistSans Fallback;src:local(Arial);ascent-override:94.56%;descent-override:27.76%;line-gap-override:0.0%;size-adjust:106.28%}.geistsans_d5a4f12f-module__Ur3q_a__className{font-family:GeistSans,GeistSans Fallback}.geistsans_d5a4f12f-module__Ur3q_a__variable{--font-geist-sans:"GeistSans", "GeistSans Fallback"}
:root{--paper:#f3f3ee;--white:#fff;--ink:#111318;--muted:#5b616c;--line:#cbd0d7;--line-dark:#343842;--blue:#173fb7;--blue-dark:#0b287d;--blue-soft:#e3e9ff;--error:#a01919;--map-ink:#111318;--map-label:#111318;--panel:#fffffff5;--action-ink:#fff;--selection-ink:#fff;--max:1320px;--gutter:clamp(20px, 5vw, 72px)}*{box-sizing:border-box}html{scroll-behavior:smooth;background:var(--paper);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}body{background:var(--paper);min-width:320px;color:var(--ink);font-family:var(--font-geist-sans), sans-serif;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;margin:0;font-size:16px;line-height:1.5}button,input{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-underline-offset:4px}svg{display:block}::selection{background:var(--blue);color:var(--selection-ink)}::-webkit-scrollbar{width:10px}::-webkit-scrollbar-track{background:var(--paper)}::-webkit-scrollbar-thumb{background:color-mix(in srgb, var(--muted), transparent 45%);border:3px solid var(--paper)}:focus-visible{outline:2px solid var(--blue);outline-offset:4px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.theme-root{background:var(--paper);min-height:100vh;color:var(--ink);--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}.theme-root.mode-dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}.portfolio-page{isolation:isolate;background:var(--paper);min-height:100vh;position:relative;overflow:clip}.page-content{z-index:1;position:relative}.ambient-field{z-index:0;pointer-events:none;opacity:.58;position:absolute;inset:0;overflow:hidden}.ambient-field:before{content:"";background-image:linear-gradient(to right, var(--map-ink) 1px, transparent 1px), linear-gradient(to bottom, var(--map-ink) 1px, transparent 1px);opacity:.17;transform-origin:50%;background-size:54px 54px;position:absolute;inset:-24%;transform:rotate(-11deg)}.ambient-field:after{content:"";background:linear-gradient(120deg, transparent 0 14%, var(--paper) 57%, transparent 100%);opacity:.64;position:absolute;inset:0}.ambient-scramble{color:var(--map-ink);font-variant-numeric:tabular-nums;letter-spacing:.12em;opacity:.22;white-space:nowrap;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:clamp(12px,1.1vw,16px);line-height:1;position:absolute;top:22%;right:4%}.theme-root.mode-dark .ambient-field{opacity:.48}.site-header,.masthead,.section-intro,.experience-list,.contact-section,.site-footer{width:min(var(--max), calc(100% - (var(--gutter) * 2)));background:var(--white);margin:0 auto}.site-header{z-index:3;border-bottom:1px solid var(--line);grid-template-columns:1fr auto 1fr;align-items:start;gap:28px;min-height:112px;padding-bottom:39px;display:grid;position:relative}.brand{letter-spacing:-.02em;align-items:center;gap:10px;width:max-content;padding-top:24px;font-weight:680;text-decoration:none;display:inline-flex}.brand svg{width:29px;height:29px;color:var(--blue)}.site-header nav{gap:25px;padding-top:28px;display:flex}.site-header nav a,.header-contact{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-size:11px;font-weight:680;text-decoration:none;transition:color .2s}.site-header nav a:hover,.header-contact:hover{color:var(--blue)}.header-contact{justify-self:end;align-items:center;gap:6px;padding-top:28px;display:inline-flex}.header-contact svg{width:16px;height:16px}.theme-controls{color:var(--muted);align-items:center;gap:10px;font-size:10px;display:flex;position:absolute;bottom:9px;right:0}.theme-picker{align-items:center;gap:5px;display:flex}.theme-control-label{letter-spacing:.12em;text-transform:uppercase;margin-right:3px;font-size:9px;font-weight:720}.theme-chip,.mode-toggle{border:1px solid var(--line);background:var(--white);min-height:27px;color:var(--muted);cursor:pointer;border-radius:999px;align-items:center;gap:6px;font-size:10px;transition:color .2s,border-color .2s,background-color .2s;display:inline-flex}.theme-chip{padding:0 8px 0 5px}.theme-chip>span:first-child{border-radius:50%;width:10px;height:10px}.theme-chip:hover,.theme-chip.is-selected,.mode-toggle:hover{border-color:var(--blue);color:var(--blue)}.mode-toggle{padding:0 10px}.mode-dot{border:1px solid;border-radius:50%;width:7px;height:7px}.mode-toggle[aria-pressed=true] .mode-dot{background:currentColor}.masthead{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1.25fr) minmax(350px,.75fr);align-items:stretch;gap:clamp(52px,8vw,120px);min-height:475px;padding:58px 54px 62px;display:grid}.masthead-copy{flex-direction:column;justify-content:center;max-width:780px;display:flex}.hero-name-row{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;flex-wrap:wrap;align-items:baseline;gap:11px 18px;font-size:11px;font-weight:680;display:flex}.hero-name{color:var(--blue)}.masthead h1{letter-spacing:-.06em;text-wrap:balance;max-width:770px;margin:17px 0 0;font-size:clamp(3.35rem,6vw,6rem);font-weight:620;line-height:.9}.masthead-lead{max-width:58ch;color:var(--muted);margin:26px 0 0;font-size:clamp(17px,1.45vw,20px);line-height:1.5}.identity-line{color:var(--ink);letter-spacing:.06em;text-transform:uppercase;flex-wrap:wrap;gap:0;margin-top:25px;font-size:10px;font-weight:720;display:flex}.identity-line span{align-items:center;display:inline-flex}.identity-line span+span:before{content:"";background:var(--blue);width:16px;height:1px;margin:0 10px}.masthead-actions,.contact-actions{flex-wrap:wrap;align-items:center;gap:22px;margin-top:31px;display:flex}.action{border:1px solid var(--ink);border-radius:2px;justify-content:center;align-items:center;gap:9px;min-height:42px;padding:0 14px;font-size:12px;font-weight:680;text-decoration:none;transition:background-color .2s,color .2s,border-color .2s;display:inline-flex}.action svg,.text-link svg{width:17px;height:17px}.action-primary{background:var(--blue);border-color:var(--blue);color:var(--action-ink)}.action-primary:hover{background:var(--blue-dark);border-color:var(--blue-dark)}.text-link{align-items:center;gap:7px;font-size:12px;font-weight:680;display:inline-flex}.text-link:hover{color:var(--blue)}.hero-index{border-top:1px solid var(--ink);border-bottom:1px solid var(--ink);align-self:stretch;padding:18px 0 0}.hero-index-header{justify-content:space-between;align-items:start;gap:20px;display:flex}.hero-index-label{color:var(--blue);letter-spacing:.12em;text-transform:uppercase;font-size:9px;font-weight:720}.hero-index h2{letter-spacing:-.05em;margin:10px 0 0;font-size:clamp(28px,3vw,40px);font-weight:620;line-height:.94}.hero-index-status{color:var(--muted);letter-spacing:.1em;text-transform:uppercase;font-size:9px;font-weight:700}.hero-current-record{border-top:1px solid var(--line);border-bottom:1px solid var(--line);margin-top:29px;padding:12px 0 17px}.hero-current-record span{color:var(--muted);letter-spacing:.11em;text-transform:uppercase;font-size:9px;font-weight:720}.hero-current-record strong{letter-spacing:-.03em;margin-top:8px;font-size:19px;font-weight:650;display:block}.hero-current-record p{color:var(--muted);margin:3px 0 0;font-size:11px}.hero-system-groups{grid-template-columns:1fr 1fr;gap:0 22px;display:grid}.hero-system-group{border-bottom:1px solid var(--line);min-width:0;padding:14px 0 15px}.hero-system-group:nth-last-child(-n+2){border-bottom:0}.hero-system-group h3{letter-spacing:.09em;text-transform:uppercase;margin:0 0 9px;font-size:9px;font-weight:720}.hero-tech-list{flex-wrap:wrap;gap:4px;display:flex}.tech-tag{--tech-color:var(--muted);border:1px solid color-mix(in srgb, var(--tech-color), var(--line) 42%);background:color-mix(in srgb, var(--tech-color), transparent 94%);min-height:27px;color:var(--ink);white-space:nowrap;align-items:center;gap:7px;padding:4px 8px 4px 6px;font-size:9px;line-height:1;display:inline-flex}.tech-language{--tech-color:#7752a6}.tech-framework{--tech-color:#2c6ea7}.tech-cloud{--tech-color:#357a59}.tech-data{--tech-color:#b26a1b}.tech-tool{--tech-color:#76566f}.tech-mark{width:20px;height:20px;color:var(--tech-color);letter-spacing:-.04em;place-items:center;font-size:9px;font-weight:800;display:inline-grid}.tech-mark svg{width:20px;height:20px}.tech-mark>span{display:block;transform:scale(.88)}.theme-root.mode-dark .tech-language{--tech-color:#c5a5f0}.theme-root.mode-dark .tech-framework{--tech-color:#91c5f0}.theme-root.mode-dark .tech-cloud{--tech-color:#9ad3b1}.theme-root.mode-dark .tech-data{--tech-color:#e5ae63}.theme-root.mode-dark .tech-tool{--tech-color:#d4a8ca}.work-section{padding:39px 0 78px}.section-intro{border-top:1px solid var(--ink);border-bottom:1px solid var(--line);padding:17px clamp(20px,4vw,54px) 23px;display:block}.section-intro h2{letter-spacing:-.06em;margin:0;font-size:clamp(2.6rem,4.5vw,4.8rem);font-weight:620;line-height:.92}.experience-list{border-bottom:1px solid var(--line);padding-inline:clamp(20px,4vw,54px)}.experience-item{grid-template-columns:20px minmax(0,1fr);gap:clamp(20px,3.3vw,48px);scroll-margin-top:24px;display:grid}.experience-item>*{min-width:0}.experience-item+.experience-item{border-top:1px solid var(--line)}.experience-marker{background:var(--blue);justify-self:center;width:1px;position:relative}.experience-marker span{border:2px solid var(--blue);background:var(--white);width:10px;height:10px;position:absolute;top:28px;left:50%;transform:translate(-50%)}.experience-marker .marker-active{background:var(--blue)}.experience-content{min-width:0;padding:24px 0 31px}.experience-title{grid-template-columns:minmax(0,1fr) max-content;align-items:baseline;gap:8px 24px;min-width:0;display:grid}.experience-title h3,.experience-details p,.experience-details span{overflow-wrap:anywhere;min-width:0}.experience-title h3{letter-spacing:-.05em;align-items:center;gap:13px;min-width:0;margin:0;font-size:clamp(24px,2.7vw,36px);font-weight:620;line-height:.98;display:flex}.company-logo{width:44px;height:44px;color:var(--blue);letter-spacing:-.08em;background:0 0;flex:none;place-items:center;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:11px;font-weight:800;display:grid}.company-logo img{object-fit:contain;width:28px;height:28px}.experience-date{min-width:0;color:var(--muted);text-align:right;font-variant-numeric:tabular-nums;overflow-wrap:anywhere;font-size:10px;line-height:1.35}.experience-details{flex-wrap:wrap;align-items:baseline;gap:5px 18px;margin-top:10px;font-size:11px;font-weight:700;display:flex}.experience-details p{color:var(--blue);margin:0}.experience-details span{color:var(--muted);font-weight:500}.experience-content ul{max-width:72ch;margin:19px 0 0;padding:0;list-style:none}.experience-content li{color:var(--ink);overflow-wrap:anywhere;padding-left:20px;font-size:15px;line-height:1.6;position:relative}.experience-content li+li{margin-top:7px}.experience-content li:before{content:"";background:var(--blue);width:9px;height:2px;position:absolute;top:.74em;left:0}.stack-list{flex-wrap:wrap;gap:5px;margin-top:21px;display:flex}.contact-section{border-top:1px solid var(--ink);grid-template-columns:minmax(240px,.7fr) minmax(0,1.3fr);gap:clamp(40px,10vw,180px);padding:55px clamp(20px,4vw,54px) 64px;display:grid}.education-note{border-top:1px solid var(--line);padding-top:4px}.education-note>span{color:var(--blue);letter-spacing:.12em;text-transform:uppercase;margin:12px 0 15px;font-size:9px;font-weight:720;display:block}.education-note h2{letter-spacing:-.04em;margin:0;font-size:22px;font-weight:620;line-height:1}.education-note p{color:var(--muted);margin:8px 0 0;font-size:12px;line-height:1.45}.contact-copy{max-width:760px}.contact-copy h2{letter-spacing:-.06em;max-width:740px;margin:0;font-size:clamp(2.7rem,4.5vw,4.8rem);font-weight:620;line-height:.92}.contact-copy>p{color:var(--muted);margin:20px 0 0;font-size:16px}.site-footer{min-height:76px;padding:0 var(--gutter);border-top:1px solid var(--line);color:var(--muted);grid-template-columns:1fr auto 1fr;align-items:center;gap:20px;font-size:10px;display:grid}.site-footer a{justify-self:end;align-items:center;gap:6px;text-decoration:none;display:inline-flex}.site-footer a:hover{color:var(--blue)}.site-footer svg{width:14px;height:14px}.chat-trigger{z-index:30;border:1px solid var(--blue);background:var(--blue);min-height:48px;color:var(--action-ink);cursor:pointer;align-items:center;gap:9px;padding:0 15px;font-size:11px;font-weight:720;display:inline-flex;position:fixed;bottom:24px;right:24px;box-shadow:0 14px 36px #00000029}.chat-trigger svg{width:21px;height:21px}.chat-trigger.is-open{background:var(--white);color:var(--blue)}.chat-popover{z-index:29;background:var(--white);border:1px solid var(--ink);width:min(500px,100vw - 32px);min-width:0;height:600px;position:fixed;bottom:84px;right:24px;overflow:hidden;box-shadow:0 24px 76px #00000040}.chat-close{z-index:2;color:var(--muted);cursor:pointer;text-transform:uppercase;background:0 0;border:0;font-size:10px;position:absolute;top:13px;right:14px}.chat-popover .agent-panel{background:0 0;border:0;min-width:0;height:100%;max-height:none;margin:0}.chat-popover .agent-header{padding-right:75px}.chat-popover .agent-transcript{min-height:0;overflow-x:hidden}.agent-panel{background:var(--panel);border:1px solid var(--ink);grid-template-rows:auto minmax(180px,1fr) auto auto auto;height:470px;max-height:470px;margin-top:46px;display:grid;overflow:hidden}.agent-header{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;min-height:70px;padding:15px 16px;display:flex}.agent-header h2{letter-spacing:-.025em;margin:0;font-size:17px;line-height:1.1}.agent-header p{color:var(--muted);margin:5px 0 0;font-size:10px}.agent-status{color:var(--muted);align-items:center;gap:6px;font-size:10px;display:flex}.agent-status span{background:var(--blue);border-radius:50%;width:6px;height:6px}.agent-transcript{overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:var(--line) transparent;min-width:0;padding:21px 20px;overflow:hidden auto}.agent-message{overflow-wrap:anywhere;min-width:0;max-width:94%;margin-bottom:18px}.agent-message-user{background:var(--blue-soft);border-radius:5px 5px 1px;margin-left:auto;padding:10px 11px}.agent-role{color:var(--blue);letter-spacing:.08em;text-transform:uppercase;margin-bottom:6px;font-size:9px;font-weight:720;display:block}.agent-tool-indicator{color:var(--blue);letter-spacing:.01em;align-items:center;gap:7px;margin:0 0 8px;font-size:11px;font-weight:680;display:inline-flex}.agent-tool-dot{border:1px solid;border-radius:50%;width:7px;height:7px}.agent-tool-indicator[data-active=true] .agent-tool-dot{background:currentColor;animation:1s ease-in-out infinite tool-pulse}.agent-message p{color:var(--ink);margin:0;font-size:15px;line-height:1.55}.agent-message-user .agent-role{color:var(--blue-dark)}.agent-related-record{border:1px solid var(--line);background:color-mix(in srgb, var(--blue-soft), transparent 38%);min-width:0;margin-top:15px;padding:12px}.agent-related-label{color:var(--blue);letter-spacing:.1em;text-transform:uppercase;margin-bottom:9px;font-size:9px;font-weight:720;display:block}.agent-related-link{border:1px solid var(--line-dark);background:var(--white);min-width:0;max-width:100%;color:var(--ink);border-radius:999px;flex-wrap:wrap;align-items:center;gap:5px 9px;padding:8px 12px;font-size:11px;line-height:1.25;text-decoration:none;display:inline-flex}.agent-related-link strong{color:var(--ink);font-size:12px}.agent-related-link span{color:var(--muted)}.agent-related-link time{color:var(--muted);font-variant-numeric:tabular-nums;font-size:10px}.agent-related-link:hover{border-color:var(--blue);color:var(--blue)}.agent-inline-link{border:1px solid var(--line);max-width:100%;color:var(--blue);overflow-wrap:anywhere;border-radius:999px;align-items:center;padding:1px 7px;text-decoration:none;display:inline-flex}.agent-inline-link:hover{border-color:var(--blue);background:var(--blue-soft)}.agent-message-assistant strong{font-weight:720}.agent-citations{gap:5px;min-width:0;margin-top:10px;display:grid}.agent-citation{border:1px solid var(--line);min-width:0;color:var(--muted);overflow-wrap:anywhere;flex-direction:column;padding:8px 9px;font-size:10px;text-decoration:none;display:flex}.agent-citation:hover{border-color:var(--blue);color:var(--blue)}.agent-citations strong{color:var(--ink);font-size:10px}.agent-suggestions{flex-wrap:wrap;gap:6px;min-width:0;padding:0 20px 14px;display:flex;overflow-x:hidden}.agent-suggestions button{border:1px solid var(--line);max-width:100%;color:var(--muted);text-align:left;white-space:normal;cursor:pointer;background:0 0;border-radius:999px;flex:0 auto;padding:7px 9px;font-size:10px;line-height:1.25}.agent-suggestions button:hover{border-color:var(--blue);color:var(--blue);background:var(--blue-soft)}.agent-suggestions button:disabled{opacity:.45;cursor:not-allowed}.agent-form{border:1px solid var(--line-dark);background:var(--white);grid-template-columns:1fr 36px;align-items:center;gap:6px;min-height:47px;margin:0 11px 11px;padding:4px;display:grid}.agent-form:focus-within{border-color:var(--blue);box-shadow:0 0 0 3px color-mix(in srgb, var(--blue), transparent 82%)}.agent-form input{width:100%;min-width:0;height:36px;color:var(--ink);caret-color:var(--blue);background:0 0;border:0;outline:0;padding:0 8px;font-size:12px}.agent-form input::placeholder{color:var(--muted);opacity:1}.agent-form button{background:var(--blue);width:34px;height:34px;color:var(--action-ink);cursor:pointer;border:0;border-radius:2px;place-items:center;display:grid}.agent-form button:hover{background:var(--blue-dark)}.agent-form button:disabled{background:var(--line);cursor:not-allowed}.agent-form button svg{width:19px;height:19px}.agent-loading{border:2px solid color-mix(in srgb, var(--action-ink), transparent 55%);border-top-color:var(--action-ink);border-radius:50%;width:14px;height:14px;animation:.75s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@keyframes tool-pulse{50%{opacity:.35;transform:scale(.72)}}.agent-error{color:var(--error);margin:-2px 16px 11px;font-size:10px}.not-found{background:var(--paper);flex-direction:column;justify-content:center;align-items:flex-start;min-height:100vh;padding:48px;display:flex}.not-found h1{letter-spacing:-.04em;max-width:740px;margin:0;font-size:clamp(3rem,7vw,6rem);line-height:.95}@media (max-width:1060px){.site-header{grid-template-columns:1fr auto}.site-header nav{display:none}.masthead{grid-template-columns:1fr minmax(290px,.72fr);gap:48px;padding-left:36px;padding-right:36px}.hero-system-groups{grid-template-columns:1fr}.hero-system-group:nth-last-child(-n+2){border-bottom:1px solid var(--line)}.hero-system-group:last-child{border-bottom:0}}@media (max-width:760px){.site-header,.masthead,.section-intro,.experience-list,.contact-section,.site-footer{width:min(100% - 32px, var(--max))}.site-header{min-height:121px;padding-bottom:43px}.brand{padding-top:20px}.header-contact{padding-top:23px;font-size:10px}.theme-controls{max-width:100%;bottom:9px;left:0;right:auto;overflow-x:auto}.theme-control-label,.theme-chip-name{display:none}.theme-chip{justify-content:center;width:25px;padding:0}.masthead{min-height:auto;padding:46px 20px 44px;display:block}.masthead h1{font-size:clamp(3.25rem,15vw,5.3rem)}.masthead-lead{margin-top:24px;font-size:17px}.identity-line{gap:8px;display:grid}.identity-line span+span:before{width:12px;margin:0 8px 0 0}.masthead-actions{margin-top:27px}.hero-index{margin-top:52px;padding-top:15px}.hero-index h2{font-size:32px}.hero-index-status{font-size:8px}.hero-system-groups{grid-template-columns:1fr 1fr;gap:0 16px}.hero-system-group:nth-last-child(-n+2){border-bottom:0}.hero-system-group:nth-child(odd),.hero-system-group:nth-child(2n){border-bottom:1px solid var(--line)}.work-section{padding:23px 0 58px}.section-intro{padding-top:14px;display:block}.section-intro h2{font-size:clamp(2.8rem,13vw,4.4rem)}.section-intro p{margin-top:20px;font-size:14px}.experience-item{grid-template-columns:18px minmax(0,1fr);gap:15px}.experience-marker{grid-area:1/1/3}.experience-content{grid-area:2/2;padding:14px 0 29px}.experience-marker span{top:27px}.experience-title{grid-template-columns:minmax(0,1fr);gap:7px}.experience-date{text-align:left}.experience-details{margin-top:8px}.experience-content li{font-size:14px}.company-logo{width:38px;height:38px}.company-logo img{width:24px;height:24px}.contact-section{padding:46px 20px 54px;display:block}.education-note{margin-bottom:47px}.contact-copy h2{font-size:clamp(2.8rem,13vw,4.4rem)}.site-footer{grid-template-columns:1fr;gap:9px;min-height:128px;padding:24px 0}.site-footer a{justify-self:start}.chat-trigger{justify-content:center;width:48px;padding:0;bottom:13px;right:13px}.chat-trigger span{display:none}.chat-popover{width:calc(100vw - 26px);height:min(600px,100vh - 95px);bottom:72px;right:13px}.ambient-scramble{font-size:11px;top:18%;left:20px;right:auto}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}
