:root{color-scheme:dark;--bg: #0A0C0D;--surface: #111517;--surface-2: #171C1E;--line: #1F2629;--line-hi: #2D373A;--text: #E3E8E9;--text-body: #C6CFD1;--muted: #8A9496;--dim: #5C6668;--accent: #63C8EC;--sw: #7DD88F;--inf: #A99BFF;--hw: #E8836F;--sans: "IBM Plex Sans", ui-sans-serif, system-ui, -apple-system, sans-serif;--cond: "IBM Plex Sans Condensed", "IBM Plex Sans", ui-sans-serif, system-ui, sans-serif;--mono: "IBM Plex Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;--measure: 68ch;--page: 1100px;--gutter: 24px}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;background:var(--bg);color:var(--text);font-family:var(--sans);font-size:16px;line-height:1.6;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3,h4{margin:0;text-wrap:balance}p{margin:0}ul,ol{margin:0;padding:0}dl,dd,dt,figure{margin:0}img,svg,video{max-width:100%;height:auto;display:block}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline;text-underline-offset:3px}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:2px}::selection{background:color-mix(in srgb,var(--accent) 30%,transparent);color:var(--text)}.skip{position:absolute;left:-9999px;top:0;background:var(--accent);color:var(--bg);padding:10px 14px;font-family:var(--mono);font-size:12px;z-index:50}.skip:focus{left:8px;top:8px}.page{max-width:var(--page);margin:0 auto;padding:0 var(--gutter)}.stack{display:flex;flex-direction:column}.gap-sm{gap:10px}.gap-md{gap:18px}.gap-lg{gap:34px}.section{margin-top:52px}.meta{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.chip{font-family:var(--mono);font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;border:1px solid var(--line-hi);border-radius:2px;padding:3px 7px;color:var(--muted);white-space:nowrap;display:inline-flex;align-items:center;gap:6px}.chip .dot{width:5px;height:5px;border-radius:50%;background:currentColor;flex:none}.chip[data-domain=software]{color:var(--sw);border-color:color-mix(in srgb,var(--sw) 34%,var(--line))}.chip[data-domain=infra]{color:var(--inf);border-color:color-mix(in srgb,var(--inf) 34%,var(--line))}.chip[data-domain=hardware]{color:var(--hw);border-color:color-mix(in srgb,var(--hw) 34%,var(--line))}.chip[data-status=active]{color:var(--text);border-color:var(--line-hi)}.chip[data-status=shipped],.chip[data-status=maintained]{color:var(--muted)}.chip[data-status=archived],.chip[data-status=planned]{color:var(--dim)}.chips{display:flex;gap:7px;flex-wrap:wrap}.shead{display:flex;align-items:center;gap:12px;margin-bottom:18px}.shead .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--text)}.shead .cnt{font-family:var(--mono);font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}.shead .rule{flex:1;height:1px;background:var(--line)}.shead .more{font-family:var(--mono);font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}.shead .more:hover{color:var(--accent);text-decoration:none}.spec{display:flex;flex-direction:column;gap:7px}.spec-row{display:flex;align-items:baseline;font-family:var(--mono);font-size:12px}.spec-row .k{color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-size:10.5px;white-space:nowrap}.spec-row .ld{flex:1;border-bottom:1px dotted var(--line-hi);margin:0 8px;transform:translateY(-3px);min-width:12px}.spec-row .v{color:var(--text);text-align:right;font-variant-numeric:tabular-nums}.nav{display:flex;align-items:center;gap:26px;padding:26px 0 16px;border-bottom:1px solid var(--line)}.nav .brand{font-family:var(--cond);font-weight:700;font-size:18px;color:var(--text)}.nav .brand:hover{text-decoration:none}.nav .brand span{color:var(--accent)}.nav .links{display:flex;gap:20px;margin-left:auto;flex-wrap:wrap;list-style:none}.nav .links a{font-family:var(--mono);font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.nav .links a:hover{color:var(--text);text-decoration:none}.nav .links a[aria-current=page]{color:var(--text);box-shadow:0 6px 0 -5px var(--accent)}footer.foot{margin-top:84px;padding:22px 0 40px;border-top:1px solid var(--line);display:flex;gap:14px 24px;flex-wrap:wrap;align-items:baseline}footer.foot .line{font-family:var(--mono);font-size:11px;color:var(--dim);letter-spacing:.06em}footer.foot .links{display:flex;gap:18px;margin-left:auto;list-style:none}footer.foot .links a{font-family:var(--mono);font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}.hero{padding:46px 0 42px;display:flex;flex-direction:column;gap:16px}.hero-name{font-family:var(--cond);font-weight:700;font-size:clamp(40px,8vw,72px);line-height:.95;letter-spacing:-.025em}.hero-claim{font-family:var(--cond);font-weight:600;font-size:clamp(21px,3.2vw,31px);line-height:1.22;letter-spacing:-.008em;max-width:26ch;color:var(--text)}.hero-name .hl{color:var(--accent)}.hero .sub{color:var(--muted);max-width:56ch;font-size:16.5px}.hero .statusline{font-family:var(--mono);font-size:11px;letter-spacing:.11em;text-transform:uppercase;color:var(--dim);display:flex;flex-wrap:wrap;gap:6px 10px;padding-top:6px}.hero .statusline b{color:var(--muted);font-weight:400}.hero .statusline i{color:var(--line-hi);font-style:normal}.card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:14px}.card{border:1px solid var(--line);border-left:2px solid var(--line);background:var(--surface);border-radius:2px;padding:17px 17px 15px;display:flex;flex-direction:column;gap:10px;transition:border-color .12s ease}.card[data-domain=software]{border-left-color:var(--sw)}.card[data-domain=infra]{border-left-color:var(--inf)}.card[data-domain=hardware]{border-left-color:var(--hw)}.card:hover{border-color:var(--line-hi)}.card:hover[data-domain=software]{border-left-color:var(--sw)}.card:hover[data-domain=infra]{border-left-color:var(--inf)}.card:hover[data-domain=hardware]{border-left-color:var(--hw)}.card .top{display:flex;align-items:baseline;gap:10px}.card h3{font-family:var(--cond);font-weight:600;font-size:20px}.card h3 a{color:var(--text)}.card h3 a:hover{color:var(--accent);text-decoration:none}.card .slug{font-family:var(--mono);font-size:11px;color:var(--dim);margin-left:auto}.card p{color:var(--muted);font-size:13.5px;line-height:1.55}.card .tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:auto;padding-top:4px;font-family:var(--mono);font-size:10.5px;color:var(--dim);list-style:none}.card .card-foot{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.card .stack-list{font-family:var(--mono);font-size:11px;color:var(--dim)}.card .last{margin-left:auto;font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}.rows{display:flex;flex-direction:column}.row-p{display:grid;grid-template-columns:8px 140px 1fr auto auto;gap:14px;align-items:center;padding:10px 4px;border-bottom:1px solid var(--line)}.row-p:first-child{border-top:1px solid var(--line)}.row-p .d{width:6px;height:6px;border-radius:50%}.row-p .d[data-domain=software]{background:var(--sw)}.row-p .d[data-domain=infra]{background:var(--inf)}.row-p .d[data-domain=hardware]{background:var(--hw)}.row-p .sl{font-family:var(--mono);font-size:12.5px;color:var(--text)}.row-p .sl a{color:var(--text);display:inline-block;padding:12px 0;margin:-12px 0}.row-p .sl a:hover{color:var(--accent);text-decoration:none}.row-p .tg{font-size:13px;color:var(--muted);line-height:1.45}.row-p .st{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim)}.row-p .ef{font-family:var(--mono);font-size:10px;color:var(--dim);border:1px solid var(--line);border-radius:2px;padding:2px 6px;min-width:26px;text-align:center}.row-post{display:grid;grid-template-columns:96px 66px 1fr auto;gap:16px;align-items:baseline;padding:11px 4px;border-bottom:1px solid var(--line)}.row-post:first-child{border-top:1px solid var(--line)}.row-post .date{font-family:var(--mono);font-size:11.5px;color:var(--dim);font-variant-numeric:tabular-nums}.row-post .kind{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}.row-post .kind[data-kind=log]{color:var(--sw)}.row-post .ttl{font-size:15px}.row-post .ttl a{color:var(--text)}.row-post .ttl a:hover{color:var(--accent);text-decoration:none}.row-post .ttl small{font-family:var(--mono);font-size:11px;color:var(--dim);margin-right:8px}.row-post .rt{font-family:var(--mono);font-size:10.5px;color:var(--dim);font-variant-numeric:tabular-nums}.proj-head{display:flex;flex-direction:column;gap:13px;padding:40px 0 26px;border-bottom:1px solid var(--line)}.crumbs{font-family:var(--mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}.crumbs a{color:var(--muted)}.proj-head h1{font-family:var(--cond);font-weight:700;font-size:clamp(30px,5vw,46px);line-height:1.03;letter-spacing:-.012em}.proj-head .tagline{color:var(--muted);font-size:17px;max-width:56ch}.proj-body{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:44px;padding-top:30px;align-items:start}.rail{display:flex;flex-direction:column;gap:20px;position:sticky;top:24px}.rail-block{border:1px solid var(--line);background:var(--surface);border-radius:2px;padding:15px}.rail-block .rt{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--dim);margin-bottom:12px}.rail .linklist{display:flex;flex-direction:column;gap:8px;list-style:none}.rail .linklist a{font-family:var(--mono);font-size:12px;display:inline-flex;align-items:center;gap:8px}.rail .linklist a:before{content:"↗";color:var(--dim)}.dl-row{display:grid;grid-template-columns:44px 96px 1fr auto;gap:14px;align-items:baseline;padding:12px 4px;border-bottom:1px solid var(--line)}.dl-row:first-child{border-top:1px solid var(--line)}.dl-row .n{font-family:var(--mono);font-size:11.5px;color:var(--muted);font-variant-numeric:tabular-nums}.dl-row .date{font-family:var(--mono);font-size:11.5px;color:var(--dim);font-variant-numeric:tabular-nums}.dl-row .t a{color:var(--text);font-size:15px}.dl-row .t a:hover{color:var(--accent);text-decoration:none}.dl-row .t em{display:block;font-style:normal;color:var(--muted);font-size:12.5px;margin-top:3px;line-height:1.5}.dl-row .rt{font-family:var(--mono);font-size:10.5px;color:var(--dim)}.post-wrap{max-width:var(--measure);margin:0 auto;padding:42px 0 0}.post-meta{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--dim);display:flex;gap:10px;flex-wrap:wrap;align-items:center}.post-meta .sep{color:var(--line-hi)}.post-meta .p{color:var(--accent)}.post-wrap h1{font-family:var(--cond);font-weight:700;font-size:clamp(28px,4.6vw,42px);line-height:1.06;letter-spacing:-.012em;margin:14px 0 16px}.post-lede{color:var(--muted);font-size:17px;line-height:1.6;padding-bottom:22px;border-bottom:1px solid var(--line)}.prevnext{display:flex;gap:20px;justify-content:space-between;margin-top:48px;padding-top:20px;border-top:1px solid var(--line);font-family:var(--mono);font-size:11.5px}.prevnext span{color:var(--dim);display:block;font-size:10px;letter-spacing:.12em;text-transform:uppercase;margin-bottom:4px}.prose{display:flex;flex-direction:column;gap:20px;padding-top:26px;max-width:var(--measure)}.prose>p{color:var(--text-body);font-size:16.5px;line-height:1.7}.prose h2{font-family:var(--cond);font-weight:600;font-size:25px;margin-top:16px;letter-spacing:-.005em}.prose h3{font-family:var(--cond);font-weight:600;font-size:19px;margin-top:10px}.prose ul,.prose ol{display:flex;flex-direction:column;gap:8px;padding-left:22px;color:var(--text-body);font-size:16px}.prose li{line-height:1.65}.prose blockquote{border-left:2px solid var(--line-hi);padding-left:16px;color:var(--muted);font-style:italic}.prose hr{border:0;border-top:1px solid var(--line);width:100%}.prose strong{color:var(--text);font-weight:600}.prose a{text-decoration:underline;text-underline-offset:3px;text-decoration-color:color-mix(in srgb,var(--accent) 40%,transparent)}.prose :not(pre)>code{font-family:var(--mono);font-size:.88em;color:var(--text);background:var(--surface-2);border:1px solid var(--line);border-radius:2px;padding:1px 5px}.prose table{width:100%;border-collapse:collapse;font-size:14px}.prose th,.prose td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line)}.prose th{font-family:var(--mono);font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);font-weight:400}.prose .astro-code{background:var(--surface)!important;border:1px solid var(--line);border-radius:2px;padding:14px 16px;overflow-x:auto;font-size:13px;line-height:1.65}.prose .astro-code code{font-family:var(--mono)}.cmp{border:1px solid var(--line);border-radius:2px;background:var(--surface);overflow:hidden}.cmp-bar{display:flex;align-items:center;gap:8px;padding:7px 12px;background:var(--surface-2);border-bottom:1px solid var(--line);font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim)}.cmp-bar .tagname{color:var(--muted)}.cmp pre{margin:0;padding:14px 16px;overflow-x:auto;font-family:var(--mono);font-size:13px;line-height:1.65;color:var(--text-body)}.cmp .pr{color:var(--accent)}.cmp .cmd{color:var(--text)}.cmp .out{color:var(--muted)}.callout{border:1px solid var(--line);border-left:2px solid var(--accent);background:var(--surface);border-radius:2px;padding:14px 16px;display:flex;flex-direction:column;gap:7px}.callout[data-kind=warn]{border-left-color:var(--hw)}.callout[data-kind=gotcha]{border-left-color:var(--inf)}.callout .cl{font-family:var(--mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent)}.callout[data-kind=warn] .cl{color:var(--hw)}.callout[data-kind=gotcha] .cl{color:var(--inf)}.callout>p{font-size:15px;color:var(--text-body);line-height:1.65}.bom{width:100%;border-collapse:collapse;font-size:13.5px}.bom th{font-family:var(--mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--dim);font-weight:400;text-align:left;padding:8px 10px;border-bottom:1px solid var(--line-hi)}.bom td{padding:9px 10px;border-bottom:1px solid var(--line);color:var(--text-body)}.bom td.qty,.bom td.cost{font-family:var(--mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}.bom tfoot td{color:var(--text);font-family:var(--mono);border-bottom:0;border-top:1px solid var(--line-hi)}.verdict{color:var(--muted);font-size:15px;line-height:1.62;max-width:62ch;margin-top:15px}.verdict+.verdict{margin-top:10px}.verdict strong{color:var(--text);font-weight:500}.fig{display:flex;flex-direction:column;gap:9px}.fig img{width:100%;height:auto;display:block;border:1px solid var(--line);border-radius:2px;background:var(--surface)}.fig figcaption{font-family:var(--mono);font-size:11px;line-height:1.5;letter-spacing:.02em;color:var(--muted)}.fig[data-wide]{width:100%}@media(min-width:1000px){.prose .fig[data-wide],.mdx .fig[data-wide]{width:calc(100% + 180px);margin-left:-90px}}.gallery{display:grid;grid-template-columns:repeat(auto-fit,minmax(var(--gallery-min, 240px),1fr));gap:12px}.prose>p>img,.mdx>p>img{border:1px solid var(--line);border-radius:2px;background:var(--surface)}.proj-hero{margin-top:26px}.proj-hero img{width:100%;height:auto;display:block;border:1px solid var(--line);border-radius:2px;background:var(--surface)}.filters{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding-bottom:22px}.filters a{font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;border:1px solid var(--line-hi);border-radius:2px;padding:5px 10px;color:var(--muted);display:inline-flex;gap:7px;align-items:center}.filters a:hover{color:var(--text);text-decoration:none}.filters a .n{color:var(--dim);font-variant-numeric:tabular-nums}.filters a[aria-current=true]{color:var(--bg);background:var(--accent);border-color:var(--accent)}.filters a[aria-current=true] .n{color:color-mix(in srgb,var(--bg) 62%,var(--accent))}@media(max-width:860px){.proj-body{grid-template-columns:1fr;gap:26px}.rail{position:static;order:-1}}@media(max-width:760px){:root{--gutter: 18px}.row-p{grid-template-columns:8px 1fr auto;row-gap:4px}.row-p .tg{grid-column:2 / -1}.row-p .st{display:none}.row-post{grid-template-columns:1fr auto;row-gap:4px}.row-post .ttl{grid-column:1 / -1;order:3}.row-post .rt{order:2}.dl-row{grid-template-columns:40px 1fr}.dl-row .date,.dl-row .t{grid-column:2}.dl-row .rt{display:none}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}
