.ws-blog-grid{grid-template-columns:1fr;gap:20px;display:grid}@media (min-width:640px){.ws-blog-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width:1024px){.ws-blog-grid{grid-template-columns:repeat(3,1fr)}}.ws-blog-card{background:var(--ws-bg-card);border:.5px solid var(--ws-border);height:100%;box-shadow:var(--ws-glow-card);border-radius:10px;flex-direction:column;text-decoration:none;transition:border-color .2s cubic-bezier(.4,0,.2,1),box-shadow .2s cubic-bezier(.4,0,.2,1),transform .2s cubic-bezier(.4,0,.2,1);display:flex;position:relative;overflow:hidden}.ws-blog-card:hover{border-color:var(--ws-accent-border);box-shadow:var(--ws-glow-card-hover);transform:translateY(-3px)}.ws-blog-card-thumb{aspect-ratio:16/9;background:linear-gradient(135deg, var(--ws-accent-glow) 0%, transparent 60%), var(--ws-bg-elevated);border-bottom:.5px solid var(--ws-border);width:100%;position:relative;overflow:hidden}.ws-blog-card-thumb img{object-fit:cover;width:100%;height:100%;transition:transform .4s cubic-bezier(.16,1,.3,1)}.ws-blog-card:hover .ws-blog-card-thumb img{transform:scale(1.04)}.ws-blog-card-thumb--empty{justify-content:center;align-items:center;display:flex}.ws-blog-card-thumb--empty:before{content:"";background-image:radial-gradient(var(--ws-border-bright) 1px, transparent 1px);opacity:.6;background-size:16px 16px;position:absolute;inset:0}.ws-blog-card-mark{font-family:var(--font-geist-mono), monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--ws-accent-bright);opacity:.9;font-size:13px;font-weight:600;position:relative}.ws-blog-card-body{flex-direction:column;flex:1;gap:8px;padding:18px 20px 20px;display:flex}.ws-blog-card-title{letter-spacing:-.015em;color:var(--ws-text-primary);font-size:17px;font-weight:650;line-height:1.3}.ws-blog-card-desc{color:var(--ws-text-secondary);-webkit-line-clamp:3;-webkit-box-orient:vertical;font-size:13.5px;line-height:1.55;display:-webkit-box;overflow:hidden}.ws-blog-card-footer{color:var(--ws-accent-bright);align-items:center;gap:6px;margin-top:auto;padding-top:4px;font-size:12.5px;font-weight:500;transition:gap .2s;display:inline-flex}.ws-blog-card:hover .ws-blog-card-footer{gap:10px}.ws-blog-meta{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.ws-blog-meta-text{font-variant-numeric:tabular-nums;color:var(--ws-text-muted);font-size:12px}.ws-blog-meta-dot{background:var(--ws-text-muted);border-radius:50%;width:3px;height:3px}.ws-blog-pill{font-family:var(--font-geist-mono), monospace;letter-spacing:.04em;color:var(--ws-accent-bright);background:var(--ws-accent-tint);border:.5px solid var(--ws-accent-border);border-radius:999px;align-items:center;padding:3px 9px;font-size:10.5px;font-weight:600;display:inline-flex}.ws-blog-layout{grid-template-columns:minmax(0,1fr);gap:48px;max-width:760px;margin:0 auto;display:grid}@media (min-width:1024px){.ws-blog-layout{grid-template-columns:minmax(0,1fr) 220px;align-items:start;max-width:1040px}}.ws-blog-toc{display:none}@media (min-width:1024px){.ws-blog-toc{align-self:start;max-height:calc(100dvh - 120px);display:block;position:sticky;top:96px;overflow-y:auto}}.ws-blog-toc-label{font-family:var(--font-geist-mono), monospace;letter-spacing:.16em;text-transform:uppercase;color:var(--ws-text-muted);margin-bottom:12px;font-size:11px;font-weight:600}.ws-blog-toc-list{border-left:1px solid var(--ws-border);margin:0;padding:0;list-style:none}.ws-blog-toc-link{color:var(--ws-text-secondary);border-left:1px solid #0000;margin-left:-1px;padding:4px 0 4px 14px;font-size:12.5px;line-height:1.45;text-decoration:none;transition:color .16s,border-color .16s;display:block}.ws-blog-toc-link:hover{color:var(--ws-text-primary)}.ws-blog-toc-link[data-active=true]{color:var(--ws-accent-bright);border-left-color:var(--ws-accent);font-weight:600}.ws-blog-toc-link[data-depth="3"]{padding-left:26px;font-size:12px}.ws-blog-toc-link[data-depth="4"]{padding-left:38px;font-size:12px}.ws-blog-hero{aspect-ratio:21/9;border:.5px solid var(--ws-border);width:100%;box-shadow:var(--ws-glow-card);background:var(--ws-bg-elevated);border-radius:12px;margin-bottom:28px;position:relative;overflow:hidden}.ws-blog-hero img{object-fit:cover;width:100%;height:100%}.ws-share-row{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.ws-share-label{font-family:var(--font-geist-mono), monospace;letter-spacing:.12em;text-transform:uppercase;color:var(--ws-text-muted);margin-right:2px;font-size:11px}.ws-share-btn{border:.5px solid var(--ws-border-bright);background:var(--ws-bg-card);height:34px;color:var(--ws-text-secondary);cursor:pointer;border-radius:7px;align-items:center;gap:7px;padding:0 12px;font-size:12.5px;font-weight:500;text-decoration:none;transition:color .16s,border-color .16s,background .16s;display:inline-flex}.ws-share-btn:hover{color:var(--ws-text-primary);border-color:var(--ws-accent-border);background:var(--ws-bg-elevated)}.ws-share-btn--copied{color:var(--ws-accent-bright);border-color:var(--ws-accent-border)}.ws-share-star{border:.5px solid var(--ws-accent-border);background:var(--ws-accent-tint);height:34px;color:var(--ws-accent-bright);border-radius:7px;align-items:center;gap:7px;margin-left:auto;padding:0 14px;font-size:12.5px;font-weight:600;text-decoration:none;transition:background .16s,border-color .16s;display:inline-flex}.ws-share-star:hover{background:var(--ws-accent-glow);border-color:var(--ws-accent)}.ws-blog-cta{border:.5px solid var(--ws-border);background:linear-gradient(135deg, var(--ws-accent-glow) 0%, transparent 55%), var(--ws-bg-card);box-shadow:var(--ws-glow-card);border-radius:12px;flex-direction:column;align-items:flex-start;gap:14px;padding:28px;display:flex}.ws-blog-cta-btn{background:var(--ws-accent);height:40px;color:var(--ws-accent-text-on);letter-spacing:.01em;border-radius:7px;align-items:center;gap:8px;padding:0 18px;font-size:13px;font-weight:600;text-decoration:none;transition:background .16s;display:inline-flex}.ws-blog-cta-btn:hover{background:var(--ws-accent-bright)}.ws-blog-prose{color:var(--ws-text-secondary);font-size:16px;line-height:1.75}.ws-blog-prose h1,.ws-blog-prose h2,.ws-blog-prose h3,.ws-blog-prose h4{color:var(--ws-text-primary);letter-spacing:-.02em;scroll-margin-top:96px;font-weight:700;line-height:1.25}.ws-blog-prose h2{border-bottom:.5px solid var(--ws-border);margin-top:48px;margin-bottom:16px;padding-bottom:10px;font-size:26px}.ws-blog-prose h3{margin-top:36px;margin-bottom:12px;font-size:20px}.ws-blog-prose h4{margin-top:28px;margin-bottom:10px;font-size:16px}.ws-blog-prose>h1:first-child{display:none}.ws-blog-prose p{margin:0 0 20px}.ws-blog-prose ul,.ws-blog-prose ol{margin:0 0 20px;padding-left:24px}.ws-blog-prose li{margin-bottom:8px}.ws-blog-prose li::marker{color:var(--ws-accent)}.ws-blog-prose ul{list-style:outside}.ws-blog-prose ol{list-style:decimal}.ws-blog-prose a{color:var(--ws-accent-bright);border-bottom:1px solid var(--ws-accent-border);text-decoration:none;transition:border-color .15s,color .15s}.ws-blog-prose a:hover{color:var(--ws-accent);border-bottom-color:var(--ws-accent)}.ws-blog-prose strong{color:var(--ws-text-primary);font-weight:650}.ws-blog-prose blockquote{border-left:3px solid var(--ws-accent);background:var(--ws-accent-glow);color:var(--ws-text-secondary);border-radius:0 8px 8px 0;margin:24px 0;padding:12px 20px;font-style:italic}.ws-blog-prose blockquote p:last-child{margin-bottom:0}.ws-blog-prose :not(pre)>code{background:var(--ws-accent-tint);color:var(--ws-accent-bright);border:.5px solid var(--ws-accent-border);font-size:.875em;font-family:var(--font-geist-mono), monospace;white-space:nowrap;border-radius:5px;padding:.12em .4em}.ws-blog-prose pre{background:var(--ws-bg-terminal);border:.5px solid var(--ws-border);-webkit-overflow-scrolling:touch;border-radius:.5rem;max-width:100%;margin:0 0 24px;padding:1rem;font-size:13.5px;line-height:1.6;overflow-x:auto}.ws-blog-prose pre code{white-space:pre;width:max-content;min-width:100%;font-size:inherit;color:inherit;display:block;background:0 0!important;border:0!important;padding:0!important}.ws-blog-prose [data-rehype-pretty-code-figure]{max-width:100%;margin:0 0 24px;overflow:hidden}.ws-blog-prose [data-rehype-pretty-code-figure] pre{margin:0}.ws-blog-prose figcaption[data-rehype-pretty-code-title]{font-family:var(--font-geist-mono), monospace;color:var(--ws-text-muted);background:var(--ws-bg-page);border:.5px solid var(--ws-border);border-bottom:0;border-radius:.5rem .5rem 0 0;padding:8px 14px;font-size:12px}.ws-blog-prose img{border:.5px solid var(--ws-border);border-radius:10px;max-width:100%;height:auto;margin:8px 0 24px}.ws-blog-prose table{border-collapse:collapse;width:100%;margin:0 0 24px;font-size:14px;display:block;overflow-x:auto}.ws-blog-prose th,.ws-blog-prose td{border:.5px solid var(--ws-border);text-align:left;padding:8px 12px}.ws-blog-prose th{color:var(--ws-text-primary);background:var(--ws-bg-elevated);font-weight:600}.ws-blog-prose hr{background:var(--ws-border);border:0;height:.5px;margin:36px 0}@media (max-width:640px){.ws-blog-prose{font-size:15.5px}.ws-blog-prose h2{margin-top:36px;font-size:22px}.ws-blog-prose h3{font-size:18px}.ws-blog-prose pre{font-size:12.5px}}
