/* blog.css — стили блога (исходник: tools/blog.css, собирается в site/css/blog.css вместе с подсветкой кода).
   Опирается на токены из style.css: бумага, тушь, один акцент. */
.blog-hero{padding-bottom:20px}
.blog-hero h1{max-width:14em}
.blog-topics{margin-top:22px;font:400 13.5px/1.6 var(--mono);color:var(--ink-3);display:flex;flex-wrap:wrap;gap:4px 18px}
.blog-rss{margin-top:10px;font:400 13.5px/1.5 var(--mono);color:var(--ink-3)}.blog-rss a{color:var(--acc-2)}

/* список статей */
.post-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 48px;padding:0 0 90px;border-top:2px solid var(--ink)}
.post-card{position:relative;padding:26px 0 28px;border-bottom:1px solid var(--rule)}
.post-grid:not(.post-grid--related)>.post-card:first-child{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:8px 48px;padding:34px 0 36px}
.post-grid:not(.post-grid--related)>.post-card:first-child .post-card__meta{grid-column:1/-1}
.post-grid:not(.post-grid--related)>.post-card:first-child .post-card__title{font-size:clamp(28px,3.4vw,42px)}
.post-grid:not(.post-grid--related)>.post-card:first-child .post-card__lead{font-size:17.5px;align-self:end}
.post-card__meta{display:flex;flex-wrap:wrap;gap:4px 8px;font:400 13px/1.5 var(--mono);color:var(--ink-3)}
.post-card__title{margin-top:10px;font-size:clamp(21px,2vw,25px);line-height:1.2}
.post-card__title a{text-decoration:none}
.post-card__title a::after{content:"";position:absolute;inset:0}
.post-card:hover .post-card__title{color:var(--acc)}
.post-card:focus-within{outline:2px solid var(--acc);outline-offset:4px}
.post-card__title a:focus-visible{outline:none}
.post-card__lead{margin-top:10px;color:var(--ink-2);font-size:16px}
.post-grid--related{grid-template-columns:repeat(3,minmax(0,1fr));gap:0 32px;padding:0;border-top:1px solid var(--ink)}
.post-grid--related .post-card__title{font-size:19px}
.post-grid--related .post-card__lead{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;font-size:15px}
@media (max-width:860px){.post-grid,.post-grid--related{grid-template-columns:minmax(0,1fr)}.post-grid:not(.post-grid--related)>.post-card:first-child{grid-template-columns:minmax(0,1fr)}}

/* статья: шапка */
.post-hero{padding:clamp(32px,5vw,64px) 0 26px}
.post-tags{display:flex;flex-wrap:wrap;gap:4px 16px;margin-bottom:16px;font:400 13.5px/1.5 var(--mono);color:var(--acc-2)}
.post-hero h1{font-size:clamp(32px,4.6vw,56px);letter-spacing:-.025em;line-height:1.06;max-width:16em}
.post-lead{margin-top:20px;font:400 clamp(18px,1.7vw,21px)/1.55 var(--serif);color:var(--ink-2);max-width:36em}
.post-meta{display:flex;align-items:center;gap:14px;margin-top:26px;padding-top:16px;border-top:1px solid var(--rule);font:400 13.5px/1.5 var(--mono);color:var(--ink-3);max-width:760px}
.post-meta img{width:40px;height:40px;border-radius:50%;object-fit:cover}
.post-meta b{display:block;color:var(--ink);font:500 15px/1.3 var(--sans)}
.post-meta__row{display:flex;flex-wrap:wrap;gap:2px 8px}

