/* ==========================================================================
   dpj:fonts — подрезки лежат своими файлами, сторонних доменов нет
   ========================================================================== */
@font-face{font-family:'DpsHead';font-style:normal;font-weight:500 700;font-display:swap;src:url('/fonts/azeret-mono-500_700-latin-ext.67c5735a.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'DpsHead';font-style:normal;font-weight:500 700;font-display:swap;src:url('/fonts/azeret-mono-500_700-latin.4a14e7dc.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'DpsText';font-style:italic;font-weight:400 600;font-display:swap;src:url('/fonts/cabin-400_600i-latin-ext.b84f40d5.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'DpsText';font-style:italic;font-weight:400 600;font-display:swap;src:url('/fonts/cabin-400_600i-latin.b83a0fdd.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'DpsText';font-style:normal;font-weight:400 700;font-display:swap;src:url('/fonts/cabin-400_700-latin-ext.b94f29ca.woff2') format('woff2');unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'DpsText';font-style:normal;font-weight:400 700;font-display:swap;src:url('/fonts/cabin-400_700-latin.a104b4cd.woff2') format('woff2');unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* ==========================================================================
   dpj:tokens — палитра «сланец и мел», лестница тонов из четырёх ступеней
   ========================================================================== */
:root{
  /* ступень 1 — полотно страницы */
  --dpj-canvas:#dcd7cc;
  /* ступень 2 — лист на полотне · контраст к canvas 1.35 */
  --dpj-sheet:#fbf8f2;
  /* ступень 3 — врезка внутри листа · контраст к sheet 1.35 (тот же токен, другой план) */
  --dpj-inset:#dcd7cc;
  /* ступень 4 — плита внутри врезки и тоновая полоса · контраст к inset 10.76, к sheet 14.57 */
  --dpj-slate:#1d2530;

  --dpj-ink:#16191d;      /* проза · на sheet 16.64 · на canvas 12.29 */
  --dpj-ink2:#525963;     /* даты, подписи · на sheet 6.68 · на canvas 4.93 */
  --dpj-chalk:#245d86;    /* ссылка, активная рубрика · на sheet 6.64 · на canvas 4.90 */
  --dpj-brass:#6d4e12;    /* линейка 3px и ярлык рубрики · на sheet 7.21 · на canvas 5.32 */
  --dpj-baize:#1c5539;    /* ТОЛЬКО ярлык рубрики Cue Sports · на sheet 8.23 */
  --dpj-warn:#8f2322;     /* редкое предупреждение · на sheet 8.15 */

  /* на сланце — своя ступень чернил, иначе те же токены дают 1.x */
  --dpj-onslate:#f1ece2;  /* 13.12 */
  --dpj-onslate2:#a9b3bf; /* 7.27 */
  --dpj-chalk-up:#7fb6dd; /* 7.09 */
  --dpj-brass-up:#d8ae5c; /* 7.45, крупный кегль */

  --dpj-line:#c9c0ae;     /* волосяная рамка · на sheet 1.70 · на canvas 1.26 */
  --dpj-line-slate:#39424f; /* разделитель внутри сланца · 1.52 */

  --dpj-w:1180px;
  --dpj-read:740px;
  --dpj-gut:20px;         /* боковой отступ полосы, десктоп */
  --dpj-modul:8px;        /* модуль вертикального ритма */
  --dpj-gap:18px;         /* зазор сетки — один из ТРЁХ на весь скин */
  --dpj-gap-lg:34px;      /* зазор между полосами */
  --dpj-gap-sm:10px;      /* зазор внутри карточки */
  --dpj-shadow:0 1px 0 rgba(29,37,48,.06), 0 6px 18px -12px rgba(29,37,48,.35);
}

/* ==========================================================================
   dpj:reset-donor — слой донора гасится ОДНИМ блоком, без !important.
   Правило донора по голому тегу имеет специфичность (0,0,1); `:where(.dpj-page) тег`
   даёт столько же, и при равной специфичности выигрывает лист НИЖЕ — наш.
   Свои модификаторы по классам остаются сильнее (DESIGN-ELEMENTS §16).
   ========================================================================== */
:where(.dpj-page) table,:where(.dpj-page) td,:where(.dpj-page) tr,
:where(.dpj-page) th,:where(.dpj-page) tbody,:where(.dpj-page) center,
:where(.dpj-page) font,:where(.dpj-page) div,:where(.dpj-page) span{
  background:none;border:0;color:inherit;font:inherit;text-align:inherit;
  width:auto;height:auto;margin:0;padding:0;vertical-align:baseline;
}
:where(.dpj-page) img{border:0}
:where(.dpj-page) a{color:var(--dpj-chalk);text-decoration:underline;text-underline-offset:2px}
:where(.dpj-page) header,:where(.dpj-page) footer{border:0;background:none;width:auto}
:where(.dpj-page) h1,:where(.dpj-page) h2,:where(.dpj-page) h3,
:where(.dpj-page) h4,:where(.dpj-page) h5{font:inherit;margin:0;color:inherit}
:where(.dpj-page) ul,:where(.dpj-page) ol{margin:0;padding:0}
:where(.dpj-page) form,:where(.dpj-page) input,:where(.dpj-page) select{display:none}

/* ==========================================================================
   dpj:base — полотно, проза, заголовки
   ========================================================================== */
*,*::before,*::after{box-sizing:border-box}
html{background:var(--dpj-canvas)}
body.dpj-page{
  margin:0;background:var(--dpj-canvas);color:var(--dpj-ink);
  font:400 17.5px/1.72 'DpsText',Verdana,Tahoma,Geneva,sans-serif;
  -webkit-text-size-adjust:100%;
}
.dpj-page h1,.dpj-page h2,.dpj-page h3,.dpj-page h4{
  font-family:'DpsHead',Verdana,Tahoma,Geneva,monospace;
  font-weight:700;color:var(--dpj-ink);
  /* английское издание: расстановка переносов вручную, медиазапроса на auto нет */
  hyphens:manual;-webkit-hyphens:manual;overflow-wrap:break-word;
  letter-spacing:-.012em;
}
/* ⚠️ Правило выше — `.dpj-page h2` — весит 0,1,1 и СИЛЬНЕЕ одиночного класса
   `.dpj-value__h` (0,1,0): заголовок внутри тёмной секции брал чернила листа
   и давал контраст 1.14 на сланце (гейт R3, 29.09.2026 — «How this paper is
   put together» на главной и шапка спецификации на 147 страницах снаряжения).
   Поэтому тон на тёмном плане задаёт СЕКЦИЯ-владелец, а не элемент. */
.dpj-page .dpj-spec h2,.dpj-page .dpj-spec h3,
.dpj-page .dpj-value h2,.dpj-page .dpj-value h3,
.dpj-page .dpj-ft h2,.dpj-page .dpj-ft h3{color:var(--dpj-onslate)}
.dpj-page h1{font-size:34px;line-height:40px;margin:0 0 14px}
.dpj-page h2{font-size:26px;line-height:32px;margin:34px 0 12px}
.dpj-page h3{font-size:21px;line-height:28px;margin:28px 0 10px}
.dpj-page h4{font-size:18px;line-height:26px;margin:22px 0 8px}
.dpj-page p{margin:0 0 16px}
.dpj-page img{max-width:100%;height:auto}
.dpj-skip{position:absolute;left:-9999px}
.dpj-skip:focus{left:8px;top:8px;z-index:50;background:var(--dpj-sheet);padding:10px 14px}

/* ==========================================================================
   dpj:w — полоса. Боковой отступ задан И контейнеру, И его прямым детям
   (DESIGN-ELEMENTS §2: общий отступ задавать всегда, вложенные не складывать).
   ========================================================================== */
.dpj-w{width:100%;max-width:var(--dpj-w);margin-left:auto;margin-right:auto;
  padding-left:var(--dpj-gut);padding-right:var(--dpj-gut)}
.dpj-w>*{padding-left:0;padding-right:0}
.dpj-w--read{max-width:var(--dpj-read)}
.dpj-main{display:block;padding-bottom:var(--dpj-gap-lg)}
/* full-bleed секция получает РОВНО ОДИН центрирующий контейнер без своих полей,
   иначе R11 покажет две ширины (DESIGN-ELEMENTS §1) */
.dpj-bleed{width:100%;margin:0}
.dpj-bleed>.dpj-w{margin-left:auto;margin-right:auto}

/* ==========================================================================
   dpj:head — мачта и ряд рубрик — ОДИН <header>; оба яруса лежат в .dpj-w,
   поэтому левый край у них общий (R20, разброс ≤8px). Мачта НЕ липкая —
   как у образца (замер §4.1: position:relative).
   ========================================================================== */
.dpj-hd{background:var(--dpj-sheet);border-bottom:3px solid var(--dpj-brass)}
.dpj-burger{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
/* фон НЕ повторяется: он уже на `.dpj-hd`, а повтор тон-в-тон читается гейтом
   R23 как невидимый блок (и им же и является) */
.dpj-hd__top{padding-top:12px;padding-bottom:10px}
.dpj-hd__in{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);
  align-items:center;column-gap:var(--dpj-gap)}
.dpj-hd__side{min-width:0;font-family:'DpsHead',Verdana,monospace;font-size:12.5px;
  line-height:1.5;color:var(--dpj-ink2);letter-spacing:.04em;text-transform:uppercase}
.dpj-hd__side--r{text-align:right}
/* ⚠️ Было `.dpj-hd__side b{display:block}` — жирный в роли отдельной строки.
   Вид тот же, но строка кода читалась как «дата</b>подпись» и давала 590
   склеек инлайн-тега на 295 страницах. Теперь строки — два `<span>`. */
.dpj-hd__d{display:block;color:var(--dpj-brass);font-weight:700}
.dpj-hd__t{display:block}
.dpj-brand{display:flex;align-items:center;gap:12px;text-decoration:none;min-height:44px}
.dpj-brand:hover{text-decoration:none}
.dpj-brand__mark{display:block;width:42px;height:42px;flex:0 0 42px}
.dpj-brand__txt{display:block;font-family:'DpsHead',Verdana,monospace;line-height:1}
.dpj-brand__a{display:block;font-size:27px;font-weight:700;letter-spacing:-.02em;color:var(--dpj-ink)}
.dpj-brand__b{display:block;font-size:13px;font-weight:500;letter-spacing:.34em;
  color:var(--dpj-brass);margin-top:4px}
.dpj-strap{margin:6px 0 0;text-align:center;font-size:13.5px;color:var(--dpj-ink2)}

.dpj-hd__rubs{background:var(--dpj-sheet);border-top:1px solid var(--dpj-line)}
.dpj-nav{min-width:0}
.dpj-nav__list{display:flex;flex-wrap:nowrap;align-items:stretch;list-style:none;
  margin:0;padding:0;gap:0}
.dpj-nav__i{position:relative;min-width:0}
.dpj-nav__a{display:flex;align-items:center;min-height:44px;padding:0 13px;
  font-family:'DpsHead',Verdana,monospace;font-size:13px;font-weight:500;
  letter-spacing:.06em;text-transform:uppercase;color:var(--dpj-ink);
  text-decoration:none;white-space:nowrap}
.dpj-nav__a:hover,.dpj-nav__a:focus{color:var(--dpj-chalk);text-decoration:none;
  box-shadow:inset 0 -3px 0 var(--dpj-chalk)}
.dpj-nav__i--on>.dpj-nav__a{color:var(--dpj-chalk);box-shadow:inset 0 -3px 0 var(--dpj-chalk)}
/* подменю: visibility/opacity, без transition; открывается и с клавиатуры */
.dpj-sub{position:absolute;left:0;top:100%;z-index:30;min-width:232px;
  margin:0;padding:6px 0;list-style:none;background:var(--dpj-sheet);
  border:1px solid var(--dpj-line);box-shadow:var(--dpj-shadow);
  visibility:hidden;opacity:0}
.dpj-nav__i:hover>.dpj-sub,.dpj-nav__i:focus-within>.dpj-sub{visibility:visible;opacity:1}
.dpj-sub__a{display:flex;align-items:center;min-height:44px;padding:0 14px;
  font-family:'DpsText',Verdana,sans-serif;font-size:15px;letter-spacing:0;
  text-transform:none;color:var(--dpj-ink);text-decoration:none}
.dpj-sub__a:hover,.dpj-sub__a:focus{color:var(--dpj-chalk);background:var(--dpj-inset)}
/* последние пункты ряда раскрываются влево, иначе панель уходит за край окна */
.dpj-nav__i:nth-last-child(1)>.dpj-sub,.dpj-nav__i:nth-last-child(2)>.dpj-sub{left:auto;right:0}
.dpj-burgerbtn{display:none}

/* ==========================================================================
   dpj:stand — «Стойка рубрик»: первый блок главной, карта разделов вместо героя
   (DESIGN-ELEMENTS §18: первый экран — это контент, а не оффер и не герой)
   ========================================================================== */
/* ==========================================================================
   dpj:lede — выходные данные главной: H1 витрины и одна вводка
   ========================================================================== */
.dpj-lede{padding-top:30px;padding-bottom:4px}
.dpj-lede__kick{margin:0 0 10px;font-family:'DpsHead',Verdana,monospace;
  font-size:12.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;
  color:var(--dpj-brass)}
/* ⚠️ Кегль задаётся СОСТАВНЫМ селектором. `.dpj-lede__h` — это (0,1,0), а
   базовое `.dpj-page h1` — (0,1,1), и одноклассовое правило ему проигрывает:
   заголовок молча вышел бы базовым кеглем. Тот же разбор — у `.dpj-value__h`. */
.dpj-lede .dpj-lede__h{margin:0;font-size:34px;line-height:41px}
.dpj-lede__sf{margin:14px 0 0;font-size:18.5px;line-height:1.62;
  color:var(--dpj-ink2)}

/* ⛔ Здесь стояло `background:var(--dpj-inset)`, а `--dpj-inset` — это ТОТ ЖЕ
   цвет, что `--dpj-canvas` (#dcd7cc): ступень 3 задумана как врезка ВНУТРИ
   листа, где даёт 1.35, а прямо на полотне страницы она невидима. Гейт R23 её
   пропускал из-за нижней линейки (блок с рамкой из проверки исключён), то есть
   плоскости у полосы не было, а сторож молчал. Фона у полосы нет вовсе —
   планом здесь работают сами ячейки, они на листе (`--dpj-sheet`). */
.dpj-stand{padding-top:26px;padding-bottom:28px;
  border-bottom:1px solid var(--dpj-line)}
.dpj-stand__hd{display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--dpj-gap);margin:0 0 16px}
.dpj-stand__h{font-size:15px;line-height:22px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--dpj-brass);margin:0}
.dpj-stand__note{font-size:13.5px;color:var(--dpj-ink2);margin:0}
.dpj-stand__grid{display:grid;gap:var(--dpj-gap);
  grid-template-columns:repeat(4,minmax(0,1fr));
  grid-auto-rows:minmax(var(--dpj-modul),auto);align-items:start;list-style:none;
  margin:0;padding:0}
.dpj-stand__grid>.dpj-cell{height:auto}
.dpj-cell{min-width:0;display:flex;flex-direction:column;background:var(--dpj-sheet);
  padding:14px 16px 16px;box-shadow:var(--dpj-shadow)}
.dpj-cell__ico{display:block;width:26px;height:26px;margin:0 0 8px;color:var(--dpj-brass)}
.dpj-cell__n{display:block;font-family:'DpsHead',Verdana,monospace;font-size:14px;
  font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--dpj-ink)}
