@charset "UTF-8";
/* k3-hub.css — хаб-слой K3 (2-й <style> эталона hub-*.html: хаб рубрики, полосы,
   каталог, 404, документ, автор, кейсы). Кэшируемый статик вместо инлайна шаблонов;
   дословно по эталону; грузится ПОСЛЕ k3-skin.css (цепочка header-k3.php). */

/* --- хаб рубрики --------------------------------------------------------- */
.crumbs{font-family:'IBM Plex Mono',monospace;font-size:0.6471rem;letter-spacing:.08em;text-transform:uppercase;
  color:var(--ink2);padding:14px 0;border-bottom:1px solid var(--line)}
.crumbs a{color:var(--ink2)}
.crumbs a:hover{color:var(--acc)}
.crumbs .sep{opacity:.5;margin:0 6px}

.hhero{display:grid;grid-template-columns:1fr 300px;gap:40px;padding:34px 0 28px;border-bottom:2px solid var(--ink)}
.hhero .hnum{font-family:'IBM Plex Mono',monospace;font-size:0.7059rem;letter-spacing:.16em;color:var(--acc);font-weight:600}
.hhero h1{font-size:clamp(1.7647rem,4.4vw,3.1rem);line-height:1.04;letter-spacing:-.02em;margin:10px 0 0;font-weight:700}
.hhero .hsub{font-size:0.8235rem;color:var(--ink2);margin-top:12px}
.hhero .hdesc{max-width:58ch;margin-top:16px;color:var(--ink2);font-size:0.9412rem;line-height:1.55}
.hfacts{border:1px solid var(--line2);align-self:start}
.hfact{display:flex;justify-content:space-between;align-items:baseline;gap:12px;padding:11px 14px;border-bottom:1px solid var(--line)}
.hfact:last-child{border-bottom:0}
.hfact .fk{font-size:0.7353rem;color:var(--ink2)}
.hfact .fv{font-family:'IBM Plex Mono',monospace;font-size:1.1176rem;font-weight:600;letter-spacing:-.01em}
.hfact .fv .u{font-size:0.6471rem;font-weight:400;color:var(--ink2);margin-left:4px;letter-spacing:.05em}

.topics{padding:20px 0;border-bottom:1px solid var(--line)}
.topics .tlab{font-size:0.7647rem;color:var(--ink2);margin-bottom:12px}
.tchips{display:flex;flex-wrap:wrap;gap:8px}
.tchip{display:inline-flex;align-items:baseline;gap:7px;border:1px solid var(--line2);padding:6px 11px;
  font-size:0.7647rem;color:var(--ink);background:var(--card)}
.tchip:hover{border-color:var(--acc);color:var(--acc)}
.tchip .tn{font-family:'IBM Plex Mono',monospace;font-size:0.5882rem;color:var(--ink2)}
.tchip:hover .tn{color:var(--acc)}

/* ЛЕНТА ПОЛОС С РОТАЦИЕЙ. Семь паттернов, каждая полоса — свой.
   Закон: разнообразие даёт ЧЕРЕДОВАНИЕ ПОЛОС, а не улучшение одной сетки; подгрузка обязана
   продолжать чередование, иначе мозаика обрывается на первом клике. */
.colh{font-size:0.7647rem;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--ink2);
  padding-bottom:9px;margin-bottom:14px;border-bottom:2px solid var(--ink)}
/* .hband, НЕ .band: .band в наследуемом скине — тёмная полоса «Обзоры» с главной,
   коллизия красила бы все полосы хаба в чёрный. */
.hband{padding:34px 0 0}
.hband:first-child{padding-top:26px}
.hband.is-hid{display:none}