/* статья: раскладка с оглавлением слева на полях */
.post-layout{display:grid;grid-template-columns:220px minmax(0,720px);gap:clamp(32px,5vw,72px);padding-top:18px;padding-bottom:40px}
.toc--side{position:sticky;top:calc(var(--nav-h) + 24px);max-height:calc(100vh - var(--nav-h) - 48px);overflow:auto}
.toc__title{font:500 13px/1 var(--mono);color:var(--ink);margin-bottom:12px}
.toc__list{counter-reset:t;display:flex;flex-direction:column}
.toc__list li{counter-increment:t}
.toc__list a{display:flex;gap:10px;padding:5px 0;font-size:14px;line-height:1.4;color:var(--ink-3);text-decoration:none}
.toc__list a::before{content:counter(t);font:400 12px/1.7 var(--mono);color:var(--rule-2);min-width:1.2em}
.toc__list a:hover,.toc__list a.is-current{color:var(--ink)}
.toc__list a.is-current::before{color:var(--acc)}
.toc--inline{display:none;margin-bottom:28px;border-top:1px solid var(--ink);border-bottom:1px solid var(--rule)}
.toc--inline summary{list-style:none;cursor:pointer;padding:14px 0;font:500 15px/1.3 var(--mono);display:flex;justify-content:space-between}
.toc--inline summary::-webkit-details-marker{display:none}
.toc--inline summary::after{content:"+";color:var(--acc)}
.toc--inline[open] summary::after{content:"−"}
.toc--inline .toc__list{padding:0 0 14px}
@media (max-width:980px){.post-layout{grid-template-columns:minmax(0,1fr)}.post-aside{display:none}.toc--inline{display:block}}

/* статья: типографика */
.prose{font-size:18px;line-height:1.72;color:var(--ink);overflow-wrap:break-word}
.prose>*+*{margin-top:1em}
.prose h2{font-size:clamp(25px,2.6vw,32px);letter-spacing:-.02em;margin-top:2em;line-height:1.18}
.prose h3{font-size:clamp(20px,1.9vw,23px);margin-top:1.7em;line-height:1.25}
.prose h2+*,.prose h3+*{margin-top:.7em}
.prose a{color:var(--acc-2);text-decoration:underline;text-decoration-color:color-mix(in srgb,var(--acc) 45%,transparent)}
.prose a:hover{text-decoration-color:currentColor}
.prose strong{font-weight:600}
.prose ul,.prose ol{padding-left:0}
.prose li{position:relative;padding-left:1.6em}
.prose li+li{margin-top:.4em}
.prose ul>li::before{content:"–";position:absolute;left:.2em;color:var(--acc)}
.prose ol{counter-reset:o}
.prose ol>li::before{counter-increment:o;content:counter(o) ".";position:absolute;left:0;font:400 .85em/2 var(--mono);color:var(--acc-2)}
.prose code{font:400 .88em var(--mono);background:var(--paper-2);padding:.1em .35em;border-radius:2px}
.prose .hl{margin-top:1.3em;border-radius:var(--r);overflow:hidden}
.prose .hl pre{margin:0;padding:18px 20px;overflow-x:auto;font:400 14.5px/1.6 var(--mono);background:#1c1a17;color:#ece6da}
.prose .hl code{background:none;padding:0;font-size:inherit}
.prose blockquote{margin:1.4em 0;padding:4px 0 4px 20px;border-left:3px solid var(--ink);color:var(--ink-2)}
.prose blockquote p+p{margin-top:.6em}
.prose blockquote.note{border-left-color:var(--acc);background:var(--acc-bg);padding:14px 18px}
.prose hr{border:0;border-top:1px solid var(--rule);margin:2em 0}
.prose .table{overflow-x:auto;margin-top:1.3em}
.prose table{width:100%;border-collapse:collapse;font-size:15.5px;line-height:1.5}
.prose th{text-align:left;font:500 13px/1.4 var(--mono);color:var(--ink-3);padding:10px 14px 10px 0;border-bottom:1.5px solid var(--ink)}
.prose td{padding:11px 14px 11px 0;border-bottom:1px solid var(--rule);vertical-align:top}
.prose td:first-child{font-weight:500}
.prose td code{font-size:.85em}

/* блок «Посмотреть вживую» */
.post-demos{margin-top:56px;padding-top:20px;border-top:2px solid var(--ink)}
.post-demos h2{font-size:26px}
.post-demos__sub{margin-top:8px;color:var(--ink-3);font-size:15.5px}
.demo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:0 28px;margin-top:10px}
.demo-card{display:flex;flex-direction:column;gap:6px;padding:16px 0;border-bottom:1px solid var(--rule);text-decoration:none}
.demo-card:hover{color:var(--ink)}
.demo-card__kicker{font:400 12.5px/1.4 var(--mono);color:var(--ink-3)}
.demo-card__title{font:600 19px/1.25 var(--serif)}
.demo-card:hover .demo-card__title{color:var(--acc)}
.demo-card__text{font-size:15px;color:var(--ink-2)}
.demo-card__btn{margin-top:4px;font-size:14.5px;font-weight:500;color:var(--acc-2)}