.dpj-cell__lead{margin:8px 0 0;font-size:15px;line-height:1.5}
.dpj-cell__lead a{text-decoration:none}
.dpj-cell__lead a:hover{text-decoration:underline}
.dpj-cell__meta{margin-top:auto;padding-top:12px;font-family:'DpsHead',Verdana,monospace;
  font-size:12px;letter-spacing:.06em;color:var(--dpj-ink2)}

/* ==========================================================================
   dpj:widget-roomfit — расчётная таблица «стол → минимальная комната»
   ========================================================================== */
.dpj-roomfit{background:var(--dpj-sheet);padding-top:28px;padding-bottom:30px}
.dpj-wg__kick{font-family:'DpsHead',Verdana,monospace;font-size:12px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--dpj-brass);margin:0 0 6px}
.dpj-wg__h{font-size:26px;line-height:32px;margin:0 0 8px}
.dpj-wg__sub{margin:0 0 18px;font-size:15.5px;color:var(--dpj-ink2);max-width:62ch}
.dpj-wg__formula{display:inline-block;margin:0 0 16px;padding:8px 12px;
  background:var(--dpj-inset);font-family:'DpsHead',Verdana,monospace;font-size:13.5px;
  color:var(--dpj-ink)}
.dpj-tbl{width:100%;border-collapse:collapse;font-size:15.5px}
.dpj-tbl caption{caption-side:bottom;padding-top:10px;text-align:left;
  font-size:13px;color:var(--dpj-ink2)}