/* мозаика: крупный 2×2 + малые (mosr — зеркало: крупный последним) */
.mos{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
.ht{border:1px solid var(--line2);background:var(--card);display:flex;flex-direction:column;min-width:0}
.ht:hover{outline:2px solid var(--accB);outline-offset:-1px}
.ht .cover{border:0;border-bottom:1px solid var(--line)}
.ht-b{padding:11px 13px 13px}
.ht h3{font-size:0.8235rem;line-height:1.35;font-weight:600}
.ht-big{grid-column:span 2;grid-row:span 2}
/* зеркало: ЯВНАЯ позиция справа. Авто-поток тут бессилен — блок 2×2 после четырёх
   мелких не влезает в ряд и падает вниз, оставляя дыру в колонках 3-4. */
.ht-big.ht-right{grid-column:3 / span 2;grid-row:1 / span 2}
/* Число колонок ПО ФАКТУ материалов — иначе хвост ротации даёт полупустой ряд.
   Объявлено ТОЛЬКО для десктопа: инлайновый style перебивал бы @media и ломал мобайл.
   Класс в min-width-медиа на узком просто молчит. */
@media(min-width:901px){
  .g1{grid-template-columns:repeat(1,minmax(0,1fr))}
  .g2{grid-template-columns:repeat(2,minmax(0,1fr))}
  .g3{grid-template-columns:repeat(3,minmax(0,1fr))}
  .g4{grid-template-columns:repeat(4,minmax(0,1fr))}
  .g5{grid-template-columns:repeat(5,minmax(0,1fr))}
  .g6{grid-template-columns:repeat(6,minmax(0,1fr))}
}
.ht-big .ht-b{padding:16px 18px 18px}
.ht-big h2{font-size:1.2941rem;line-height:1.2;letter-spacing:-.015em;font-weight:700;margin:3px 0 8px}
.ht-big p{color:var(--ink2);font-size:0.8235rem;line-height:1.5}

/* список: 3 колонки, только заголовки */
.mlist{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 36px}
.mrow{padding:10px 0;border-bottom:1px solid var(--line);min-width:0}
.mrow h3{font-size:0.8529rem;line-height:1.4;font-weight:600}
.mrow h3 a:hover{text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accB)}

/* линия прямоугольников: 6 в ряд */
.mstrip{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:12px}
.msc{border:1px solid var(--line2);background:var(--card);display:flex;flex-direction:column;min-width:0}
.msc:hover{outline:2px solid var(--accB);outline-offset:-1px}
.msc .cover{border:0;border-bottom:1px solid var(--line)}
.msc-b{padding:9px 11px 11px}
.msc h3{font-size:0.7353rem;line-height:1.32;font-weight:600}

/* горизонтальные карточки: обложка слева */
.mhoriz{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.mh{display:grid;grid-template-columns:132px minmax(0,1fr);border:1px solid var(--line2);background:var(--card);min-width:0}
.mh:hover{outline:2px solid var(--accB);outline-offset:-1px}
.mh .cover{border:0;border-right:1px solid var(--line);align-self:start}
.mh-b{padding:11px 14px 12px;min-width:0}
.mh h3{font-size:0.8529rem;line-height:1.35;font-weight:600}
.mh p{color:var(--ink2);font-size:0.7353rem;line-height:1.45;margin-top:4px}

/* дуэт: две широкие во всю ширину, обложка крупная слева */
.mduo{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.md{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);border:1px solid var(--line2);background:var(--card);min-width:0}
.md:hover{outline:2px solid var(--accB);outline-offset:-1px}
.md .cover{border:0;border-right:1px solid var(--line)}
.md-b{padding:16px 18px;align-self:center;min-width:0}
.md h3{font-size:0.9706rem;line-height:1.3;font-weight:700}
.md p{color:var(--ink2);font-size:0.7647rem;line-height:1.5;margin-top:6px}

/* квадро: 4 равные в ряд */
.mquad{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:16px}
@media (min-width:1560px){.mos{grid-template-columns:repeat(5,minmax(0,1fr))}.mquad{grid-template-columns:repeat(5,minmax(0,1fr))}}
@media (min-width:2400px){.wrap{max-width:2000px}}
@media (min-width:1900px){.mos{grid-template-columns:repeat(6,minmax(0,1fr))}.mquad{grid-template-columns:repeat(6,minmax(0,1fr))}}

.rtop{display:inline-block;font-family:'IBM Plex Sans',system-ui,sans-serif;font-size:0.7059rem;font-weight:600;
  letter-spacing:.08em;text-transform:uppercase;color:var(--ink2);margin-bottom:5px}
.hmore{display:flex;flex-direction:column;align-items:center;gap:9px;padding:34px 0 4px}
.mbtn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:54px;padding:0 26px;cursor:pointer;
  border:2px solid var(--ink);background:var(--card);color:var(--ink);font-size:0.9412rem;font-weight:600;border-radius:0}
