@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/3d165c286d94e27c-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/e54d16b9f2c4535b-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/7c21074d9bafed1b-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/916860560b9a2bc2-s.woff2) format("woff2");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:"Source Serif 4";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/591e43f23f51e5a5-s.woff2) format("woff2");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:"Source Serif 4";font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/97ac91773d3121b2-s.p.woff2) format("woff2");unicode-range:u+00??,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:"Source Serif 4";font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/3d165c286d94e27c-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/e54d16b9f2c4535b-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/7c21074d9bafed1b-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:"Source Serif 4";font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/916860560b9a2bc2-s.woff2) format("woff2");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:"Source Serif 4";font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/591e43f23f51e5a5-s.woff2) format("woff2");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:"Source Serif 4";font-style:normal;font-weight:600;font-display:swap;src:url(/_next/static/media/97ac91773d3121b2-s.p.woff2) format("woff2");unicode-range:u+00??,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:"Source Serif 4 Fallback";src:local("Times New Roman");ascent-override:87.87%;descent-override:28.41%;line-gap-override:0.00%;size-adjust:117.91%}.__className_181799{font-family:"Source Serif 4","Source Serif 4 Fallback";font-style:normal}.__variable_181799{--font-serif:"Source Serif 4","Source Serif 4 Fallback"}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/edc640959b0c7826-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/ac0e76ddaeeb7981-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/64d784ea54a4acde-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/ff71da380fbe67dd-s.woff2) format("woff2");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:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/6d831b18ae5b01dc-s.woff2) format("woff2");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:JetBrains Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/_next/static/media/558ca1a6aa3cb55e-s.p.woff2) format("woff2");unicode-range:u+00??,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:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/edc640959b0c7826-s.woff2) format("woff2");unicode-range:u+0460-052f,u+1c80-1c8a,u+20b4,u+2de0-2dff,u+a640-a69f,u+fe2e-fe2f}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/ac0e76ddaeeb7981-s.woff2) format("woff2");unicode-range:u+0301,u+0400-045f,u+0490-0491,u+04b0-04b1,u+2116}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/64d784ea54a4acde-s.woff2) format("woff2");unicode-range:u+0370-0377,u+037a-037f,u+0384-038a,u+038c,u+038e-03a1,u+03a3-03ff}@font-face{font-family:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/ff71da380fbe67dd-s.woff2) format("woff2");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:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/6d831b18ae5b01dc-s.woff2) format("woff2");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:JetBrains Mono;font-style:normal;font-weight:500;font-display:swap;src:url(/_next/static/media/558ca1a6aa3cb55e-s.p.woff2) format("woff2");unicode-range:u+00??,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:JetBrains Mono Fallback;src:local("Arial");ascent-override:75.79%;descent-override:22.29%;line-gap-override:0.00%;size-adjust:134.59%}.__className_6d24ac{font-family:JetBrains Mono,JetBrains Mono Fallback;font-style:normal}.__variable_6d24ac{--font-mono:"JetBrains Mono","JetBrains Mono Fallback"}:root,[data-palette=signature]{--bg:#0b1220;--surface:#111a2e;--surface2:#16203a;--txt:#e8ecf4;--mut:#8b96ac;--acc:#5b8cff;--acc2:#f2b84b;--bd:#1f2a44;--ok:#3dd68c;--code:#0e1728;--cat-ai:#f2b84b;--cat-vibe-coding:#7c9cff;--cat-dotnet:#5b8cff;--cat-frontend:#49c7e8;--cat-devops:#3dd68c;--cat-tips:#e0a0f5}[data-palette=elliot]{--bg:#0f172a;--surface:#1f2937;--surface2:#222b45;--txt:#e2e8f0;--mut:#a3adc2;--acc:#6953f9;--acc2:#4f7dff;--bd:#374151;--ok:#3dd68c;--code:#2e3440;--cat-ai:#6953f9;--cat-vibe-coding:#8b7cfb;--cat-dotnet:#4f7dff;--cat-frontend:#3da9fc;--cat-devops:#5ec8c0;--cat-tips:#b58cf9}[data-palette=terminal-warm]{--bg:#161311;--surface:#1e1a17;--surface2:#241f1a;--txt:#f2ece4;--mut:#a79c8e;--acc:#e8734a;--acc2:#6fcf97;--bd:#2c2620;--ok:#6fcf97;--code:#1b1714;--cat-ai:#e8734a;--cat-vibe-coding:#f2b84b;--cat-dotnet:#e89a6b;--cat-frontend:#d9a05b;--cat-devops:#6fcf97;--cat-tips:#c9a227}:root{--ebg:var(--bg);--sbg:var(--surface);--abg:var(--surface2);--tbg:var(--surface);--sel:var(--surface2);--font-sans:-apple-system,BlinkMacSystemFont,"Segoe UI",system-ui,Roboto,sans-serif;--font-prose:var(--font-serif),Georgia,"Times New Roman",serif;--prose-width:68ch;--header-h:68px;--radius:12px;--radius-sm:8px;--maxw:1200px;color-scheme:dark}*{box-sizing:border-box}body,html{margin:0;padding:0}html{scroll-behavior:smooth}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}}body{background:var(--bg);color:var(--txt);font-family:var(--font-sans);font-size:16px;line-height:1.7;-webkit-font-smoothing:antialiased}a{color:var(--acc);text-decoration:none}a:hover{text-decoration:underline}:focus-visible{outline:2px solid var(--acc);outline-offset:2px}::selection{background:var(--sel)}img{max-width:100%}[id]{scroll-margin-top:calc(var(--header-h) + 16px)}.container{width:100%;max-width:var(--maxw);margin:0 auto;padding:0 24px}.visually-hidden{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.site-shell{display:flex;flex-direction:column;min-height:100vh}.site-main{flex:1 1;padding:40px 0 72px}.site-header{position:-webkit-sticky;position:sticky;top:0;z-index:50;background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--bd)}.site-header-inner{height:var(--header-h);display:flex;align-items:center;gap:20px}.brand{font-family:var(--font-mono);font-weight:700;font-size:15px;letter-spacing:.02em;color:var(--txt);white-space:nowrap}.brand:hover{text-decoration:none}.brand-accent{color:var(--acc)}.site-nav{display:flex;align-items:center;gap:4px;margin-left:auto}.site-nav a{display:inline-flex;align-items:center;gap:7px;padding:8px 13px;border-radius:999px;color:var(--mut);font-size:14.5px;white-space:nowrap}.site-nav a:hover{text-decoration:none}.site-nav a:hover,.site-nav a[aria-current=page]{color:var(--txt);background:var(--surface)}.header-tools{display:flex;align-items:center;gap:8px}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:999px;border:1px solid var(--bd);background:transparent;color:var(--mut);cursor:pointer}.icon-btn:hover{color:var(--txt);border-color:var(--acc);text-decoration:none}.nav-cta{display:inline-flex;align-items:center;gap:7px;padding:9px 18px;border-radius:999px;background:var(--acc);color:var(--bg);font-weight:600;font-size:14.5px;border:none;cursor:pointer;white-space:nowrap}.nav-cta:hover{filter:brightness(1.08);text-decoration:none}.nav-toggle{display:none}.lang-switcher{display:inline-flex;border:1px solid var(--bd);border-radius:999px;overflow:hidden}.lang-switcher a{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;font-family:var(--font-mono);font-size:11.5px;color:var(--mut);line-height:1}.lang-switcher a:hover{text-decoration:none;color:var(--txt);background:var(--surface)}.lang-switcher a.lang-active{background:var(--acc);color:var(--bg)}.lang-switcher .lang-flag{flex:none;width:16px;height:11px;border-radius:2px}.drawer-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.55);z-index:60;border:0;padding:0}.drawer{position:fixed;top:0;right:0;bottom:0;width:min(320px,86vw);z-index:61;background:var(--surface);border-left:1px solid var(--bd);padding:18px;display:flex;flex-direction:column;gap:6px;overflow-y:auto}.drawer-head{justify-content:space-between;margin-bottom:10px}.drawer a,.drawer-head{display:flex;align-items:center}.drawer a{gap:12px;padding:12px 10px;border-radius:var(--radius-sm);color:var(--txt);font-size:15px}.drawer a:hover{background:var(--surface2);text-decoration:none}.drawer-sep{height:1px;background:var(--bd);margin:10px 0}.site-footer{border-top:1px solid var(--bd);background:var(--surface);padding:40px 0 28px}.site-footer-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr;grid-gap:32px;gap:32px;align-items:start}.site-footer-brand p{color:var(--mut);font-size:14px;margin:10px 0 0;max-width:42ch}.site-footer h3{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);margin:0 0 12px}.site-footer ul{list-style:none;margin:0;padding:0;display:grid;grid-gap:8px;gap:8px}.site-footer li a{color:var(--txt);font-size:14.5px}.site-footer-bottom{margin-top:32px;padding-top:20px;border-top:1px solid var(--bd);display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;color:var(--mut);font-size:13.5px}.cta{padding:11px 20px;border-radius:999px;font-size:15px;font-weight:600;border:1px solid transparent;font-family:inherit}.cta:hover{text-decoration:none}.cta.primary{color:var(--bg)}.cta.primary:hover{filter:brightness(1.08)}.cta.secondary{background:transparent;color:var(--txt);border-color:var(--bd)}.cta.secondary:hover{color:var(--acc)}.actions{gap:12px;margin-top:18px}.hero{padding:56px 0 20px;text-align:center}.hero h1{font-family:var(--font-prose);font-size:clamp(2.1rem,6vw,3.4rem);line-height:1.12;letter-spacing:-.02em;margin:0 0 18px;color:var(--txt)}.hero h1 em{font-style:normal;color:var(--acc)}.hero-sub{font-size:clamp(1rem,2.2vw,1.18rem);color:var(--mut);max-width:62ch;margin:0 auto 28px}.newsletter-form{display:flex;gap:8px;max-width:480px;margin:0 auto;background:var(--surface);border:1px solid var(--bd);border-radius:999px;padding:6px 6px 6px 18px}.newsletter-form input[type=email]{flex:1 1;min-width:0;background:transparent;border:none;color:var(--txt);font-family:inherit;font-size:15px;outline:none}.newsletter-form input::placeholder{color:var(--mut)}.newsletter-note{margin:12px auto 0;font-size:13px;color:var(--mut);max-width:52ch}.newsletter-status{margin:12px auto 0;font-size:14px;max-width:52ch}.newsletter-status.ok{color:var(--ok)}.newsletter-status.err{color:#ff8a8a}.newsletter-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}.newsletter-band{margin:56px 0 0;padding:40px 28px;border:1px solid var(--bd);border-radius:var(--radius);background:var(--surface);text-align:center}.newsletter-band h2{font-family:var(--font-prose);font-size:1.6rem;margin:0 0 10px}.newsletter-band p{color:var(--mut);max-width:56ch;margin:0 auto 22px}.newsletter-band .newsletter-form{background:var(--bg)}.about-strip{display:grid;grid-template-columns:auto 1fr;grid-gap:26px;gap:26px;align-items:center;margin:64px 0 0;padding:28px;border:1px solid var(--bd);border-radius:var(--radius);background:var(--surface)}.about-strip-avatar{width:96px;height:96px;border-radius:50%;border:2px solid var(--acc);display:grid;place-items:center;font-family:var(--font-mono);font-size:30px;font-weight:700;color:var(--acc);background:var(--bg)}.about-strip h2{font-family:var(--font-prose);font-size:1.45rem;margin:0 0 8px}.about-strip p{color:var(--mut);margin:0 0 14px;max-width:62ch}.badge-row{display:flex;flex-wrap:wrap;gap:8px}.badge{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:999px;border:1px solid var(--bd);background:var(--bg);font-family:var(--font-mono);font-size:12px;color:var(--mut)}.section{margin-top:64px}.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:22px}.section-head h2{font-family:var(--font-prose);font-size:1.65rem;margin:0}.section-head a{font-size:14.5px;white-space:nowrap}.card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));grid-gap:22px;gap:22px}.post-card{display:flex;flex-direction:column;border:1px solid var(--bd);border-radius:var(--radius);background:var(--surface);overflow:hidden;transition:border-color .15s ease,transform .15s ease}.post-card:hover{border-color:var(--acc);transform:translateY(-2px);text-decoration:none}.post-card-cover{aspect-ratio:1200/630;width:100%;object-fit:cover;background:var(--surface2);display:block}.post-card-body{padding:16px 18px 18px;display:flex;flex-direction:column;gap:10px;flex:1 1}.post-card h3{font-family:var(--font-prose);font-size:1.12rem;line-height:1.35;margin:0;color:var(--txt)}.post-card p{margin:0;color:var(--mut);font-size:14.5px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.post-card-meta{margin-top:auto;display:flex;flex-wrap:wrap;align-items:center;gap:10px;font-family:var(--font-mono);font-size:12px;color:var(--mut)}.post-card-meta .dot:before{content:"·"}.cat-badge{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:999px;font-family:var(--font-mono);font-size:11.5px;font-weight:500;letter-spacing:.02em;color:var(--cat-color,var(--acc));border:1px solid color-mix(in srgb,var(--cat-color,var(--acc)) 45%,transparent);background:color-mix(in srgb,var(--cat-color,var(--acc)) 12%,transparent);white-space:nowrap}.cat-badge svg{width:13px;height:13px}.cat-chips{display:flex;flex-wrap:wrap;gap:9px;margin:0 0 28px;padding:0;list-style:none}.cat-chip{display:inline-flex;align-items:center;gap:7px;padding:8px 15px;border-radius:999px;border:1px solid var(--bd);background:var(--surface);color:var(--mut);font-size:14px}.cat-chip:hover{color:var(--txt);border-color:var(--acc);text-decoration:none}.cat-chip svg{width:15px;height:15px}.cat-chip[aria-current=page]{color:var(--cat-color,var(--acc));border-color:color-mix(in srgb,var(--cat-color,var(--acc)) 60%,transparent);background:color-mix(in srgb,var(--cat-color,var(--acc)) 14%,transparent)}.cat-chip-count{font-size:11.5px;opacity:.75}.cat-chip-count,.crumbs{font-family:var(--font-mono)}.crumbs{font-size:12.5px;color:var(--mut);margin:0 0 18px}.crumbs ol{list-style:none;display:flex;flex-wrap:wrap;gap:8px;margin:0;padding:0}.crumbs li+li:before{content:"/";margin-right:8px;color:var(--bd)}.crumbs a{color:var(--mut)}.crumbs a:hover{color:var(--acc)}.crumbs [aria-current=page]{color:var(--txt);max-width:46ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:inline-block;vertical-align:bottom}.page-head{margin-bottom:34px}.page-head h1{font-family:var(--font-prose);font-size:clamp(1.9rem,4.6vw,2.7rem);line-height:1.15;letter-spacing:-.015em;margin:0 0 12px}.page-head p{color:var(--mut);max-width:68ch;margin:0;font-size:1.03rem}.article-page{display:block}.article-head{max-width:780px;margin-bottom:26px}.article-head h1{font-family:var(--font-prose);font-size:clamp(1.9rem,4.8vw,2.75rem);line-height:1.14;letter-spacing:-.015em;margin:12px 0 16px;color:var(--txt)}.article-lead{font-family:var(--font-prose);font-size:1.16rem;line-height:1.62;color:var(--mut);margin:0}.article-cover{margin:26px 0 34px;border-radius:var(--radius);overflow:hidden;border:1px solid var(--bd)}.article-cover img{display:block;width:100%;height:auto}.article-body{display:grid;grid-template-columns:minmax(0,1fr);grid-gap:48px;gap:48px;align-items:start}.prose{max-width:var(--prose-width);font-size:1.06rem;line-height:1.75}.prose,.prose h2{font-family:var(--font-prose)}.prose h2{font-size:1.5rem;line-height:1.25;letter-spacing:-.01em;margin:2.4rem 0 .7rem;color:var(--txt)}.prose h3{font-size:1.2rem;margin:1.6rem 0 .45rem;color:var(--txt)}.prose p{margin:.85rem 0}.prose ul{padding-left:1.3rem}.prose li{margin:.35rem 0}.prose strong{color:var(--txt);font-weight:600}mark{background:color-mix(in srgb,var(--acc2) 20%,transparent);color:var(--txt);padding:.1em .25em;border-radius:3px}.prose code{font-family:var(--font-mono);font-size:.88em;background:var(--surface2);border:1px solid var(--bd);border-radius:4px;padding:.1em .4em}.prose .codeblock code{background:none;border:none;padding:0;font-size:inherit}.prose .blog-article-tech,.prose .blog-chart,.prose .codeblock,.prose figcaption{font-family:var(--font-sans);font-size:16px}.prose .codeblock code,.prose .codeblock pre{font-family:var(--font-mono)}.article-aside{display:none}.aside-card{border:1px solid var(--bd);border-radius:var(--radius);background:var(--surface);padding:18px}.aside-card+.aside-card{margin-top:18px}.aside-card h2{font-family:var(--font-prose);font-size:1.15rem;color:var(--acc);margin:0 0 8px}.aside-card p{font-size:14px;color:var(--mut);margin:0 0 14px}.aside-card .newsletter-form{flex-direction:column;border-radius:var(--radius-sm);padding:10px;background:var(--bg);max-width:none;margin:0}.aside-card .newsletter-form input[type=email]{padding:8px 6px}.aside-card .newsletter-form .cta{justify-content:center}.aside-card .newsletter-note{margin:10px 0 0;font-size:12px}.toc-title{display:flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--mut);margin-bottom:12px}.toc-title svg{width:14px;height:14px}.toc-list{list-style:none;margin:0;padding:0;display:grid;grid-gap:2px;gap:2px;max-height:min(56vh,520px);overflow-y:auto}.toc-list a{display:block;padding:6px 10px;border-left:2px solid transparent;border-radius:0 var(--radius-sm) var(--radius-sm) 0;color:var(--mut);font-size:13.8px;line-height:1.45}.toc-list a:hover{color:var(--txt);background:var(--surface2);text-decoration:none}.toc-list a.active{color:var(--acc);border-left-color:var(--acc);background:color-mix(in srgb,var(--acc) 10%,transparent)}.toc-mobile{border:1px solid var(--bd);border-radius:var(--radius);background:var(--surface);padding:12px 16px;margin:0 0 26px}.toc-mobile>summary{cursor:pointer;font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);list-style:none;display:flex;align-items:center;gap:8px}.toc-mobile>summary::-webkit-details-marker{display:none}.toc-mobile[open]>summary{margin-bottom:10px}.share{margin:48px 0 0;padding:20px 0;border-top:1px solid var(--bd);border-bottom:1px solid var(--bd);display:flex;flex-wrap:wrap;align-items:center;gap:12px}.share-label{font-family:var(--font-mono);font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--mut);margin-right:4px}.share-links{display:flex;flex-wrap:wrap;gap:8px}.share-links a,.share-links button{display:inline-flex;align-items:center;gap:7px;padding:8px 14px;border-radius:999px;border:1px solid var(--bd);background:transparent;color:var(--mut);font-family:inherit;font-size:13.5px;cursor:pointer}.share-links a:hover,.share-links button:hover{color:var(--txt);border-color:var(--acc);text-decoration:none}.share-links svg{width:15px;height:15px}.search-page-form{display:flex;gap:10px;max-width:640px;margin-bottom:26px}.search-page-form input{flex:1 1;background:var(--surface);border:1px solid var(--bd);border-radius:999px;padding:12px 20px;color:var(--txt);font-family:inherit;font-size:15.5px;outline:none}.search-page-form input:focus{border-color:var(--acc)}.search-hits{display:grid;grid-gap:14px;gap:14px;list-style:none;margin:0;padding:0}.search-hit{border:1px solid var(--bd);border-radius:var(--radius);background:var(--surface);padding:16px 18px}.search-hit h2{font-family:var(--font-prose);font-size:1.08rem;margin:0 0 6px}.search-hit p{margin:0;font-size:14.5px}.search-empty,.search-hit p{color:var(--mut)}.mentoring-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));grid-gap:20px;gap:20px}.mentoring-card{border:1px solid var(--bd);border-radius:var(--radius);background:var(--surface);padding:22px}.mentoring-card h3{font-family:var(--font-prose);font-size:1.15rem;margin:12px 0 8px}.mentoring-card p{color:var(--mut);margin:0;font-size:14.8px}.mentoring-card svg{width:22px;height:22px;color:var(--acc)}.step-num{display:inline-grid;place-items:center;width:30px;height:30px;border-radius:50%;background:color-mix(in srgb,var(--acc) 16%,transparent);color:var(--acc);font-family:var(--font-mono);font-size:13px;font-weight:700}.check-list{list-style:none;margin:0;padding:0;display:grid;grid-gap:12px;gap:12px}.check-list li{display:flex;align-items:flex-start;gap:11px;color:var(--txt)}.check-list svg{flex:none;width:18px;height:18px;margin-top:4px;color:var(--ok)}.check-list.negative svg{color:var(--mut)}.ds-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));grid-gap:26px;gap:26px;align-items:start}.ds-panel{border:1px solid var(--bd);border-radius:var(--radius);background:var(--bg);color:var(--txt);padding:20px}.ds-panel h2{font-family:var(--font-prose);margin:0 0 4px;font-size:1.3rem}.ds-panel .ds-blurb{color:var(--mut);font-size:14px;margin:0 0 18px}.ds-swatches{display:grid;grid-template-columns:repeat(auto-fill,minmax(84px,1fr));grid-gap:8px;gap:8px;margin-bottom:18px}.ds-swatch{border:1px solid var(--bd);border-radius:var(--radius-sm);padding:8px;font-family:var(--font-mono);font-size:10.5px;color:var(--mut)}.ds-chip{height:34px;border-radius:6px;margin-bottom:6px;border:1px solid var(--bd)}.ds-section{margin-top:18px;padding-top:16px;border-top:1px solid var(--bd)}.ds-section>h3{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--mut);margin:0 0 12px}.ds-active,.ds-section>h3{font-family:var(--font-mono)}.ds-active{display:inline-flex;align-items:center;gap:8px;padding:6px 14px;border-radius:999px;background:color-mix(in srgb,var(--ok) 16%,transparent);color:var(--ok);font-size:12px}@media (min-width:1024px){.article-body{grid-template-columns:minmax(0,1fr) 300px}.article-aside{display:block;position:-webkit-sticky;position:sticky;top:calc(var(--header-h) + 24px)}.toc-mobile{display:none}}@media (max-width:900px){.header-tools .lang-switcher,.header-tools .nav-cta,.site-nav{display:none}.nav-toggle{display:inline-flex;margin-left:auto}.site-footer-grid{grid-template-columns:1fr;gap:26px}.about-strip{grid-template-columns:1fr;text-align:center;justify-items:center}.hero{padding:36px 0 12px}}@media (max-width:560px){.container{padding:0 16px}.newsletter-form{flex-direction:column;border-radius:var(--radius);padding:10px}.newsletter-form input[type=email]{padding:8px 8px 4px}.newsletter-form .cta{justify-content:center}.card-grid{grid-template-columns:1fr}.share{flex-direction:column;align-items:flex-start}}@media print{.article-aside,.newsletter-band,.share,.site-footer,.site-header,.toc-mobile{display:none!important}}:root{--brand-green:var(--acc);--brand-green-dark:var(--acc);--brand-green-light:var(--sel);--brand-green-pastel:var(--sel);--accent-1:var(--acc);--accent-1-dark:var(--acc);--accent-2:var(--acc);--accent-3:var(--mut);--bg-primary:var(--ebg);--bg-elevated:var(--sbg);--bg-section-alt:var(--sbg);--bg-section-soft:var(--sbg);--text-primary:var(--txt);--text-muted:var(--mut);--text-soft:var(--txt);--border-soft:var(--bd);--border-mid:var(--bd);--brand-linkedin:#0a66c2;--brand-stackoverflow:#f48024}.codeblock{margin:1.2rem 0}.codeblock-header{display:flex;align-items:center;gap:10px;background:var(--sbg);border:1px solid var(--bd);border-bottom:none;border-radius:8px 8px 0 0;padding:7px 12px;font-family:var(--font-mono);font-size:12px;color:var(--mut)}.codeblock-dots{display:inline-flex;gap:6px}.codeblock-dots span{width:10px;height:10px;border-radius:50%;display:inline-block}.codeblock-dots span:first-child{background:#ff5f57}.codeblock-dots span:nth-child(2){background:#febc2e}.codeblock-dots span:nth-child(3){background:#28c840}.codeblock-title{flex:1 1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.codeblock-header button{background:transparent;color:var(--mut);border:1px solid var(--bd);border-radius:4px;font-family:var(--font-mono);font-size:11.5px;padding:3px 10px;cursor:pointer}.codeblock-header button:hover{color:var(--txt);border-color:var(--acc)}.codeblock-body .shiki,.codeblock-plain{margin:0;padding:13px 15px;border:1px solid var(--bd);border-radius:0 0 8px 8px;overflow-x:auto;font-family:var(--font-mono);font-size:13px;line-height:1.65}.codeblock-plain{background:var(--sbg);color:var(--txt);white-space:pre}.shiki span{background-color:transparent!important}.blog-chart{margin:1.4rem 0}.blog-chart-title{font-family:var(--font-mono);font-size:12.5px;color:var(--mut);margin-bottom:8px}.blog-chart-caption{font-size:13.5px;color:var(--mut);margin:8px 0 0}.blog-chart-caption a{color:var(--acc);font-weight:600;text-decoration:underline}.blog-chart svg,.blog-hero svg,.favorite-cover{max-width:100%;height:auto}.favorite-cover{display:block;border-radius:16px;border:1px solid var(--bd)}.blog-compare{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));grid-gap:12px;gap:12px}.blog-compare-col{border:1px solid var(--bd);border-radius:8px;padding:12px 14px;background:var(--sbg)}.blog-donut-legend{display:flex;flex-direction:column;gap:6px}.blog-timeline{display:grid;grid-gap:10px;gap:10px}.blog-timeline-step{border-left:2px solid var(--acc);padding-left:12px}.blog-article-meta{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-family:var(--font-mono);font-size:12px;color:var(--mut);margin:4px 0 10px}.blog-pill{border:1px solid var(--bd);background:var(--sel);color:var(--txt);border-radius:10px;padding:2px 10px}.blog-dot{opacity:1}.blog-article-tech,.blog-card-tech{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:6px 0 4px}.blog-article-tech a,.blog-article-tech span,.blog-card-tech img{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-family:var(--font-mono);color:var(--mut)}.blog-article-tech img,.blog-card-tech img{width:18px;height:18px}.blog-article-tech-label,.blog-card-tech-more{color:var(--mut);font-size:12px}.blog-bullets li{margin:.35rem 0}.blog-faq{border:1px solid var(--bd);border-radius:8px;background:var(--sbg);margin:.6rem 0;padding:0}.blog-faq summary{cursor:pointer;padding:10px 14px;font-weight:600;color:var(--txt)}.blog-faq p{padding:0 14px 12px;margin:0}.blog-related-list{list-style:none;padding:0;display:grid;grid-gap:10px;gap:10px}.blog-related-list a{display:block;border:1px solid var(--bd);border-radius:8px;background:var(--sbg);padding:10px 14px}.blog-related-list a:hover{border-color:var(--acc);text-decoration:none}.blog-related-list strong{color:var(--acc);display:block}.blog-related-list span{color:var(--mut);font-size:13.5px}.actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:.8rem}.cta{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-mono);font-size:13px;border-radius:6px;padding:8px 16px;cursor:pointer;border:1px solid var(--bd);background:transparent;color:var(--txt)}.cta.primary{background:var(--acc);border-color:var(--acc);color:var(--ebg)}.cta.primary:hover{filter:brightness(1.1)}.cta.secondary:hover{border-color:var(--acc);text-decoration:none}.file-row{display:flex;align-items:center;gap:9px;padding:6px 10px;border-radius:6px;font-family:var(--font-mono);font-size:13px;color:var(--txt)}.file-row:hover{background:var(--sel);text-decoration:none}.file-row svg{width:15px;height:15px;color:var(--mut);flex:none}.file-row .file-meta{margin-left:auto;color:var(--mut);font-size:11.5px;white-space:nowrap}.modal-backdrop{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center;z-index:60;padding:16px;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,visibility 0s linear .18s}.modal-backdrop.open{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .18s ease}.modal{position:relative;background:var(--sbg);color:var(--txt);border:1px solid var(--bd);border-radius:10px;max-width:460px;width:100%;padding:20px 22px;max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);overflow-y:auto;transform:translateY(10px);transition:transform .18s ease}.modal-backdrop.open .modal{transform:none}.modal h3{margin:0 0 6px;padding-right:30px}.modal-actions{display:flex;flex-direction:column;gap:10px;margin-top:14px}.modal-btn{display:flex;align-items:center;justify-content:center;gap:8px;border-radius:6px;border:1px solid var(--bd);background:var(--ebg);color:var(--txt);font-size:14px;padding:10px 14px;cursor:pointer}.modal-btn:hover{border-color:var(--acc)}.modal-btn svg{width:16px;height:16px;flex:none}.modal-close{position:absolute;top:10px;right:10px;display:inline-flex;align-items:center;justify-content:center;width:28px;height:28px;padding:0;border-radius:6px;background:transparent;border:none;color:var(--mut);cursor:pointer}.modal-close svg{width:16px;height:16px}.modal-close:after{content:"";position:absolute;inset:-6px}.modal-close:hover{color:var(--txt);background:var(--ebg)}.modal-email-fallback,.modal-email-status{font-size:12.5px;color:var(--mut)}body.modal-open{overflow:hidden}.chapter{border:1px solid var(--bd);border-radius:10px;background:var(--sbg);padding:14px 18px;margin:1rem 0}.chapter-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:4px}.chapter-head h3{margin:0}.chapter-icons{display:inline-flex;gap:6px;align-items:center}.chapter-icons img{width:20px;height:20px}.about-page .prose{max-width:none}.about-page .intro{font-size:17px}.stackgroups{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));grid-gap:12px;gap:12px}.stackgroup{border:1px solid var(--bd);border-radius:10px;background:var(--sbg);padding:12px 14px}.stackgroup-label{font-family:var(--font-mono);font-size:12px;color:var(--mut);text-transform:uppercase;letter-spacing:.06em;margin-bottom:8px}.techstack{display:flex;flex-wrap:wrap;gap:8px}.techstack li,.techstack span{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-family:var(--font-mono);color:var(--txt);border:1px solid var(--bd);border-radius:6px;padding:3px 8px;list-style:none}.techstack img{width:16px;height:16px}.contact-email-note{font-family:var(--font-mono);color:var(--mut)}.modal-btn.linkedin:hover{border-color:var(--acc)}.repo-card{border:1px solid var(--bd);border-radius:10px;background:var(--sbg);padding:14px 18px;margin:1rem 0}.repo-card-featured{border-color:var(--acc)}.repo-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px;font-family:var(--font-mono);font-size:15px}.repo-stars{display:inline-flex;align-items:center;gap:5px;color:var(--mut);font-size:12.5px}.repo-stars svg{width:14px;height:14px}.repo-summary{margin:8px 0 4px}.repo-why{color:var(--txt);margin:4px 0 8px}.repo-tech{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:0 0 8px;font-family:var(--font-mono);font-size:12px}.repo-tech strong{color:var(--mut);font-weight:600}.repo-tech-pill{display:inline-flex;align-items:center;gap:6px;padding:2px 7px;border:1px solid var(--bd);border-radius:4px;background:var(--ebg);color:var(--txt)}.repo-tech-pill img{width:14px;height:14px}.repo-tech-pill-link:hover{text-decoration:none;border-color:var(--acc)}.repo-meta{gap:8px;font-family:var(--font-mono);font-size:12px;color:var(--mut)}.repo-meta,.social-links{display:flex;flex-wrap:wrap;align-items:center;margin:0}.social-links{list-style:none;padding:0;gap:14px}.social-links a{display:inline-flex;align-items:center;gap:6px;color:inherit;text-decoration:none}.social-links a:hover{color:var(--acc)}.social-links svg{width:15px;height:15px;flex:none}.social-links .social-linkedin svg{color:var(--brand-linkedin)}.social-links .social-stackoverflow svg{color:var(--brand-stackoverflow)}.social-links-row{margin-top:10px;gap:16px}.social-links-row a{font-size:12px;color:var(--mut)}.social-links-page{margin:0 0 20px;gap:16px}.social-links-page a{font-size:13px;color:var(--mut)}.modal-btn.stackoverflow:hover{border-color:var(--acc)}