.dpj-tbl th,.dpj-tbl td{padding:9px 12px;text-align:left;vertical-align:top;
  border-bottom:1px solid var(--dpj-line)}
.dpj-tbl thead th{font-family:'DpsHead',Verdana,monospace;font-size:12px;font-weight:700;
  letter-spacing:.09em;text-transform:uppercase;color:var(--dpj-ink);
  border-bottom:3px solid var(--dpj-brass)}
.dpj-tbl td b{font-family:'DpsHead',Verdana,monospace;font-weight:700}
/* зебра проверена НА ОБЕИХ полосах: ink на sheet 16.64, ink на inset 12.29 */
.dpj-tbl tbody tr:nth-child(2n){background:var(--dpj-inset)}
/* ⚠️ Подпись «таблица прокручивается» обещала прокрутку, а КОНТЕЙНЕРА не было:
   таблица о четырёх колонках выпирала из вьюпорта и тянула за собой весь
   документ — 410px при вьюпорте 390 (гейт R1/R2, 29.09.2026). Прокрутка живёт
   в обёртке, а не в таблице, и обёртка фокусируема — иначе с клавиатуры
   до правых колонок не добраться. */
.dpj-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
.dpj-scroll:focus-visible{outline:2px solid var(--dpj-chalk);outline-offset:2px}
/* пол ширины — ТОЛЬКО у таблицы с четырьмя длинными колонками; у таблицы
   дисциплин колонка сетки уже 470px, и общий пол загнал бы её в прокрутку
   на десктопе */
.dpj-scroll--wide>.dpj-tbl{min-width:580px}
/* подсказка про боковую прокрутку таблицы ВЕРНА только там, где таблица и правда
   не влезает: на 1440 px она стояла строкой под сноской и сбивала с толку
   (замер 29.09.2026). Прячем классом, а не инлайновым `style` — инлайновый
   невидимый слой ловит C11.5 как клоакинг. */
.dpj-scrollhint{display:none;margin:8px 0 0;font-size:13px;color:var(--dpj-ink2)}

/* ==========================================================================
   dpj:band — полоса рубрики: ОДНА карточка 4:5 + пять нумерованных строк.
   Элементов всегда 1+5, поэтому неполного хвоста ряда не бывает в принципе.
   ========================================================================== */
.dpj-band{padding-top:30px;padding-bottom:32px;border-top:3px solid var(--dpj-brass)}
/* ⛔ Здесь стояли `.dpj-band--sheet` и `.dpj-band--inset`, а сборка печатает
   тона `paper` и `canvas` (`tone = ['paper','canvas']`, чередование полос
   главной). Имена не совпали, правила не нашли ни одной полосы — и все полосы
   главной выходили ОДНОГО фона: чередование, ради которого тон и заведён, не
   работало ни разу, и заметил это гейт C09.31 («правило скина без разметки»),
   а не глаз. Ступень `canvas` — это фон самой страницы, поэтому у неё правила
   нет и быть не должно: полоса просто не закрашивается. */
.dpj-band--paper{background:var(--dpj-sheet)}
.dpj-band__hd{display:flex;align-items:baseline;justify-content:space-between;
  gap:var(--dpj-gap);margin:0 0 18px;padding-bottom:10px;
  border-bottom:1px solid var(--dpj-line)}
.dpj-band__h{margin:0;font-size:24px;line-height:30px}
.dpj-band__h a{color:inherit;text-decoration:none}
.dpj-band__h a:hover{color:var(--dpj-chalk)}
.dpj-band__all{font-family:'DpsHead',Verdana,monospace;font-size:12.5px;font-weight:700;
  letter-spacing:.1em;text-transform:uppercase;white-space:nowrap}
.dpj-pair{display:grid;gap:var(--dpj-gap-lg);
  /* 320 px под карточку давали строку в 42 знака при соседней колонке в 740:
     полоса читалась как узкий столбик рядом с пустым полем (замер 29.09.2026) */
  grid-template-columns:minmax(0,400px) minmax(0,1fr);
  grid-auto-rows:minmax(var(--dpj-modul),auto);align-items:start}
.dpj-pair>*{min-width:0;height:auto}

/* ==========================================================================
   dpj:card — портретная карточка полосы. Доля кропа ОДНА на весь скин.
   ========================================================================== */
.dpj-card{display:flex;flex-direction:column;min-width:0}
.dpj-card__fig{margin:0 0 12px}
.dpj-card__img{display:block;width:100%;aspect-ratio:4 / 5;
  object-fit:cover;background:var(--dpj-inset)}
.dpj-card__txt{display:flex;flex-direction:column;flex:1;min-width:0}
.dpj-kick{display:block;font-family:'DpsHead',Verdana,monospace;font-size:11.5px;
  font-weight:700;letter-spacing:.16em;text-transform:uppercase;
  color:var(--dpj-brass);margin:0 0 6px}
.dpj-kick--baize{color:var(--dpj-baize)}
.dpj-card__h{margin:0;font-size:21px;line-height:27px}
.dpj-card__h a{color:inherit;text-decoration:none}
.dpj-card__h a:hover{color:var(--dpj-chalk);text-decoration:underline}
.dpj-card__lead{margin:8px 0 0;font-size:15.5px;line-height:1.6}
/* служебная строка прижата к низу, иначе даты в ряду встают на разной высоте */
.dpj-card__meta{margin-top:auto;padding-top:12px;font-family:'DpsHead',Verdana,monospace;
  font-size:12px;letter-spacing:.06em;color:var(--dpj-ink2)}

/* ==========================================================================
   dpj:rank — пять нумерованных строк без кадров
   ========================================================================== */
.dpj-rank{list-style:none;margin:0;padding:0;counter-reset:dpjrank}
.dpj-rank__i{counter-increment:dpjrank;display:grid;
  grid-template-columns:38px minmax(0,1fr);column-gap:14px;
  padding:12px 0;border-bottom:1px solid var(--dpj-line)}
