/* ==========================================================================
   BldBox blog — article list, article page, typography (.post-body)
   Uses the brand palette from app.css (purple #7A00F0 · glow #B266FF · red #ED1908)
   ========================================================================== */
.blog-wrap{max-width:1180px;margin:0 auto;padding:0 18px}
.blog-hero{position:relative;padding:56px 0 30px;text-align:center}
.blog-hero .kicker{display:inline-flex;align-items:center;gap:8px;padding:5px 14px;border-radius:999px;border:1px solid var(--line-2);background:rgba(122,0,240,.08);color:var(--primary-glow);font-size:12.5px}
.blog-hero h1{margin:16px 0 8px;font-size:clamp(28px,4.6vw,46px);line-height:1.3;background:linear-gradient(90deg,#fff,var(--silver));-webkit-background-clip:text;background-clip:text;color:transparent}
.blog-hero p{margin:0 auto;max-width:620px;color:var(--text-muted)}
.blog-search{display:flex;gap:8px;max-width:520px;margin:22px auto 0}
.blog-search .input{flex:1}
.blog-tagbar{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-top:14px}

.blog-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:20px;padding:24px 0 40px}
.blog-card{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.012));transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease;color:var(--text)}
.blog-card:hover{transform:translateY(-3px);border-color:rgba(178,102,255,.38);box-shadow:0 18px 50px rgba(122,0,240,.18);color:var(--text)}
.blog-card .cover{aspect-ratio:16/9;background:linear-gradient(135deg,rgba(122,0,240,.35),rgba(237,25,8,.18));overflow:hidden;display:grid;place-items:center;font-size:34px;color:rgba(255,255,255,.7)}
.blog-card .cover img{width:100%;height:100%;object-fit:cover;display:block}
.blog-card .body{padding:16px 18px 18px;display:flex;flex-direction:column;gap:8px;flex:1}
.blog-card h2{margin:0;font-size:18px;line-height:1.55}
.blog-card p{margin:0;color:var(--text-muted);font-size:14px;line-height:1.85;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.blog-meta{display:flex;gap:12px;flex-wrap:wrap;color:var(--text-dim);font-size:12.5px;margin-top:auto}
.blog-empty{padding:60px 0;text-align:center;color:var(--text-muted)}
.blog-pager{display:flex;gap:8px;justify-content:center;padding-bottom:50px}
.blog-pager a,.blog-pager span{min-width:40px;height:40px;display:grid;place-items:center;border-radius:12px;border:1px solid var(--line);color:var(--text)}
.blog-pager .on{background:var(--primary);border-color:var(--primary)}

/* article page */
.read-progress{position:fixed;inset-inline:0;top:0;height:3px;z-index:100;background:linear-gradient(90deg,var(--primary),var(--accent));transform-origin:0 50%;transform:scaleX(0)}
[dir=rtl] .read-progress{transform-origin:100% 50%}
.post-wrap{max-width:1180px;margin:0 auto;padding:22px 18px 60px}
.crumbs{display:flex;gap:8px;flex-wrap:wrap;color:var(--text-dim);font-size:13px;margin-bottom:14px}
.crumbs a{color:var(--text-muted)}
.post-head{max-width:820px}
.post-head h1{font-size:clamp(26px,4.2vw,42px);line-height:1.38;margin:6px 0 12px}
.post-head .lead{color:var(--text-muted);font-size:17px;margin:0 0 14px}
.post-cover{margin:18px 0 26px;border-radius:var(--radius-xl);overflow:hidden;border:1px solid var(--line);aspect-ratio:16/8;background:linear-gradient(135deg,rgba(122,0,240,.3),rgba(237,25,8,.14))}
.post-cover img{width:100%;height:100%;object-fit:cover;display:block}
.post-grid{display:grid;grid-template-columns:minmax(0,1fr) 270px;gap:34px;align-items:start}
.post-aside{position:sticky;top:20px;display:flex;flex-direction:column;gap:14px}
.toc{border:1px solid var(--line);border-radius:var(--radius-md);padding:14px 16px;background:rgba(255,255,255,.02)}
.toc b{display:block;font-size:13.5px;margin-bottom:6px}
.toc a{display:block;color:var(--text-muted);font-size:13.3px;padding:4px 0;line-height:1.6}
.toc a.l3{padding-inline-start:14px;font-size:12.8px}
.toc a.on,.toc a:hover{color:var(--primary-glow)}
.share{display:flex;gap:8px;flex-wrap:wrap}
.share a,.share button{width:38px;height:38px;border-radius:12px;border:1px solid var(--line);display:grid;place-items:center;color:var(--text);background:transparent;cursor:pointer;font-size:15px}
.share a:hover,.share button:hover{border-color:var(--primary-glow);color:var(--primary-glow)}
.post-cta{border-radius:var(--radius-lg);padding:18px;border:1px solid rgba(178,102,255,.3);background:linear-gradient(135deg,rgba(122,0,240,.22),rgba(237,25,8,.08))}
.post-cta b{display:block;margin-bottom:4px}
.post-cta p{margin:0 0 12px;color:var(--text-muted);font-size:13.5px}
.post-tags{display:flex;gap:8px;flex-wrap:wrap;margin:30px 0 0}
.post-tags a{padding:5px 12px;border-radius:999px;border:1px solid var(--line-2);font-size:12.8px;color:var(--text-muted)}
.post-tags a:hover{color:var(--primary-glow);border-color:var(--primary-glow)}
.related{margin-top:46px}
.related h2{font-size:20px}
.preview-bar{padding:8px 14px;border-radius:12px;background:rgba(237,25,8,.12);border:1px solid rgba(237,25,8,.3);color:#ffb3ad;font-size:13px;margin-bottom:12px}

/* typography */
.post-body{font-size:16.6px;line-height:2.05;color:#e6e1ef;overflow-wrap:anywhere}
.post-body>*:first-child{margin-top:0}
.post-body h2{font-size:clamp(21px,2.6vw,26px);line-height:1.5;margin:2.1em 0 .7em;padding-inline-start:14px;border-inline-start:4px solid var(--primary-light);color:#fff;scroll-margin-top:20px}
.post-body h3{font-size:19px;line-height:1.55;margin:1.7em 0 .5em;color:var(--silver-light);scroll-margin-top:20px}
.post-body h4{font-size:17px;margin:1.4em 0 .4em}
.post-body p{margin:0 0 1.15em}
.post-body a{color:var(--primary-glow);text-decoration:underline;text-decoration-color:rgba(178,102,255,.4);text-underline-offset:4px}
.post-body a:hover{color:#fff}
.post-body strong,.post-body b{color:#fff}
.post-body ul,.post-body ol{margin:0 0 1.2em;padding-inline-start:1.5em}
.post-body li{margin:.3em 0}
.post-body li::marker{color:var(--primary-glow)}
.post-body blockquote{margin:1.6em 0;padding:16px 20px;border-radius:16px;border:1px solid rgba(178,102,255,.25);border-inline-start:4px solid var(--accent);background:rgba(122,0,240,.08);color:var(--silver-light)}
.post-body blockquote p:last-child{margin:0}
.post-body img{max-width:100%;height:auto;border-radius:16px;border:1px solid var(--line)}
.post-body figure{margin:1.6em 0;text-align:center}
.post-body figcaption{color:var(--text-dim);font-size:13px;margin-top:6px}
.post-body hr{border:0;height:1px;margin:2em 0;background:linear-gradient(90deg,transparent,var(--line-2),transparent)}
.post-body code{font-family:ui-monospace,Consolas,monospace;font-size:.88em;padding:.12em .4em;border-radius:6px;background:rgba(200,186,227,.1);direction:ltr;unicode-bidi:isolate}
.post-body pre{direction:ltr;text-align:left;overflow:auto;padding:16px 18px;border-radius:14px;background:#0b0a12;border:1px solid var(--line);line-height:1.7;font-size:14px}
.post-body pre code{padding:0;background:none;font-size:inherit}
.post-body table{width:100%;border-collapse:collapse;margin:1.4em 0;font-size:14.6px;display:block;overflow-x:auto}
.post-body th,.post-body td{padding:10px 12px;border:1px solid var(--line);text-align:start;vertical-align:top}
.post-body th{background:rgba(122,0,240,.14);color:#fff}
.post-body tr:nth-child(even) td{background:rgba(255,255,255,.02)}
.post-body details{border:1px solid var(--line);border-radius:14px;padding:10px 14px;margin:.8em 0}
.post-body summary{cursor:pointer;font-weight:700}

@media (max-width:980px){
  .post-grid{grid-template-columns:1fr}
  .post-aside{position:static;order:-1}
  .toc{display:none}
}
@media (max-width:560px){
  .blog-grid{grid-template-columns:1fr}
  .post-body{font-size:16px}
  .post-cover{aspect-ratio:16/9;border-radius:18px}
}
@media (prefers-reduced-motion:reduce){ .blog-card{transition:none} }
