@font-face{font-family:jetbrains mono;src:url(../fonts/jetbrains-mono/variable-latin-2.211-6PdzNrw.woff2)format('woff2');font-weight:100 800;font-style:normal;font-display:swap}:root{color-scheme:light;--paper:#f1f2f1;--ink:#292c2b;--muted:#525852;--line:#d6d9d6;--badge:#e6e9e6;--accent:#a33f32;font-family:jetbrains mono,ui-monospace,sfmono-regular,Menlo,Consolas,liberation mono,monospace;font-synthesis:none}:root[data-theme=dark]{color-scheme:dark;--paper:#222420;--ink:#e4e6e1;--muted:#bbc0b8;--line:#484e43;--badge:#343a30;--accent:#f69c8b}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){color-scheme:dark;--paper:#222420;--ink:#e4e6e1;--muted:#bbc0b8;--line:#484e43;--badge:#343a30;--accent:#f69c8b}}*{box-sizing:border-box}body{margin:0;min-height:100svh;background:var(--paper);color:var(--ink);font-size:17px;line-height:1.55}a{color:inherit;text-decoration-thickness:1px;text-underline-offset:4px}button{font:inherit;cursor:pointer}a,button{-webkit-tap-highlight-color:transparent}a:hover{color:var(--accent)}:focus-visible{outline:2px solid var(--accent);outline-offset:5px}main:focus{outline:none}[hidden]{display:none!important}.site-column{position:relative;max-width:528px;margin-inline:auto;padding:clamp(54px,10vh,110px)24px 150px}.profile-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:58px}.portrait-link{display:block;line-height:0}.portrait-link img{object-fit:cover;border-radius:12px;filter:grayscale(1)}.profile-meta{text-align:right;font-size:14px;color:var(--muted);line-height:1.8}.language-links{display:flex;justify-content:flex-end;gap:12px}.language-links a{min-height:28px;display:inline-flex;align-items:center;text-decoration:none}.language-links [aria-current]{color:var(--ink);text-decoration:underline}h1{font:600 20px/1.5 jetbrains mono,ui-monospace,sfmono-regular,Menlo,Consolas,monospace;letter-spacing:-.025em;margin:0 0 22px}p{margin:0 0 22px;color:var(--muted)}h2{font-size:15px;font-weight:500;line-height:1.6;margin:0 0 14px}strong{font-weight:600;color:var(--ink)}.tech-badge{display:inline-flex;align-items:center;gap:5px;vertical-align:middle;white-space:nowrap;line-height:1.55;font-size:14px;letter-spacing:-.035em;padding:1px 6px;border:1px solid var(--line);border-radius:5px;background:var(--badge);color:var(--ink)}.tech-badge img{object-fit:contain;flex-shrink:0}.availability{border-top:1px solid var(--line);margin-top:36px;padding-top:24px}.availability h2{font-weight:550;margin-bottom:8px}.availability p{font-size:14px;margin-bottom:14px}.text-link{display:inline-flex;align-items:center;gap:9px;font-size:14px}.icon{width:18px;height:18px;flex-shrink:0}.home-notes{margin-top:46px}.home-notes h2{color:var(--ink)}.home-notes p{font-size:17px}.stack-group{margin-top:36px}.stack-group h2{display:flex;align-items:center;gap:14px;color:var(--muted);font-size:13px;letter-spacing:.035em}.stack-group h2:after{content:'';height:1px;background:var(--line);flex:1}.badge-list{display:flex;flex-wrap:wrap;gap:9px 7px;list-style:none;margin:0;padding:0}.stack-details{font-size:13px;margin:14px 0 0}.practice-list{padding-left:17px;color:var(--muted);font-size:15px}.practice-list li{margin-bottom:12px}.testing-tools{display:block;margin-top:6px}.skip-link{position:fixed;z-index:10;top:8px;left:8px;background:var(--paper);padding:8px;transform:translateY(-150%)}.skip-link:focus{transform:none}@media(max-width:520px){body{font-size:16px}.site-column{padding:42px max(24px,env(safe-area-inset-left))130px}.profile-header{margin-bottom:42px}h1{font-size:21px}}@media(prefers-reduced-motion:no-preference){::view-transition-old(root){animation:fade-out 100ms ease-out both}::view-transition-new(root){animation:fade-in 160ms ease-out both}@keyframes fade-out{to{opacity:0}}@keyframes fade-in{from{opacity:0;transform:translateY(3px)}to{opacity:1;transform:none}}}@media(forced-colors:active){.bottom-nav,.tech-badge{border:1px solid ButtonText}.home-link img{filter:none;background:#fff}.bottom-nav a[aria-current]{outline:1px solid Highlight}}.tech-badge img{background:#f1f2f1;border-radius:2px;padding:1px}.portfolio-page--home .site-column{padding-top:0;padding-bottom:0}.home-opening{min-height:100svh;display:flex;align-items:center;padding:72px 0 110px}.home-opening__content{width:100%}.home-opening .profile-header{margin-bottom:34px}.home-opening h1{font-size:20px;margin-bottom:20px}.home-opening p{margin-bottom:20px}.home-opening .availability{margin-top:28px;padding-top:22px}.home-opening .intro-copy>p:first-child strong{color:var(--accent)}.home-supplements{padding-top:72px}.home-supplements .home-notes:first-child{margin-top:0}.home-supplements h2{display:flex;align-items:center;gap:14px;font-size:13px;color:var(--muted);margin-bottom:26px}.home-supplements h2:after{content:'';height:1px;background:var(--line);flex:1}@media(max-width:520px){.home-opening{padding-top:40px;padding-bottom:104px}.home-opening .profile-header{margin-bottom:30px}.home-supplements{padding-top:48px}.home-notes p{font-size:16px}}.portfolio-page--home{font-size:18px;line-height:1.375;letter-spacing:-.025em}.portfolio-page--home .intro-copy p,.portfolio-page--home .home-notes p{font-size:inherit;line-height:inherit;margin-bottom:16px}@media(max-width:520px){.portfolio-page--home{font-size:17px}}.portfolio-page--home{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;letter-spacing:-.4px}.portfolio-page--home strong{font-weight:500}.portfolio-page--home .intro-copy p,.portfolio-page--home .home-notes p{text-align:justify}.approach-copy p{text-align:justify}.personal-notes{scroll-margin-top:40px}.personal-notes .home-notes{margin-top:44px}.personal-notes h2{font-style:italic;gap:12px}.personal-notes h2:before{content:'';height:1px;background:var(--line);flex:1}.personal-notes h2:after{flex:0 0 48px}.personal-link{font-weight:500;text-decoration-thickness:1.5px;text-underline-offset:5px;transition:color 180ms ease-out,text-underline-offset 180ms ease-out}.music-record{display:inline-block;position:relative;width:21px;height:21px;margin-right:8px;vertical-align:-4px;border-radius:50%;background:repeating-radial-gradient(circle,#34302e 0 1px,#181717 2px 3px);box-shadow:0 0 0 1px #151515}.music-record:before{content:'';position:absolute;inset:7px;border-radius:50%;background:#ee8d66}.music-record:after{content:'';position:absolute;inset:2px;border-radius:50%;background:conic-gradient(from 20deg,transparent 0 22%,#ffffff4a 26%,transparent 30% 70%,#ffffff30 76%,transparent 80%)}.personal-link:focus-visible{text-underline-offset:7px}@media(prefers-reduced-motion:no-preference){.music-record{animation:record-turn 5s linear infinite}@keyframes record-turn{to{transform:rotate(360deg)}}}.personal-link--spotify{text-decoration-style:double;text-decoration-color:#1db954;color:var(--ink)}.inline-brand{display:inline-block;vertical-align:-4px;object-fit:contain}.personal-link--spotify{display:inline;text-decoration-style:solid;text-decoration-thickness:1px}.availability-highlight{padding:3px 5px;background:#d8f7e7;color:#243d30;border-bottom:1px solid #83dfac;box-decoration-break:clone;-webkit-box-decoration-break:clone}.finder-panel{margin-top:24px;border:1px solid var(--line);border-radius:9px;background:var(--paper);overflow:hidden;box-shadow:0 3px 10px #242a2210}.finder-bar{display:flex;align-items:center;gap:7px;padding:9px 12px;background:var(--badge);border-bottom:1px solid var(--line);font-size:11px;letter-spacing:0;color:var(--muted)}.finder-bar svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.4}.finder-count{margin-left:auto;font-size:10px}.finder-files{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:16px 10px}.finder-file{display:flex;flex-direction:column;align-items:center;gap:7px;min-width:0;padding:8px 4px;border-radius:6px;text-decoration:none;color:var(--ink)}.finder-document{position:relative;display:block;width:43px;height:54px;border:1px solid #d5d3cd;border-radius:3px 10px 3px 3px;background:#fff;box-shadow:0 2px 3px #0000000d;color:#aa4b43}.finder-document:after{content:'';position:absolute;right:-1px;top:-1px;width:11px;height:11px;background:#efeee9;border-left:1px solid #d5d3cd;border-bottom:1px solid #d5d3cd;border-radius:0 9px 0 2px}.finder-extension{position:absolute;bottom:6px;left:-5px;font-size:10px;font-weight:600;line-height:1.5;letter-spacing:.6px;padding:0 5px;border-radius:2px;background:#f4dedb;color:#983c34}.finder-file--md .finder-extension{background:#e9e0f5;color:#735399}.finder-markdown{position:absolute;top:6px;left:10px;font-size:24px;color:#95849e}.finder-document-lines{position:absolute;inset:14px 8px 22px;background:repeating-linear-gradient(to bottom,#d4d2cc 0 1px,transparent 1px 5px)}.finder-filename{font-size:11px;line-height:1.4;letter-spacing:-.3px;text-align:center;overflow-wrap:anywhere;padding:2px 5px;border-radius:3px}.finder-caption{font-size:10px;line-height:1.4;color:var(--muted);text-align:center}.finder-file:not([data-pointer-focus]):focus-visible .finder-filename{background:#dce9fa;color:#244d7c}@media(hover:hover) and (pointer:fine){.finder-file:hover{background:var(--badge);color:var(--ink)}.finder-file:hover .finder-filename{background:#dce9fa;color:#244d7c}}[data-theme=dark] .availability-highlight{background:#244b37;color:#dcf8e6;border-color:#478a64}@media(hover:hover) and (pointer:fine){.personal-link:hover{text-underline-offset:7px;color:var(--ink)}}@media(prefers-reduced-motion:reduce){.personal-link{transition:none}}:root{--strong:#171a1c;--cursor-hover-color:#ff5c4d}:root[data-theme=dark]{--strong:#f1eee7}@media(prefers-color-scheme:dark){:root:not([data-theme=light]){--strong:#f1eee7}}.profile-city{display:block;font-size:16px;color:var(--ink)}.profile-clock{display:flex;justify-content:flex-end;align-items:center;gap:6px;font-size:12px;line-height:1.6;font-variant-numeric:tabular-nums}.profile-clock time{min-width:5ch}.approach-section{margin-top:32px}.approach-section h2{font-size:16px;font-weight:600;line-height:1.5;margin-bottom:16px;color:var(--ink)}.approach-section h2{display:flex;align-items:flex-start;gap:10px}.approach-section-icon{display:inline-flex;flex:0 0 24px;width:24px;height:24px;align-items:center;justify-content:center;color:var(--accent)}.approach-section-icon svg{width:20px;height:20px}.approach-copy strong{font-weight:600}.approach-highlight{padding:1px 2px;color:#18202a;box-decoration-break:clone;-webkit-box-decoration-break:clone}.approach-highlight--idea{background:#ffe16a}.approach-highlight--operation{background:#ffb56b}.approach-highlight--implementation{background:#81b6ff}.approach-selection{position:relative;display:inline-block;max-width:100%;padding:0 4px;margin:3px 2px;border:1px solid #438de0;color:#286fba;line-height:1.45;text-align:left;vertical-align:baseline}.approach-selection-handles{position:absolute;inset:-3px;pointer-events:none;background:linear-gradient(var(--paper),var(--paper))0 0/5px 5px no-repeat,linear-gradient(var(--paper),var(--paper))100% 0/5px 5px no-repeat,linear-gradient(var(--paper),var(--paper))0 100%/5px 5px no-repeat,linear-gradient(var(--paper),var(--paper))100% 100%/5px 5px no-repeat}.approach-selection-handles:before,.approach-selection-handles:after{content:'';position:absolute;top:0;bottom:0;width:5px;border-top:1px solid #438de0;border-bottom:1px solid #438de0;background:linear-gradient(#438de0,#438de0)0 0/1px 5px no-repeat,linear-gradient(#438de0,#438de0)100% 0/1px 5px no-repeat,linear-gradient(#438de0,#438de0)0 100%/1px 5px no-repeat,linear-gradient(#438de0,#438de0)100% 100%/1px 5px no-repeat}.approach-selection-handles:before{left:0}.approach-selection-handles:after{right:0}[data-theme=dark] .approach-selection{color:#85baff}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .approach-selection{color:#85baff}}@media(forced-colors:active){.approach-highlight{background:Mark;color:MarkText}.approach-selection{color:LinkText;border-color:LinkText}.approach-selection-handles{display:none}}.approach-circled{position:relative;display:inline-block;max-width:100%;padding:0 3px;margin-inline:2px;font-weight:400;vertical-align:baseline;text-align:left}.approach-circle-stroke{position:absolute;inset:-6px -7px;width:calc(100% + 14px);height:calc(100% + 12px);overflow:visible;pointer-events:none;fill:none;stroke:#9270b7;stroke-width:1.5;stroke-linecap:round;transform:rotate(-1deg)}[data-theme=dark] .approach-circle-stroke{stroke:#bea0df}@media(prefers-color-scheme:dark){:root:not([data-theme=light]) .approach-circle-stroke{stroke:#bea0df}}@media(forced-colors:active){.approach-circle-stroke{stroke:CanvasText}}.ai-copy p{text-align:justify}html[data-page=portfolio]{scrollbar-gutter:stable}html:not(.has-js) .profile-clock{display:none}html.has-js.has-dialog-support [data-personal-file]:not(.file-enhanced):not(:target){display:none}@media(prefers-reduced-motion:reduce){::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important}}[data-pointer-focus]:focus{outline:none}