.dpj-rank__i:last-child{border-bottom:0;padding-bottom:0}
.dpj-rank__i::before{content:counter(dpjrank,decimal-leading-zero);
  font-family:'DpsHead',Verdana,monospace;font-size:16px;font-weight:700;
  line-height:26px;color:var(--dpj-brass)}
.dpj-rank__b{min-width:0}
.dpj-rank__a{font-family:'DpsHead',Verdana,monospace;font-size:16.5px;font-weight:500;
  line-height:26px;color:var(--dpj-ink);text-decoration:none;
  hyphens:manual;overflow-wrap:break-word}
.dpj-rank__a:hover{color:var(--dpj-chalk);text-decoration:underline}
.dpj-rank__m{display:block;margin-top:4px;font-family:'DpsHead',Verdana,monospace;
  font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dpj-ink2)}

/* ==========================================================================
   dpj:sheet — лист статьи: 1px рамка и мягкая тень на полотне
   ========================================================================== */
.dpj-sheet{background:var(--dpj-sheet);border:1px solid var(--dpj-line);
  box-shadow:var(--dpj-shadow);margin-top:var(--dpj-gap-lg);margin-bottom:var(--dpj-gap-lg);
  padding-top:30px;padding-bottom:34px}
.dpj-sheet__hd{margin:0 0 20px;padding-bottom:16px;border-bottom:1px solid var(--dpj-line)}
.dpj-meta{margin:10px 0 0;font-family:'DpsHead',Verdana,monospace;font-size:12.5px;
  letter-spacing:.06em;color:var(--dpj-ink2)}
.dpj-meta__sep{padding:0 7px;color:var(--dpj-line)}
.dpj-crumb{margin:0 0 14px;font-family:'DpsHead',Verdana,monospace;font-size:12px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--dpj-ink2)}
.dpj-crumb a{color:var(--dpj-ink2)}
.dpj-crumb b{color:var(--dpj-brass);font-weight:700}
/* дата документа в мета-строке: та же гарнитура, но цифры не «уползают» в верхний
   регистр строки — `time` внутри `.dpj-meta` наследует всё, кроме подчёркивания */
.dpj-meta time{font-variant-numeric:tabular-nums;color:var(--dpj-ink)}

/* ==========================================================================
   dpj:byline — подпись редакции, стоит на КАЖДОЙ странице (этап 09 п. 28-п)
   ========================================================================== */
.dpj-by{display:grid;grid-template-columns:auto minmax(0,1fr);gap:16px;
  margin-top:var(--dpj-gap-lg);margin-bottom:var(--dpj-gap-lg);
  padding:20px 22px;background:var(--dpj-inset);border:1px solid var(--dpj-line);
  border-left:3px solid var(--dpj-brass)}
.dpj-by__mark{display:block;width:34px;height:34px;color:var(--dpj-brass)}
.dpj-by__ico{display:block;width:34px;height:34px}
.dpj-by__txt{min-width:0}
.dpj-by__who{margin:0;font-family:'DpsHead',Verdana,monospace;font-size:13px;
  font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--dpj-ink)}
.dpj-by__what{margin:8px 0 0;font-size:14px;line-height:1.6;color:var(--dpj-ink2)}
.dpj-by__when{margin:10px 0 0;font-family:'DpsHead',Verdana,monospace;font-size:12px;
  letter-spacing:.06em;text-transform:uppercase;color:var(--dpj-ink2)}
.dpj-by__when time{color:var(--dpj-brass);font-weight:700;font-variant-numeric:tabular-nums}

/* ---- dpj:prose — разметка, которой на сайте пока НЕТ: её принесёт автопостинг ---- */
/* ⛔ `flow-root` — не украшение: боковой снимок донора стоит ПЕРВЫМ ребёнком
   прозы флотом, и на короткой странице он свисает ниже текста. Секция-грид
   ниже рядом с чужим флотом не ложится под него, а сжимается в остаток строки
   (замер сети: 432px вместо 832 на семи страницах). Обе строки обязательны —
   `flow-root` замыкает флот здесь, `clear` страхует полосы ниже. */
/* `container-type` — мера ВИДИМОЙ ширины для подписи широкой таблицы (ниже);
   вешается на обёртку прозы, а не на саму таблицу: на таблице containment
   запрещает брать ширину у содержимого и она схлопывается до `min-width`
   (урок sticky-table-caption-stretches-to-scroll-width, замер gamblib.org).
   `display:flow-root` тут стоял и раньше, так что схлопывание полей не меняется */
.dpj-prose{overflow-wrap:break-word;display:flow-root;max-width:100%;
  container-type:inline-size}
.dpj-bleed,.dpj-band,.dpj-cloth,.dpj-roomfit,.dpj-disc,.dpj-spec,.dpj-value,
.dpj-res,.dpj-hub,.dpj-stand{clear:both}
.dpj-prose>*:first-child{margin-top:0}
.dpj-prose ul,.dpj-prose ol{margin:0 0 16px;padding-left:24px}
.dpj-prose li{margin:0 0 7px}
.dpj-prose li>ul,.dpj-prose li>ol{margin:7px 0 0}
.dpj-prose blockquote{margin:22px 0;padding:2px 0 2px 18px;
  border-left:3px solid var(--dpj-brass);font-size:19px;line-height:1.6;font-style:italic}
.dpj-prose blockquote p:last-child{margin-bottom:0}
.dpj-prose blockquote cite{display:block;margin-top:8px;font-style:normal;
  font-family:'DpsHead',Verdana,monospace;font-size:12.5px;letter-spacing:.05em;
  color:var(--dpj-ink2)}
.dpj-prose code{font-family:'DpsHead',Verdana,monospace;font-size:.88em;
  background:var(--dpj-inset);padding:1px 5px}
.dpj-prose pre{margin:20px 0;padding:14px 16px;background:var(--dpj-slate);
  color:var(--dpj-onslate);overflow-x:auto}
.dpj-prose pre code{background:none;padding:0;color:var(--dpj-onslate);font-size:13.5px}
.dpj-prose hr{height:0;margin:26px 0;border:0;border-top:1px solid var(--dpj-line)}
.dpj-prose figure{margin:24px 0}
.dpj-prose figcaption{margin-top:10px;font-size:13.5px;line-height:1.5;color:var(--dpj-ink2)}
/* картинка внутри прозы донора: `max-width` держит иллюстрацию 1536 px в
   колонке 740 px (без него — горизонтальная прокрутка, R2), `height:auto`
   не даёт перекосить её при заданных в разметке своих размерах (R17) */
.dpj-prose img{display:block;max-width:100%;height:auto;margin:22px 0;
  background:var(--dpj-inset)}
.dpj-prose iframe,.dpj-prose video{display:block;max-width:100%;margin:22px 0;border:0}
/* голая таблица робота: своей обёртки у неё не будет */
.dpj-prose>table{display:block;width:max-content;min-width:100%;max-width:100%;
  overflow-x:auto;border-collapse:collapse;margin:22px 0;font-size:15.5px}
/* ⛔ Подпись голой таблицы мерится по ПРОКРУЧИВАЕМОЙ ширине, а не по экрану:
   в табличной раскладке её коробка равна `scrollWidth`, и конец строки уезжает
   за край телефона молча — вылета страницы нет, таблица честно едет. Замер
   gate_tpl.js P4 на этом скине: «подпись 568 px при видимых 360» (390 px).
   `display:block` вынимает подпись из табличной раскладки, `100cqi` даёт ширину
   контейнера прозы, `max-width:100%` снимает с неё рамку таблицы (иначе перелив
   ровно на 2 px). Без контейнерных запросов браузер отбросит только `100cqi`. */
