.blog-index-heading>p{margin:-4px 0 36px;color:var(--muted);font-size:14px}.blog-empty{padding:48px 0 72px;border-bottom:1px solid var(--line)}.portfolio-body .blog-empty h2{margin:0 0 8px;font-size:18px}.blog-empty p{margin:0;color:var(--muted);font-size:14px}.blog-year{margin-bottom:32px}.blog-year>summary{display:flex;align-items:baseline;gap:12px;padding:12px 0;cursor:pointer;list-style:none}.blog-year>summary::-webkit-details-marker{display:none}.blog-year>summary:after{content:"+";margin-left:auto;color:var(--muted)}.blog-year[open]>summary:after{content:"−"}.portfolio-body .blog-year h2{margin:0;font:500 20px/1.5 ui-monospace,monospace}.blog-year>summary>span{font-size:12px;color:var(--muted)}.blog-post-list{padding:0;margin:0;list-style:none}.blog-post-list>li{border-bottom:1px solid var(--line)}.blog-post-link{display:grid;grid-template-columns:52px minmax(0,1fr);gap:20px;padding:24px 0;text-decoration:none}.blog-post-link>time{padding-top:4px;font:12px/1.8 ui-monospace,monospace;color:var(--muted)}.portfolio-body .blog-post-link h3{margin:0;font-size:17px;line-height:1.75;overflow-wrap:anywhere}.blog-post-link:hover h3,.blog-post-link:focus-visible h3{text-decoration:underline;text-underline-offset:5px}.blog-post-link p{margin:8px 0 0;color:var(--muted);font-size:13px;line-height:1.9}.blog-tags{display:flex;flex-wrap:wrap;gap:6px 14px;padding:0;margin:12px 0 0;list-style:none;font-size:12px;color:var(--muted);overflow-wrap:anywhere}.blog-back{display:inline-flex;gap:8px;align-items:center;min-height:44px;font-size:13px;color:var(--muted)!important;text-decoration:none}.blog-back:hover{text-decoration:underline}.blog-back svg{width:15px;height:15px}.blog-article-heading{max-width:700px;margin:20px 0 36px}.portfolio-body .blog-article-heading h1{font-size:clamp(24px,2.5vw,32px);font-weight:650;line-height:1.65;margin:0 0 18px;overflow-wrap:anywhere}.blog-meta{display:flex;flex-wrap:wrap;gap:8px 20px;color:var(--muted);font-size:12px;font-variant-numeric:tabular-nums}.blog-reading-grid{display:grid;grid-template-columns:minmax(0,1fr);align-items:start}.blog-prose{min-width:0;padding:32px;border:1px solid var(--line);border-radius:12px;background:var(--surface);font-size:15px;overflow-wrap:anywhere}.portfolio-body .blog-prose :is(p,li){line-height:2}.blog-prose>*{margin:0}.blog-prose>*+*{margin-top:1.5em}.portfolio-body .blog-prose :is(h2,h3,h4){scroll-margin-top:100px;line-height:1.65;letter-spacing:0}.portfolio-body .blog-prose h2{font-size:21px;margin-top:48px;padding-bottom:12px;border-bottom:1px solid var(--line)}.portfolio-body .blog-prose h3{font-size:18px;margin-top:32px}.portfolio-body .blog-prose h4{font-size:16px;margin-top:28px}.blog-prose>:first-child{margin-top:0}.blog-prose :is(ul,ol){padding-left:1.5em}.blog-prose li+li{margin-top:.4em}.blog-prose blockquote{padding:4px 0 4px 20px;border-left:3px solid var(--line-strong);color:var(--muted)}.blog-prose blockquote>:first-child{margin-top:0}.blog-prose blockquote>:last-child{margin-bottom:0}.blog-prose a{text-decoration:underline}.blog-prose :not(pre)>code{padding:.15em .4em;border-radius:4px;background:var(--surface-soft);font-size:.88em}.blog-prose pre{max-width:100%;padding:52px 20px 20px;margin:0;border-radius:8px;overflow-x:auto;font-size:13px;line-height:1.9}.blog-code{position:relative;min-width:0}.blog-code>button{position:absolute;top:10px;right:10px;min-height:32px;min-width:86px;padding:4px 12px;border:1px solid #747d8c;border-radius:5px;background:#292f3a;color:#f5f7fa;font:inherit;font-size:12px;cursor:pointer}.blog-code>button:hover{background:#414b5c}.blog-code>button:focus-visible{outline-color:#fff}.blog-prose :is(img,video){display:block;max-width:100%;height:auto;margin-inline:auto;border-radius:8px}.blog-prose figure{margin-inline:0}.blog-prose figcaption{margin-top:8px;font-size:12px;color:var(--muted);text-align:center}.blog-table{max-width:100%;overflow-x:auto}.blog-prose table{width:100%;border-collapse:collapse;font-size:13px;line-height:1.8}.blog-prose :is(th,td){padding:12px 14px;border:1px solid var(--line);text-align:left;min-width:100px}.blog-prose th{background:var(--surface-soft)}.blog-prose hr{border:0;border-top:1px solid var(--line)}.blog-toc{margin-bottom:24px}.blog-toc>details{border-block:1px solid var(--line);padding:12px 0}.blog-toc summary{min-height:36px;font-size:13px;font-weight:600;cursor:pointer}.blog-toc summary:after{content:"+";float:right;padding-inline:8px;color:var(--muted)}.blog-toc details[open]>summary:after{content:"−"}.blog-toc nav{max-height:50vh;overflow-y:auto;overscroll-behavior:contain}.blog-toc ol{margin:8px 0 0;padding:0;list-style:none}.blog-toc a{display:block;padding:8px 0 8px 14px;border-left:2px solid var(--line);color:var(--muted);font-size:12px;line-height:1.7;text-decoration:none}.blog-toc .blog-toc-child a{padding-left:26px}.blog-toc a:hover{text-decoration:underline}.blog-toc a[aria-current]{border-left-color:var(--text);color:var(--text);font-weight:600}.blog-related{max-width:700px;margin-top:48px}.portfolio-body .blog-related>h2{margin:0;font-size:18px}.blog-exit{margin-top:32px}.blog-preview-link{display:inline-flex;margin-top:24px;min-height:44px;align-items:center;font-size:13px}.blog-preview-notice{padding:12px 16px;background:var(--surface-soft);border:1px dashed var(--line-strong);border-radius:6px;font-size:13px}@media(min-width:1024px){.portfolio-shell[data-blog] .portfolio-right{width:min(100% - 64px,980px)}.blog-reading-grid{grid-template-columns:minmax(0,700px) minmax(160px,200px);gap:32px}.blog-toc{position:sticky;top:108px;grid-column:2;grid-row:1;margin:0}.blog-prose{grid-column:1;grid-row:1}.blog-toc>details{border:0;padding:0}.blog-toc summary{list-style:none}.blog-toc summary:after{display:none}.blog-toc summary::-webkit-details-marker{display:none}.blog-toc nav{max-height:calc(100dvh - 180px)}}@media(max-width:640px){.blog-prose{padding:24px 20px;font-size:15px}.blog-post-link{grid-template-columns:42px minmax(0,1fr);gap:12px}.portfolio-body .blog-prose h2{font-size:19px;margin-top:36px}.portfolio-body .blog-prose h3{font-size:17px}.portfolio-body .blog-post-link h3{font-size:16px}}
