:root{--bg: #f4f8ff;--line: #d7e4f3;--text: #11253d;--muted: #56718e;--brand: #0ea5a4;--brand-2: #2563eb;--card: rgba(255, 255, 255, .9);--shadow: 0 14px 40px rgba(38, 71, 110, .12)}*{box-sizing:border-box}html,body{margin:0;padding:0;color:var(--text);background:radial-gradient(circle at 20% -10%,#dff3ff 0%,transparent 45%),radial-gradient(circle at 100% 0%,#e4f0ff 0%,transparent 38%),var(--bg);font-family:Space Grotesk,Segoe UI,sans-serif}a{color:inherit;text-decoration:none}p{line-height:1.7}.bg-grid{position:fixed;inset:0;z-index:-1;opacity:.36;background-image:linear-gradient(to right,rgba(100,135,173,.13) 1px,transparent 1px),linear-gradient(to bottom,rgba(100,135,173,.13) 1px,transparent 1px);background-size:30px 30px;mask-image:radial-gradient(circle at center,black 30%,transparent 80%)}.shell{width:min(1120px,calc(100% - 2rem));margin:0 auto}.site-header{position:sticky;top:0;z-index:20;backdrop-filter:blur(12px);background:#f4f8ffc7;border-bottom:1px solid rgba(109,137,170,.28)}.header-inner{display:flex;align-items:center;justify-content:space-between;min-height:74px;gap:1rem}.brand{display:inline-flex;align-items:center;gap:.65rem}.brand-mark{display:inline-grid;place-items:center;width:34px;height:34px;border-radius:8px;font:600 .8rem IBM Plex Mono,monospace;color:#fff;background:linear-gradient(135deg,var(--brand),var(--brand-2))}.brand-text{font:500 1rem IBM Plex Mono,monospace;letter-spacing:.03em;color:#1f4465}.nav{display:flex;align-items:center;gap:.6rem;flex-wrap:wrap}.nav-dropdown{position:relative}.nav-link{padding:.45rem .8rem;border-radius:999px;color:var(--muted);font-size:.95rem;transition:.18s ease}.nav-link:hover,.nav-link.is-active{color:var(--text);background:#2563eb1f}.nav-dropdown-menu{position:absolute;top:calc(100% + .35rem);left:0;min-width:260px;max-height:min(66vh,520px);overflow:auto;display:grid;gap:.25rem;padding:.4rem;border-radius:12px;border:1px solid rgba(86,113,142,.25);background:#fffffff5;box-shadow:0 14px 28px #1d385424;opacity:0;transform:translateY(-6px);pointer-events:none;transition:opacity .16s ease,transform .16s ease;z-index:40}.nav-blog-menu{min-width:370px;max-width:min(74vw,390px);max-height:none;overflow:visible;padding:.42rem}@media(hover:hover)and (pointer:fine){.nav-dropdown:hover .nav-dropdown-menu,.nav-dropdown:focus-within .nav-dropdown-menu{opacity:1;transform:translateY(0);pointer-events:auto}}.nav-sub-link-all{margin-bottom:.25rem;border:1px solid rgba(86,113,142,.24);background:#2563eb0d}.nav-blog-flyout{position:relative;display:grid;grid-auto-rows:min-content;align-content:start;gap:.2rem;min-height:260px;padding-right:210px}.nav-flyout-group{position:static}.nav-flyout-trigger{appearance:none;width:146px;border:0;border-radius:8px;padding:.42rem .52rem;text-align:left;color:#34526f;font:500 .88rem Space Grotesk,Segoe UI,sans-serif;background:transparent;cursor:pointer}.nav-flyout-group:hover .nav-flyout-trigger,.nav-flyout-group.is-active .nav-flyout-trigger,.nav-flyout-group:focus-within .nav-flyout-trigger{color:#173755;background:#2563eb1f}.nav-flyout-panel{position:absolute;top:0;left:156px;width:calc(100% - 156px);max-height:260px;overflow-y:auto;padding-left:.34rem;border-left:1px dashed rgba(86,113,142,.28);opacity:0;transform:translate(6px);pointer-events:none;transition:opacity .15s ease,transform .15s ease}.nav-flyout-group:hover .nav-flyout-panel,.nav-flyout-group.is-active .nav-flyout-panel,.nav-flyout-group:focus-within .nav-flyout-panel{opacity:1;transform:translate(0);pointer-events:auto}.nav-blog-flyout.has-active .nav-flyout-group:not(.is-active) .nav-flyout-panel{opacity:0;transform:translate(6px);pointer-events:none}.nav-flyout-empty{position:absolute;top:0;left:156px;width:calc(100% - 156px);height:260px;display:grid;place-items:center;padding:.5rem .44rem;color:#6b829b;font:500 .84rem IBM Plex Mono,monospace;letter-spacing:.03em;border-left:1px dashed rgba(86,113,142,.28);pointer-events:none;opacity:1;transition:opacity .14s ease}.nav-blog-flyout.has-active .nav-flyout-empty,.nav-flyout-group:hover~.nav-flyout-empty,.nav-flyout-group:focus-within~.nav-flyout-empty{opacity:0}.nav-sub-link{display:block;padding:.36rem .44rem;border-radius:8px;color:#2f4b67;font-size:.9rem;line-height:1.35}.nav-sub-link:hover{background:#2563eb1a;color:#183654}.nav-sub-group+.nav-sub-group{margin-top:.3rem;padding-top:.3rem;border-top:1px dashed rgba(86,113,142,.22)}.nav-sub-title{margin:.15rem .4rem .2rem;color:#56718e;font:500 .74rem IBM Plex Mono,monospace;letter-spacing:.04em;text-transform:uppercase}.nav-sub-block+.nav-sub-block{margin-top:.18rem}.nav-sub-subtitle{margin:.15rem .44rem .08rem;color:#6b829b;font-size:.75rem}.nav-sub-block .nav-sub-link{margin-left:0}.header-cta{padding:.58rem .95rem;border-radius:10px;border:1px solid rgba(37,99,235,.42);color:var(--brand-2);font-size:.9rem;transition:transform .18s ease,background .18s ease}.header-cta:hover{transform:translateY(-1px);background:#2563eb1a}.page-main{padding-block:2.8rem 3.4rem}.kicker{margin:0;color:#0f766e;font:500 .84rem IBM Plex Mono,monospace;letter-spacing:.09em;text-transform:uppercase}.page-title{margin:.75rem 0 0;font-size:clamp(1.85rem,4vw,3rem);line-height:1.15}.page-subtitle{margin:1rem 0 0;color:var(--muted);max-width:70ch}.card{border:1px solid var(--line);background:var(--card);border-radius:18px;padding:1.2rem;box-shadow:var(--shadow)}.hero{display:grid;grid-template-columns:1.15fr .85fr;gap:1.1rem;animation:in-up .5s ease both}.metric-grid{display:grid;gap:.75rem;grid-template-columns:repeat(2,minmax(0,1fr))}.metric-value{margin:0;font:600 1.5rem IBM Plex Mono,monospace}.metric-label{margin:.2rem 0 0;color:var(--muted);font-size:.85rem}.section-title{margin:0;font-size:1.45rem}.section-head{display:flex;align-items:end;justify-content:space-between;gap:1rem;margin:2.2rem 0 .95rem}.section-note{margin:0;color:var(--muted);font-size:.92rem}.featured-grid{display:grid;gap:.85rem;grid-template-columns:repeat(2,minmax(0,1fr))}.featured-card h3{margin:.2rem 0 .45rem}.featured-card p{margin:0;color:#3f5f7d}.featured-card{display:flex;flex-direction:column;min-height:100%}.featured-card .slide-actions{margin-top:auto;padding-top:.9rem}.slide-actions{display:flex;flex-wrap:wrap;gap:.5rem}.btn{display:inline-flex;align-items:center;justify-content:center;border-radius:9px;padding:.52rem .84rem;border:1px solid transparent;font-size:.9rem;transition:.18s ease}.btn-primary{color:#fff;background:linear-gradient(120deg,var(--brand),var(--brand-2))}.btn-primary:hover{filter:brightness(1.06)}.btn-ghost{border-color:#56718e5c;color:#31506f}.btn-ghost:hover{border-color:#56718e99;background:#2563eb1a}.project-list,.post-list,.blog-grid{display:grid;gap:.85rem}.project-list{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.project-card h3,.post-card h3{margin-top:0;margin-bottom:.42rem}.meta-line{color:var(--muted);font:400 .84rem IBM Plex Mono,monospace}.article-excerpt{margin:.42rem 0 0;color:#2f4b67}.article-excerpt strong{color:#1f4465}.tag-row{display:flex;flex-wrap:wrap;gap:.42rem;margin-top:.7rem}.tag{appearance:none;border-radius:999px;border:1px solid rgba(86,113,142,.35);padding:.2rem .55rem;font:400 .78rem IBM Plex Mono,monospace;color:#2f4a67;background:#fff9}button.tag{cursor:pointer}.filter-row{gap:.5rem}.filter-search{width:100%;border-radius:10px;border:1px solid rgba(86,113,142,.35);padding:.58rem .7rem;font:inherit;color:var(--text);background:#ffffffeb}.filter-search:focus{outline:none;border-color:#2563eb80;box-shadow:0 0 0 3px #2563eb1f}.filter-tag:hover,.tag-inline-filter:hover{border-color:#2563eb73;background:#2563eb1a}.filter-tag.is-active{color:#fff;border-color:transparent;background:linear-gradient(120deg,var(--brand),var(--brand-2))}.post-card.is-hidden{display:none}.blog-grid{grid-template-columns:1fr 1fr}.about-list{margin:0;padding-left:1.2rem;color:#2f4b67}.about-list li{margin-bottom:.45rem}.site-footer{border-top:1px solid rgba(109,137,170,.28);padding:1.1rem 0 2.3rem;color:var(--muted);font-size:.9rem}.footer-links{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-top:.3rem}.footer-links a{text-decoration:underline;text-decoration-color:#56718e73}.article{max-width:78ch;margin-inline:auto;animation:in-up .42s ease both}.article>:first-child{margin-top:0}.article h1{margin-bottom:.4rem;line-height:1.12}.article h2{margin-top:1.9rem;line-height:1.22;scroll-margin-top:6.2rem}.article h3{line-height:1.25;scroll-margin-top:6.2rem}.article p,.article li{color:#2f4b67;line-height:1.78}.article p+p,.article ul+p,.article ol+p{margin-top:.95rem}.article ul,.article ol{padding-left:1.35rem}.article table{width:100%;border-collapse:collapse;margin:1rem 0;background:#ffffffb8;font-size:.94rem}.article th,.article td{border:1px solid rgba(86,113,142,.28);padding:.45rem .58rem;vertical-align:top}.article th{color:#17344e;background:#e2ecfab8;font-weight:600}.article li+li{margin-top:.45rem}.article a{text-decoration:underline;text-decoration-color:#2563eb73;text-underline-offset:.14em}.article a:hover{text-decoration-color:#2563ebcc}.blog-article{max-width:86ch}.blog-layout{width:min(1120px,100%);margin-inline:auto}.blog-layout.has-outline{display:grid;grid-template-columns:minmax(0,1fr) 280px;column-gap:2rem;align-items:start;justify-content:stretch}.blog-layout.has-outline .blog-article{max-width:none;margin-inline:0}.blog-outline{position:sticky;top:96px;align-self:start;border-left:1px solid rgba(86,113,142,.28);padding-left:.9rem;max-height:calc(100vh - 112px);overflow:hidden}.blog-outline-label{margin:0;font:500 .8rem IBM Plex Mono,monospace;color:#56718e;text-transform:uppercase;letter-spacing:.05em}.blog-outline-nav{display:grid;gap:.2rem;margin-top:.55rem;max-height:calc(100vh - 152px);overflow-y:auto;overscroll-behavior:contain;padding-right:.3rem;scrollbar-gutter:stable;scrollbar-width:thin;scrollbar-color:transparent transparent}.blog-outline-nav:hover,.blog-outline-nav:focus-within{scrollbar-color:rgba(86,113,142,.22) transparent}.blog-outline-nav::-webkit-scrollbar{width:8px}.blog-outline-nav::-webkit-scrollbar-thumb{border-radius:999px;background:transparent}.blog-outline-nav:hover::-webkit-scrollbar-thumb,.blog-outline-nav:focus-within::-webkit-scrollbar-thumb{background:#56718e38}.blog-outline-nav::-webkit-scrollbar-track{background:transparent}.blog-outline-link{display:block;padding:.27rem .42rem;border-radius:8px;color:#56718e;line-height:1.35;transition:color .18s ease,background .18s ease}.blog-outline-link:hover{color:#26476e;background:#2563eb14}.blog-outline-link.is-active{color:#11253d;background:#2563eb1f}.blog-outline-link.is-sub{margin-left:.65rem;font-size:.92rem}.blog-outline-mobile{display:none;position:fixed;right:max(.8rem,env(safe-area-inset-right));bottom:max(.8rem,env(safe-area-inset-bottom));z-index:65}.blog-outline-mobile summary{cursor:pointer;list-style:none;min-width:3rem;height:3rem;border-radius:999px;display:inline-flex;align-items:center;justify-content:center;padding:0 .88rem;font:500 .84rem IBM Plex Mono,monospace;color:#fff;background:linear-gradient(135deg,#1f6ae6,#0ea5a4);box-shadow:0 12px 22px #11253d40}.blog-outline-mobile summary::-webkit-details-marker{display:none}.blog-outline-mobile[open] summary{filter:brightness(1.06)}.blog-outline-mobile .blog-outline-nav{position:fixed;right:max(.8rem,env(safe-area-inset-right));bottom:calc(max(.8rem,env(safe-area-inset-bottom)) + 3.35rem);width:min(86vw,320px);max-height:min(58vh,420px);margin-top:0;padding:.62rem;border:1px solid rgba(86,113,142,.3);border-radius:12px;background:#fffffffa;box-shadow:0 20px 34px #11253d38;overflow-y:auto;overscroll-behavior:contain}.project-article{max-width:78ch}.about-article{max-width:72ch}.back-link{display:inline-block;margin-top:1.2rem;color:#0f5f8b}@keyframes in-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@media(max-width:920px){.hero,.blog-grid,.blog-layout.has-outline{grid-template-columns:1fr}.blog-outline{display:none}.blog-outline-mobile{display:block}.header-inner{min-height:88px;align-items:start;padding-block:.7rem;flex-wrap:wrap}.nav{order:3;width:100%}.nav-blog-menu{display:none}.nav-blog-flyout{min-height:0;padding-right:0}.nav-flyout-trigger{width:100%;cursor:pointer}.nav-flyout-panel{position:static;width:auto;max-height:none;margin-top:.2rem;margin-bottom:.35rem;padding-top:.3rem;padding-left:0;border-left:0;border-top:1px dashed rgba(86,113,142,.22);opacity:1;transform:none;pointer-events:auto}.nav-flyout-empty{display:none}.header-cta{margin-left:auto}.featured-grid{grid-template-columns:1fr}.article table{display:block;overflow-x:auto;white-space:nowrap}}@media(max-width:560px){.metric-grid{grid-template-columns:1fr}.page-main{padding-top:2rem}.section-head{align-items:start;flex-direction:column}}