.dpj-prose>table>caption{display:block;position:sticky;left:0;width:100cqi;
  max-width:100%;padding-bottom:10px;text-align:left;font-size:13px;
  color:var(--dpj-ink2)}
.dpj-prose>table th,.dpj-prose>table td{padding:8px 12px;max-width:340px;text-align:left;
  vertical-align:top;border-bottom:1px solid var(--dpj-line)}
.dpj-prose>table th{font-family:'DpsHead',Verdana,monospace;font-size:12px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;border-bottom:3px solid var(--dpj-brass)}
.dpj-prose>table tbody tr:nth-child(2n){background:var(--dpj-inset)}
.dpj-prose .pbn-published-date{display:block;margin:0 0 18px;
  font-family:'DpsHead',Verdana,monospace;font-size:12.5px;letter-spacing:.06em;
  color:var(--dpj-ink2)}
.dpj-prose dl{margin:0 0 18px}
.dpj-prose dt{font-family:'DpsHead',Verdana,monospace;font-size:13px;font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;color:var(--dpj-brass);margin-top:12px}
.dpj-prose dd{margin:4px 0 0}

/* ==========================================================================
   dpj:widget-specstrip — полоса характеристик стола ВО ВСЮ ШИРИНУ окна
   (единственный full-bleed элемент каркаса, ось 1)
   ========================================================================== */
.dpj-spec{background:var(--dpj-slate);color:var(--dpj-onslate);
  padding-top:26px;padding-bottom:28px;margin:30px 0}
.dpj-spec__kick{font-family:'DpsHead',Verdana,monospace;font-size:12px;font-weight:700;
  letter-spacing:.16em;text-transform:uppercase;color:var(--dpj-brass-up);margin:0 0 6px}
.dpj-spec__h{margin:0 0 16px;font-family:'DpsHead',Verdana,monospace;font-size:22px;
  line-height:28px;font-weight:700}
.dpj-spec__grid{display:grid;gap:var(--dpj-gap);
  grid-template-columns:repeat(4,minmax(0,1fr));
  grid-auto-rows:minmax(var(--dpj-modul),auto);align-items:start;
  list-style:none;margin:0;padding:0}
.dpj-spec__i{min-width:0;padding:0 0 0 14px;border-left:1px solid var(--dpj-line-slate)}
.dpj-spec__k{display:block;font-family:'DpsHead',Verdana,monospace;font-size:11.5px;
  font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--dpj-onslate2)}
.dpj-spec__v{display:block;margin-top:5px;font-size:15.5px;line-height:1.55;
  color:var(--dpj-onslate)}
.dpj-spec__note{margin:18px 0 0;font-size:13px;color:var(--dpj-onslate2)}
.dpj-spec a{color:var(--dpj-chalk-up)}

/* ==========================================================================
   dpj:widget-disciplines — сравнение дисциплин, схема расстановки своей SVG
   ========================================================================== */
.dpj-disc{background:var(--dpj-sheet);padding-top:28px;padding-bottom:30px}
.dpj-disc__grid{display:grid;gap:var(--dpj-gap-lg);
  grid-template-columns:minmax(0,1fr) minmax(0,240px);align-items:start}
.dpj-disc__grid>*{min-width:0}
/* ⚠️ 16, а не 14: `gate_padding.js` мерит зазор «край плашки → первый текст»,
   норма на 1440/1024 — 16 px, и подпись кадра упиралась в край плашки. */
.dpj-disc__fig{margin:0;padding:16px;background:var(--dpj-inset)}
/* схему НЕ режем object-fit:cover — она не фотография */
.dpj-disc__svg{display:block;width:100%;height:auto}
.dpj-disc__cap{margin-top:10px;font-size:13px;line-height:1.5;color:var(--dpj-ink2)}

/* ==========================================================================
   dpj:widget-cloth — сукно и борта
   ========================================================================== */
/* врезка и полотно — один тон (#dcd7cc), поэтому границу секции рисует линейка,
   как у `.dpj-band`: без неё виджет начинается ниоткуда (R23) */
.dpj-cloth{background:var(--dpj-inset);padding-top:28px;padding-bottom:30px;
  border-top:3px solid var(--dpj-brass)}
.dpj-cloth__list{display:grid;gap:var(--dpj-gap);
  grid-template-columns:repeat(3,minmax(0,1fr));
  grid-auto-rows:minmax(var(--dpj-modul),auto);align-items:start;
  list-style:none;margin:0;padding:0}
.dpj-cloth__i{min-width:0;display:flex;flex-direction:column;background:var(--dpj-sheet);
  padding:16px 18px 18px;border-top:3px solid var(--dpj-brass)}
.dpj-cloth__n{display:block;font-family:'DpsHead',Verdana,monospace;font-size:15px;
  font-weight:700;color:var(--dpj-ink)}
.dpj-cloth__d{margin:8px 0 0;font-size:15px;line-height:1.6}
.dpj-cloth__m{margin-top:auto;padding-top:12px;font-family:'DpsHead',Verdana,monospace;
  font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dpj-ink2)}

/* ==========================================================================
   dpj:wire — общая новостная лента, дом единственного маркера ленты на сайте
   (⛔ сам маркер словами НЕ ЦИТИРОВАТЬ: он подстрока, а не тег, и комментарий
   в листе становится ВТОРЫМ маркером — робот положит анонс в таблицу стилей)
   ========================================================================== */
/* ⛔ `margin:0 0 …` СНИМАЛО центрирование `.dpj-w` (оно задано `margin-left/right:
   auto` выше по листу), и пустая лента печаталась белой полосой у левого края
   экрана вместо колонки по центру (замер глазами 29.09.2026, `/newsroom/`).
   Горизонтальные поля здесь только `auto`. */
.dpj-wire{background:var(--dpj-sheet);padding:22px 0 4px;
  margin:0 auto var(--dpj-gap-lg)}
/* ⛔ До первой публикации робота в ленте лежит ОДИН комментарий-маркер: белая
   плашка в 26 px висела ни над чем. Комментарий элементом не считается, значит
   `:has(*)` ловит ровно момент, когда в ленте появился первый анонс. Маркер
   при этом на месте — робот ищет его в исходнике, а не на экране. */
.dpj-wire:not(:has(*)){display:none}
.dpj-wire h4{font-family:'DpsHead',Verdana,monospace;font-size:19px;line-height:26px;
  font-weight:700;margin:0 0 6px}
.dpj-wire h4 a{color:var(--dpj-ink);text-decoration:none}
.dpj-wire h4 a:hover{color:var(--dpj-chalk);text-decoration:underline}
.dpj-wire p{margin:0 0 22px;padding-bottom:20px;font-size:16px;line-height:1.65;
  border-bottom:1px solid var(--dpj-line)}
.dpj-wire p:last-child{border-bottom:0}

/* ==========================================================================
   dpj:hub — шапка хаба и индекс материалов
   ========================================================================== */
.dpj-hub{background:var(--dpj-inset);padding-top:28px;padding-bottom:30px;
  border-bottom:3px solid var(--dpj-brass)}
.dpj-hub__h{margin:0 0 10px}
.dpj-hub__lead{margin:0;max-width:64ch;font-size:17.5px;line-height:1.7}
.dpj-hub__num{display:flex;flex-wrap:wrap;gap:var(--dpj-gap);list-style:none;
  margin:18px 0 0;padding:0}
.dpj-hub__num li{min-width:0}
.dpj-hub__num b{display:block;font-family:'DpsHead',Verdana,monospace;font-size:24px;
  font-weight:700;color:var(--dpj-brass);line-height:1.2}
