@layer plexivo {
/* Plexivo blog (scripts/blog.mjs). Uses the site's tokens from :root in
   index.html; the site is light only, so the blog is too. */
.blog-page{background:var(--bg);overflow:clip}
.blog-wrap{width:min(var(--page-max),100% - 48px);margin-inline:auto}
.blog-hero{padding:clamp(64px,8vw,104px) 0 24px;text-align:center}
.blog-hero .blog-lede{max-width:40ch;margin-inline:auto}
.blog-feed{margin-top:18px;font-size:15px}
.blog-feed a{color:var(--accent);text-decoration:none}
.blog-list{padding:24px 0 112px}
.blog-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:24px}
.blog-card a{display:flex;flex-direction:column;height:100%;background:var(--white);border-radius:var(--radius);overflow:hidden;text-decoration:none;color:var(--text);box-shadow:0 0 0 1px var(--border);transition:transform .25s,box-shadow .25s}
.blog-card a:hover{transform:translateY(-3px);box-shadow:0 0 0 1px var(--border),0 18px 40px rgb(0 0 0 / 8%)}
.blog-card img{display:block;width:100%;height:auto;aspect-ratio:1200/630;object-fit:cover;background:#f0f0f5}
.blog-card :is(h2,h3){margin:20px 22px 0;font-size:21px;line-height:1.25;font-weight:650;letter-spacing:-.02em}
.blog-card p{margin:10px 22px 0;font-size:15.5px;line-height:1.5;color:var(--muted)}
.blog-card .blog-meta{margin:auto 22px 20px;padding-top:14px}

.blog-article{width:min(720px,100% - 48px);margin-inline:auto;padding:clamp(48px,6vw,80px) 0 64px}
.blog-crumbs ol{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 22px;padding:0;list-style:none;font-size:14px;color:var(--muted)}
.blog-crumbs li+li::before{content:"›";margin-right:6px;color:var(--faint)}
.blog-crumbs a{color:var(--muted);text-decoration:none}
.blog-crumbs a:hover{color:var(--accent)}
.blog-crumbs span{display:inline-block;max-width:46ch;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;vertical-align:bottom}
.blog-title{font-size:clamp(36px,5.4vw,56px);line-height:1.06;font-weight:700;letter-spacing:-.04em;color:var(--text)}
.blog-lede{margin-top:16px;font-size:clamp(19px,2vw,22px);line-height:1.45;color:var(--muted);letter-spacing:-.015em;font-weight:500}
.blog-meta{margin-top:18px;font-size:14px;color:var(--faint)}
.blog-cover{margin:36px 0 0}
.blog-cover img{display:block;width:100%;height:auto;border-radius:var(--radius);box-shadow:0 0 0 1px var(--border)}
.blog-toc{margin-top:32px;padding:18px 22px;border-radius:16px;background:var(--white);box-shadow:0 0 0 1px var(--border)}
.blog-toc p{font-size:12.5px;font-weight:650;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.blog-toc ol{margin:8px 0 0;padding-left:20px;font-size:15.5px;line-height:1.6}
.blog-toc a{color:var(--text-2);text-decoration:none}
.blog-toc a:hover{color:var(--accent)}

.blog-body{margin-top:8px;font-size:18px;line-height:1.7;color:var(--text-2)}
.blog-body>*{margin-top:22px;margin-bottom:0}
.blog-body h2{margin-top:56px;font-size:30px;line-height:1.18;font-weight:700;letter-spacing:-.03em;color:var(--text);scroll-margin-top:80px}
.blog-body h3{margin-top:36px;font-size:21px;line-height:1.3;font-weight:650;letter-spacing:-.02em;color:var(--text);scroll-margin-top:80px}
.blog-body h4{margin-top:28px;font-size:18px;font-weight:650;color:var(--text)}
.blog-body h2+*,.blog-body h3+*{margin-top:12px}
.blog-body a{color:var(--accent);text-decoration:none}
.blog-body a:hover{text-decoration:underline;text-underline-offset:3px}
.blog-body strong{color:var(--text);font-weight:600}
.blog-body ul,.blog-body ol{padding-left:24px}
.blog-body li+li{margin-top:8px}
.blog-body li>ul{margin-top:8px}
.blog-body blockquote{margin-left:0;padding:4px 0 4px 22px;border-left:3px solid var(--accent);color:var(--text)}
.blog-body blockquote>*+*{margin-top:12px}
.blog-body hr{border:0;border-top:1px solid var(--border);margin:44px 0}
.blog-body code{font:.86em "JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace;background:#f0f0f5;color:var(--text);padding:2px 6px;border-radius:6px;overflow-wrap:anywhere}
.blog-body .code{position:relative}
.blog-body .code pre{margin:0;padding:40px 20px 18px;border-radius:16px;background:#1d1d1f;color:#f5f5f7;overflow-x:auto;font:14.5px/1.7 "JetBrains Mono",ui-monospace,"SF Mono",Menlo,monospace;tab-size:2}
.blog-body .code pre code{background:none;padding:0;color:inherit;font:inherit;overflow-wrap:normal}
.blog-body .code .c{color:#98989d}
.blog-body .code-lang{position:absolute;top:12px;left:20px;font:600 12px var(--font);letter-spacing:.04em;text-transform:uppercase;color:#98989d}
.blog-body figure{margin-inline:0}
.blog-body img{display:block;max-width:100%;height:auto;border-radius:16px;box-shadow:0 0 0 1px var(--border)}
.blog-body figcaption{margin-top:10px;font-size:14px;color:var(--muted);text-align:center}
.blog-table{overflow-x:auto;border-radius:14px;background:var(--white);box-shadow:0 0 0 1px var(--border)}
.blog-table table{width:100%;border-collapse:collapse;font-size:15.5px;line-height:1.45}
.blog-table th,.blog-table td{padding:11px 14px;text-align:left;vertical-align:top;border-bottom:1px solid var(--border)}
.blog-table tr:last-child>*{border-bottom:0}
.blog-table thead th{background:#f5f5f7;color:var(--text);font-weight:600;font-size:14px}

.blog-cta{margin-top:64px;padding:28px;border-radius:var(--radius);background:var(--white);box-shadow:0 0 0 1px var(--border);text-align:center}
.blog-cta p{font-size:17px;line-height:1.5;color:var(--text-2)}
.blog-cta b{color:var(--text)}
.blog-cta p+p{margin-top:16px;display:flex;flex-wrap:wrap;gap:12px 22px;justify-content:center;align-items:center}
.blog-related{padding:0 0 112px}
.blog-related h2{font-size:clamp(28px,3.4vw,40px);letter-spacing:-.035em;font-weight:700;margin-bottom:24px;text-align:center}

@media(max-width:640px){
 .blog-wrap,.blog-article{width:calc(100% - 32px)}
 .blog-body{font-size:17px}
 .blog-body h2{font-size:25px;margin-top:44px}
 .blog-body .code pre{padding:38px 16px 16px;font-size:13px;border-radius:14px}
 .blog-grid{grid-template-columns:1fr}
}
@media(prefers-reduced-motion:reduce){.blog-card a{transition:none}.blog-card a:hover{transform:none}}

}
