@font-face{font-family:manrope;src:url(../media/manrope_latin-s.p.1sj6eobyi31rd.woff2)format("woff2");font-display:swap;font-weight:200 800}@font-face{font-family:manrope Fallback;src:local(Arial);ascent-override:106.45%;descent-override:29.96%;line-gap-override:0.0%;size-adjust:100.14%}.manrope_26b02dfd-module__tFBufq__className{font-family:manrope,manrope Fallback}.manrope_26b02dfd-module__tFBufq__variable{--font-manrope:"manrope", "manrope Fallback"}
@font-face{font-family:cabinSketch;src:url(../media/cabin_sketch_700-s.p.2ulxn83l1s4bz.woff2)format("woff2");font-display:swap;font-weight:700}@font-face{font-family:cabinSketch Fallback;src:local(Arial);ascent-override:87.46%;descent-override:29.85%;line-gap-override:0.0%;size-adjust:99.82%}.cabinsketch_9307baa3-module__Xs6xyG__className{font-family:cabinSketch,cabinSketch Fallback;font-weight:700}.cabinsketch_9307baa3-module__Xs6xyG__variable{--font-cabin-sketch:"cabinSketch", "cabinSketch Fallback"}
:root{--bg:#faf8f3;--ink:#211e19;--ink-soft:#55503f;--muted:#777166;--faint:#797163;--line:#e5e0d3;--line-strong:#d8d2c2;--card:#fffdf9;--wip-bg:#f4f1e9;--shadow:0 1px 2px #3c34240d, 0 8px 24px #3c34240f;--dock-bg:#fffdf8e0;--dock-shadow:0 2px 6px #322c1e0f, 0 18px 44px #322c1e1f;--btn-grad-a:#35322b;--btn-grad-b:#17150f;--btn-text:#f5f2ea;--fade-from:#faf8f300;--fade-to:#faf8f3;--focus:#211e19;--duration-fast:.13s;--duration-hover:.15s;--duration-menu:.16s;--duration-base:.2s;--duration-expand:.22s;--heat-0:#ede8da;--heat-1:#d5c9ab;--heat-2:#b0a077;--heat-3:#7d6f4e;--heat-4:#423a28;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}:root[data-theme=dark]{--bg:#131210;--ink:#ece8dd;--ink-soft:#c9c3b4;--muted:#97917f;--faint:#87806c;--line:#29261f;--line-strong:#383428;--card:#191712;--wip-bg:#1a1813;--shadow:0 1px 2px #0000004d, 0 8px 24px #00000059;--dock-bg:#1a1813e6;--dock-shadow:0 2px 6px #0006, 0 18px 44px #00000080;--btn-grad-a:#efeadd;--btn-grad-b:#cfc8b6;--btn-text:#17150f;--fade-from:#13121000;--fade-to:#131210;--focus:#ece8dd;--heat-0:#24211b;--heat-1:#413a28;--heat-2:#6b5f3e;--heat-3:#a3925f;--heat-4:#e3d5a8;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:smooth}body{font-family:var(--font-manrope), "Avenir Next", "Segoe UI", sans-serif;background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;transition:background-color var(--duration-base) ease, color var(--duration-base) ease;font-size:15px;line-height:1.65}.page{max-width:640px;margin:0 auto;padding:96px 24px 200px}section{scroll-margin-top:48px}a{color:inherit}button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:0}:focus-visible{outline:2px solid var(--focus);outline-offset:3px;border-radius:3px}.label{letter-spacing:.14em;text-transform:uppercase;color:var(--faint);font-size:11px;font-weight:700}.hero{text-align:center;flex-direction:column;align-items:center;display:flex}.hero .greeting{color:var(--ink-soft);margin-bottom:10px;font-size:15px;font-weight:600}.hero h1{font-family:var(--font-cabin-sketch), var(--font-manrope), cursive;letter-spacing:.01em;margin-bottom:6px;font-size:52px;font-weight:700;line-height:1.05}.hero .definition{color:var(--muted);letter-spacing:.02em;margin-bottom:26px;font-size:14px}.sep{color:var(--faint);margin:0 4px}.hero .intro{color:var(--muted);text-align:left;align-self:stretch}.section-gap{margin-top:68px}.section-head{justify-content:space-between;align-items:baseline;margin-bottom:26px;display:flex}.head-link{color:var(--muted);border-bottom:1px solid var(--line-strong);transition:color var(--duration-hover) ease, border-color var(--duration-hover) ease;padding-bottom:1px;font-size:12px;font-weight:600;text-decoration:none}.head-link:hover{color:var(--ink);border-color:var(--ink-soft)}.entry{border-top:1px solid var(--line);padding:20px 0}.entry:last-of-type{border-bottom:1px solid var(--line)}.entry-row{justify-content:space-between;align-items:center;gap:16px;display:flex}.entry-lead{align-items:center;gap:13px;display:flex}.entry-logo{border:1px solid var(--line-strong);background:var(--card);width:40px;height:40px;box-shadow:var(--shadow);border-radius:11px;flex:none}:root[data-theme=dark] .entry-logo{filter:invert()hue-rotate(180deg);border-color:var(--line-strong);box-shadow:none;background:0 0}.entry-title{font-size:15px;font-weight:700}.entry-org{color:var(--muted);margin-top:1px;font-size:13px;font-weight:500}.entry-meta{color:var(--faint);white-space:nowrap;font-variant-numeric:tabular-nums;font-size:12px;font-weight:600}.entry-desc{color:var(--muted);max-height:3.3em;transition:max-height var(--duration-expand) ease;margin-top:10px;font-size:14px;position:relative;overflow:hidden}.entry-desc:after{content:"";background:linear-gradient(var(--fade-from), var(--fade-to));pointer-events:none;height:2em;transition:opacity var(--duration-expand) ease;position:absolute;inset:auto 0 0}.entry.open .entry-desc{max-height:22em}.entry.open .entry-desc:after{opacity:0}.entry-links{align-items:center;gap:14px;margin-top:14px;display:flex}.entry-links a{color:var(--muted);border-bottom:1px solid var(--line-strong);transition:color var(--duration-hover) ease, border-color var(--duration-hover) ease;align-items:baseline;gap:3px;padding-bottom:1px;font-size:12px;font-weight:600;text-decoration:none;display:inline-flex}.entry-links a:hover{color:var(--ink);border-color:var(--ink-soft)}.entry-links a span{font-size:10px}.view-more{color:var(--ink-soft);align-items:center;gap:5px;margin-top:8px;padding:2px 0;font-size:12px;font-weight:700;display:inline-flex}.view-more .chev{transition:transform var(--duration-base) ease;font-size:10px}.entry.open .view-more .chev{transform:rotate(180deg)}.aside-note{border-left:2px solid var(--line-strong);color:var(--muted);max-width:52ch;margin-top:44px;padding-left:18px;font-size:14px;font-style:italic}.tech-tag{letter-spacing:.06em;text-transform:uppercase;color:var(--faint);border:1px solid var(--line-strong);white-space:nowrap;border-radius:999px;padding:2px 9px;font-size:11px;font-weight:700}.wip-block{border:1px dashed var(--line-strong);background:repeating-linear-gradient(-45deg, transparent 0 14px, var(--line) 14px 15px), var(--wip-bg);border-radius:10px;justify-content:center;align-items:center;height:168px;display:flex}.wip-block p{letter-spacing:.12em;text-transform:uppercase;color:var(--muted);background:var(--bg);border:1px solid var(--line);border-radius:999px;padding:6px 16px;font-size:12px;font-weight:700}.contrib-block{border:1px solid var(--line-strong);background:var(--card);border-radius:10px;padding:14px 14px 12px;position:relative}.contrib-tooltip{background:var(--ink);color:var(--bg);white-space:nowrap;pointer-events:none;z-index:10;border-radius:6px;padding:4px 9px;font-size:11px;font-weight:600;position:absolute;transform:translate(-50%,calc(-100% - 7px))}.contrib-scroll{overflow-x:auto}.contrib-inner{width:max-content;margin:0 auto}.contrib-months{height:16px;color:var(--muted);margin-bottom:8px;font-size:11px;font-weight:600;position:relative}.contrib-months .contrib-month{position:absolute;top:0}.contrib-grid{gap:2px;width:max-content;display:flex}.contrib-week{flex-direction:column;gap:2px;display:flex}.contrib-day{background:var(--heat-0);border-radius:2px;width:8px;height:8px}.contrib-day[data-level="1"]{background:var(--heat-1)}.contrib-day[data-level="2"]{background:var(--heat-2)}.contrib-day[data-level="3"]{background:var(--heat-3)}.contrib-day[data-level="4"]{background:var(--heat-4)}.contrib-foot{justify-content:space-between;align-items:center;gap:16px;margin-top:10px;display:flex}.contrib-total{color:var(--faint);font-variant-numeric:tabular-nums;font-size:12px;font-weight:600}.contrib-legend{color:var(--faint);align-items:center;gap:3px;font-size:11px;font-weight:600;display:flex}.contrib-legend span:first-child{margin-right:3px}.contrib-legend span:last-child{margin-left:3px}.stack-grid{grid-template-columns:repeat(3,1fr);gap:30px 28px;display:grid}.stack-group h3{letter-spacing:.12em;text-transform:uppercase;color:var(--faint);margin-bottom:12px;font-size:11px;font-weight:700}.stack-group ul{list-style:none}.stack-group li{color:var(--ink-soft);align-items:center;gap:9px;padding:4px 0;font-size:14px;font-weight:500;display:flex}.stack-group svg{width:15px;height:15px;color:var(--faint);flex:none}.statement{color:var(--ink-soft);max-width:54ch;font-size:17px;line-height:1.75}.statement em{color:var(--ink);font-style:italic}.contact{border-top:1px solid var(--line);justify-content:space-between;align-items:center;gap:24px;padding-top:40px;display:flex}.contact-copy h2{margin-bottom:4px;font-size:18px;font-weight:800}.contact-copy p{color:var(--muted);font-size:14px}.contact-btn{background:linear-gradient(180deg, var(--btn-grad-a), var(--btn-grad-b));color:var(--btn-text);box-shadow:var(--shadow);transition:transform var(--duration-hover) ease, box-shadow var(--duration-hover) ease;white-space:nowrap;border-radius:999px;align-items:center;gap:8px;padding:11px 22px;font-size:13px;font-weight:700;text-decoration:none;display:inline-flex}.contact-btn:hover{transform:translateY(-1px)}.contact-btn svg{width:14px;height:14px}.dock{left:50%;bottom:calc(18px + env(safe-area-inset-bottom));background:var(--dock-bg);-webkit-backdrop-filter:blur(14px);border:1px solid var(--line-strong);width:350px;max-width:calc(100vw - 24px);height:68px;box-shadow:var(--dock-shadow);z-index:50;border-radius:999px;justify-content:space-evenly;align-items:center;padding:0 10px;display:flex;position:fixed;transform:translate(-50%)}.dock-btn{width:46px;height:46px;color:var(--ink-soft);transition:background-color var(--duration-hover) ease, color var(--duration-hover) ease;border-radius:999px;justify-content:center;align-items:center;display:inline-flex}.dock-btn:hover{background:var(--line);color:var(--ink)}.dock-btn svg{width:19px;height:19px}.dock-btn .icon-sun{display:none}:root[data-theme=dark] .dock-btn .icon-sun{display:block}:root[data-theme=dark] .dock-btn .icon-moon{display:none}.dock-sep{background:var(--line-strong);width:1px;height:26px}.dock-menu{left:50%;bottom:calc(98px + env(safe-area-inset-bottom));background:var(--dock-bg);-webkit-backdrop-filter:blur(14px);border:1px solid var(--line-strong);box-shadow:var(--dock-shadow);z-index:49;opacity:0;visibility:hidden;min-width:190px;transition:opacity var(--duration-menu) ease, transform var(--duration-menu) ease, visibility var(--duration-menu);border-radius:16px;padding:8px;position:fixed;transform:translate(-50%)translateY(6px)}.dock-menu.open{opacity:1;visibility:visible;transform:translate(-50%)translateY(0)}.dock-menu a{color:var(--ink-soft);transition:background-color var(--duration-fast) ease, color var(--duration-fast) ease;border-radius:10px;justify-content:space-between;align-items:center;gap:20px;padding:10px 14px;font-size:13px;font-weight:600;text-decoration:none;display:flex}.dock-menu a:hover{background:var(--line);color:var(--ink)}.dock-menu a span.idx{color:var(--faint);font-variant-numeric:tabular-nums;font-size:10px}.breadcrumb{color:var(--muted);margin-bottom:44px;font-size:12px;font-weight:600}.breadcrumb ol{flex-wrap:wrap;align-items:center;gap:8px;list-style:none;display:flex}.breadcrumb li{align-items:center;gap:8px;display:flex}.breadcrumb a{border-bottom:1px solid var(--line-strong);transition:color var(--duration-hover) ease, border-color var(--duration-hover) ease;padding-bottom:1px;text-decoration:none}.breadcrumb a:hover{color:var(--ink);border-color:var(--ink-soft)}.breadcrumb [aria-current=page]{color:var(--ink-soft)}.breadcrumb-sep{color:var(--faint)}.page-head{justify-content:space-between;align-items:flex-end;gap:24px;display:flex}.page-head h1{font-size:18px;font-weight:800}.page-head p{color:var(--muted);margin-top:4px;font-size:14px}.page-section{margin-top:40px}.meta-row{color:var(--faint);font-variant-numeric:tabular-nums;align-items:center;gap:10px;font-size:12px;font-weight:600;display:flex}.article-row{border-top:1px solid var(--line);grid-template-columns:96px minmax(0,1fr);gap:20px;padding:22px 0;display:grid}.article-row:last-of-type{border-bottom:1px solid var(--line)}.article-rail{flex-direction:column;gap:2px;display:flex}.article-year{font-variant-numeric:tabular-nums;font-size:15px;font-weight:700}.article-row .entry-title a{transition:color var(--duration-hover) ease;text-decoration:none}.article-row .entry-title a:hover{color:var(--ink-soft)}.article-excerpt{color:var(--muted);margin-top:6px;font-size:14px}.article-tags{align-items:center;gap:12px;margin-top:12px;display:flex}.article-row-inline{padding:20px 0;display:block}.article-line{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.article-row-inline .article-excerpt{margin-top:6px}.article-head h1{margin-top:14px;font-size:18px;font-weight:800;line-height:1.4}.article-lede{color:var(--ink-soft);margin-top:14px;font-size:17px;line-height:1.75}.article-body{margin-top:8px}.article-body h2{letter-spacing:.14em;text-transform:uppercase;color:var(--faint);margin-top:44px;font-size:11px;font-weight:700}.article-body h2:first-child{margin-top:36px}.article-body h3{margin-top:28px;font-size:15px;font-weight:700}.article-body p,.article-body ul,.article-body ol{color:var(--ink-soft);margin-top:18px}.article-body ul,.article-body ol{padding-left:22px}.article-body li{margin-top:6px}.article-body a{border-bottom:1px solid var(--line-strong);transition:border-color var(--duration-hover) ease;font-weight:600;text-decoration:none}.article-body a:hover{border-color:var(--ink-soft)}.article-body strong{color:var(--ink);font-weight:700}.article-body em{color:var(--ink);font-style:italic}.article-body blockquote{border-left:2px solid var(--line-strong);color:var(--muted);max-width:52ch;margin-top:28px;padding-left:18px;font-size:14px;font-style:italic}.article-body blockquote p{color:inherit;margin-top:0}.article-body img{border:1px solid var(--line-strong);background:var(--card);border-radius:10px;width:100%;height:auto;margin-top:32px;display:block}.article-body code{background:var(--wip-bg);border:1px solid var(--line);border-radius:4px;padding:1px 5px;font-size:13px}.article-body pre{background:var(--card);border:1px solid var(--line-strong);color:var(--ink-soft);border-radius:10px;margin-top:18px;padding:14px 16px;font-size:13px;line-height:1.6;overflow-x:auto}.article-body pre code{background:0 0;border:0;padding:0}.article-body hr{border:0;border-top:1px solid var(--line);margin-top:32px}.adjacent{border-top:1px solid var(--line);grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;padding-top:24px;display:grid}.adjacent a{flex-direction:column;gap:4px;text-decoration:none;display:flex}.adjacent a .entry-meta{white-space:normal}.adjacent a:hover .entry-title{color:var(--ink-soft)}.adjacent-end{text-align:right}.case{border-top:1px solid var(--line);padding:32px 0}.case:last-of-type{border-bottom:1px solid var(--line)}.case-title{margin-top:8px;font-size:18px;font-weight:800}.case-desc{color:var(--muted);margin-top:10px;font-size:14px}.stack-list{flex-wrap:wrap;gap:4px 18px;margin-top:16px;list-style:none;display:flex}.stack-list li{color:var(--ink-soft);align-items:center;gap:9px;padding:4px 0;font-size:14px;font-weight:500;display:flex}.stack-list svg{width:15px;height:15px;color:var(--faint);flex:none}@media (max-width:700px){.page{padding:64px 20px 170px}.page-head{flex-direction:column;align-items:flex-start;gap:12px}.article-row{grid-template-columns:1fr;gap:6px}.article-rail{flex-direction:row;align-items:baseline;gap:10px}.adjacent{grid-template-columns:1fr}.adjacent-end{text-align:left}.hero h1{font-size:42px}.stack-grid{grid-template-columns:1fr;gap:26px}.contact{flex-direction:column;align-items:flex-start;gap:20px}.dock{height:62px}.dock-btn{width:42px;height:42px}}@media (prefers-reduced-motion:reduce){:root{--duration-fast:.01ms;--duration-hover:.01ms;--duration-menu:.01ms;--duration-base:.01ms;--duration-expand:.01ms}html{scroll-behavior:auto}}