.dpj-hub__num span{display:block;font-family:'DpsHead',Verdana,monospace;font-size:11.5px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--dpj-ink2)}
.dpj-idx{background:var(--dpj-sheet);padding-top:28px;padding-bottom:30px}
.dpj-idx__grid{display:grid;gap:var(--dpj-gap) var(--dpj-gap-lg);
  grid-template-columns:repeat(3,minmax(0,1fr));
  grid-auto-rows:minmax(var(--dpj-modul),auto);align-items:start;
  list-style:none;margin:0;padding:0}
.dpj-idx__grid>li{min-width:0;height:auto}
.dpj-idx__a{font-family:'DpsHead',Verdana,monospace;font-size:15.5px;font-weight:500;
  line-height:24px;color:var(--dpj-ink);text-decoration:none;
  hyphens:manual;overflow-wrap:break-word}
.dpj-idx__a:hover{color:var(--dpj-chalk);text-decoration:underline}
.dpj-idx__m{display:block;margin-top:4px;font-family:'DpsHead',Verdana,monospace;
  font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dpj-ink2)}

/* ==========================================================================
   dpj:spec-table — таблица параметров инвентарной записи
   ========================================================================== */
.dpj-kv{margin:24px 0;background:var(--dpj-inset);padding:18px 20px}
.dpj-kv__h{margin:0 0 12px;font-family:'DpsHead',Verdana,monospace;font-size:13px;
  font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--dpj-brass)}
.dpj-kv__l{display:grid;grid-template-columns:minmax(0,150px) minmax(0,1fr);
  gap:8px var(--dpj-gap);margin:0}
.dpj-kv__l dt{font-family:'DpsHead',Verdana,monospace;font-size:12.5px;font-weight:700;
  letter-spacing:.06em;text-transform:uppercase;color:var(--dpj-ink2);margin:0}
.dpj-kv__l dd{margin:0;font-size:15.5px;line-height:1.6;min-width:0}

/* ==========================================================================
   dpj:value — блок ценности: чем это издание отличается (слот 05.9g)
   ========================================================================== */
.dpj-value{background:var(--dpj-slate);color:var(--dpj-onslate);
  padding-top:28px;padding-bottom:30px}
.dpj-value__h{margin:0 0 14px;font-family:'DpsHead',Verdana,monospace;font-size:22px;
  line-height:28px;font-weight:700}
.dpj-value__grid{display:grid;gap:var(--dpj-gap);
  grid-template-columns:repeat(3,minmax(0,1fr));
  grid-auto-rows:minmax(var(--dpj-modul),auto);align-items:start;
  list-style:none;margin:0 0 18px;padding:0}
.dpj-value__i{min-width:0;display:flex;gap:12px}
.dpj-value__ico{display:block;width:28px;height:28px;flex:0 0 28px;color:var(--dpj-brass-up)}
.dpj-value__b{min-width:0}
.dpj-value__n{display:block;font-family:'DpsHead',Verdana,monospace;font-size:23px;
  font-weight:700;line-height:1.2;color:var(--dpj-brass-up)}
.dpj-value__d{display:block;margin-top:4px;font-size:15px;line-height:1.55;
  color:var(--dpj-onslate)}
.dpj-value__more{font-family:'DpsHead',Verdana,monospace;font-size:13.5px;font-weight:700;
  letter-spacing:.06em;color:var(--dpj-chalk-up)}

/* ==========================================================================
   dpj:figure — фотографии, кредит, первая картинка статьи флотом
   ========================================================================== */
.dpj-fig{margin:0 0 24px}
.dpj-fig__img{display:block;width:100%;aspect-ratio:1.42 / 1;
  object-fit:cover;background:var(--dpj-inset)}
/* ⛔ `.dpj-fig--hero` снят: флаг `hero=True` не передавался ни из одного места
   сборки, то есть доля 3.2:1 не применялась ни к одному кадру. Правило без
   разметки — это вес листа и ложная карта скина, а не запас на будущее. */
/* кредит отбивается МАРДЖИНОМ: прямым ребёнком листа он валит R7 «текст у края» */
.dpj-cred{display:block;margin:8px 0 0;font-family:'DpsHead',Verdana,monospace;
  font-size:11.5px;line-height:1.5;letter-spacing:.03em;color:var(--dpj-ink2)}
.dpj-fig__cap{margin:10px 0 0;font-size:13.5px;line-height:1.55;color:var(--dpj-ink2)}
/* первая картинка страницы — флотом сбоку, а не полосой во всю ширину */
.dpj-lead{float:right;width:clamp(170px,32%,300px);margin:4px 0 16px 22px}
.dpj-lead .dpj-fig__img{aspect-ratio:4 / 5}
.dpj-clear{clear:both;height:0;overflow:hidden}
/* ⛔ `.dpj-aside` (врезка сбоку) снята целиком, вместе с `__h` и мобильным
   сбросом обтекания: разметки у неё нет ни на одном шаблоне. Заводить врезку,
   чтобы оправдать правило, здесь нечем — во врезку кладут короткий вывод или
   цифру, а цифры берутся только из источника (правило 5). Роль «кадр сбоку
   с подписью» уже исполняет `.dpj-shot--side` на донорских снимках. */

/* ==========================================================================
   dpj:foot — подвал ОДНОЙ плитой на сланце, не карта сайта
   ========================================================================== */
.dpj-ft{background:var(--dpj-slate);color:var(--dpj-onslate);
  border-top:3px solid var(--dpj-brass);padding-top:32px;padding-bottom:34px}
.dpj-ft__top{display:grid;grid-template-columns:minmax(0,300px) minmax(0,1fr);
  gap:var(--dpj-gap-lg);align-items:start}
.dpj-ft__top>*{min-width:0}
.dpj-ft__brand{display:flex;align-items:center;gap:12px}
/* знак подвала размер несёт в самом `svg` (44x44), класса на нём нет —
   правило `.dpj-ft__mark` не находило ничего и снято */
.dpj-ft__a{display:block;font-family:'DpsHead',Verdana,monospace;font-size:20px;
  font-weight:700;color:var(--dpj-onslate);line-height:1}
.dpj-ft__b{display:block;margin-top:4px;font-family:'DpsHead',Verdana,monospace;
  font-size:11px;font-weight:500;letter-spacing:.28em;color:var(--dpj-brass-up)}
.dpj-ft__say{margin:12px 0 0;font-size:15px;line-height:1.6;color:var(--dpj-onslate)}
.dpj-ft__say a{color:var(--dpj-chalk-up)}
/* цвет задаётся КОНТЕЙНЕРУ списка, а не только ссылкам (§15); фон — подвалу,
   иначе тот же сланец лежит вторым слоем и R23 видит блок цвет-в-цвет */
.dpj-ft__nav{color:var(--dpj-onslate);
  display:flex;flex-wrap:wrap;gap:4px 0;list-style:none;margin:0;padding:0}
.dpj-ft__nav li{min-width:0}
.dpj-ft__nav a{display:flex;align-items:center;min-height:44px;padding:0 14px 0 0;
  font-family:'DpsHead',Verdana,monospace;font-size:12.5px;letter-spacing:.06em;
  text-transform:uppercase;color:var(--dpj-onslate);text-decoration:none}
.dpj-ft__nav a:hover,.dpj-ft__nav a:focus{color:var(--dpj-chalk-up);text-decoration:underline}
.dpj-ft__rule{height:0;margin:24px 0 18px;border:0;border-top:1px solid var(--dpj-line-slate)}
.dpj-ft__fine{margin:0;font-size:13.5px;line-height:1.65;color:var(--dpj-onslate2)}
.dpj-ft__fine a{color:var(--dpj-chalk-up)}
.dpj-ft__fine p{margin:0 0 8px}
.dpj-ft__fine p:last-child{margin-bottom:0}

