@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-vietnamese-wght-normal.CtlIRbEm.woff2) format("woff2-variations");unicode-range:U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-latin-ext-wght-normal.MQgHevqp.woff2) format("woff2-variations");unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Public Sans Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/_astro/public-sans-latin-wght-normal.DdeTHZLK.woff2) format("woff2-variations");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/manrope-latin-500-normal.BYYD-dBL.woff2) format("woff2"),url(/_astro/manrope-latin-500-normal.DMZssgOp.woff) format("woff")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/manrope-latin-600-normal.4f0koTD-.woff2) format("woff2"),url(/_astro/manrope-latin-600-normal.BqgrALkZ.woff) format("woff")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/manrope-latin-700-normal.BZp_XxE4.woff2) format("woff2"),url(/_astro/manrope-latin-700-normal.DGRFkw-m.woff) format("woff")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/manrope-latin-ext-500-normal.dm74KBQw.woff2) format("woff2"),url(/_astro/manrope-latin-ext-500-normal.EtoS1VaI.woff) format("woff")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/manrope-latin-ext-600-normal._gBojHdJ.woff2) format("woff2"),url(/_astro/manrope-latin-ext-600-normal.u5Pl7hTU.woff) format("woff")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/manrope-latin-ext-700-normal.DYOwVNan.woff2) format("woff2"),url(/_astro/manrope-latin-ext-700-normal.eVCcYqtJ.woff) format("woff")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:500;src:url(/_astro/manrope-cyrillic-500-normal.B1OEZity.woff2) format("woff2"),url(/_astro/manrope-cyrillic-500-normal.CNwnNrRC.woff) format("woff")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:600;src:url(/_astro/manrope-cyrillic-600-normal.DvRl3Mj-.woff2) format("woff2"),url(/_astro/manrope-cyrillic-600-normal.It4mZcQk.woff) format("woff")}@font-face{font-family:Manrope;font-style:normal;font-display:swap;font-weight:700;src:url(/_astro/manrope-cyrillic-700-normal.Dw_fZAg2.woff2) format("woff2"),url(/_astro/manrope-cyrillic-700-normal.7JNVKxyl.woff) format("woff")}:root{color-scheme:light;--bg: #fafafa;--surface: rgba(250, 250, 250, .88);--surface-strong: #f5f5f5;--text: #0f1115;--text-muted: #54575c;--border: rgba(0, 0, 0, .1);--border-strong: rgba(0, 0, 0, .18);--accent: #0070f3;--accent-gradient-button: linear-gradient(0deg, #1b73ee 0%, #2e8eff 100%);--accent-gradient-pill: linear-gradient(0deg, #2278ef 0%, #3a95ff 100%);--accent-soft: rgba(0, 112, 243, .1);--shadow: 0 14px 32px rgba(0, 0, 0, .06);--hover-bg: rgba(0, 112, 243, .08);--hover-border: rgba(0, 112, 243, .25);--font-sans: "Public Sans Variable", "Manrope", system-ui, sans-serif;--font-display: "Manrope", "Public Sans Variable", system-ui, sans-serif;--text-xl: clamp(3rem, 3.8vw, 4.1rem);--text-lg: clamp(1.7rem, 2.1vw, 2.15rem);--page-width: 1280px;--page-gutter: 128px;--radius-lg: 28px;--radius-md: 18px;--radius-sm: 12px;--transition: .18s ease-out}*{box-sizing:border-box}html{background:linear-gradient(180deg,#fff,#f8f9fa);overflow-x:clip}body{margin:0;min-width:320px;min-height:100vh;max-width:100%;overflow-x:clip;font-family:var(--font-sans);color:var(--text)}::selection{background:#0070f340}a{color:inherit;text-decoration:none;-webkit-tap-highlight-color:rgba(0,112,243,.1)}img{display:block;max-width:100%}button,input,textarea,select{font:inherit;-webkit-tap-highlight-color:rgba(0,112,243,.1)}.content-section p a{text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:#0070f366;text-underline-offset:2px;transition:text-decoration-color var(--transition)}.content-section p a:hover,.content-section p a:focus-visible{text-decoration-color:currentColor}.shell{width:min(calc(100% - 128px),var(--page-width));margin:0 auto;padding:36px 0}.page{display:grid;grid-template-columns:minmax(360px,420px) minmax(0,1fr);gap:128px;align-items:start}.sidebar,.content{background:transparent}.sidebar{position:sticky;top:36px;display:flex;flex-direction:column;max-height:calc(100vh - 72px);padding:38px 24px 30px 0}.content{max-width:820px;width:100%;padding:48px 0 64px 20px;justify-self:start}.sidebar__intro h1,.sidebar__identity-name,.section-heading,.project-card h3,.experience-item h3{letter-spacing:-.03em;font-family:var(--font-display);font-weight:600}.sidebar__intro h1,.sidebar__identity-name{margin:0;font-size:var(--text-xl);line-height:.96;max-width:none;color:var(--text)}@media(min-width:721px){.sidebar__intro h1,.sidebar__identity-name{white-space:nowrap}}.sidebar__identity{display:flex;align-items:flex-start;gap:5px}.sidebar__brand-mark{width:calc(3rem - 2px);height:calc(3rem - 2px);flex:0 0 calc(3rem - 2px);user-select:none;-webkit-user-drag:none}.sidebar__role{margin:10px 0 0;color:var(--text);font-size:1.28rem;font-weight:500;line-height:1.35;font-family:var(--font-sans)}.sidebar__summary,.intro-copy,.section-copy,.project-card p,.experience-item p:not(.experience-item__meta){margin:0;color:var(--text-muted);font-size:.96rem;line-height:1.68}.sidebar__summary{margin-top:16px;max-width:28ch;font-size:.96rem;line-height:1.62}.experience-item__meta{font-size:.68rem;letter-spacing:.01em}.sidebar__links,.sidebar__utility,.sidebar__nav ul{margin:0;padding:0;list-style:none}.sidebar__links{display:grid;gap:14px;margin-top:0}.sidebar__links li{margin:0;padding:0;list-style:none}.sidebar__links a,.sidebar__nav a{transition:color var(--transition),border-color var(--transition),background-color var(--transition),transform var(--transition)}.sidebar__links a{display:flex;align-items:center;justify-content:flex-start;gap:.62em;width:100%;padding:0;color:var(--text);font-size:.96rem;font-weight:500;line-height:1.4}.sidebar__link-button{display:flex;align-items:center;justify-content:flex-start;gap:.62em;width:100%;padding:0;border:0;background:transparent;color:var(--text);font-size:.96rem;font-weight:500;line-height:1.4;text-align:left;cursor:pointer}.sidebar__link-label{display:inline-flex;align-items:center;text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:transparent;text-underline-offset:2px;transition:text-decoration-color var(--transition)}.sidebar__link-icon{display:inline-flex;align-items:center;justify-content:center;width:1.18em;height:1.18em;flex:0 0 1.18em;color:var(--text-muted);transform:translateY(.02em);transition:color var(--transition)}.sidebar__link-icon svg{width:100%;height:100%;transition:transform var(--transition)}.sidebar__utility-link--back:hover .sidebar__link-icon svg,.sidebar__utility-link--back:focus-visible .sidebar__link-icon svg{transform:translate(-2px)}.sidebar__links a:hover,.sidebar__links a:focus-visible,.sidebar__link-button:hover,.sidebar__link-button:focus-visible{color:var(--text)}.sidebar__links a:hover .sidebar__link-label,.sidebar__links a:focus-visible .sidebar__link-label,.sidebar__link-button:hover .sidebar__link-label,.sidebar__link-button:focus-visible .sidebar__link-label{text-decoration-color:currentColor}.sidebar__links a:hover .sidebar__link-icon,.sidebar__links a:focus-visible .sidebar__link-icon,.sidebar__link-button:hover .sidebar__link-icon,.sidebar__link-button:focus-visible .sidebar__link-icon{color:var(--text)}.email-dialog{width:min(100% - 32px,22rem);padding:0;border:0;outline:0;border-radius:18px;background:#fff;box-shadow:0 18px 40px #0f11151a;overflow:hidden;color:var(--text)}.email-dialog::backdrop{background:#0f111538;backdrop-filter:blur(6px)}.email-dialog[open]{display:grid;gap:12px;padding:14px;justify-items:center;position:relative}.email-dialog__close,.email-dialog__copy,.email-dialog__action{border:1px solid var(--border);background:#fff;color:var(--text);appearance:none;-webkit-appearance:none;background-clip:padding-box;-webkit-tap-highlight-color:transparent;transition:border-color var(--transition),background-color var(--transition),color var(--transition)}.email-dialog__close{justify-self:end;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:0;background:transparent;color:var(--text-muted);border-radius:999px;cursor:pointer;margin:0;user-select:none;-webkit-user-select:none}.email-dialog__close span{display:inline-block;font-size:1.7rem;line-height:1;transform:rotate(45deg);user-select:none;-webkit-user-select:none}.email-dialog__address-row{display:flex;align-items:center;gap:6px;width:100%;padding:8px;border:1px solid var(--border);border-radius:12px;background:#f7f7f8}.email-dialog__address{flex:1;overflow-wrap:anywhere;color:var(--text);font-size:.92rem;line-height:1.5}.email-dialog__copy{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;gap:.4rem;min-width:5rem;min-height:2.25rem;padding:0 .75rem;border-radius:10px;overflow:hidden;font-size:.88rem;font-weight:600;cursor:pointer}.email-dialog__copy svg{width:.9rem;height:.9rem;flex:0 0 .9rem}.email-dialog__actions{display:flex;width:100%}.email-dialog__action{display:inline-flex;align-items:center;justify-content:center;width:100%;min-height:2.5rem;padding:0 .9rem;border-radius:10px;font-size:.92rem;font-weight:600;cursor:pointer;transition:border-color var(--transition),color var(--transition),filter var(--transition)}.email-dialog__action--primary{border-color:transparent;background:var(--accent-gradient-button);background-clip:padding-box;color:#fff}.email-dialog__close:hover,.email-dialog__close:focus-visible,.email-dialog__copy:hover,.email-dialog__copy:focus-visible{color:var(--text)}.email-dialog__copy:active{border-color:#d7d9dd;background:#eceef1;color:var(--text)}.email-dialog__close:active{background:#0f11150f}.email-dialog__copy:hover,.email-dialog__copy:focus-visible{border-color:#d7d9dd;background:#f3f4f6}.email-dialog__action--primary:hover,.email-dialog__action--primary:focus-visible{border-color:transparent;color:#fff;filter:brightness(1.11) saturate(1.1)}.email-dialog__copy:hover,.email-dialog__copy:focus-visible{color:var(--text)}.sidebar__nav{margin-top:48px;padding-top:0}.sidebar__nav ul{display:grid;gap:14px}.sidebar__nav a{position:relative;display:flex;align-items:center;gap:12px;color:var(--text-muted);font-size:.94rem;font-weight:600;line-height:1.4;letter-spacing:.02em;transition:color var(--transition)}.sidebar__nav a:before{content:"";width:4px;height:4px;min-width:4px;min-height:4px;flex:0 0 4px;background:var(--accent);opacity:0;transition:none}.sidebar__nav a[aria-current=true]{color:var(--text)}.sidebar__nav a[aria-current=true]:before{opacity:1}.sidebar__nav a[data-always-marked=true]:before{opacity:1}.sidebar__nav a:not([aria-current=true]):hover,.sidebar__nav a:not([aria-current=true]):focus-visible{color:var(--text)}.sidebar__utility{display:grid;gap:22px;margin-top:auto;padding-top:34px}.article-toc{margin:0 0 56px;padding:0;max-width:68ch}.article-toc__list{margin:0;padding:0;list-style:none;display:grid;gap:14px}.article-toc__item{position:relative}.article-toc__link{position:relative;display:flex;align-items:center;gap:12px;color:var(--text-muted);font-family:var(--font-sans);font-size:.94rem;font-weight:600;line-height:1.4;letter-spacing:.02em;text-transform:uppercase;transition:color var(--transition)}.article-toc__link:before{content:"";width:4px;height:4px;min-width:4px;min-height:4px;flex:0 0 4px;background:var(--accent);opacity:0;transition:none}.article-toc__link:hover,.article-toc__link:focus-visible{color:var(--text)}.article-toc__link[aria-current=true]{color:var(--text)}.article-toc__link[aria-current=true]:before{opacity:1}.article-toc__item--h3 .article-toc__link{padding-left:16px;font-size:.88rem}.article-header{position:relative;margin-bottom:28px;padding-bottom:20px;border-bottom:1px solid var(--border)}.article-meta{margin:0 0 14px;display:inline-flex;align-items:center;gap:.34em;align-self:start;color:var(--text-muted);padding-top:2px;font-size:.76rem;font-weight:600;line-height:1.35;letter-spacing:.01em;text-transform:uppercase}.article-meta__separator{display:inline-block;margin:0 .1em;font-size:.9em;line-height:1}.article-title{font-size:clamp(2.35rem,3vw,3.1rem);line-height:1.03;max-width:24ch;text-wrap:pretty;overflow-wrap:break-word}.article-page{max-width:68ch}.article-prose{max-width:68ch;color:var(--text);font-family:var(--font-sans);overflow-wrap:break-word;word-wrap:break-word;min-width:0}.article-prose>*:first-child{margin-top:0}.article-prose>*:last-child{margin-bottom:0}.article-prose p,.article-prose ul,.article-prose ol,.article-prose blockquote,.article-prose pre{margin:0 0 1.25rem;font-size:clamp(.98rem,.94rem + .18vw,1.05rem);line-height:1.72}.article-prose>p:first-child{color:var(--text);font-size:clamp(1.02rem,.97rem + .22vw,1.1rem);line-height:1.74}.article-prose p{max-width:68ch;text-wrap:pretty}.article-prose h2,.article-prose h3{margin:2.35rem 0 .45rem;font-family:var(--font-display);line-height:1.18;letter-spacing:-.03em;scroll-margin-top:88px}.article-prose h2{font-size:clamp(1.35rem,1.05rem + 1.2vw,1.72rem);font-weight:700;max-width:24ch}.article-prose h3{font-size:clamp(1.1rem,.96rem + .55vw,1.28rem);font-weight:650;max-width:34ch}.article-prose h2+p,.article-prose h3+p{margin-top:0}.article-prose ul,.article-prose ol{padding-left:1.2rem}.article-prose ul,.article-prose ol,.article-prose blockquote{max-width:65ch}.article-prose li{margin-bottom:.38rem}.article-prose li>ul,.article-prose li>ol{margin-top:.45rem;margin-bottom:.1rem}.article-prose ul li::marker{color:#0f1115b8;font-size:.94em}.article-prose ol li::marker{color:#0f1115b8;font-weight:700}.article-prose blockquote{margin:1.5rem 0;padding:.2rem 0 .2rem 1.1rem;border-left:3px solid var(--border-strong);color:var(--text-muted);font-style:italic;max-width:64ch}.article-prose blockquote>*:last-child{margin-bottom:0}.article-prose a{color:var(--text);text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:#0f111547;text-underline-offset:.14em;transition:text-decoration-color var(--transition),color var(--transition)}.article-prose a:hover,.article-prose a:focus-visible{color:var(--accent);text-decoration-color:currentColor}.article-prose code{padding:.14rem .38rem;border-radius:6px;background:#0f11150e;border:1px solid rgba(15,17,21,.08);font-size:.9em;font-weight:500;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,monospace}.article-prose pre{overflow-x:auto;max-width:100%;margin:1.5rem 0 1.7rem;padding:1rem 1.1rem;border:1px solid #1f2937;border-radius:16px;background:linear-gradient(180deg,#111827,#0f172a);box-shadow:inset 0 1px #ffffff0a}.article-prose pre code{display:block;padding:0;border:0;background:transparent;color:#e5e7eb;font-size:.92rem;line-height:1.62}.article-prose :where(h2,h3)+:is(ul,ol){margin-top:.3rem}.article-prose p:has(+:is(ul,ol)){margin-bottom:.35rem}.article-prose :where(ul,ol)+p,.article-prose blockquote+p,.article-prose pre+p{margin-top:.25rem}.article-prose hr{margin:2.2rem 0;border:0;border-top:1px solid var(--border)}.article-prose strong{color:var(--text)}.article-prose em{color:#30343b}.article-prose img,.article-prose video{display:block;width:auto;max-width:100%;height:auto;border-radius:10px}.article-prose figure{margin:1.5rem auto;display:block;max-width:100%}.article-prose figure img,.article-prose figure video{width:100%;max-width:100%;height:auto;border:1px solid var(--border)}.article-prose figcaption{margin:8px 0 0;color:var(--text-muted);font-size:.84rem;line-height:1.5;text-wrap:pretty}.article-prose .figure--grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.article-prose .figure--grid>img,.article-prose .figure--grid>video{min-width:0;aspect-ratio:1 / 1;object-fit:contain;padding:14px;background:#fafafa}.article-prose .figure--grid figcaption{grid-column:1 / -1}.article-prose .figure--plain{text-align:center}.article-prose .figure--plain img,.article-prose .figure--plain video{display:inline-block;width:auto;max-width:min(100%,160px);height:auto;border:0;background:transparent;border-radius:0}.article-prose .figure--plain figcaption{text-align:center}.article-prose iframe,.article-prose .embed{display:block;width:100%;max-width:100%;aspect-ratio:16 / 9;border:1px solid var(--border);border-radius:10px}.article-prose audio{display:block;width:100%;max-width:100%;margin:1rem 0}.sidebar__language{margin-top:0;position:relative}.sidebar__language-label{display:block;margin-bottom:6px;color:var(--text-muted);font-size:.74rem;font-weight:500;line-height:1.4;letter-spacing:.02em}.sidebar__language-box{display:inline-flex;gap:4px;padding:3px;border:1px solid var(--border);border-radius:8px;background:#fafafae0}.sidebar__language-option{display:inline-flex;align-items:center;justify-content:center;min-width:2rem;height:1.5rem;padding:0 .5rem;border:none;border-radius:5px;background:transparent;color:var(--text-muted);font-size:.88rem;font-weight:500;line-height:1.35;text-align:left;cursor:pointer;transition:background-color var(--transition),color var(--transition)}.sidebar__language-option,.sidebar__language-option span{font-size:.72rem;font-weight:600;line-height:1.4;letter-spacing:.04em;text-decoration:none;transition:color var(--transition),background-color var(--transition),filter var(--transition)}.sidebar__language-option:hover,.sidebar__language-option:focus-visible{background:#0070f31a}.sidebar__language-option.is-selected{background:var(--accent-gradient-pill);background-clip:padding-box;color:#fff}.sidebar__language-option.is-selected:hover,.sidebar__language-option.is-selected:focus-visible{color:#fff;filter:brightness(1.11) saturate(1.1)}.sidebar__language-option:focus-visible,.text-button:focus-visible,.project-card__title-anchor:focus-visible,.project-card__secondary-link:focus-visible,.sidebar__link-button:focus-visible,.sidebar__links a:focus-visible,.sidebar__nav a:focus-visible,.email-dialog__close:focus-visible,.email-dialog__copy:focus-visible,.email-dialog__action:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.content{display:grid;grid-template-columns:minmax(0,1fr);gap:0}.content-section{padding:84px 0;border-top:1px solid var(--border);scroll-margin-top:72px}.content-section:first-child{padding-top:0;border-top:0}#experience.content-section,#projects.content-section{border-top:0;padding-top:0}.section-header{position:relative;margin-bottom:28px;padding-bottom:20px;border-bottom:1px solid var(--border);transition:border-color var(--transition);z-index:10}#experience .section-header,#projects .section-header{transition:border-color var(--transition)}#experience:has(.experience-item:first-of-type:hover) .section-header,#projects:has(.project-card:first-of-type:hover) .section-header,.blog-index-section:has(.blog-post-card:first-of-type:hover) .section-header{border-color:transparent}.section-actions{margin-top:40px;display:flex;justify-content:center}.text-button{display:inline-flex;align-items:center;gap:.45rem;min-height:2.25rem;color:var(--text);font-size:.94rem;font-weight:500;text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:transparent;text-underline-offset:2px;transition:text-decoration-color var(--transition)}.text-button svg{width:.92rem;height:.92rem;flex-shrink:0;color:var(--text-muted);transition:color var(--transition),transform var(--transition)}.text-button:hover,.text-button:focus-visible{text-decoration-color:currentColor}.text-button:hover svg,.text-button:focus-visible svg{color:var(--text);transform:translateY(-1px)}.section-heading{margin:0;font-size:clamp(2.05rem,2.35vw,2.45rem);line-height:1.02}.section-copy{margin-top:8px;max-width:60ch;color:var(--text)}.intro-text{max-width:54ch;color:var(--text);font-size:1.18rem;line-height:1.6;text-wrap:pretty}.intro-text+.intro-text{margin-top:1em}.intro-section{padding-bottom:96px}.project-list,.blog-post-list,.experience-list{display:grid;gap:52px;position:relative}.project-card,.blog-post-card,.experience-item{display:grid;grid-template-columns:120px minmax(0,1fr);column-gap:32px;padding:24px;margin:-24px;border:1px solid transparent;border-radius:var(--radius-md);transition:background-color var(--transition),border-color var(--transition);position:relative}.project-card:not(:has(.project-card__media)),.blog-post-card:not(:has(.project-card__media)),.experience-item:not(:has(.experience-item__meta)):not(:has(.project-card__media)){grid-template-columns:1fr}.project-card:hover,.project-card:has(a:focus-visible),.blog-post-card:hover,.blog-post-card:has(a:focus-visible),.experience-item:hover,.experience-item:has(a:focus-visible){background-color:#f4f4f5;border-color:#e5e7eb}@media(min-width:981px){#experience .experience-list:before{display:none}.experience-item:after{content:"";position:absolute;left:30px;top:45px;bottom:-25px;width:1px;margin-left:-.5px;background-color:var(--border-strong);z-index:1;transition:opacity var(--transition)}.experience-item:last-child:after{display:none}.experience-item:hover:after,.experience-item:has(+.experience-item:hover):after{opacity:0}.experience-item:before{content:"";position:absolute;left:30px;top:33px;width:10px;height:10px;background-color:var(--bg);border:2px solid var(--accent);border-radius:50%;transform:translate(-50%,-50%);z-index:10;transition:transform var(--transition),background-color var(--transition)}.experience-item:hover:before{background-color:var(--accent);transform:translate(-50%,-50%) scale(1.15)}.experience-item__meta{padding-left:26px}.blog-post-card__meta{padding-left:0}}.experience-item__meta{display:inline-flex;align-items:center;gap:.34em;align-self:start;color:var(--text-muted);padding-top:2px;font-size:.76rem;font-weight:600;line-height:1.35;text-transform:uppercase}.experience-item__content{display:grid;row-gap:6px}.experience-item p{margin:0;max-width:66ch;text-wrap:pretty}.project-card__media{display:flex;align-items:flex-start;justify-content:flex-start;margin:0;padding:0;overflow:hidden;user-select:none;-webkit-user-drag:none}.project-card__media img{max-width:92px;max-height:92px;width:auto;height:auto;border-radius:0;object-fit:contain;user-select:none;-webkit-user-drag:none}.project-card__content{padding:0}.project-card__header{display:block}.project-card__title-row{display:flex;align-items:center}.project-card__header{margin-bottom:12px}.project-card h3,.experience-item h3{margin:0;line-height:1.18}.project-card h3{font-size:1.34rem;font-weight:600}.experience-item h3{font-size:1.26rem;font-weight:600}.experience-item__separator{display:inline-block;margin:0 .28em;font-size:1.02em;font-weight:500;line-height:1;transform:translateY(-.02em)}.project-card__title-anchor{display:inline-flex;align-items:center;gap:8px;color:var(--text);transition:color var(--transition),transform var(--transition)}.project-card__title-anchor:hover,.project-card__title-anchor:focus-visible{color:var(--accent)}.project-card__title-anchor:hover svg,.project-card__title-anchor:focus-visible svg{transform:translate(1px,-1px)}.project-card__title-anchor svg,.project-card__secondary-link svg{width:.9rem;height:.9rem;flex-shrink:0;transition:transform var(--transition),color var(--transition)}.project-card__links{display:flex;flex-wrap:wrap;gap:14px;margin:14px 0 0;padding:0;list-style:none}.project-card__secondary-link{display:inline-flex;align-items:center;gap:6px;color:var(--text);font-size:.92rem;line-height:1.4;font-weight:500;text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:transparent;text-underline-offset:2px;transition:text-decoration-color var(--transition)}.project-card__secondary-link:hover,.project-card__secondary-link:focus-visible{text-decoration-color:currentColor}.project-card__secondary-link:hover svg,.project-card__secondary-link:focus-visible svg{color:var(--text)}.project-card__secondary-link svg{order:-1;width:.9em;height:.9em;color:var(--text-muted);transform:translateY(-1px);transition:color var(--transition)}.project-card__content>p{max-width:66ch;text-wrap:pretty}.project-card__content>p+.project-card__links{margin-top:14px}.badge-list{display:flex;flex-wrap:wrap;gap:10px 10px;margin:20px 0 0;padding:0;list-style:none}.badge-list li{display:inline-flex;align-items:center;justify-content:center;padding:.4rem .65rem;border:1.5px solid transparent;border-radius:999px;background:#374151;color:#fff;font-size:.75rem;font-weight:600;line-height:1;letter-spacing:.015em;white-space:nowrap}@media(max-width:980px){.page{grid-template-columns:minmax(0,1fr);gap:32px}.sidebar{position:static;height:auto;padding:0;overflow:visible;min-height:auto;display:flex;flex-direction:column}.sidebar__nav{display:none}.sidebar__summary{max-width:42ch}.sidebar__utility{margin-top:0;padding-top:4px;gap:14px;display:flex;flex-direction:column;align-items:flex-start}.sidebar__links{display:flex;flex-wrap:wrap;gap:12px 18px;width:100%}.sidebar__links li:has(.sidebar__utility-link--back){order:1;flex-basis:100%;margin-top:4px}.sidebar__links a,.sidebar__link-button{width:auto;font-size:.92rem;min-height:2rem}.project-card,.blog-post-card,.experience-item{display:block;padding:20px;margin:-20px}.project-card__media{padding-top:0;margin:0 0 12px}.content{max-width:none;padding:0}}@media(max-width:720px){.shell{width:100%;max-width:var(--page-width);margin:0 auto;padding:48px 16px 32px}.content{padding:16px 0 32px}.content-section+.content-section{margin-top:24px}.page{gap:36px}.sidebar__intro h1{font-size:clamp(2rem,8.4vw,2.55rem);line-height:.98;max-width:none}.sidebar__identity{gap:5px}.sidebar__brand-mark{width:calc(2.5rem - 2px);height:calc(2.5rem - 2px);flex-basis:calc(2.5rem - 2px)}.sidebar__role{font-size:1rem;line-height:1.32}.sidebar__summary{max-width:none;font-size:.93rem;line-height:1.58}.sidebar__utility{padding-top:2px}.email-dialog[open]{width:min(100% - 32px,20rem);padding:16px;gap:10px}.email-dialog__address-row{flex-direction:column;align-items:stretch;gap:8px;padding:10px;border-radius:10px}.email-dialog__address{font-size:.88rem}.email-dialog__copy,.email-dialog__action{width:100%;min-height:2.2rem;font-size:.9rem}.email-dialog__copy{padding:0 .6rem}.email-dialog__actions{flex-direction:column;gap:6px}.email-dialog__action{padding:0 .8rem}.sidebar__language-label{margin-bottom:4px}.section-heading{font-size:clamp(1.48rem,5vw,1.82rem);line-height:1.04}.intro-text{max-width:none;font-size:1rem;line-height:1.6;text-wrap:auto}.intro-text+.intro-text{margin-top:.85em}.project-card h3,.experience-item h3{font-size:1.08rem}.sidebar,.content,.project-card__content{padding:0}.content-section{padding:44px 0}.project-list,.blog-post-list{display:grid;gap:40px}.intro-section{padding-bottom:64px}.section-actions{margin-top:32px}.project-card__header{flex-direction:column}.article-title{font-size:clamp(1.72rem,7vw,2.1rem);line-height:1.05;max-width:none}.article-header{margin-bottom:30px}.article-prose figure{margin:1.25rem 0}.article-prose .figure--grid{grid-template-columns:1fr;gap:10px}.article-prose .figure--grid>img,.article-prose .figure--grid>video{aspect-ratio:auto;padding:12px}.article-prose figcaption{font-size:.8rem}.project-card,.experience-item,.blog-post-card{padding:14px;margin:-10px}.project-card__header{margin-bottom:10px}.project-card__title-anchor{gap:6px}.project-card__title-anchor,.project-card__secondary-link{min-height:2.2rem}.project-card__content>p,.experience-item p{max-width:42ch;font-size:.92rem;line-height:1.6}.project-card__links{gap:10px 14px}.project-card__secondary-link{font-size:.88rem}.experience-item__content{row-gap:8px}.badge-list{gap:7px;margin-top:14px}.badge-list li{padding:.32rem .56rem;font-size:.71rem;letter-spacing:.01em;border-radius:10px}.project-card__media img{max-width:72px;max-height:72px}}@media(max-width:520px){.email-dialog[open]{position:fixed;inset:12px;margin:auto;width:min(calc(100% - 24px),20rem);max-height:calc(100dvh - 24px);overflow-y:auto;padding:32px 14px 14px;gap:8px;border-radius:14px}.email-dialog__close{position:absolute;top:2px;right:2px;width:2rem;height:2rem;padding:0;z-index:1}.email-dialog__close span{font-size:1.5rem}.email-dialog__address-row{flex-direction:column;align-items:stretch;gap:8px;padding:10px;border-radius:10px}.email-dialog__address{font-size:.86rem;word-break:break-all}.email-dialog__copy{width:100%;min-height:2rem;padding:0 .6rem;font-size:.86rem}.email-dialog__actions{flex-direction:column;gap:6px}.email-dialog__action{width:100%;min-height:2rem;padding:0 .8rem;font-size:.9rem}.email-dialog__action--primary{padding:0 .8rem}.shell{width:min(calc(100% - 36px),var(--page-width))}.page{gap:28px}.sidebar__intro h1{font-size:clamp(1.82rem,8vw,2.2rem);white-space:nowrap}.sidebar__identity{gap:4px}.sidebar__brand-mark{width:calc(1.9rem + 3px);height:calc(1.9rem + 3px);flex-basis:calc(1.9rem + 3px)}.sidebar__role{margin-top:8px;font-size:.96rem}.sidebar__summary{font-size:.91rem;line-height:1.55}.intro-text{max-width:none;font-size:.96rem;line-height:1.6}.intro-text+.intro-text{margin-top:.75em}.project-card,.experience-item,.blog-post-card{padding:12px;margin:-8px}.project-card__media{margin-bottom:10px}.project-card__media img{max-width:68px;max-height:68px}.project-card h3,.experience-item h3{font-size:1.02rem;line-height:1.2}.project-list,.blog-post-list{display:grid;gap:32px}.experience-item__content{row-gap:8px}.project-card__content>p,.experience-item p{max-width:none;font-size:.9rem;line-height:1.56}.section-heading{font-size:clamp(1.38rem,6vw,1.62rem)}.project-card__links{gap:8px 12px}.badge-list li{padding:.3rem .5rem;font-size:.69rem;border-radius:10px}.badge-list{gap:6px}.text-button{min-height:2.5rem;font-size:.9rem}.project-card__media img{max-width:64px;max-height:64px}}@media(hover:none){.project-card:hover,.experience-item:hover{background-color:#f4f4f5;border-color:#e5e7eb}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}.skip-link{position:absolute;top:-40px;left:12px;padding:10px 16px;background:var(--text);color:var(--bg);font-family:var(--font-sans);font-weight:600;font-size:.95rem;border-radius:var(--radius-sm);text-decoration:none;box-shadow:var(--shadow);z-index:1000;transition:top var(--transition)}.skip-link:focus-visible{top:12px;outline:2px solid var(--accent);outline-offset:2px}