.mbtn::before{content:"";width:10px;height:10px;background:var(--accB);flex:none}
.mbtn .mn{font-family:'IBM Plex Mono',monospace;font-size:0.7647rem;color:var(--ink2)}
.mbtn:hover{background:var(--ink);color:#fff}
.mbtn:hover .mn{color:var(--dink2)}
.mcount{font-size:0.7353rem;color:var(--ink2)}
.mcount b{color:var(--ink)}
.pager .pinfo{font-size:0.7647rem;color:var(--ink2)}
.pager .pbtn{font-size:0.8235rem;border:1px solid var(--line2);padding:9px 15px;color:var(--ink)}
.pager .pbtn:hover{border-color:var(--acc);color:var(--acc)}
.pager .pbtn[aria-disabled=true]{opacity:.35;pointer-events:none}

/* --- каталог -------------------------------------------------------------- */
.alpha{display:flex;flex-wrap:wrap;gap:5px;padding:18px 0;border-bottom:1px solid var(--line)}
.alpha a{font-family:'IBM Plex Mono',monospace;font-size:0.7059rem;min-width:26px;height:26px;display:inline-flex;
  align-items:center;justify-content:center;border:1px solid var(--line);color:var(--ink)}
.alpha a:hover{border-color:var(--acc);color:var(--acc)}
.alpha .off{opacity:.28;pointer-events:none}
.agroup{padding:26px 0 6px;display:grid;grid-template-columns:64px 1fr;gap:20px;border-bottom:1px solid var(--line)}
.agroup .aletter{font-family:'IBM Plex Mono',monospace;font-size:2rem;font-weight:600;color:var(--acc);line-height:1;
  position:sticky;top:12px;align-self:start}
.acells{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;padding-bottom:22px}
.acell{border:1px solid var(--line);background:var(--card);padding:14px 15px 13px;display:flex;flex-direction:column;gap:7px}
.acell:hover{border-color:var(--line2)}
.acell .an{font-size:1rem;font-weight:600;letter-spacing:-.01em}
.acell .ac{font-size:0.7353rem;color:var(--ink2);margin-top:-2px}
.acell .af{color:var(--ink2);font-size:0.7647rem;line-height:1.45;flex:1}
/* КАТАЛОГ: горящая ссылка «Обзор →» на каждой из десятков карточек сделала бы зелень
   фоном, а не акцентом. По закону интеракции зелёное появляется
   НА НАВЕДЕНИИ: в покое ссылка чернилами, вся карточка — цель клика. */
.acell{position:relative}
.acell:hover{outline:2px solid var(--accB);outline-offset:-1px}
.acell .am{font-family:'IBM Plex Mono',monospace;font-size:0.6176rem;letter-spacing:.07em;color:var(--ink2);text-transform:uppercase;margin-top:auto;padding-top:10px;display:flex;justify-content:flex-end}
.acell .am a{color:var(--ink);font-weight:600}
.acell:hover .am a{color:var(--acc)}

.nav a.on{color:var(--acc);font-weight:600}

/* --- состояния: фокус (a11y) + пустая витрина -------------------------------- */
a:focus-visible,button:focus-visible{outline:2px solid var(--accB);outline-offset:2px}
.hempty{border:1px dashed var(--line2);background:var(--card);padding:34px 24px;text-align:center;color:var(--ink2);margin:20px 0}
.hempty .he-h{font-family:'IBM Plex Mono',monospace;font-size:0.7059rem;letter-spacing:.12em;text-transform:uppercase;color:var(--acc);margin-bottom:8px}

/* --- 404 -------------------------------------------------------------------- */
.err{padding:60px 0 80px}
.err-code{font-family:'IBM Plex Mono',monospace;font-weight:600;font-size:clamp(90px,18vw,168px);line-height:.9;letter-spacing:-.04em;color:var(--ink)}
.err-code .cur{display:inline-block;width:.14em;height:.7em;background:var(--acc);margin-left:.06em;vertical-align:-.02em}
.err h1{font-size:clamp(26px,3.4vw,38px);font-weight:700;letter-spacing:-.02em;margin:18px 0 10px}
.err p{max-width:56ch;color:var(--ink2);font-size:0.9412rem;line-height:1.55}
.err-nav{display:flex;flex-wrap:wrap;gap:8px;margin:26px 0 22px}
.err-nav a{font-family:'IBM Plex Mono',monospace;font-size:0.7059rem;letter-spacing:.06em;text-transform:uppercase;
  border:1px solid var(--line2);padding:9px 13px;color:var(--ink)}
.err-nav a:hover{border-color:var(--acc);color:var(--acc)}
.err-home{font-size:0.8824rem;color:var(--acc);border-bottom:2px solid var(--accB);padding-bottom:2px}

/* --- документ (методика) ---------------------------------------------------- */
.doc{max-width:760px;padding:6px 0 30px}
.doc h2{font-size:clamp(20px,2.4vw,26px);font-weight:700;letter-spacing:-.01em;margin:34px 0 4px;padding-top:22px;border-top:1px solid var(--line)}
.doc h2 .dn{font-family:'IBM Plex Mono',monospace;font-size:0.7059rem;color:var(--acc);letter-spacing:.1em;margin-right:10px;font-weight:600}
.doc p{color:var(--ink2);font-size:0.9412rem;line-height:1.62;margin-top:14px}
.doc ul{list-style:none;margin:14px 0 0}
.doc li{position:relative;padding-left:20px;color:var(--ink2);font-size:0.9412rem;line-height:1.6;margin-top:9px}
.doc li::before{content:"";position:absolute;left:0;top:.6em;width:9px;height:2px;background:var(--acc)}
.doc .lead2{font-size:1.0588rem;line-height:1.6;color:var(--ink);max-width:64ch}

/* --- профиль инструмента ---------------------------------------------------- */
.prof-hero{display:grid;grid-template-columns:1fr 320px;gap:36px;padding:30px 0 26px;border-bottom:2px solid var(--ink);align-items:start}
.prof-hero .pcover{border:1px solid var(--line2);background:#EDEFE8}
.prof-hero .pcover svg{width:100%;height:auto;display:block}
.prof-kick{font-family:'IBM Plex Mono',monospace;font-size:0.7059rem;letter-spacing:.14em;text-transform:uppercase;color:var(--acc);font-weight:600}
.prof-hero h1{font-size:clamp(30px,4.2vw,50px);line-height:1.04;letter-spacing:-.02em;margin:8px 0 0;font-weight:700}
.prof-class{font-family:'IBM Plex Mono',monospace;font-size:0.7647rem;letter-spacing:.05em;color:var(--ink2);margin-top:10px}
.prof-lead{margin-top:16px;color:var(--ink2);font-size:0.9412rem;line-height:1.55;max-width:60ch}
.pscore{border:1px solid var(--line2);padding:16px 18px}
.pscore .ps-l{font-family:'IBM Plex Mono',monospace;font-size:0.5882rem;letter-spacing:.12em;text-transform:uppercase;color:var(--ink2)}
.pscore .ps-n{font-family:'IBM Plex Mono',monospace;font-size:2.5882rem;font-weight:600;letter-spacing:-.02em;line-height:1;margin:4px 0 10px}
.pscore .ps-n span{font-size:1.0588rem;color:var(--ink2)}
.pscore .ps-bar{height:8px;background:var(--line);position:relative}
.pscore .ps-fill{position:absolute;left:0;top:0;bottom:0;background:var(--accB)}
.spec2{border:1px solid var(--line2);margin:26px 0}
.spec2 .s2row{display:grid;grid-template-columns:180px 1fr;gap:16px;padding:12px 16px;border-bottom:1px solid var(--line)}
.spec2 .s2row:last-child{border-bottom:0}
.spec2 .s2k{font-family:'IBM Plex Mono',monospace;font-size:0.5882rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink2);padding-top:2px}
.spec2 .s2v{font-size:0.8824rem;line-height:1.5}
.spec2 .s2v.vrd{color:var(--ink);font-weight:500}
.pm2{display:grid;grid-template-columns:1fr 1fr;gap:24px;margin:26px 0}
.pm2 .pm-h{font-family:'IBM Plex Mono',monospace;font-size:0.6471rem;letter-spacing:.1em;text-transform:uppercase;color:var(--acc);margin-bottom:10px;padding-bottom:8px;border-bottom:1px solid var(--line)}
.pm2 .minus .pm-h{color:var(--org)}
.pm2 ul{list-style:none}
.pm2 li{position:relative;padding-left:20px;font-size:0.8529rem;line-height:1.5;color:var(--ink2);margin-top:9px}
.pm2 li::before{content:"+";position:absolute;left:0;color:var(--acc);font-family:'IBM Plex Mono',monospace;font-weight:600}
.pm2 .minus li::before{content:"–";color:var(--org)}
.price{display:grid;grid-template-columns:repeat(3,1fr);gap:1px;background:var(--line2);border:1px solid var(--line2);margin:8px 0 0}
.price .pcell{background:var(--card);padding:16px 16px 14px}
.price .pt{font-family:'IBM Plex Mono',monospace;font-size:0.6471rem;letter-spacing:.1em;text-transform:uppercase;color:var(--ink2)}
.price .pv{font-family:'IBM Plex Mono',monospace;font-size:1.4118rem;font-weight:600;letter-spacing:-.01em;margin:6px 0 6px}
.price .pd{font-size:0.7647rem;line-height:1.45;color:var(--ink2)}

@media(max-width:900px){
  .prof-hero{grid-template-columns:1fr;gap:22px}
  .spec2 .s2row{grid-template-columns:1fr;gap:3px}
  .pm2{grid-template-columns:1fr;gap:18px}
  .price{grid-template-columns:1fr}

  .hhero{grid-template-columns:1fr;gap:22px;padding-top:24px}
  /* сетка верха и лента в 2 колонки на мобиле распирают экран шире вьюпорта:
     журнальная иерархия имеет смысл только там, где есть ширина. */
  .mos,.mquad{grid-template-columns:repeat(2,minmax(0,1fr))}
  .ht-big{grid-column:1/-1;grid-row:span 1}
  .mlist{grid-template-columns:minmax(0,1fr)}
  .mstrip{grid-template-columns:repeat(2,minmax(0,1fr))}
  .mhoriz,.mduo{grid-template-columns:minmax(0,1fr)}
  .md{grid-template-columns:minmax(0,1fr)}
  .md .cover{border-right:0;border-bottom:1px solid var(--line)}
  .hrows{grid-template-columns:minmax(0,1fr);gap:0}
  .acells{grid-template-columns:1fr}
  .agroup{grid-template-columns:1fr;gap:8px}
  .agroup .aletter{position:static;font-size:1.5294rem}
}

/* --- страница автора ------------------------------------------------------
   Смысл страницы: показать, ЧТО человек может проверять и ЧЕМ это доказано.
   Не витрина достижений — опора для подписи «Проверил» в штампе статьи. */
.au-hero{display:grid;grid-template-columns:200px minmax(0,1fr);gap:30px;padding:30px 0 26px;border-bottom:1px solid var(--line);align-items:start}
.au-photo{border:1px solid var(--line2);background:#EDEFE8}
.au-photo img{width:100%;height:auto;display:block}
.au-role{font-family:'IBM Plex Mono',monospace;font-size:0.6471rem;letter-spacing:.12em;text-transform:uppercase;color:var(--acc);font-weight:600}
.au-hero h1{font-size:clamp(26px,3.6vw,38px);line-height:1.1;font-weight:700;letter-spacing:-.015em;margin:10px 0 8px}
.au-at{font-size:0.8824rem;line-height:1.55;color:var(--ink2);max-width:640px}
.au-sec{margin-top:34px}
.au-h{display:flex;align-items:center;gap:12px;font-size:0.8824rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;margin-bottom:14px}
.au-h::before{content:"";width:11px;height:11px;background:var(--accB);flex:none}
/* auto-fit, НЕ auto-fill: fill оставляет пустую серую ячейку-призрак, когда зон
   не кратно колонкам. */
.au-zones{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1px;background:var(--line2);border:1px solid var(--line2)}
.au-zone{background:var(--card);padding:13px 15px;display:flex;justify-content:space-between;align-items:baseline;gap:12px}
.au-zone .zn2{font-size:0.8529rem;font-weight:600}
.au-zone .zq{font-family:'IBM Plex Mono',monospace;font-size:0.7059rem;color:var(--ink2);white-space:nowrap}
.au-list{list-style:none;margin:0;padding:0;max-width:760px}
.au-list li{font-size:0.8824rem;line-height:1.6;color:var(--ink2);padding:0 0 9px 18px;background:linear-gradient(var(--acc),var(--acc)) 0 .62em/8px 2px no-repeat}
.au-proof{list-style:none;margin:0;padding:0;max-width:760px;border-top:1px solid var(--line)}
.au-proof li{border-bottom:1px solid var(--line)}
.au-proof a{display:block;padding:12px 0;font-size:0.8529rem;line-height:1.45;font-weight:500;color:var(--acc);text-decoration:underline;text-underline-offset:3px;text-decoration-color:var(--line2)}
.au-proof a:hover{background:rgba(0,160,90,.08);text-decoration-color:var(--accB)}
.au-empty{font-size:0.8235rem;line-height:1.6;color:var(--ink2);border:1px solid var(--line2);border-left:5px solid var(--orgB);background:var(--card);padding:13px 16px;max-width:760px}
@media (max-width:720px){
  .au-hero{grid-template-columns:minmax(0,1fr);gap:18px}
  .au-photo{max-width:220px}
  .au-zones{grid-template-columns:1fr}
}

/* --- КЕЙСЫ СТУДЕНТОВ ------------------------------------------------------
   Кейс как разбор пути, а НЕ витрина цифр. Сумма в карточке
   есть, но она рядовая строка, а не герой блока. Стена из «243 000 ₽» крупным
   кеглем — троп инфобизнеса, и он убил бы рамку «издание-исследователь», ради
   которой всё строится. Читателя ведёт связка было → что делал → сколько. */
/* Унификация: кейсы — те же карточки, что весь сайт (без слитой сетки). */
/* ЛЕНТА ПОДТЕМЫ: строка как строка — номер — текст — мета по правому краю.
   Базовые десктопные стили обязательны: один мобильный оверрайд ронял бы строки
   в столбик (мета под текстом, правая треть страницы пустует). */
.hrows{display:grid;grid-template-columns:minmax(0,1fr);gap:0}
.hrow{display:grid;grid-template-columns:56px minmax(0,1fr) 210px;gap:24px;align-items:baseline;
  padding:17px 0;border-top:1px solid var(--line)}
.hrow:hover{background:var(--card)}
.hrow .ri{font:600 0.7647rem/1.2 "IBM Plex Mono",monospace;color:var(--ink2);font-variant-numeric:tabular-nums}
.hrow h3{font-size:1.0882rem;line-height:1.34;font-weight:600;margin-bottom:5px}
.hrow h3 a:hover{text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accB)}
.hrow p{font-size:0.8824rem;line-height:1.5;color:var(--ink2);max-width:78ch}
.rmeta2{font-size:0.7941rem;line-height:1.5;color:var(--ink2);text-align:right}
.rmeta2 .imp{font-weight:600;color:var(--ink)}
@media (max-width:820px){.hrow{grid-template-columns:minmax(0,1fr);gap:6px;padding:14px 0}
  .rmeta2{text-align:left}.hrow .ri{display:none}}
.kc{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-top:18px}
.kcell{background:var(--card);border:1px solid var(--line2);padding:16px 18px 17px;display:flex;flex-direction:column;min-width:0}
.kcell:hover{outline:2px solid var(--accB);outline-offset:-1px}
.kcell[aria-hidden]{visibility:hidden}
.kk{font-family:'IBM Plex Mono',monospace;font-size:0.6176rem;font-weight:600;letter-spacing:.11em;
    text-transform:uppercase;color:var(--acc);margin-bottom:10px}
.kk .kdot{color:var(--ink2);font-weight:400}
.kwho{font-size:0.8824rem;font-weight:600;line-height:1.3}
.kwas{font-size:0.7647rem;line-height:1.5;color:var(--ink2);margin-top:3px}
.kwas b{font-weight:600;color:var(--ink)}
.kt{font-size:0.9118rem;line-height:1.4;font-weight:600;margin-top:11px}
.kt a:hover{text-decoration:underline;text-decoration-thickness:2px;text-decoration-color:var(--accB)}
.kres{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:baseline;margin-top:11px;padding-top:11px;
      border-top:1px solid var(--line)}
.kres .km{font-family:'IBM Plex Mono',monospace;font-size:0.8235rem;font-weight:600;color:var(--ink)}
.kres .kx{font-size:0.7353rem;color:var(--ink2)}
.kproof{font-size:0.7059rem;color:var(--ink2);margin-top:auto;padding-top:11px;padding-left:14px;
        background:linear-gradient(var(--ink2),var(--ink2)) 0 calc(11px + .42em)/7px 7px no-repeat}
.kproof.ok{color:var(--acc);background-image:linear-gradient(var(--accB),var(--accB))}
.klink{margin-top:auto;padding-top:9px;font-family:'IBM Plex Mono',monospace;font-size:0.6471rem;font-weight:600;
       letter-spacing:.08em;text-transform:uppercase;color:var(--acc);border-bottom:2px solid var(--accB);
       align-self:flex-start}
.klink:hover{background:rgba(0,160,90,.1)}
.knote{font-size:0.8235rem;line-height:1.6;color:var(--ink2);border:1px solid var(--line2);
       border-left:5px solid var(--orgB);background:var(--card);padding:14px 17px;margin-top:16px;max-width:820px}
.knote b{color:var(--ink)}
@media (max-width:820px){ .kc{grid-template-columns:minmax(0,1fr)} }
/* Три колонки на широком: при двух карточка кейса раздувается до ~790px,
   а это плотный текстовый блок, ему такая ширина не нужна — справа простаивал бы
   ещё один столбец карточек. */
@media (min-width:1560px){ .kc{grid-template-columns:repeat(3,minmax(0,1fr))} }
@media (min-width:2200px){ .kc{grid-template-columns:repeat(4,minmax(0,1fr))} }
/* ── ШИРОКИЕ ЭКРАНЫ ──────────────────────────────────────────────────────────
   Каталог: 3 фикс-колонки на wrap 1640-2000 дают карточки-лопухи 550-640px
   и ряды-обрубки (буква с 1 тулом = 2/3 пустоты). Колонок по ширине; одиночная
   группа складывается в РЕЕСТРОВУЮ СТРОКУ (имя+класс | описание | обзор) —
   язык терминала-каталога, нулевая пустота. */
@media (min-width:1560px){.acells{grid-template-columns:repeat(4,1fr)}}
@media (min-width:2200px){.acells{grid-template-columns:repeat(5,1fr)}}
@media (min-width:961px){
  .acells .acell:only-child{grid-column:1/-1;display:grid;
    grid-template-columns:minmax(200px,300px) minmax(0,64ch) 1fr;gap:2px 40px;align-items:baseline}
  .acells .acell:only-child .an{grid-column:1;grid-row:1}
  .acells .acell:only-child .ac{grid-column:1;grid-row:2;margin-top:0}
  .acells .acell:only-child .af{grid-column:2;grid-row:1/span 2}
  .acells .acell:only-child .am{grid-column:3;grid-row:1/span 2;justify-self:end;align-self:center}
}
/* Лента строк (tema/полосы): средняя колонка 1fr на wrap 1640-2000 растягивала
   строку в пустыню (заголовок слева, мета у правого края, между ними ничего).
   Полоса капается и остаётся на левом крае сетки. */
@media (min-width:1900px){.hrows{max-width:1380px}.hrow{grid-template-columns:56px minmax(0,1fr) 230px}}

/* ── k3-доб (B10): .k3-nocov — карточка mh/md без обложки (_k3_cover пуст/зарезан
   k3_svg_out): родная сетка 132px|1fr / 1fr|1fr рисует дыру на месте обложки —
   одна колонка. ── */
.mh.k3-nocov{grid-template-columns:minmax(0,1fr)}
.md.k3-nocov{grid-template-columns:minmax(0,1fr)}