/* ==========================================================================
   dpj:shot — КАРТИНКА ДОНОРА. Отдельный класс, и вот почему.

   `.dpj-fig__img` — это `width:100%` с долей кропа: он рассчитан на свои
   фотографии по 1200-1600 px. Снимки донора мельче на порядок: превью
   каталога — до 80x80, полные карточки товара — до 240 px по большей
   стороне, а некоторые вообще полоски 20x471. В коробке листа шириной
   700 px такой файл растянуло бы втрое-вдесятеро: мыло на экране и
   красный R17 («коробка вдвое больше файла») с R18 («крапинка вместо
   фото») на четверти сайта. Поэтому здесь НЕТ ни `width:100%`, ни
   `aspect-ratio`: файл рисуется в своём размере и только УМЕНЬШАЕТСЯ,
   если не влез. Коробка держит минимальную высоту, чтобы ряд не прыгал.
   ========================================================================== */
.dpj-shot{margin:0 0 22px;padding:16px;background:var(--dpj-inset);
  border-left:3px solid var(--dpj-brass)}
.dpj-shot__box{display:flex;align-items:center;justify-content:flex-start;
  min-height:96px}
.dpj-shot__img{display:block;max-width:100%;width:auto;height:auto}
.dpj-shot__cap{margin:10px 0 0;font-family:'DpsHead',Verdana,monospace;
  font-size:11.5px;line-height:1.55;letter-spacing:.03em;color:var(--dpj-ink2)}
/* боковой снимок донора — 215x162, ширина коробки под файл, не под колонку */
/* ⚠️ 247 = файл 215 px + padding 16 с двух сторон: коробка остаётся ПОД ФАЙЛ,
   иначе снимок пришлось бы уменьшать (R17/R18) ради отступа под подпись. */
.dpj-shot--side{float:right;width:247px;margin:4px 0 18px 22px}

/* ==========================================================================
   dpj:resources — ССЫЛКИ С ЛОГОТИПАМИ, стоявшие на главной донора.
   ⛔⛔ Переносятся ВСЕ ТРИ, и два раза подряд это место было описано неверно.
   Сначала «три проданные ссылки, правило 4» (в базе задач сети исходящих
   проданных с этого сайта ноль — продано 38 ВХОДЯЩИХ размещений), потом
   «значит все три обычные внешние, `top-casinos.co.nz` снят как партнёрка
   казино». Второй вывод и стоил ссылки: `top-casinos.co.nz` — НАШ ЖЕ САЙТ
   СЕТИ (`app_sites_registry.json`), перелинковка владельца, а она строкой в
   `tasks` не бывает вовсе (этап 11 п. 11.17б). Тематика и гео решения не
   меняют. Логотипы 218-237 px по ширине, поэтому коробка под них, а не они
   под коробку.
   ========================================================================== */
.dpj-res{background:var(--dpj-inset);padding-top:24px;padding-bottom:26px;
  border-top:1px solid var(--dpj-line)}
.dpj-res__h{margin:0 0 4px;font-family:'DpsHead',Verdana,monospace;font-size:12.5px;
  font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--dpj-brass)}
.dpj-res__sub{margin:0 0 16px;font-size:14.5px;line-height:1.6;color:var(--dpj-ink2);
  max-width:70ch}
.dpj-res__list{display:flex;flex-wrap:wrap;align-items:center;
  gap:var(--dpj-gap) var(--dpj-gap-lg);list-style:none;margin:0;padding:0}
.dpj-res__list li{min-width:0}
.dpj-res__a{display:flex;align-items:center;justify-content:center;min-height:96px;
  padding:12px 18px;background:var(--dpj-sheet);border:1px solid var(--dpj-line)}
.dpj-res__a:hover{border-color:var(--dpj-chalk)}
.dpj-res__img{display:block;max-width:100%;width:auto;height:auto}

/* ==========================================================================
   dpj:tiles — указатель каталога РЯДАМИ С ПРЕВЬЮ, а не голым списком.
   Блок карточек — требование к хабам; но превью донора 80 px, и в сетке
   широких карточек его пришлось бы тянуть. Отсюда ряд: квадрат 80x80 с
   `object-fit:contain` (в него картинка ВПИСЫВАЕТСЯ, не кропается и не
   растёт), рядом название, раздел и цена.
   ========================================================================== */
.dpj-tiles{background:var(--dpj-sheet);padding-top:28px;padding-bottom:30px}
.dpj-tiles__grid{display:grid;gap:var(--dpj-gap) var(--dpj-gap-lg);
  grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;
  list-style:none;margin:0;padding:0}
.dpj-tile{display:grid;grid-template-columns:80px minmax(0,1fr);
  gap:14px;min-width:0;padding-bottom:var(--dpj-gap);
  border-bottom:1px solid var(--dpj-line)}
.dpj-tile__box{display:flex;align-items:center;justify-content:center;
  width:80px;height:80px;background:var(--dpj-inset)}
.dpj-tile__img{display:block;max-width:80px;max-height:80px;width:auto;height:auto;
  object-fit:contain}
.dpj-tile__box--none{font-family:'DpsHead',Verdana,monospace;font-size:10.5px;
  letter-spacing:.08em;text-transform:uppercase;color:var(--dpj-ink2);
  text-align:center;line-height:1.3;padding:4px}
.dpj-tile__b{min-width:0}
.dpj-tile__a{font-family:'DpsHead',Verdana,monospace;font-size:15.5px;font-weight:500;
  line-height:23px;color:var(--dpj-ink);text-decoration:none;
  hyphens:manual;overflow-wrap:break-word}
.dpj-tile__a:hover{color:var(--dpj-chalk);text-decoration:underline}
.dpj-tile__m{display:block;margin-top:4px;font-family:'DpsHead',Verdana,monospace;
  font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--dpj-ink2)}
.dpj-tile__p{display:block;margin-top:4px;font-family:'DpsHead',Verdana,monospace;
  font-size:13px;font-weight:700;color:var(--dpj-brass)}

/* ==========================================================================
   dpj:ledger — СТРОКИ УКАЗАТЕЛЯ БЕЗ СВОЕЙ СТРАНИЦЫ. Возврат донорского
   текста: 325 строк из 527 потеряли карточку, а с ней имя, цену и описание
   (`gate_content.py`: потеря больше 10 % на шести указателях).
   ⛔ Одна колонка, а не сетка плиток: описание донора бывает 900 знаков, в
   плитке одной высоты оно либо порвало бы ряд, либо потребовало `line-clamp`
   — то есть спрятало бы ровно тот текст, ради которого блок и заведён.
   Превью — та же коробка 80x80 с `object-fit:contain`, что у `dpj:tiles`:
   файлы те же самые (лист §9 — один кроп на весь скин для мелких файлов
   донора). Ссылки в строке нет: вести некуда, адрес не выдумывается.
   ========================================================================== */
.dpj-ledger{background:var(--dpj-inset);padding-top:26px;padding-bottom:28px;
  border-top:1px solid var(--dpj-line)}
.dpj-ledger__list{list-style:none;margin:0;padding:0}
.dpj-ledger__i{display:grid;grid-template-columns:80px minmax(0,1fr);gap:16px;
  padding:var(--dpj-gap) 0;border-bottom:1px solid var(--dpj-line)}
.dpj-ledger__i:last-child{border-bottom:0}
/* строка без превью занимает всю ширину: пустая колонка в 80 px загоняла
   описание донора в столбик по одному слову (замер 29.09.2026) */
.dpj-ledger__i--nopic{grid-template-columns:minmax(0,1fr)}
.dpj-ledger__box{display:flex;align-items:center;justify-content:center;
  width:80px;height:80px;background:var(--dpj-sheet)}
