@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;--bg-gradient-start: #ffffff;--bg-gradient-end: #f8f9fa;--surface: rgba(250, 250, 250, .88);--surface-strong: #f5f5f5;--surface-sunken: #f7f7f8;--surface-overlay: #ffffff;--surface-pressed: rgba(15, 17, 21, .06);--surface-pressed-strong: rgba(15, 17, 21, .1);--text: #0f1115;--text-muted: #54575c;--text-marker: rgba(15, 17, 21, .72);--text-strong: #30343b;--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);--accent-underline: rgba(0, 112, 243, .4);--card-hover-bg: #f3f3f5;--card-hover-border: #e5e7eb;--badge-bg: #3d4148;--badge-text: #ffffff;--dialog-shadow: 0 24px 48px rgba(15, 17, 21, .12), 0 2px 8px rgba(15, 17, 21, .06);--dialog-backdrop: rgba(15, 17, 21, .28);--dialog-border: transparent;--button-soft-bg: #ffffff;--button-soft-bg-hover: #f3f4f6;--button-soft-bg-active: #eceef1;--button-soft-border-hover: #d7d9dd;--code-inline-bg: rgba(15, 17, 21, .055);--code-inline-border: rgba(15, 17, 21, .08);--prose-link-underline: rgba(15, 17, 21, .28);--selection-bg: rgba(0, 112, 243, .25);--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;--transition-soft: .28s ease-out}[data-theme=dark]{color-scheme:dark;--bg: #0e0f13;--bg-gradient-start: #11131a;--bg-gradient-end: #0c0d12;--surface: rgba(20, 22, 28, .88);--surface-strong: #181a21;--surface-sunken: #15161c;--surface-overlay: #181a21;--surface-pressed: rgba(255, 255, 255, .06);--surface-pressed-strong: rgba(255, 255, 255, .1);--text: #e6e7ea;--text-muted: #9095a0;--text-marker: rgba(230, 231, 234, .72);--text-strong: #c8cad0;--border: rgba(255, 255, 255, .08);--border-strong: rgba(255, 255, 255, .18);--accent: #4a93ff;--accent-gradient-button: linear-gradient(0deg, #2e7df0 0%, #4a93ff 100%);--accent-gradient-pill: linear-gradient(0deg, #2e7df0 0%, #4a93ff 100%);--accent-soft: rgba(74, 147, 255, .18);--accent-underline: rgba(74, 147, 255, .55);--card-hover-bg: #16181f;--card-hover-border: rgba(255, 255, 255, .08);--badge-bg: #20232b;--badge-text: #cdd0d6;--dialog-shadow: 0 24px 48px rgba(0, 0, 0, .55), 0 2px 8px rgba(0, 0, 0, .35);--dialog-backdrop: rgba(0, 0, 0, .6);--dialog-border: rgba(255, 255, 255, .08);--button-soft-bg: #1e2028;--button-soft-bg-hover: #25272f;--button-soft-bg-active: #2c2e37;--button-soft-border-hover: rgba(255, 255, 255, .14);--code-inline-bg: rgba(255, 255, 255, .06);--code-inline-border: rgba(255, 255, 255, .1);--prose-link-underline: rgba(230, 231, 234, .35);--selection-bg: rgba(74, 147, 255, .35);--shadow: 0 14px 32px rgba(0, 0, 0, .5);--hover-bg: rgba(74, 147, 255, .12);--hover-border: rgba(74, 147, 255, .3)}*{box-sizing:border-box}html{background:linear-gradient(180deg,var(--bg-gradient-start) 0%,var(--bg-gradient-end) 100%);overflow-x:clip;scrollbar-gutter:stable;scroll-behavior:smooth;transition:background-color var(--transition-soft),color var(--transition-soft)}body{margin:0;min-width:320px;min-height:100vh;max-width:100%;overflow-x:clip;font-family:var(--font-sans);color:var(--text);transition:color var(--transition-soft)}::selection{background:var(--selection-bg)}a{color:inherit;text-decoration:none;-webkit-tap-highlight-color:var(--accent-soft)}img{display:block;max-width:100%}button,input,textarea,select{font:inherit;-webkit-tap-highlight-color:var(--accent-soft)}@keyframes copy-flash{0%{background-color:transparent}20%{background-color:var(--hover-bg)}to{background-color:transparent}}@keyframes dialog-in{0%{opacity:0;transform:scale(.95) translateY(4px)}}@keyframes backdrop-in{0%{opacity:0}}html.has-dialog-open,html.has-dialog-open body{overflow:hidden}.reveal{opacity:0;transition:opacity .5s ease-out}.reveal.is-visible{opacity:1}.content-section p a{text-decoration:underline;text-decoration-thickness:1px;text-decoration-color:var(--accent-underline);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;transition:transform var(--transition-soft)}.sidebar__identity:hover .sidebar__brand-mark{transform:rotate(-6deg) scale(1.06)}.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)}.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__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{max-width:min(calc(100% - 32px),22rem);width:22rem;margin:auto;padding:0;border:1px solid var(--dialog-border);outline:0;border-radius:18px;background:var(--surface-overlay);box-shadow:var(--dialog-shadow);overflow:visible;color:var(--text)}.email-dialog[open]{display:grid;gap:0;padding:20px;position:relative;animation:dialog-in .24s ease-out both}.email-dialog::backdrop{background:var(--dialog-backdrop);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);animation:backdrop-in .2s ease-out both}.email-dialog__close{position:absolute;top:12px;right:12px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border:0;background:transparent;color:var(--text-muted);border-radius:8px;cursor:pointer;user-select:none;-webkit-user-select:none;appearance:none;-webkit-appearance:none;-webkit-tap-highlight-color:transparent;transition:background-color var(--transition),color var(--transition)}.email-dialog__close svg{width:1.1rem;height:1.1rem}.email-dialog__close:hover,.email-dialog__close:focus-visible{background:var(--surface-pressed);color:var(--text)}.email-dialog__close:active{background:var(--surface-pressed-strong)}.email-dialog__address-row{display:flex;align-items:center;gap:8px;width:100%;padding:10px 10px 10px 14px;margin-top:28px;border:1px solid var(--border);border-radius:12px;background:var(--surface-sunken)}.email-dialog__address{flex:1;overflow-wrap:anywhere;color:var(--text);font-size:.9rem;line-height:1.5}.email-dialog__copy,.email-dialog__action{border:1px solid var(--border);background:var(--button-soft-bg);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),filter var(--transition)}.email-dialog__copy{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;gap:.35rem;min-width:4.8rem;height:2.1rem;padding:0 .7rem;border-radius:9px;overflow:hidden;font-size:.82rem;font-weight:600;cursor:pointer}.email-dialog__copy svg{width:.82rem;height:.82rem;flex:0 0 .82rem}.email-dialog__copy:hover,.email-dialog__copy:focus-visible{border-color:var(--button-soft-border-hover);background:var(--button-soft-bg-hover);color:var(--text)}.email-dialog__copy:active{border-color:var(--button-soft-border-hover);background:var(--button-soft-bg-active);color:var(--text)}.email-dialog__copy.is-copied{animation:copy-flash .6s ease-out;color:var(--accent)}.email-dialog__actions{display:flex;width:100%;margin-top:12px}.email-dialog__action{display:inline-flex;align-items:center;justify-content:center;width:100%;height:2.75rem;padding:0 .9rem;border-radius:12px;font-size:.92rem;font-weight:600;cursor:pointer;text-decoration:none}.email-dialog__action--primary{border-color:transparent;background:var(--accent-gradient-button);background-clip:padding-box;color:#fff}.email-dialog__action--primary:hover,.email-dialog__action--primary:focus-visible{border-color:transparent;color:#fff;filter:brightness(1.11) saturate(1.1)}.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:5px;height:5px;min-width:5px;min-height:5px;flex:0 0 5px;border-radius:50%;background:var(--accent);opacity:0;transition:opacity var(--transition)}.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:var(--text-marker);font-size:.94em}.article-prose ol li::marker{color:var(--text-marker);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:var(--prose-link-underline);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:var(--code-inline-bg);border:1px solid var(--code-inline-border);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:var(--text-strong)}.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:var(--surface-sunken)}.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:var(--surface)}.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:var(--accent-soft)}.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,.sidebar__theme-toggle: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}.sidebar__theme-toggle{display:inline-flex;align-items:center;justify-content:center;height:30px;padding:0 12px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--text-muted);cursor:pointer;justify-self:start;transition:background-color var(--transition),border-color var(--transition),color var(--transition)}.sidebar__theme-toggle:hover,.sidebar__theme-toggle:focus-visible{color:var(--text);border-color:var(--border-strong)}.sidebar__theme-state{display:none;align-items:center;gap:7px}.sidebar__theme-icon{display:inline-flex;width:16px;height:16px}.sidebar__theme-icon svg{display:block;width:100%;height:100%}.sidebar__theme-label{font-size:.8rem;font-weight:550;line-height:1;letter-spacing:.01em}:root .sidebar__theme-state--system,[data-theme-pref=system] .sidebar__theme-state--system{display:inline-flex}[data-theme-pref=light] .sidebar__theme-state--system,[data-theme-pref=dark] .sidebar__theme-state--system{display:none}[data-theme-pref=light] .sidebar__theme-state--light,[data-theme-pref=dark] .sidebar__theme-state--dark{display:inline-flex}.content{display:grid;grid-template-columns:minmax(0,1fr);gap:0}.content-section{padding:64px 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:24px;padding-bottom:18px;z-index:10}.section-header:after{content:"";position:absolute;bottom:0;left:0;right:0;height:1px;background:linear-gradient(90deg,var(--border-strong) 0%,transparent 80%);opacity:1;transition:opacity var(--transition)}.blog-index-section:has(.blog-post-card:first-of-type:hover) .section-header:after{opacity:0}.section-actions{position:relative;margin-top:48px;padding-top:24px;display:flex;justify-content:center}.section-actions:before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:linear-gradient(90deg,transparent 0%,var(--border-strong) 50%,transparent 100%)}.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:first-of-type{font-size:1.24rem;color:var(--text)}.intro-text+.intro-text{margin-top:1em;color:var(--text-muted)}.intro-section{padding-bottom:72px}.project-list,.blog-post-list,.experience-list{display:grid;gap:48px;position:relative}.project-card,.blog-post-card,.experience-item{display:grid;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,.blog-post-card{grid-template-columns:auto minmax(0,1fr);column-gap:56px}.experience-item{grid-template-columns:140px minmax(0,1fr);column-gap:28px}.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}.blog-post-card:hover,.blog-post-card:has(a:focus-visible){background-color:var(--card-hover-bg);border-color:var(--card-hover-border);z-index:1}.project-card:hover,.project-card:has(a:focus-visible){z-index:1}@media(min-width:981px){#experience .experience-list:before{display:none}.experience-item:after{content:"";position:absolute;left:30px;top:37.5px;bottom:-37.5px;width:1px;transform:translate(-50%);background:var(--border-strong);z-index:0;pointer-events:none}.experience-item:last-child:after{display:none}.experience-item:before{content:"";position:absolute;left:30px;top:37.5px;width:.75rem;height:.75rem;background-color:var(--text-muted);border-radius:50%;transform:translate(-50%,-50%);z-index:2;transition:transform var(--transition),background-color var(--transition),box-shadow var(--transition)}.experience-item:hover:before{background-color:var(--accent);transform:translate(-50%,-50%) scale(1.3);box-shadow:0 0 0 4px var(--accent-soft)}.experience-item__meta{padding-left:22px}.blog-post-card__meta{padding-left:0}}.experience-item__meta{align-self:start;color:var(--text);padding-top:6px;font-size:.75rem;font-weight:550;line-height:1.4;letter-spacing:.025em;font-variant-numeric:tabular-nums}.experience-item__content{display:grid;row-gap:8px}.experience-item p{margin:0;max-width:66ch;text-wrap:pretty}.project-card__media{display:flex;align-items:center;justify-content:center;width:clamp(48px,6vw,78px);height:clamp(48px,6vw,78px);margin:0;padding:0;overflow:visible;user-select:none;-webkit-user-drag:none;position:relative}.project-card__media img{max-width:100%;max-height:100%;width:auto;height:auto;border-radius:0;object-fit:contain;user-select:none;-webkit-user-drag:none;opacity:1}.project-card__content{padding:0}.project-card__header{display:block}.project-card__title-row{display:flex;align-items:center}.project-card__header{margin-bottom:8px}.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 .32em;font-size:.72em;font-weight:400;line-height:1;color:var(--text-muted);opacity:.6;transform:translateY(-.06em)}.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:.38rem .62rem;border:1px solid transparent;border-radius:999px;background:var(--badge-bg);color:var(--badge-text);font-size:.73rem;font-weight:550;line-height:1;letter-spacing:.01em;text-indent:.01em;white-space:nowrap;transition:background-color var(--transition),border-color var(--transition),color var(--transition)}@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__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{max-width:min(calc(100% - 32px),20rem)}.email-dialog[open]{padding:16px}.email-dialog__close{top:8px;right:8px}.email-dialog__address-row{flex-direction:column;align-items:stretch;gap:8px;padding:10px;margin-top:24px;border-radius:10px}.email-dialog__address{font-size:.88rem}.email-dialog__copy{width:100%;height:2.1rem;font-size:.86rem}.email-dialog__actions{margin-top:8px}.email-dialog__action{height:2.5rem;font-size:.9rem}.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:56px}.section-actions{margin-top:32px;padding-top:20px}.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{width:clamp(52px,10vw,64px);height:clamp(52px,10vw,64px)}}@media(max-width:520px){.email-dialog{max-width:min(calc(100% - 24px),20rem);border-radius:14px}.email-dialog[open]{padding:14px}.email-dialog__close{top:6px;right:6px;width:26px;height:26px}.email-dialog__close span{font-size:1.4rem}.email-dialog__address-row{margin-top:22px;padding:10px;border-radius:10px}.email-dialog__address{font-size:.84rem;word-break:break-all}.email-dialog__copy{height:2rem;font-size:.82rem}.email-dialog__actions{margin-top:8px}.email-dialog__action{height:2.35rem;font-size:.88rem}.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{width:clamp(48px,12vw,58px);height:clamp(48px,12vw,58px);margin-bottom:10px}.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{width:clamp(44px,11vw,52px);height:clamp(44px,11vw,52px)}}@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}[data-theme=dark] .project-card__media img[src$="ombra.svg"],[data-theme=dark] .project-card__media img[src$="stealth-sniper.svg"]{filter:invert(1)}