/* автор */
.author-cta{display:grid;grid-template-columns:72px minmax(0,1fr);gap:20px;margin-top:48px;padding:24px;background:var(--card);border:1px solid var(--rule);border-radius:var(--r)}
.author-cta img{width:72px;height:72px;border-radius:50%;object-fit:cover}
.author-cta__name{font:600 20px/1.2 var(--serif)}
.author-cta__text>p:not(.author-cta__name){margin-top:8px;color:var(--ink-2);font-size:16px}
.author-cta__actions{display:flex;flex-wrap:wrap;gap:10px;margin-top:16px}
@media (max-width:560px){.author-cta{grid-template-columns:minmax(0,1fr)}}

.related{padding-top:40px;padding-bottom:80px}
.related h2{font-size:26px;margin-bottom:14px}

/* ===== Тема C (с 2026-11-02): кремовая бумага, пастельные плиты, томатный акцент, Rubik =====
   Токены (--paper, --acc, --mint, --pink, --butter, --peach) берутся из style.css. */
.blog-hero h1{font-size:clamp(40px,5.6vw,80px);line-height:.95;font-weight:900;letter-spacing:-.035em}
.blog-topics,.blog-rss{font-family:var(--sans)}
.post-grid{border-top:0;gap:16px;padding-top:6px}
.post-card{border:2px solid var(--ink);border-radius:var(--r);background:#fff;padding:22px 24px 24px;transition:transform .15s,box-shadow .15s}
.post-card:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--ink)}
.post-grid:not(.post-grid--related)>.post-card:first-child{background:var(--butter);padding:30px 30px 32px}
.post-grid:not(.post-grid--related)>.post-card:first-child .post-card__title{font-weight:900;line-height:1}
.post-grid:not(.post-grid--related)>.post-card:nth-child(4n+2){background:var(--mint)}
.post-grid:not(.post-grid--related)>.post-card:nth-child(4n+4){background:var(--pink)}
.post-grid:not(.post-grid--related)>.post-card:nth-child(4n+5){background:var(--peach)}
.post-card__meta{font-family:var(--sans);color:var(--ink-2)}
.post-card__title{font-weight:800;letter-spacing:-.02em}
.post-card:hover .post-card__title{color:var(--acc-2)}
.post-grid--related{border-top:0;gap:14px}
.post-tags{font-family:var(--sans);font-weight:600}
.post-tags>*{background:var(--butter);color:var(--ink);padding:3px 10px;border-radius:999px}
.post-hero h1{font-weight:900;line-height:1;letter-spacing:-.035em}
.post-lead{font-family:var(--sans)}
.post-meta{border-top:2px solid var(--ink);font-family:var(--sans)}
.toc__title{font:800 16px/1 var(--serif)}
.toc__list a::before{font-family:var(--serif);font-weight:800}
.toc--inline{border:2px solid var(--ink);border-radius:var(--r);background:var(--mint);padding:0 16px}
.toc--inline summary{font:700 16px/1.3 var(--serif)}
.prose h2,.prose h3{font-weight:800;letter-spacing:-.025em}
.prose h2{font-size:clamp(26px,2.8vw,36px);line-height:1.08}
.prose code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:var(--acc-bg);border-radius:5px}
.prose .hl{border:2px solid var(--ink);border-radius:var(--r)}
.prose .hl pre{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;background:#17130f;color:#f3ebe0}
.prose blockquote{border-left:4px solid var(--acc)}
.prose blockquote.note{border:2px solid var(--ink);border-radius:var(--r);background:var(--peach)}
.prose th{font-family:var(--sans);font-weight:700;color:var(--ink-2);border-bottom:2px solid var(--ink)}
.post-demos{border-top:0}
.post-demos h2,.related h2{font-size:clamp(26px,2.8vw,34px);font-weight:900}
.demo-grid{gap:14px}
.demo-card{border:2px solid var(--ink);border-radius:var(--r);background:var(--mint);padding:18px 20px}
.demo-card:nth-child(3n+2){background:var(--butter)}.demo-card:nth-child(3n+3){background:var(--pink)}
.demo-card__kicker{font-family:var(--sans);color:var(--ink-2)}
.demo-card__title{font-weight:800}
.demo-card:hover .demo-card__title,.demo-card__btn{color:var(--acc-2)}
.demo-card__btn{font-weight:700}
.author-cta{border:2px solid var(--ink);background:var(--peach);box-shadow:6px 6px 0 var(--ink)}
.author-cta img{border:2px solid var(--ink)}
.author-cta__name{font-weight:800}
.demo-card__btn,.demo-card:hover .demo-card__title{color:var(--ink)}
.demo-card__btn{text-decoration:underline;text-decoration-color:var(--acc);text-decoration-thickness:2px;text-underline-offset:3px}

/* pygments */
.hl .hll { background-color: #6e7681 }
.hl { background: #0d1117; color: #E6EDF3 }
.hl .c { color: #8B949E; font-style: italic } /* Comment */
.hl .err { color: #F85149 } /* Error */
.hl .esc { color: #E6EDF3 } /* Escape */
.hl .g { color: #E6EDF3 } /* Generic */
.hl .k { color: #FF7B72 } /* Keyword */
.hl .l { color: #A5D6FF } /* Literal */
.hl .n { color: #E6EDF3 } /* Name */
.hl .o { color: #FF7B72; font-weight: bold } /* Operator */
.hl .x { color: #E6EDF3 } /* Other */
.hl .p { color: #E6EDF3 } /* Punctuation */
.hl .ch { color: #8B949E; font-style: italic } /* Comment.Hashbang */
.hl .cm { color: #8B949E; font-style: italic } /* Comment.Multiline */
.hl .cp { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Preproc */
.hl .cpf { color: #8B949E; font-style: italic } /* Comment.PreprocFile */
.hl .c1 { color: #8B949E; font-style: italic } /* Comment.Single */
.hl .cs { color: #8B949E; font-weight: bold; font-style: italic } /* Comment.Special */
.hl .gd { color: #FFA198; background-color: #490202 } /* Generic.Deleted */
.hl .ge { color: #E6EDF3; font-style: italic } /* Generic.Emph */
.hl .ges { color: #E6EDF3; font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.hl .gr { color: #FFA198 } /* Generic.Error */
.hl .gh { color: #79C0FF; font-weight: bold } /* Generic.Heading */
.hl .gi { color: #56D364; background-color: #0F5323 } /* Generic.Inserted */
.hl .go { color: #8B949E } /* Generic.Output */
.hl .gp { color: #8B949E } /* Generic.Prompt */
.hl .gs { color: #E6EDF3; font-weight: bold } /* Generic.Strong */
.hl .gu { color: #79C0FF } /* Generic.Subheading */
.hl .gt { color: #FF7B72 } /* Generic.Traceback */
.hl .g-Underline { color: #E6EDF3; text-decoration: underline } /* Generic.Underline */
.hl .kc { color: #79C0FF } /* Keyword.Constant */
.hl .kd { color: #FF7B72 } /* Keyword.Declaration */
.hl .kn { color: #FF7B72 } /* Keyword.Namespace */
.hl .kp { color: #79C0FF } /* Keyword.Pseudo */
.hl .kr { color: #FF7B72 } /* Keyword.Reserved */
.hl .kt { color: #FF7B72 } /* Keyword.Type */
.hl .ld { color: #79C0FF } /* Literal.Date */
.hl .m { color: #A5D6FF } /* Literal.Number */
.hl .s { color: #A5D6FF } /* Literal.String */
.hl .na { color: #E6EDF3 } /* Name.Attribute */
.hl .nb { color: #E6EDF3 } /* Name.Builtin */
.hl .nc { color: #F0883E; font-weight: bold } /* Name.Class */
.hl .no { color: #79C0FF; font-weight: bold } /* Name.Constant */
.hl .nd { color: #D2A8FF; font-weight: bold } /* Name.Decorator */
.hl .ni { color: #FFA657 } /* Name.Entity */
.hl .ne { color: #F0883E; font-weight: bold } /* Name.Exception */
.hl .nf { color: #D2A8FF; font-weight: bold } /* Name.Function */
.hl .nl { color: #79C0FF; font-weight: bold } /* Name.Label */
.hl .nn { color: #FF7B72 } /* Name.Namespace */
.hl .nx { color: #E6EDF3 } /* Name.Other */
.hl .py { color: #79C0FF } /* Name.Property */
.hl .nt { color: #7EE787 } /* Name.Tag */
.hl .nv { color: #79C0FF } /* Name.Variable */
.hl .ow { color: #FF7B72; font-weight: bold } /* Operator.Word */
.hl .pm { color: #E6EDF3 } /* Punctuation.Marker */
.hl .w { color: #6E7681 } /* Text.Whitespace */
.hl .mb { color: #A5D6FF } /* Literal.Number.Bin */
.hl .mf { color: #A5D6FF } /* Literal.Number.Float */
.hl .mh { color: #A5D6FF } /* Literal.Number.Hex */
.hl .mi { color: #A5D6FF } /* Literal.Number.Integer */
.hl .mo { color: #A5D6FF } /* Literal.Number.Oct */
.hl .sa { color: #79C0FF } /* Literal.String.Affix */
.hl .sb { color: #A5D6FF } /* Literal.String.Backtick */
.hl .sc { color: #A5D6FF } /* Literal.String.Char */
.hl .dl { color: #79C0FF } /* Literal.String.Delimiter */
.hl .sd { color: #A5D6FF } /* Literal.String.Doc */
.hl .s2 { color: #A5D6FF } /* Literal.String.Double */
.hl .se { color: #79C0FF } /* Literal.String.Escape */
.hl .sh { color: #79C0FF } /* Literal.String.Heredoc */
.hl .si { color: #A5D6FF } /* Literal.String.Interpol */
.hl .sx { color: #A5D6FF } /* Literal.String.Other */
.hl .sr { color: #79C0FF } /* Literal.String.Regex */
.hl .s1 { color: #A5D6FF } /* Literal.String.Single */
.hl .ss { color: #A5D6FF } /* Literal.String.Symbol */
.hl .bp { color: #E6EDF3 } /* Name.Builtin.Pseudo */
.hl .fm { color: #D2A8FF; font-weight: bold } /* Name.Function.Magic */
.hl .vc { color: #79C0FF } /* Name.Variable.Class */
.hl .vg { color: #79C0FF } /* Name.Variable.Global */
.hl .vi { color: #79C0FF } /* Name.Variable.Instance */
.hl .vm { color: #79C0FF } /* Name.Variable.Magic */
.hl .il { color: #A5D6FF } /* Literal.Number.Integer.Long */