.dpj-ledger__img{display:block;max-width:80px;max-height:80px;width:auto;
  height:auto;object-fit:contain}
.dpj-ledger__b{min-width:0}
.dpj-ledger__n{margin:0;font-family:'DpsHead',Verdana,monospace;font-size:15.5px;
  font-weight:700;line-height:23px;color:var(--dpj-ink);overflow-wrap:break-word}
.dpj-ledger__p{margin:4px 0 0;display:flex;flex-wrap:wrap;gap:4px 16px}
.dpj-ledger__pr{font-family:'DpsHead',Verdana,monospace;font-size:12.5px;
  letter-spacing:.06em;text-transform:uppercase;color:var(--dpj-ink2)}
.dpj-ledger__pr b{font-size:13px;color:var(--dpj-brass)}
.dpj-ledger__d{margin:8px 0 0;font-size:14.5px;line-height:1.62;
  color:var(--dpj-ink2);max-width:76ch}
/* строка, чьё описание магазин повторил слово в слово у соседней */
.dpj-ledger__s{margin:8px 0 0;font-size:14px;line-height:1.6;
  color:var(--dpj-ink2);max-width:76ch;font-style:italic}
.dpj-ledger__s b{font-style:normal;color:var(--dpj-ink)}

/* ==========================================================================
   dpj:mobile — медиазапросы стоят НИЖЕ того, что они отменяют.
   Селекторы повторены полностью: медиазапрос специфичности не поднимает.
   ========================================================================== */
@media (max-width:1100px){
  .dpj-stand__grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  .dpj-spec__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dpj-idx__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dpj-cloth__list{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dpj-value__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
}

@media (max-width:899px){
  /* ряд рубрик сворачивается в БУРГЕР — чекбокс и label, ноль JS.
     Боковой прокрутки рубрик нет: лента вместо бургера — не адаптация (§14). */
  .dpj-burgerbtn{display:flex;align-items:center;justify-content:center;
    width:46px;height:46px;margin-left:auto;cursor:pointer;
    background:var(--dpj-inset);color:var(--dpj-ink)}
  .dpj-burgerbtn__ico{display:block;width:24px;height:24px}
  .dpj-hd__in{grid-template-columns:minmax(0,1fr) auto;column-gap:12px}
  .dpj-hd__side{display:none}
  .dpj-brand{justify-content:flex-start}
  .dpj-strap{text-align:left;font-size:12.5px}
  .dpj-hd__rubs{display:none}
  .dpj-burger:checked ~ .dpj-hd__rubs{display:block;padding-bottom:8px}
  .dpj-nav__list{flex-wrap:wrap;flex-direction:column;align-items:stretch}
  .dpj-nav__i{width:100%}
  .dpj-nav__a{min-height:48px;padding:0 4px;font-size:14px;
    border-bottom:1px solid var(--dpj-line);white-space:normal}
  .dpj-nav__a:hover,.dpj-nav__a:focus{box-shadow:none;color:var(--dpj-chalk)}
  .dpj-nav__i--on>.dpj-nav__a{box-shadow:none;color:var(--dpj-chalk);
    background:var(--dpj-inset)}
  /* подменю на телефоне разворачивается в поток, фон ЯВНЫЙ, не transparent */
  .dpj-sub{position:static;visibility:visible;opacity:1;min-width:0;
    margin:0 0 0 14px;padding:0;border:0;box-shadow:none;background:var(--dpj-sheet)}
  .dpj-nav__i:nth-last-child(1)>.dpj-sub,.dpj-nav__i:nth-last-child(2)>.dpj-sub{right:auto}
  .dpj-sub__a{min-height:44px;padding:0 4px;border-bottom:1px solid var(--dpj-line)}
  .dpj-navclose{display:flex;align-items:center;justify-content:center;min-height:48px;
    margin-top:6px;font-family:'DpsHead',Verdana,monospace;font-size:12.5px;
    font-weight:700;letter-spacing:.12em;text-transform:uppercase;
    background:var(--dpj-inset);color:var(--dpj-ink);cursor:pointer}
  .dpj-pair{grid-template-columns:minmax(0,1fr);gap:var(--dpj-gap)}
  .dpj-disc__grid{grid-template-columns:minmax(0,1fr)}
  .dpj-ft__top{grid-template-columns:minmax(0,1fr);gap:var(--dpj-gap)}
}
.dpj-navclose{display:none}

@media (max-width:760px){
  .dpj-stand__grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .dpj-idx__grid{grid-template-columns:minmax(0,1fr)}
  .dpj-tiles__grid{grid-template-columns:minmax(0,1fr)}
  .dpj-cloth__list{grid-template-columns:minmax(0,1fr)}
  .dpj-value__grid{grid-template-columns:minmax(0,1fr)}
  .dpj-stand__hd,.dpj-band__hd{flex-direction:column;align-items:flex-start;gap:6px}
}

@media (max-width:640px){
  :root{--dpj-gut:14px;--dpj-gap:14px;--dpj-gap-lg:22px}
  body.dpj-page{font-size:17px}
  .dpj-page h1{font-size:27px;line-height:33px}
  .dpj-lede .dpj-lede__h{font-size:27px;line-height:34px}
  .dpj-lede__sf{font-size:17px}
  .dpj-page h2{font-size:22px;line-height:28px;margin-top:28px}
  .dpj-page h3{font-size:19px;line-height:26px}
  .dpj-brand__a{font-size:22px}
  .dpj-brand__b{font-size:11px;letter-spacing:.26em}
  .dpj-brand__mark{width:38px;height:38px;flex:0 0 38px}
  .dpj-spec__grid{grid-template-columns:minmax(0,1fr)}
  .dpj-stand__grid{grid-template-columns:minmax(0,1fr)}
  .dpj-card__h{font-size:19px;line-height:25px}
  .dpj-band__h{font-size:21px;line-height:27px}
  .dpj-wg__h,.dpj-spec__h,.dpj-value__h{font-size:20px;line-height:26px}
  .dpj-kv__l{grid-template-columns:minmax(0,1fr);gap:2px}
  /* отбивка между парами «ключ — значение» нужна МЕЖДУ ними: у последней она
     складывалась с полем коробки и давала 28 px пустой плашки под ценой
     (замер на 390 px, карточка товара, 29.09.2026) */
  .dpj-kv__l dd{margin-bottom:10px}
  .dpj-kv__l dd:last-of-type{margin-bottom:0}
  .dpj-sheet{padding-top:22px;padding-bottom:26px}
  /* ⛔ Флот первой картинки на узком экране СБРАСЫВАЕТСЯ. Прежнее «45 % и не
     сбрасывать, иначе кадр выше первого экрана» замерено на 390 px: колонка
     под текст остаётся 185 px — около 20 знаков в строке, заголовок раздела
     ломается на три строки, абзац идёт переносами. Кадр во всю ширину стоит
     там же, сразу под H1, то есть с первого экрана никуда не уходит, а доля
     берётся широкая (1.42:1 вместо 4:5) — полосой он съедает 246 px, а не 440. */
  .dpj-lead{float:none;width:auto;margin:0 0 20px}
  .dpj-lead .dpj-fig__img{aspect-ratio:1.42 / 1}
  .dpj-scrollhint{display:block}
  .dpj-tbl{font-size:15px}
  .dpj-tbl th,.dpj-tbl td{padding:8px 10px}
  /* на 390 px коробка 80 px + 16 px разрыв съедают четверть строки: превью
     уходит НАД текстом, а не рядом — описание остаётся читаемой шириной */
  .dpj-ledger__i{grid-template-columns:minmax(0,1fr);gap:10px}
}
