/* ХРАМ ТРОИЦЫ В КОНЬКОВЕ - зелёное поколение (стена храма). Перекрашено 29.07.2026
   коммитом ac278990; до него было терракотовое v3.2 Warm Terracotta. Упоминания
   терракоты ниже в ПРОШЕДШЕМ времени объясняют историю правок и удалению не подлежат:
   без них следующий читатель заново переоткроет уже решённые вопросы. */
/* D-16. ЭТОТ ЛИСТ НЕ МИНИФИЦИРУЕТСЯ. Lighthouse предлагает минификацию в каждом отчёте
   с точной цифрой экономии, и она выглядит бесплатной. Реальная выгода 3-5 КБ из 39 КБ
   после gzip. Цена: минификатор снимает все 208 комментариев этого файла, а в них
   записана половина намеренных решений проекта. После этого замки останутся зелёными,
   объяснений не будет ни у одного, и следующий аудит откатит их с чистой совестью.
   Решение автора 18.07.2026. Полностью: DECISIONS.md */
@font-face{font-family:'Cormorant Fallback';src:local('Georgia');size-adjust:83%;ascent-override:108.4%;descent-override:33.7%;line-gap-override:0%}
:root{
  /* CHURCH WALL BACKGROUND - deep green (#3f6b45). Значение ниже и есть источник правды;
   design-system/DESIGN.md объясняет систему, но при расхождении прав ЭТОТ файл. */
  --bg-deep:#3f6b45;--bg-surface:#4e7a54;--bg-card:rgba(30,58,38,.6);
  --bg-glass:rgba(255,245,230,.08);--border-glass:rgba(255,240,220,.15);
  /* PRIMARY ACCENT: Deep gold. Золото перекрас пережило без изменений. */
  --accent:#2C1A0E;--accent-light:#3D2B1E;--accent-glow:rgba(44,26,14,.18);--accent-dim:rgba(44,26,14,.08);
  /* SECONDARY: Gold (for cross, icons, highlights) */
  --gold:#D4A843;--gold-light:#E4C068;--gold-text:#F2DC97;--gold-glow:rgba(212,168,67,.2);--gold-dim:rgba(212,168,67,.12);
  /* Warm earth accents */
  --salmon:#7A3A28;--salmon-dark:#5C2A1C;--salmon-glow:rgba(122,58,40,.14);
  /* Text hierarchy on the dark green ground */
  --text:#FCF6EE;--text2:#FCF6EE;--text3:#F5E6D8;--line:rgba(255,240,220,.15);
  /* Light text for dark overlay areas */
  --text-light:#F5EDE5;--text-light2:#F5EDE5;--text-light3:#E8DBCB;
  /* Church-appropriate warm tones */
  --cream:rgba(255,245,230,.15);--ivory:rgba(255,250,240,.1);--parch:#EDE4D5;--brown:#3D2B1E;--brown-mid:#5C4433;
  /* Typography */
  --hd:'Cormorant Garamond','Cormorant Fallback',Georgia,serif;--sans:'Inter',system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--serif:'Cormorant Garamond','Cormorant Fallback',Georgia,serif;
  /* Radii & Motion */
  --r:8px;--r-lg:14px;--r-xl:20px;
  --sec-gap:80px;/* single source of truth for vertical space between homepage blocks */
  --content-max:1320px;/* single source of truth for page content width (header, frames, footer) */
  --ease:cubic-bezier(.16,1,.3,1);
}
*,*::before,*::after{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
body{background:var(--bg-deep);color:var(--text);font:400 1.06rem/1.7 var(--sans);-webkit-font-smoothing:antialiased;overflow-x:hidden}
img{max-width:100%;height:auto;display:block}
a{color:inherit;text-decoration:none}
figure{margin:0}ul{list-style:none}
.w{max-width:var(--content-max);margin:0 auto;padding:0 24px}

/* ═══ ANIMATED BACKGROUND WAVES ═══ */
.bg-waves{position:fixed;inset:0;z-index:-1;overflow:hidden;background:var(--bg-deep);contain:strict}
.bg-waves__wave{display:none}
.bg-waves__wave--1{width:600px;height:600px;top:-12%;left:-8%;background:#D4A843;animation:waveFloat 22s ease-in-out infinite alternate}
.bg-waves__wave--2{width:500px;height:500px;bottom:5%;right:-10%;background:#7A3A28;animation:waveFloat 28s ease-in-out infinite alternate-reverse}
.bg-waves__wave--3,.bg-waves__wave--4{display:none}
@keyframes waveFloat{0%{transform:translate(0,0) scale(1)}100%{transform:translate(50px,-40px) scale(1.18)}}

/* ═══ SCROLL REVEAL ═══ */
.reveal{opacity:0;transform:translateY(32px);transition:opacity .9s var(--ease),transform .9s var(--ease)}
/* Anchor landing: a :target reveal element must sit at its FINAL position when the browser
   computes the scroll, else the 32px pre-reveal shift lands the heading under the fixed header. */
.reveal:target{opacity:1;transform:none}

/* ═══ ACCESSIBILITY ═══ */
a:focus-visible,button:focus-visible{outline:2px solid var(--gold-text);outline-offset:2px;border-radius:4px;box-shadow:0 0 0 4px rgba(20,10,4,.55)}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}.hero__bg{animation:none!important;transform:none!important}.bg-waves__wave{animation:none!important;opacity:0!important}.hdr{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}}
.reveal.revealed{opacity:1;transform:translateY(0)}

/* ═══ SHARED ═══ */
.divider{width:48px;height:2px;background:linear-gradient(90deg,transparent,var(--gold),transparent);margin:0 auto 16px;border-radius:1px}
/* Homepage 3-block cards: Богослужения / Новости / Духовенство read as framed blocks with a button header */
.block-card{max-width:var(--content-max);margin:0 auto;background:var(--bg-card);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-glass);border-radius:var(--r-xl);padding:28px;color:var(--text-light);position:relative;z-index:1;overflow:hidden}
/* Header buttons: subtle rounded bar (all corners) at the top of the frame */
.block-head{display:block;margin:0}
.block-card > .block-head{margin:-28px -28px 0}
.hs > .block-head{margin:-28px -28px 0}
@media(min-width:769px){#schedule-grid{min-height:205px}}
/* Block button: glassy dark (maps style) with gold frame/text at rest; fills gold + glows on hover */
/* Header buttons: barely-there dark tint at rest (just below the frame bg) -> very light wash on hover */
.block-cta{display:flex;align-items:center;justify-content:center;gap:13px;width:100%;border:none;border-radius:0 0 20px 20px;background:transparent;padding:30px 22px;font:500 1.4rem/1.1 var(--hd);letter-spacing:.3px;color:var(--gold-light);cursor:pointer;transition:background .3s var(--ease);text-transform:none}
.block-cta:hover{background:rgba(0,0,0,.04);color:var(--gold-light)}
.block-cta svg{width:1.5em;height:1.5em;flex-shrink:0;opacity:.92;stroke-width:1.3}
.block-cta .cta-arr{width:.92em;height:.92em;opacity:.55;margin-left:-2px}
.block-cta:hover .cta-arr{opacity:.8}
.block-cta:hover svg{transform:none}
/* Staggered hover timing per block */
/* staggered hover durations removed - buttons now animate uniformly (scan low #3) */

/* ═══ HEADER - Floating Glass Pill (dark on the green ground) ═══ */
.hdr{position:fixed;top:12px;left:50%;transform:translateX(-50%);width:calc(100vw - 48px);max-width:1152px;z-index:200;background:rgba(18,38,24,.93);backdrop-filter:blur(16px) saturate(1.1);-webkit-backdrop-filter:blur(16px) saturate(1.1);border:1px solid rgba(255,240,220,.14);border-radius:var(--r-xl);transition:background .3s,border-color .3s}
/* Тень у шапки, 14.08.2026. У .secnav и .month-hdr, тех же стеклянных капсул, тень есть и
   она одинаковая. У шапки её не было, и капсула не отделялась от страницы при прокрутке.
   Значение взято дословно у родственниц, новых величин не заводится. Строка обязана стоять
   во ВСЕХ ТРЁХ источниках, иначе check_critical_css.py покраснеет новым расхождением. */
.hdr{max-width:var(--content-max);box-shadow:0 6px 24px rgba(10,24,14,.22)}
.hdr__row{display:grid;grid-template-columns:1fr auto;align-items:center;height:48px;padding:0 24px}
.hdr__logo{display:flex;align-items:center;gap:10px;flex-shrink:0;transition:opacity .3s;cursor:pointer;justify-self:center}
.hdr__logo:hover .hdr__name{color:var(--gold)}
/* Footer logo (main-page link): the inline color:#fff blocks the gold hover, so force it */
.foot .hdr__logo:hover .hdr__name{color:var(--gold)!important}
.hdr__logo:hover .hdr__name::after{transform:scaleX(1)}
.hdr__cross{display:inline-block;width:1.3em;height:1.3em;font-size:1.35rem;color:var(--gold);background:currentColor;-webkit-mask:url(img/chrism-mask.avif) center/contain no-repeat;mask:url(img/chrism-mask.avif) center/contain no-repeat;vertical-align:-0.28em;filter:drop-shadow(0 0 6px rgba(212,168,67,.45))}
.hdr__cross svg{display:none!important}
/* Часы работы: показываем ТОЛЬКО актуальный сезон, второй прячем. Решение владельца
   08.08.2026, и оно снимает целый класс проблем, а не только вкусовую.
   Как было: обе строки на виду, неактивная приглушена. Приглушение приходилось делать
   цветом, потому что подложек три и они разные, и любой выбранный цвет либо проваливал
   контраст на тёмной подложке, либо выбивался из соседних колонок подвала на светлой.
   Оба варианта уже случились: 07.08 тёмный дал 1.76:1 в подвале, 08.08 светлый сделал
   правую колонку подвала ярче двух соседних.
   Как стало: в подвале видна одна строка, она наследует цвет и вес окружающего текста,
   поэтому три колонки подвала выглядят одинаково и мерить нечего.
   ИСКЛЮЧЕНИЕ: карточка контактов на kontakty.html показывает оба сезона. Там это
   справочная информация, а не подпись под лавкой, и человек приходит туда именно узнать
   график целиком. Стоит одну строку CSS.
   Без JS атрибуты data-active/data-inactive не проставляются вовсе, поэтому видны обе
   строки: деградация безопасная. */
.hours2 span{display:block;line-height:1.55}
/* D-13. НАМЕРЕННО скрыт неактивный сезон: показывается только текущий, а оба сразу
   только на kontakty.html (исключение ниже). Примут за «скрытый контент, расписание
   недоступно посетителю и поисковику» либо за несогласованность с контактами. Снятие
   вернёт проблему контраста: приглушение вторым цветом пробовали дважды, 07.08 тёмный
   дал 1,76:1 в подвале, 08.08 светлый сделал правую колонку подвала ярче соседних.
   Владелец, 08.08.2026. Полностью: DECISIONS.md */
.hours2 [data-inactive]{display:none}
/* Карточка контактов: оба сезона, неактивный приглушён, но читаем (4.66:1 на #3E6944) */
.info-row__time.hours2 [data-inactive]{display:block;color:#E8DBCB}
.info-row__time.hours2 [data-active]{font-weight:600}
.hdr__name{font:600 1rem/1 var(--hd);color:var(--parch);letter-spacing:2.5px;text-transform:uppercase;position:relative;transition:color .25s}
.hdr__name::after{content:'';position:absolute;bottom:-4px;left:0;right:0;height:1px;background:var(--gold);transform:scaleX(0);transition:transform .3s var(--ease)}
.hdr__nav{display:flex;gap:18px;align-items:center;flex-wrap:nowrap}
.hdr__nav a{font:.78rem/1 var(--sans);font-weight:600;color:rgba(237,228,213,.78);text-transform:uppercase;letter-spacing:.4px;transition:color .25s;position:relative;white-space:nowrap}
.hdr__nav a::after{content:'';position:absolute;bottom:-4px;left:0;right:0;height:1px;background:var(--gold);transform:scaleX(0);transition:transform .3s var(--ease)}
.hdr__nav a:hover{color:var(--gold)}
.hdr__nav a:hover::after{transform:scaleX(1)}
.hdr__nav a.active{color:var(--gold)}
.hdr__nav a.active::after{transform:scaleX(1)}
.hdr__burger{display:none;background:none;border:none;cursor:pointer;flex-direction:column;justify-content:center;align-items:center;gap:5px;padding:6px;min-width:44px;min-height:44px}
.hdr__burger span{display:block;width:22px;height:2px;background:var(--parch);transition:.3s}

/* ═══ HERO - Cinematic + Ken Burns ═══ */
.hero{position:relative;min-height:100vh;display:flex;align-items:flex-end;overflow:hidden}
.hero__bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:34% 20%;animation:kenBurns 30s ease-in-out infinite alternate;will-change:transform;mask-image:linear-gradient(0deg,transparent 0%,transparent 4%,black 22%,black 100%);-webkit-mask-image:linear-gradient(0deg,transparent 0%,transparent 4%,black 22%,black 100%)}
@keyframes kenBurns{0%{transform:scale(1) translate(0,0)}100%{transform:scale(1.08) translate(-1%,1%)}}
.hero__fade{position:absolute;inset:0;z-index:1;display:block;pointer-events:none;background:linear-gradient(180deg,transparent 40%,rgba(20,40,26,.35) 66%,rgba(20,40,26,.6) 84%,rgba(20,40,26,.2) 96%,rgba(20,40,26,0) 100%)}
.hero__inner{position:relative;z-index:2;padding-bottom:24px;padding-top:0;width:100%;display:flex;flex-direction:column;gap:34px;align-items:center}
.hero__text{color:#fff;text-align:center;display:flex;flex-direction:column;align-items:center;max-width:920px}
.hero__tag{font:600 .92rem/1.3 var(--sans);text-transform:uppercase;letter-spacing:5.5px;color:var(--gold);margin-bottom:28px;opacity:1;animation:fadeUp .9s ease .2s both;text-shadow:0 1px 2px rgba(0,0,0,.9),0 0 10px rgba(0,0,0,.55),0 0 22px rgba(0,0,0,.4);display:flex;flex-direction:column;align-items:center;gap:9px}
.hero__title{font:400 clamp(3.6rem,6.4vw,6.2rem)/1.04 var(--hd);margin-bottom:24px;text-shadow:0 2px 6px rgba(0,0,0,.55),0 4px 24px rgba(0,0,0,.45),0 0 70px rgba(0,0,0,.3);animation:fadeUp .9s ease .35s both;letter-spacing:.5px}
.hero__addr{font:1.12rem/1.5 var(--sans);color:#fff;font-weight:500;animation:fadeUp .9s ease .5s both;letter-spacing:.5px;text-shadow:0 1px 3px rgba(0,0,0,.9),0 2px 12px rgba(0,0,0,.6),0 0 22px rgba(0,0,0,.45)}
.hero__cta{display:flex;gap:12px;margin-top:30px;animation:fadeUp .9s ease .6s both}
/* Short desktop (laptops): don't cram the hero into 100vh - let it clear the header and flow */
@media(min-width:1121px) and (max-height:900px){.hero{align-items:flex-start;padding-top:82px}.hero__inner{padding-top:0;padding-bottom:20px;gap:20px}.hero__title{font:400 clamp(3rem,4.6vw,4rem)/1.02 var(--hd);margin-bottom:14px}.hero__tag{font-size:.86rem;letter-spacing:5px;margin-bottom:26px}.hero__addr{font-size:1.05rem}.hero__official{margin-bottom:14px;gap:3px}.hero__official-lead{font-size:.82rem;letter-spacing:3.5px}.hero__official-name{font-size:.92rem;line-height:1.35}.hero__official-jur{font-size:.72rem;line-height:1.4}}
/* Tablet / burger-mode: top-align the hero so the eyebrow tag clears the fixed header */
@media(min-width:641px) and (max-width:1120px){.hero{align-items:flex-start;padding-top:84px}}
@keyframes fadeUp{from{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}

/* ═══ SCHEDULE (glass card in hero - dark overlay) ═══ */
/* bottom inset is half the side inset ON PURPOSE: the head is flush to the frame top (negative
   margins) and every day cell carries its own 12px bottom padding, so a full 28px underneath
   read as a hole. 14px puts the cell frames the same distance from the card edge as the eye
   reads at the sides. */
.hs{background:rgba(0,0,0,.02);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);padding:28px 28px 14px;border:1px solid var(--border-glass);border-radius:var(--r-xl);animation:fadeUp .9s ease .8s both;width:100%;max-width:var(--content-max);color:var(--text-light);overflow:hidden}

/* Map buttons: Yandex style, square-ish, blend with page */
.hero__map, .foot__route {
  display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:14px 28px;
  background:rgba(30, 22, 16, 0.5);border:1px solid rgba(212, 168, 67, 0.3);
  color:rgba(255,255,255,0.95);font:500 .95rem/1 var(--sans);letter-spacing:0.5px;
  border-radius:8px;transition:all .3s var(--ease);box-sizing:border-box;white-space:nowrap;
  text-transform:none;
}
.hero__map:hover, .foot__route:hover {
  background:rgba(40,28,18,.7);border-color:var(--gold);color:var(--gold-light);
}
.hero__map svg, .foot__route svg {width:18px;height:18px;flex-shrink:0;transition:transform .3s var(--ease)}
.hero__map:hover svg, .foot__route:hover svg {transform:none}
/* Footer route button: more compact so it sits inside the footer column, not as a heavy CTA */
/* Здесь было padding:10px 16px;font-size:.86rem;border-radius:6px с комментарием «более
   компактно, чтобы кнопка сидела внутри колонки подвала, а не как тяжёлая CTA».
   Объявления были МЁРТВЫМИ: .foot a.foot__route ниже имеет специфичность 0,2,1 против
   0,1,0 и стоит позже, поэтому рисовалась ровно та тяжёлая CTA, которую комментарий
   обещал убрать. Намерение перенесено туда, где оно исполняется. */
.foot a.foot__route:hover{background:rgba(40,28,18,.7);border-color:var(--gold);color:var(--gold-light)}
/* Inline content links (cross-links inside sacrament/article copy) - themed, not default blue */
.tab-pane a{color:var(--gold-text);text-decoration:underline;text-underline-offset:3px;text-decoration-thickness:1px;transition:color .2s ease}
.tab-pane a:hover{color:var(--gold-light)}
.tab-pane .need-list{list-style:decimal;padding-left:1.55em;margin:8px 0 4px}
.tab-pane .need-list li{margin-bottom:7px;padding-left:5px}
.tab-pane .need-list li::marker{color:var(--gold-text);font-weight:600}
/* Long bank account numbers wrap inside the card on narrow phones */
.rekv-card .detail p{overflow-wrap:anywhere;word-break:break-word}

.hs__grid{display:grid;grid-template-columns:repeat(3,1fr);column-gap:28px;align-items:stretch;min-height:120px}
.hs__day{padding:24px 16px 12px;display:flex;flex-direction:column;position:relative;align-items:center;text-align:center;text-decoration:none;color:inherit;cursor:pointer;border-radius:var(--r-lg);transition:background .25s}
.hs__day:hover{background:rgba(255,240,220,.1)}
.hs__day:nth-child(2),.hs__day:nth-child(3){border:1px solid rgba(228,192,104,.16)}
.cel--focus{position:relative;z-index:3;outline:2px solid var(--gold);outline-offset:-1px;box-shadow:0 0 0 4px rgba(212,168,67,.18),0 0 26px rgba(212,168,67,.35)}
.hs__day--today{background:rgba(255,240,220,.06);border:1px solid rgba(212,168,67,.42)}
.hs__day:first-child{background:rgba(212,168,67,.13);border:1px solid rgba(228,192,104,.6);box-shadow:0 6px 22px rgba(0,0,0,.2)}
.hs__day:first-child .hs__date{color:var(--gold-light)}
.hs__day:first-child .hs__badge{background:var(--gold);color:var(--brown)}
.hs__day:first-child:hover{background:rgba(212,168,67,.22)}
.hs__day--today .hs__badge{top:0;left:50%;transform:translateX(-50%);border-radius:0 0 var(--r-lg) var(--r-lg)}
/* Было background:var(--brown) = #3D2B1E, тёмный шоколад из терракотового поколения.
   Перекрас 29.07 прошёл рядом (он менял .hs и .hs__day-name), но эту строку не тронул,
   и две плашки из трёх на первом экране главной остались коричневыми на зелёном стекле.
   #14281a это тон, который сам перекрас выбрал для подвала и skip-link, а не изобретённый.
   Токен --brown НЕ трогаем: у него четыре других потребителя, и там он тёмные чернила
   на кремовом, где коричневый законен. Контраст текста растёт 10.66 -> 12.36:1.
   ПЛАШКА «БЛИЖАЙШЕЕ» живёт НЕ здесь. Её правило это `.hs__day:first-child .hs__badge`
   ниже по файлу, и полная запись стоит рядом с самим значением. Решение D-02, см. DECISIONS.md.
   Прежняя редакция этого комментария говорила «строка ниже», что было неверно: ниже стоит
   общая плашка #14281a, а тёплая на другом селекторе за тысячу строк отсюда. */
.hs__badge{position:absolute;top:0;left:50%;transform:translateX(-50%);background:#14281a;color:var(--parch);font:.55rem/1 var(--sans);text-transform:uppercase;letter-spacing:2px;padding:4px 12px;font-weight:600;border-radius:0 0 var(--r-lg) var(--r-lg);white-space:nowrap}
.hs__date{font:600 1.3rem/1.2 var(--hd);color:var(--text-light2);margin-bottom:4px;margin-top:0;text-shadow:0 1px 2px rgba(28,12,4,.8),0 2px 7px rgba(28,12,4,.45)}
.hs__date .hs__day-name{display:block;font:.65rem/1 var(--sans);text-transform:uppercase;letter-spacing:2px;color:var(--text-light);margin-top:4px;font-weight:600}
.hs__day ul{margin:6px auto 0;width:100%;max-width:310px}
.hs__day ul li{display:grid;grid-template-columns:auto 1fr;column-gap:8px;text-align:left;font:.84rem/1.4 var(--sans);color:var(--text-light2);text-shadow:0 1px 3px rgba(28,12,4,.72);margin-bottom:3px;align-items:baseline}
.hs__day ul li:last-child{margin-bottom:0}
.hs__day ul b{color:var(--gold-light);text-shadow:0 1px 2px rgba(28,12,4,.85);font-weight:600;min-width:38px;font-variant-numeric:tabular-nums;text-align:right;flex-shrink:0}
/* Priest on duty label */
.hs__feast{font:italic 500 .98rem/1.32 var(--hd);color:var(--gold-light);text-shadow:0 1px 2px rgba(28,12,4,.72),0 2px 6px rgba(28,12,4,.4);margin:8px 0 6px;text-align:center;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;min-height:2.6rem}
/* Homepage services now mirror the rasp page: the priest(s) on duty sit ON TOP of each service
   (morning/evening split), not one tag pinned to the card bottom. */
.hs__svc{margin:8px auto 0;width:100%;max-width:310px;display:flex;flex-direction:column;gap:3px}
.hs__svc-priest{display:flex;flex-wrap:wrap;gap:4px;justify-content:center;margin:5px 0 2px}
.hs__svc-priest:first-child{margin-top:0}
.hs__svc-line{display:block;text-align:center;font:.84rem/1.4 var(--sans);color:var(--text-light2);text-shadow:0 1px 3px rgba(28,12,4,.72)}
.hs__svc-line b{color:var(--gold-light);text-shadow:0 1px 2px rgba(28,12,4,.85);font-weight:600;font-variant-numeric:tabular-nums;margin-right:5px}

/* ═══ SHRINE (on the green ground - dark card) ═══ */
.shrine{padding:var(--sec-gap) 0 0;background:transparent;position:relative;isolation:isolate}
.shrine::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 70% 50%,rgba(212,168,67,.08),transparent 70%);pointer-events:none}
.word__content h2{font:400 2.2rem/1.2 var(--hd);color:var(--text);margin-bottom:24px;letter-spacing:0}
.about-card[id]{scroll-margin-top:120px}
/* Deep-link targets from the main page (#clergy-vladimir / #clergy-efrem) sit on the INNER
   cards, not the .clergy-frame; give them the same offset so the fixed header never covers them. */

/* ═══ NEWS ═══ */
.life{background:transparent;position:relative}

/* ═══ PATRIARCH QUOTE (dark overlay section) ═══ */
.word{background:transparent;padding:var(--sec-gap) 0 16px;position:relative;overflow:hidden;border:none}
.word::before{content:'«';position:absolute;top:-20px;left:50%;transform:translateX(-50%);font:300 18rem/1 var(--hd);color:rgba(212,168,67,.05);pointer-events:none}
.word__inner{display:grid;grid-template-columns:340px 1fr;gap:56px;align-items:center;position:relative;z-index:1}
.word__photo{border-radius:var(--r-xl);overflow:hidden;box-shadow:0 16px 48px rgba(0,0,0,.2),0 0 60px rgba(212,168,67,.06);border:1px solid rgba(255,240,220,.12)}
.word__photo img{width:100%;height:410px;object-fit:cover;object-position:center 18%}
.word__content{text-align:left;max-width:520px}
.word__q{font:400 1.06rem/1.7 var(--sans);color:var(--text-light2);margin-bottom:24px;quotes:"\00ab" "\00bb"}
.word__q::before{content:open-quote}.word__q::after{content:close-quote}
.word__cite{font:.88rem/1 var(--sans);color:var(--text);font-weight:600;font-style:normal;display:block;letter-spacing:.5px}

/* ═══ CLERGY ═══ */
.clergy{padding:var(--sec-gap) 0 0;background:transparent;position:relative}
.clergy::before{content:'';position:absolute;inset:0;background:radial-gradient(ellipse at 30% 60%,rgba(212,168,67,.06),transparent 60%);pointer-events:none}
/* Vladimir (nastoyatel): show face & shoulders from top */
/* Efrem (new photo - outdoor portrait, shoulders visible) */

/* ═══ FOOTER (dark) ═══ */
.foot{background:#14281a;color:var(--text-light2);padding:64px 0 20px;border-top:1px solid rgba(255,240,220,.1);position:relative}
.foot::before{content:'';position:absolute;top:0;left:50%;transform:translateX(-50%);width:200px;height:1px;background:linear-gradient(90deg,transparent,var(--gold),transparent);opacity:.5}
.foot__grid{display:grid;grid-template-columns:1.5fr 1fr 1fr;justify-items:center;text-align:center;gap:48px;margin-bottom:48px}
/* НЕ возвращать сюда ни color, ни font. Оба объявления тут уже были и оба были дефектом.
   color:#AD9E90 это остаток терракотового поколения дизайна: цвет подбирали под старый почти
   чёрно-коричневый фон подвала #1F1009, а перекрас 29.07 (ac278990) сменил фон на зелёный
   #14281a через ТОКЕН и потому мимо этого литерала прошёл. На зелёном фоне литерал давал
   левой колонке 4.50:1 против 9.48:1 у средней и правой, то есть вдвое меньше контраста.
   Цвет теперь наследуется от .foot, ровно как у .foot p, поэтому разъехаться они больше не могут.
   font:.84rem/1.65 было мёртвым кодом: .foot p (специфичность 0,1,1) бьёт .foot__sub (0,1,0). */
.foot__sub{margin-top:16px}
.foot h3,.foot h4{color:var(--gold);font:400 1.25rem/1 var(--hd);margin-bottom:16px;letter-spacing:.5px}
/* Footer brand head matches the other two column titles (scoped to .foot; the sticky header keeps its logotype treatment) */
.foot .hdr__name{font:400 1.25rem/1 var(--hd);color:var(--gold);letter-spacing:.5px;text-transform:none}
.foot .hdr__cross{font-size:1.15rem}
.foot .hdr__logo{margin-bottom:16px}
.foot p{font:.88rem/1.55 var(--sans);opacity:.82;margin-bottom:7px}
/* Inter подключён как font-weight:400 600 (critical.css:4-5), поэтому запрошенный у
   strong и b вес 700 физически не отгружается: браузер клампит до 600 и рисует его.
   Замер подтвердил: строка на 600 и на 700 имеет одинаковую ширину до сотой доли.
   Просим ровно то, что есть, чтобы код не обещал того, чего не будет. */
.foot strong,.foot b{font-weight:600}
/* Ссылка в подвале была неотличима от обычного текста: тот же цвет, без подчёркивания,
   без смены веса. Три способа показать ссылку в одном подвале (текстовый цвет в
   колонках, рамка с фоном у кнопки маршрута, снова текстовый цвет в копирайте) сведены
   к одному признаку: подчёркивание с отступом, заметное но негромкое. */
.foot a{color:var(--text-light2);transition:color .25s}
.foot p a,.foot__copy a{text-decoration:underline;text-decoration-color:rgba(245,237,229,.35);text-underline-offset:3px;text-decoration-thickness:1px}
.foot p a:hover,.foot__copy a:hover{text-decoration-color:currentColor}
/* Заголовок-ссылка «Контакты» отклика не давал: в разметке стоит инлайновый
   style="color:inherit", а обычное инлайновое объявление в каскаде сильнее любого
   авторского правила. Перебиваем !important точечно, вместо правки разметки на
   девяти страницах и в шаблоне выпечки: там это стоило бы перепечки 884 постов. */
.foot h3 a:hover,.foot h3 a:focus-visible{color:#F5EDE5!important}
.foot a:hover{color:var(--gold)}
.foot__route{margin-top:4px}
/* Тот же остаток терракоты. Строка копирайта намеренно тише трёх колонок, поэтому здесь
   не наследование, а альфа: .62 даёт 6.02:1 против прежних 5.99:1, то есть визуальный вес
   строки сохранён с точностью до сотой, а второй цвет из подвала ушёл.
   Альфа именно В ЦВЕТЕ, не свойством opacity. opacity создало бы группу прозрачности на
   всю строку, и в неё попала бы всплывающая карточка разработчика: её собственный фон
   rgba(30,58,38,.62) стал бы 0.384, ссылки 0.533, рамка и тень выцвели бы. Проверено
   замером, это была свежая регрессия, а не гипотеза. color с альфой красит только текст. */
.foot__copy{border-top:1px solid rgba(255,240,220,.08);padding-top:20px;text-align:center;font:.75rem/1.6 var(--sans);color:rgba(245,237,229,.62)}
/* Author credit: folded into the copyright line, inherits its size/colour; contact popover on a subtle click trigger (pure CSS <details>, no JS) */
.dev-credit{position:relative;display:inline;margin:0}
.dev-credit>summary{list-style:none;cursor:pointer;display:inline;color:inherit;font-size:inherit;letter-spacing:inherit;border-bottom:1px dotted transparent;transition:color .2s,border-color .2s;-webkit-tap-highlight-color:transparent}
.dev-credit>summary::-webkit-details-marker{display:none}
.dev-credit>summary::marker{content:""}
.dev-credit>summary:hover,.dev-credit[open]>summary{color:var(--gold);border-bottom-color:rgba(245,237,229,.35)}   /* третий экземпляр #AD9E90, записанный через
   rgba и потому переживший правку подвала 08.08. Визуальный вес пунктира сохранён:
   композит был rgb(104,105,91), стал rgb(99,109,97). */
.dev-credit__card{position:absolute;left:50%;bottom:calc(100% + 11px);transform:translateX(-50%);display:flex;flex-direction:column;gap:.5rem;min-width:224px;max-width:min(280px,84vw);padding:.85rem 1.05rem;text-align:left;background:rgba(30,58,38,.62);backdrop-filter:blur(16px) saturate(1.3);-webkit-backdrop-filter:blur(16px) saturate(1.3);border:1px solid rgba(228,192,104,.30);border-radius:14px;box-shadow:0 14px 38px rgba(0,0,0,.5);z-index:40;animation:devpop .18s ease-out}
.dev-credit__card::after{content:"";position:absolute;top:100%;left:50%;transform:translateX(-50%);border:7px solid transparent;border-top-color:rgba(228,192,104,.30)}
.dev-credit__card a{color:rgba(255,255,255,.86);text-decoration:none;font-size:.82rem;line-height:1.2;display:flex;align-items:center;gap:.5rem;white-space:nowrap}
.dev-credit__card a:hover{color:var(--gold)}
.dev-credit__card a svg{width:15px;height:15px;flex:0 0 auto;opacity:.85}
@keyframes devpop{from{opacity:0;transform:translateX(-50%) translateY(6px)}to{opacity:1;transform:translateX(-50%) translateY(0)}}
@media (prefers-reduced-motion:reduce){.dev-credit__card{animation:none}}
.foot__social{display:flex;gap:10px;margin-top:22px;flex-wrap:wrap}
.foot__social a{display:flex;align-items:center;justify-content:center;width:44px;height:44px;border-radius:50%;background:rgba(255,240,220,.06);color:var(--text-light2);border:1px solid rgba(255,240,220,.1);transition:all .25s var(--ease)}
.foot__social a:hover{background:rgba(255,240,220,.14);color:var(--parch);border-color:rgba(255,240,220,.3);transform:translateY(-2px)}
.foot__social svg{width:18px;height:18px}
/* ═══ TELEGRAM FAB ═══ */
.social-fab{position:fixed;right:24px;bottom:24px;z-index:300;display:flex;flex-direction:column;gap:12px;transition:transform .35s var(--ease),opacity .35s var(--ease)}
/* Lebedev 21.07: the fab yields at the very bottom - nav.js adds .social-fab--dock while the footer credits line (.foot__sub) is on screen, sliding the stack off the right edge so it never covers the developer credit */
.social-fab--dock{transform:translateX(calc(100% + 30px));opacity:0;pointer-events:none}
.social-fab__btn{width:54px;height:54px;border-radius:50%;background:linear-gradient(135deg,#E4C068,#C79A3A);border:1px solid rgba(120,80,20,.35);box-shadow:0 4px 20px rgba(28,12,4,.32);color:#3a2416;display:flex;align-items:center;justify-content:center;transition:box-shadow .3s var(--ease)}
.social-fab__btn:hover{box-shadow:0 8px 30px rgba(28,12,4,.42)}
.social-fab__btn:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
.social-fab__btn svg{width:26px;height:26px;fill:currentColor;transition:transform .3s var(--ease)}
.social-fab__btn:hover svg,.social-fab__btn:focus-visible svg{transform:translateY(-2px)}
@media(max-width:768px){
  .social-fab{right:16px;bottom:16px;gap:10px}
  .social-fab__btn{width:48px;height:48px}
  .social-fab__btn svg{width:24px;height:24px}
}

/* ═══ PAGE HERO (compact - novosti, tainstva, etc.) ═══ */
.page-hero{padding:84px 0 20px;background:transparent;text-align:center;position:relative;overflow:hidden}
.page-hero .w{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center}
.page-hero__tag{font-family:var(--sans);font-size:.82rem;line-height:1.5;letter-spacing:.3px;color:var(--text-light2);display:block;text-align:center;text-wrap:balance;margin-bottom:10px}
.page-hero__tag-lead{font-weight:600;color:var(--text);text-transform:none}
.page-hero__tag-sep{color:var(--gold);opacity:.45;padding:0 .45em;font-weight:400;white-space:nowrap}
.page-hero__tag-status{font-weight:400;color:var(--text3);text-transform:none}
/* Full official name block in the hero (canonical name + РПЦ hierarchy) */
.page-hero__official{line-height:1.42}
.page-hero__official-lead{display:block;font-weight:600;color:var(--text);text-transform:uppercase;letter-spacing:1px;font-size:.92em}
.page-hero__official-name{display:block;color:var(--text-light2);margin-top:2px}
.page-hero__official-jur{display:block;font-size:.86em;color:var(--text3);opacity:1;margin-top:4px;line-height:1.45}
.hero__official{display:flex;flex-direction:column;align-items:center;gap:5px;margin-bottom:26px;text-align:center;animation:fadeUp .9s ease .2s both;text-shadow:0 1px 2px rgba(0,0,0,.9),0 0 10px rgba(0,0,0,.55),0 0 22px rgba(0,0,0,.4)}
.hero__official-lead{font:700 .95rem/1.2 var(--sans);text-transform:uppercase;letter-spacing:4px;color:var(--gold)}
.hero__official-name{font:500 1.02rem/1.45 var(--sans);letter-spacing:.3px;color:var(--text-light2);opacity:.95}
.hero__official-jur{font:400 .8rem/1.55 var(--sans);letter-spacing:.2px;color:var(--text-light3);opacity:.82;margin-top:3px}
@media(max-width:700px){.hero__official-lead{font-size:.72rem;letter-spacing:3px}.hero__official-name{font-size:.9rem}.hero__official-jur{font-size:.7rem}.hero__official{gap:4px;margin-bottom:16px}}
.page-hero__title{font:400 clamp(2.4rem,5vw,3.8rem)/1.05 var(--hd);color:#fff;text-shadow:0 2px 10px rgba(0,0,0,.5);margin-bottom:0;letter-spacing:0.5px}
.page-hero__sub{font:.9rem/1.5 var(--sans);color:var(--gold-text);text-shadow:0 2px 10px rgba(0,0,0,.5);margin-bottom:0}
.page-hero__back{display:inline-flex;align-items:center;gap:8px;margin-top:20px;color:var(--gold-text);text-shadow:0 2px 10px rgba(0,0,0,.5);font:.8rem/1 var(--sans);font-weight:600;letter-spacing:.3px;transition:color .25s}
.page-hero__back:hover{color:#fff}
.page-hero__back svg{width:16px;height:16px;margin-top:-1px;transition:transform .25s}
.page-hero__back:hover svg{transform:translateX(-3px)}

/* ═══ NOVOSTI - News Grid ═══ */
.news{padding:var(--sec-gap) 0 0;position:relative}
.news-section{padding:0 0 88px;background:transparent}
/* D-03. НАМЕРЕННОЕ РЕШЕНИЕ: direction:rtl здесь не опечатка и не сломанный порядок чтения.
   Сетка новостей идёт справа налево, потому что зеркалит навигацию «предыдущая/следующая»
   внутри статьи: свежее справа, как и кнопка «вперёд». Введено 56686d66 01.07.2026,
   подтверждено владельцем 19.07.2026 после того, как аудит предложил это «починить».
   ПАРНОЕ ПРАВИЛО: `.news-grid>*{direction:ltr}` ниже возвращает текст внутри карточек.
   Снять можно только ОБА сразу. Убрать одно нижнее значит перевернуть текст в карточках,
   и это будет выглядеть как поломка шрифта. Полностью: DECISIONS.md */
.news-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:28px;min-height:300px;direction:rtl}
/* HOMEPAGE (section.news): index.html renders 4 cards; the 4th shows ONLY in the 2-col tablet band, turning the 2+1 orphan row into a clean 2x2. Desktop keeps 3-in-a-row, phones keep 3 stacked. (novosti lives under .news-section - untouched.) */
.news .news-grid .card:nth-child(4){display:none}
@media(min-width:641px) and (max-width:960px){.news .news-grid .card:nth-child(4){display:flex}}
.news-grid>*{direction:ltr}
.news-grid .card{box-shadow:0 4px 18px rgba(0,0,0,.16)}
.card{display:flex;flex-direction:column;color:var(--text);border-radius:var(--r-xl);overflow:hidden;background:var(--bg-card);border:1px solid var(--border-glass);transition:transform .4s var(--ease),box-shadow .4s,border-color .4s;cursor:pointer}
.card:hover{transform:translateY(-6px);border-color:rgba(224,168,50,.15);box-shadow:0 20px 60px rgba(0,0,0,.5),0 0 40px var(--gold-glow)}
.card__fig{overflow:hidden;aspect-ratio:16/10;background:var(--bg-surface)}
.card__fig img{width:100%;height:100%;object-fit:cover;transition:transform .6s var(--ease)}
/* Per-photo focus: portrait sources cropped by the 16/10 card window (owner 18.07.2026) */
.card__fig img[src*="img_1784124294491_9qqz"]{object-position:50% 15%}
.card__fig img[src*="p21457_1b034baf"]{object-position:50% 68%}
.card:hover .card__fig img{transform:scale(1.06)}
.card__placeholder{display:flex;align-items:center;justify-content:center;width:100%;height:100%;font-size:2.5rem;color:var(--gold);opacity:.3}
.card__body{padding:22px 24px 28px;flex:1;display:flex;flex-direction:column}
.card__date{font:.65rem/1 var(--sans);text-transform:uppercase;letter-spacing:2px;color:var(--text);font-weight:600;margin-bottom:10px;display:block}
.card__title{font:400 1.25rem/1.3 var(--hd);color:var(--text);flex:1}

/* ═══ NOVOSTI - Article View ═══ */
.article-section{padding:0 0 88px;background:transparent}
/* D-11. Скрыт по умолчанию ТОЛЬКО SPA-вид статьи в novosti.html (#articleView, показывает JS).
   Запечённые /posts/*.html несут тот же класс .article-section БЕЗ id - им display:none нельзя:
   правило на классе прятало статью у прямых визитов и краулеров с 23.06 (баг найден 20.07).
   НАМЕРЕННО по идентификатору, а не по классу. Приведение к классам ради «конвенции»
   повторит месячную аварию на 887 запечённых страницах, причём на новостной странице
   она невидима: там всё выглядит правильно. Полностью: DECISIONS.md */
#articleView{display:none}
.article-wrap{max-width:800px;margin:0 auto}
.article-meta{margin-bottom:28px;padding-bottom:24px;border-bottom:1px solid var(--line)}
.article-meta time{font:.72rem/1 var(--sans);text-transform:uppercase;letter-spacing:2.5px;color:var(--text);opacity:.85;font-weight:600;display:block;margin-bottom:14px}   /* was --salmon on terracotta = 1.77:1, invisible (owner 21.07); --text at .85 ~= 4.2:1 and stays quiet */
.article-meta h1,.article-meta h2{font:400 clamp(1.8rem,3.5vw,2.6rem)/1.18 var(--hd);color:var(--text)}
.article-hero{position:relative;display:block;margin-bottom:36px;border-radius:var(--r-xl);overflow:hidden;box-shadow:0 8px 32px rgba(0,0,0,.3);border:1px solid var(--border-glass);cursor:zoom-in}
/* cap the inline main photo so tall shots don't fill the screen and the text is one scroll away; the full image is one click away in the lightbox */
.article-hero img{width:100%;height:auto;max-height:min(64vh,640px);object-fit:cover;object-position:center 22%;display:block}
/* ПОРТРЕТНАЯ АФИША. Замер по 734 обложкам на боевом: 509 из них портретные, то есть 69%,
   и все они попадали в ландшафтный бокс 798x576 с object-fit:cover. Афишу резало почти
   пополам. Отдельно больно, что у 44 постов тело пустое и обрезанная афиша была ВСЕМ
   содержанием страницы.
   Лечим шириной, а не object-fit:contain: contain оставил бы поля по бокам внутри
   рамки на 798px, то есть картинку в коробке. Узкая колонка даёт афише её собственную
   пропорцию без единого обрезанного пикселя.
   420px выбрано по геометрии, а не на глаз: при 3:4 выходит 560px высоты, при 2:3 630px,
   оба под потолком 720px, значит max-height не срабатывает и обрезки не возникает.
   Побочно чинится и растяжение: миниатюра портрета шириной около 600px (медиана замера)
   в боксе 798 растягивалась в 1.33 раза, а в колонке 420px она с запасом. */
.article-hero--portrait{max-width:min(420px,100%);margin-left:auto;margin-right:auto}
.article-hero--portrait img{max-height:min(78vh,720px);object-fit:contain;object-position:center}
.article-hero__zoom{position:absolute;right:14px;bottom:14px;width:38px;height:38px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(20,10,4,.5);color:#f4e6b8;backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);opacity:.85;transition:opacity .25s,transform .25s;pointer-events:none}
.article-hero:hover .article-hero__zoom{opacity:1;transform:scale(1.08)}
.article-hero__zoom svg{width:19px;height:19px}
.article-body{font:1.06rem/1.8 var(--sans);color:var(--text2)}
.article-body p{margin-bottom:1.3em}
.article-body p:last-child{margin-bottom:0}
.article-body img{border-radius:var(--r-lg);margin:1.5em auto;box-shadow:0 4px 20px rgba(0,0,0,.2);max-width:100%;height:auto}
.article-body a{color:var(--gold-text);text-decoration:underline;text-decoration-color:rgba(242,220,151,.35);text-underline-offset:3px;transition:text-decoration-color .25s}
.article-body a:hover{text-decoration-color:var(--gold-text)}
.article-body strong,.article-body b{color:var(--text);font-weight:600}
.article-body h2,.article-body h3,.article-body h4{font-family:var(--hd);color:var(--text);margin:1.8em 0 .8em;line-height:1.25;font-weight:700}
.article-body h2{font-size:1.8rem}
.article-body h3{font-size:1.4rem}

/* ═══ Финальный аккорд: цитата Писания в конце новости ═══
   Третий, самый весомый цитатный регистр (после «Слова Патриарха» на главной и рабочего
   blockquote в теле). Живёт СНАРУЖИ .article-body, поэтому правила .article-body blockquote
   его не трогают. Рендерится только при непустой цитате; кавычки-ёлочки и скобки ссылки
   ставит CSS - редактор хранит чистый текст. Разделитель: стрела - хризма - стрела. */
.scripture{max-width:600px;margin:52px auto 8px;padding:0;border:0;text-align:center}
.scripture-divider{display:block;width:min(300px,72%);margin:0 auto 30px;color:var(--gold);opacity:.95;line-height:0}
.scripture-divider__svg{display:block;width:100%;height:auto;overflow:visible}
.scripture__quote{
  margin:0;
  font:500 clamp(1.5rem,2.6vw,1.95rem)/1.42 var(--hd);
  color:var(--text);
  letter-spacing:.2px;
  text-wrap:balance;
  quotes:"\00ab" "\00bb";
}
.scripture__quote::before{content:open-quote}
.scripture__quote::after{content:close-quote}
.scripture__ref{
  display:block;
  margin-top:18px;
  font:600 .82rem/1 var(--sans);
  font-variant-caps:small-caps;
  letter-spacing:2.5px;
  color:var(--gold-text);
  opacity:.85;
  text-indent:2.5px;
}
.scripture__ref::before{content:"("}
.scripture__ref::after{content:")";margin-left:-2.5px}
@media (max-width:600px){
  .scripture{margin-top:40px}
  .scripture__quote{font-size:1.4rem}
  .scripture-divider{width:min(240px,80%);margin-bottom:24px}
}
.article-body h4{font-size:1.2rem}
.article-body blockquote{border-left:3px solid var(--gold);padding:16px 24px;margin:1.5em 0;background:rgba(224,168,50,.05);border-radius:var(--r);font-style:italic;color:var(--text2)}
.article-body ul,.article-body ol{margin:1em 0;padding-left:1.5em}
.article-body ul{list-style:disc}
.article-body ol{list-style:decimal}
.article-body li{margin-bottom:.5em}
.article-body figure{margin:1.5em 0}
.article-body figcaption{font:.8rem/1.4 var(--sans);color:rgba(235,224,211,0.85);text-align:center;margin-top:8px}
/* Два снимка хора, 14.08.2026. ОДНА ВЫСОТА И ПОЛНАЯ ШИРИНА ОДНОВРЕМЕННО.
   Как это устроено. Чтобы два снимка РАЗНОЙ пропорции стояли одной высоты и вместе занимали
   всю ширину, их ширины обязаны относиться как их пропорции. Во flex это делается ростом:
   flex-grow равен пропорции снимка при flex-basis 0, и тогда ширины делятся ровно в нужном
   отношении, а высоты совпадают сами, без единого фиксированного числа.
   Проверка на бумаге: 960x785 даёт 1.22293, 512x684 даёт 0.74854, сумма 1.97147. При
   контейнере 1150 и зазоре 16 это 703 и 431 пиксель, высоты 575 и 575.
   Пропорция задаётся в разметке через --ar РЯДОМ С КАРТИНКОЙ, а не здесь: она обязана
   совпадать с реальными width и height файла, и держать её надо там, где эти числа видно.
   Подмена файла другой пропорции без правки --ar сломает выравнивание, поэтому число стоит
   в одной строке с размерами.
   object-fit тут НЕ нужен и намеренно не ставится: кадры не режутся, каждый показан целиком. */
.hor-photos{display:flex;flex-wrap:wrap;gap:16px;margin:22px 0 0;align-items:flex-start}
.hor-photos__item{flex:var(--ar,1) 1 0;min-width:0;margin:0}
.hor-photos__item img{display:block;width:100%;height:auto;border-radius:10px}
/* На узком экране строка в столбец: две колонки по 40% ширины телефона нечитаемы. Порог 720
   взят по меньшему снимку: ниже него портретный кадр уходит под 260 пикселей. */
@media(max-width:720px){.hor-photos{display:block}.hor-photos__item + .hor-photos__item{margin-top:18px}}
.hor-photos figcaption{font:.8rem/1.4 var(--sans);color:rgba(235,224,211,0.85);text-align:center;margin-top:8px}
.article-body .gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin:1.5em 0}
.article-body .gallery img{border-radius:var(--r);width:100%;height:200px;object-fit:cover}
.article-body iframe{max-width:100%;margin:1.5em 0;border-radius:var(--r-lg)}
.article-nav{margin-top:48px;display:flex;align-items:stretch;border:1px solid var(--border-glass);border-radius:var(--r-xl);background:rgba(20,12,6,.045);overflow:hidden}
.article-nav a,.article-nav span{flex:1;display:flex;align-items:center;gap:10px;padding:18px 26px;font:500 .92rem/1.25 var(--sans);letter-spacing:.3px;min-height:26px}
.article-nav a{color:#F2DCA0;transition:background .25s var(--ease)}  /* var(--gold-light) давал 3.74:1, стало 4.82:1 */
.article-nav a:hover{background:rgba(255,240,220,.07)}
.article-nav .nav-prev{justify-content:center}
.article-nav .nav-next{justify-content:center;text-align:center}
a.nav-prev+a.nav-next{border-left:1px solid var(--border-glass)}
.article-nav svg{width:16px;height:16px;flex-shrink:0;transition:transform .25s var(--ease)}
.nav-prev:hover svg{transform:translateX(-3px)}
.nav-next:hover svg{transform:translateX(3px)}

/* Load-more + all-news share the .article-nav bar language: full-width bars */
.load-more, .btn-allnews, .btn-pdf{
  display:flex;align-items:center;justify-content:center;gap:10px;width:100%;box-sizing:border-box;
  padding:18px 26px;min-height:26px;
  border:1px solid var(--border-glass);border-radius:var(--r-xl);background:rgba(20,12,6,.045);
  font:500 .92rem/1.25 var(--sans);letter-spacing:.3px;color:var(--gold-text);text-decoration:none;
  cursor:pointer;transition:background .25s var(--ease)}
.load-more:hover, .btn-allnews:hover, .btn-pdf:hover{background:rgba(255,240,220,.07)}
.btn-allnews svg{width:16px;height:16px;flex-shrink:0;transition:transform .25s var(--ease)}
.btn-allnews:hover svg{transform:translateX(-3px)}
/* PDF pill: capped width on desktop, badge icon stays put on hover (a file is not an arrow) */
.btn-pdf{max-width:420px;margin:0 auto;min-height:48px;font-size:.95rem;padding:14px 26px}
.btn-pdf svg,.btn-pdf img{flex-shrink:0;display:block}
/* baked post hero is now a link (opens full photo in a new tab) - keep the block layout the old <div> had */
a.article-hero{display:block;cursor:zoom-in}
@media(max-width:960px){.btn-pdf{max-width:none}}

/* ═══ NOVOSTI - Loading Spinner ═══ */
.loading{text-align:center;padding:120px 0;color:rgba(235,224,211,0.85);font:.9rem/1 var(--sans)}
.loading::after{content:'';display:block;width:32px;height:32px;margin:20px auto 0;border:2px solid var(--line);border-top-color:var(--gold);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@keyframes fadeIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
.news-grid .card{animation:fadeIn .5s var(--ease) both}
.news-grid .card:nth-child(3n+1){animation-delay:.0s}
.news-grid .card:nth-child(3n+2){animation-delay:.06s}
.news-grid .card:nth-child(3n){animation-delay:.12s}

/* ═══ RASPISANIE - Month Header ═══ */
.month-hdr{background:transparent;padding:0 0 0;text-align:center;position:relative;z-index:10}
.month-top{display:flex;flex-direction:column;align-items:center;gap:20px;margin-bottom:8px}
.month-nav{display:flex;align-items:center;justify-content:center;gap:32px;margin-bottom:0}
.month-nav button{background:rgba(212,168,67,.18);border:1px solid rgba(255,240,220,.4);color:#fff;width:36px;height:36px;border-radius:50%;cursor:pointer;font-size:1.1rem;transition:all .25s;display:flex;align-items:center;justify-content:center}
.month-nav button svg{width:16px;height:16px;display:block}
.month-nav button:hover{background:rgba(255,255,255,.1);border-color:#fff}
.month-nav button:disabled{opacity:.2;cursor:default}
.month-nav__title{font:400 clamp(1.6rem,3vw,2.4rem)/1 var(--hd);color:#fff;text-shadow:0 2px 10px rgba(0,0,0,.5);min-width:220px;letter-spacing:.5px;text-align:center}

/* ═══ RASPISANIE - PDF schedule block ═══ */
/* Moved verbatim from the inline <style> in raspisanie.html (a <style> inside a div is invalid HTML). */
.sch-pdf{text-align:center;margin:28px auto 0;max-width:680px}
.sch-pdf--top{margin:0 auto 14px}
.sch-pdf details{margin-top:14px;color:var(--text3);font:.88rem/1.6 var(--sans)}
.sch-pdf summary{cursor:pointer;display:inline-block}
.sch-pdf summary:hover{color:var(--gold)}
.sch-pdf ul{list-style:none;margin:8px 0 0;padding:0}
.sch-pdf ul a{color:inherit;text-decoration:underline;text-underline-offset:3px}
.sch-pdf ul a:hover{color:var(--gold)}

/* ═══ RASPISANIE - Legend ═══ */
.legend{display:flex;flex-wrap:wrap;gap:14px;justify-content:center;padding:0;margin:18px auto 0}
.legend__i{display:flex;align-items:center;gap:5px;font:.65rem/1 var(--sans);color:rgba(255,255,255,.85)}
/* .legend__dot и четыре его модификатора удалены вместе с прежней легендой из
   четырёх пунктов: разметка их больше не ставит. Не воскрешать, олива «праздник»
   и Страстная выведены из обихода. */

/* ═══ RASPISANIE - Calendar Grid ═══ */
.cal{padding:12px 0 48px}
.cal__weekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:1px;margin-bottom:1px}
.cal__wd{text-align:center;font:.6rem/1 var(--sans);text-transform:uppercase;letter-spacing:2px;color:var(--parch);font-weight:600;padding:10px 4px}
.cal__wd:last-child{color:var(--gold-text)}
/* РЯД РОВНО 200px, не minmax(128,auto). Ряд по содержимому означал, что высота
   месяца зависит от самого длинного названия в нём: в августе ряды выходили от
   131 до 242px, и сетка читалась рвано. 200px это почти квадрат при колонке 169px
   и одно и то же число на любом экране. Цена известна и принята: в августе один
   день из 31 (14-е, два богослужения плюс длинное название) обрежется снизу.
   Высоту задаём СЕТКЕ, а не .cel: ниже 960px .cal__grid превращается во flex-ленту,
   где grid-auto-rows молча не действует, и мобильная агенда остаётся по содержимому.
   196px. Было 215, пока число занимало собственную строку над названием. С 04.08
   число живёт внутри абзаца, блок служб начинается на 71px вместо 91, и те же 20px
   ушли из высоты ряда. 196 это минимум, при котором на живом августе не обрезается
   ни один блок служб при слоте названия в три строки. */
.cal__grid{margin-bottom:26px;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));grid-auto-rows:196px;gap:2px;background:rgba(212,168,67,.3);border-radius:var(--r-lg);overflow:hidden;box-shadow:0 4px 24px rgba(44,26,14,.25);border:2px solid rgba(212,168,67,.4)}
/* Календарь не сжимается уже 1200px. При семи колонках более узкая ячейка перестаёт
   вмещать название праздника, и месяц превращается в лес многоточий, ради борьбы
   с которым и затевались четыре строки. Вместо сжатия даём горизонтальную прокрутку.
   Шапка «Пн...Вс» лежит ВНУТРИ той же прокрутки, иначе дни недели разъедутся с
   колонками. Ниже 960px сетки нет вовсе, там лента-агенда, и прокрутка не нужна. */
.cal__scroll{overflow-x:auto;padding-bottom:10px;scrollbar-width:thin;scrollbar-color:rgba(212,168,67,.5) transparent}
@media(min-width:961px){.cal__scroll .cal__weekdays,.cal__scroll .cal__grid{min-width:1200px}}
/* ЧЕТЫРЕ ПОДСВЕЧЕННЫХ УГЛА, расстановка «диагональ» (решено 03.08.2026):
     верх-лево   цвет облачения        низ-право  цвет облачения
     верх-право  воскресенье           низ-лево   «сегодня»
   Углы облачения стоят ПО ДИАГОНАЛИ намеренно. Два угла на одной стороне при
   радиусе 66% не читаются как два угла: до середины общей кромки доходит 96%
   плотности у вертикальной пары и 75% у горизонтальной, то есть получается
   сплошная полоса. По диагонали до противоположного конца доходит 20%, и метка
   остаётся меткой. Замерено на всех 12 расстановках, отрисованных браузером.
   Радиус 66% у всех четырёх углов: одно число на все роли и все цвета.
   Порядок слоёв: сначала гости (воскресенье и «сегодня»), под ними житель
   (облачение), под ним подложка белого дня, в самом низу бумага. */
.cel{--bg-today:linear-gradient(transparent,transparent);--bg-sun:linear-gradient(transparent,transparent);--bg-vtl:linear-gradient(transparent,transparent);--bg-vbr:linear-gradient(transparent,transparent);--bg-lift:linear-gradient(transparent,transparent);--bg-past:linear-gradient(transparent,transparent);background:var(--bg-today),var(--bg-sun),var(--bg-vtl),var(--bg-vbr),var(--bg-past),var(--bg-lift),#F5EDE0;padding:8px 6px 10px;min-height:110px;height:100%;display:flex;flex-direction:column;transition:background .2s;scroll-margin-top:150px}
/* .cel:hover removed per user request */
/* Была #2f5537, чистый зелёный: перевес G над R равен 38. Фильтр .cel--past до пустых
   ячеек не достаёт, это другой класс, и на сереющей сетке они звучали единственным
   насыщенным пятном, причём в левом верхнем углу, куда взгляд падает первым. Замена
   подобрана с ТОЙ ЖЕ светимостью 0.0738, чтобы вес сетки не поехал. */
/* D-20. Цвет подобран по СВЕТИМОСТИ, а не взят из палитры, и это намеренно.
   Литерал вне палитры выглядит недосмотром и «выносится в токен» одной правкой.
   Полностью: DECISIONS.md */
.cel--empty{background:#504C48;min-height:0;pointer-events:none}
a.cel{text-decoration:none;color:inherit;cursor:pointer}
@media(hover:hover){a.cel:hover{outline:2px solid var(--gold);outline-offset:-3px}}   /* hover-only devices: no bg. The bg shorthand wiped the cream layers, so on a touch device the sticky :hover left after tapping a day (opens azbyka) bled the terracotta body through -> brown faded cell */
a.cel:focus-visible{outline:2px solid var(--gold);outline-offset:-3px}
/* D-12. ПРИНЯТАЯ СЛАБИНА КОНТРАСТА, решение владельца 03.08.2026, не переоткрывать.
   На фиолетовой заливке воскресений Великого поста #8B3A2A даёт 3,67 при пороге 4,5.
   Это самая вероятная машинная находка следующего аудита: готовый FAIL по WCAG с точным
   числом и точным селектором. Она обсуждена и оплачена: касается примерно шести дней в году,
   остальные цвета вытянуты правкой палитры. reports/VEST_CORNERS_DECIDED.md: «не
   переоткрывать и не улучшать». Объявлено ДВАЖДЫ, второй раз в @media(max-width:960px):
   починка одного места разрушит согласованную палитру воскресенья только на половине
   устройств, что хуже, чем оба состояния сразу. Полностью: DECISIONS.md */
.cel--sun{--bg-sun:radial-gradient(circle at top right, rgba(224,107,86,.6) 0%, transparent 66%)}
.cel--sun .cel__num{color:#8B3A2A}
/* ОЛИВА «праздник», СТРАСТНАЯ и ПАСХА выведены из обихода: их углы занял цвет
   облачения, который несёт то же и больше. Классы ОСТАВЛЕНЫ, потому что на них
   висят бейдж и начертание номера, и потому что раскладка их по-прежнему ставит.
   Убрана ровно заливка. Не возвращать без решения владельца. */
.cel--pascha .cel__num{color:#8B6A20;font-size:1.3rem}
.cel--today{--bg-today:radial-gradient(circle at bottom left, rgba(212,168,67,.55) 0%, transparent 66%);box-shadow:inset 0 0 0 2px var(--gold);z-index:1}
/* Прошедший день гасим ОБЕСЦВЕЧИВАНИЕМ, а не прозрачностью. Причина замера, 08.08.2026:
   ячейка кремовая #F5EDE0, и opacity:.72 делала её полупрозрачной, отчего сквозь неё
   проступал зелёный фон страницы #3F6B45. Смесь давала #C2C9B5, болотный оттенок, из-за
   которого палитра страницы разваливалась. Побочно страдал и контраст: текст 3.35:1,
   бейдж праздника 3.75:1, оба ниже порога.
   grayscale оставляет ячейку НЕПРОЗРАЧНОЙ, поэтому зелёному неоткуда проступить: фон
   становится нейтральным #E4E4E4, текст 8.54:1, бейдж 5.58:1. Обесцвечивание заодно
   само снимает цвет облачения с прошедших дней, ради чего раньше стояло отдельное
   правило .cel--past.cel--vest. */
/* ═══ ПРОШЕДШИЙ ДЕНЬ: старая фотография (photo1.1, выбрано владельцем 09.08.2026) ═══
   Три задачи разведены по трём средствам, и смешивать их обратно нельзя:
     ТОН      filter grayscale+sepia+saturate, единственное, что достаёт до ВСЕГО разом,
              включая плашки священников, бейджи и текст. Без него получается просто
              тёмная бумага с полноцветным содержимым, проверено и отвергнуто.
     ГЛУБИНА  слой --bg-past. grayscale светимость почти не меняет (его матрица стягивает
              каналы к взвешенному среднему, которое и ЕСТЬ светимость), поэтому гасить им
              нельзя. Прежнее brightness(1.01) поверх grayscale делало прошедший день на
              2.2% СВЕТЛЕЕ активного: это и было то самое свечение.
     ЦВЕТ     оттенок облачения сначала осветляется белым и только потом кладётся почти
              непрозрачно. Светлый насыщенный оттенок переживает grayscale не хуже тёмного,
              а угол при этом не темнеет: при прямом подъёме альфы до 80% красный и
              фиолетовый углы топили текст до 2.96:1.
   Порядок функций фильтра обязателен: saturate ПОСЛЕ sepia усиливает то, что уцелело;
   до неё он усилил бы исходный цвет, который сепия всё равно перекрасит.
   grayscale .88 и sepia .38 подобраны ПАРОЙ: зелёное облачение самое частое в году, и на
   более слабой сепии канал G выходил выше остальных, то есть ячейка буквально зеленела.
   Замер: было #CCD49F (G +8), стало #DDD4A9 (G -9).
   Контроль: текст 6.88:1, худший угол по всем семи облачениям 5.19:1, худшая плашка 4.94:1.
   ПРАВИЛО ОБЪЯВЛЕНО ДВАЖДЫ, второй раз в @media(max-width:960px). Править только одно
   место нельзя: на телефонах побеждает второе, а это вся целевая аудитория. */
.cel--past{filter:grayscale(.88) sepia(.38) saturate(1.7);--bg-past:linear-gradient(rgba(62,47,33,.44),rgba(62,47,33,.44))}
.cel--past.cel--vest{--bg-vtl:radial-gradient(circle at top left, color-mix(in srgb, color-mix(in srgb, var(--vest) 55%, #FFFFFF) 90%, transparent) 0%, transparent 66%);--bg-vbr:radial-gradient(circle at bottom right, color-mix(in srgb, color-mix(in srgb, var(--vest) 55%, #FFFFFF) 90%, transparent) 0%, transparent 66%)}
.cel--past.cel--sun{--bg-sun:radial-gradient(circle at top right, color-mix(in srgb, color-mix(in srgb, #E06B56 55%, #FFFFFF) 90%, transparent) 0%, transparent 66%)}
/* белый день подсвечивает себя через --bg-lift, а тот лежит ПОД вуалью: снимаем подъём */
.cel--past.cel--v-white{--bg-lift:linear-gradient(transparent,transparent)}
/* чернила темнее: на цветном углу --brown давал 3.9-4.2:1, #2C1A0E даёт 5.2:1 */
.cel--past .cel__num,.cel--past.cel--sun .cel__num,.cel--past.cel--pascha .cel__num,.cel--past .cel__feast,.cel--past .cel__svc-group>span,.cel--past .cel__svc b{color:#2C1A0E}
.cel--past .priest-tag--efrem{background:rgba(89,82,80,0.85)}
.cel--past .priest-tag--nikolay{background:rgba(92,93,95,0.85)}
.cel--past .priest-tag--viktor{background:rgba(47,49,48,0.92)}
.cel--past .priest-tag--vladimir{background:rgba(105,102,95,0.98)}
.cel--past .priest-tag--duhovenstvo{background:rgba(95,94,93,0.9)}

/* .cel__head удалён из разметки 04.08: число и бейдж переехали внутрь .cel__feast.
   Правило оставлено пустым намеренно, чтобы было видно, что класс выведен из обихода. */
/* Число живёт ВНУТРИ абзаца с названием праздника, поэтому у него нет собственной
   строки и нет flex-роли. line-height обязан наследоваться от абзаца: со своим 1
   первая строка выходила ниже остальных, и слот в три строки переставал быть
   ровно тремя. Правое поле 0.4em это пробел между датой и началом названия. */
.cel__num{font:700 1.05rem var(--hd);line-height:inherit;color:var(--brown);font-variant-numeric:lining-nums;margin-right:.4em;vertical-align:baseline}
/* СЛОТ ПОД НАЗВАНИЕ ФИКСИРОВАННЫЙ, И ЭТО НЕСУЩАЯ ЧАСТЬ МАКЕТА, А НЕ ОФОРМЛЕНИЕ.
   Высота ячейки складывается из шапки с числом, слота названия и блока служб.
   Первые два постоянны, поэтому блок служб начинается на ОДНОЙ И ТОЙ ЖЕ высоте
   во всех ячейках месяца, и плашки священников со временем стоят одной строкой
   через весь календарь. Стоит сделать слот резиновым, как выравнивание рассыпается:
   у каждого дня службы начинаются на своей высоте. Так и вышло 03.08, когда здесь
   стоял -webkit-line-clamp:4 при min-height:2.5em, то есть слот гулял от 2.5 до
   5.12em. Поэтому height, а не min-height: слот обязан быть ровно тремя строками.
   Почему три. Замерено на живом августе: при двух обрезалось 13 названий из 31,
   при трёх четыре, при четырёх ни одного. Но четыре строки требуют ряда 245px,
   и ячейка 180x245 перестаёт быть квадратной. Три строки живут в ряду 215px при
   ширине 180px, ни один блок служб не обрезается, и это принятый размен.
   flex-shrink:0 ТУТ ТОЖЕ НЕСУЩИЙ, одного height мало. Ячейка это flex-колонка, и
   на днях с двумя богослужениями она переполнялась, а flex по умолчанию ужимал
   слот с 57px до 48px, то есть выравнивание рассыпалось ровно там, где оно нужнее
   всего. Замерено: без него слот принимал два значения, с ним одно. */
.cel__feast{font:italic 500 .92rem/1.28 var(--hd);color:#5C3A28;margin-bottom:6px;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;height:calc(3 * 1.28em);flex-shrink:0}
/* Бейдж стоит в той же строке, что дата и начало названия, поэтому ни flex, ни
   max-width:100% ему больше не нужны: он просто слово в абзаце. */
.cel__badge{display:inline-block;white-space:nowrap;vertical-align:middle;font:.55rem/1.2 var(--sans);text-transform:uppercase;letter-spacing:.8px;padding:2px 5px;border-radius:3px;font-weight:700;margin:0 .4em 0 0;text-align:center}
.cel__badge--holy{background:#A04030;color:#fff}
.cel__badge--pascha{background:var(--gold);color:#2C1A0E}
.cel__badge--feast{background:#5C6520;color:#F7F1E4}  /* было #6E7A24 = 4.17:1 при 8.8px bold, стало 5.59:1 */
.cel__badge--victory{background:rgba(74,120,74,.15);color:#3A6A3A}
/* flex-shrink:0 по той же причине, что и у слота названия: иначе на плотных днях
   flex ужимает блок служб, плашки священников уезжают вверх и перестают стоять
   в одну линию с соседними днями. Переполнение уходит в overflow:hidden ячейки,
   и это правильное направление отказа: лучше срезать хвост, чем сдвинуть всё. */
.cel__svc{display:flex;flex-direction:column;gap:10px;flex-shrink:0}
.cel__svc-group{display:flex;flex-direction:column;gap:1px}
.cel__svc-group > span{font:.74rem/1.3 var(--sans);color:#5C3A28;display:block}
.cel__svc b{color:#8B3A2A;font-weight:600;font-variant-numeric:tabular-nums;display:inline-block;min-width:30px;margin-right:3px}
.priest-tag{display:inline-block;padding:3px 6px;font:500 .6rem/1 var(--sans);text-transform:uppercase;letter-spacing:.8px;border-radius:4px;color:#fff}
.priest-tag--efrem{background:rgba(160,64,48,.85)}
.priest-tag--viktor{background:rgba(30,56,34,.92);border-color:rgba(232,198,110,.35)}
.priest-tag--nikolay{background:rgba(74,96,120,.85)}
.priest-tag--vladimir{background:rgba(138,100,16,.98);color:#fff;font-weight:700}
/* Семейство .priest-tag это цветовой код по служащему, и «духовенство» единственное в нём
   было тёплым серым из старой палитры, а не самостоятельным цветом. Нейтральный серый той
   же светимости: белый текст 6.72:1 против 6.44:1, то есть контраст даже вырос. */
.priest-tag--duhovenstvo{background:rgba(88,92,86,.9)}
/* Priest shown inline on its own service line (morning=1st, evening=2nd) - original gold tag size */
.cel__svc-group > span{flex-wrap:wrap}
.cel__svc-priest{display:flex;justify-content:center;margin:0 0 1px}
/* Per-day background image (data-driven; a translucent cream veil keeps the text legible) */
.cel--has-bg{position:relative}
/* --bg-pascha, --bg-holy и --bg-feast НЕ ОБЪЯВЛЕНЫ НИГДЕ (grep по всему проекту даёт ноль),
   а одна необъявленная var() делает недействительным ВСЁ сокращение background целиком, и
   свойство откатывается к initial. То есть фотография дня не рисовалась вообще: проверено
   на боевом сайте, 18 июля несёт --cel-bg с реальным файлом, а ::before отдаёт
   background-image:none. Стек приведён к тому же набору переменных, что и у .cel:502. */
.cel--has-bg::before{content:"";position:absolute;inset:0;z-index:0;background:var(--bg-today),var(--bg-sun),var(--bg-vtl),var(--bg-vbr),var(--bg-past),var(--bg-lift),linear-gradient(rgba(245,237,224,.52),rgba(245,237,224,.78)),var(--cel-bg) center/cover no-repeat}
.cel--has-bg>*{position:relative;z-index:1}
.cel__dow{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}   /* было display:none. Теперь обрезано, а не спрятано: слово облачения должно доходить до экранного диктора на десктопе и печататься; из display:none поддерево не читается вообще. Агенда <=960px разворачивает его обратно (:576). */

/* ═══ RASPISANIE - Цвет облачения (#88) - ГЕОМЕТРИЯ ═══
   Носитель цвета - левая вкладная лента, а не заливка ячейки. Это измерено, а не выбрано:
   основа ячейки кремовая #F5EDE0, поверх неё белый даёт 1.2:1 (не видно вовсе), красный
   выцветает в лососевый, фиолетовый в пыльно-сиреневый - четыре цвета из семи как заливка
   не выражаются. Лента непрозрачная, в полную насыщенность, геометрия у всех семи одна,
   меняется только тон; внутренняя волосяная линия держит светлые цвета.
   Три ловушки, каждая проверена:
     ::after, а НЕ ::before - ::before занят .cel--has-bg (день с фотографией, :480),
       поэтому ленте нужен z-index:2, чтобы пережить такой день;
     слой фона .cel НЕ трогаем - он записан дословно ДВАЖДЫ (:443 и :480);
     лента НЕ через box-shadow - inset-кольцо «сегодня» (:455) им уже занято, а box-shadow
       между правилами не складывается: лента либо проиграет кольцу, либо сотрёт его.
   ГЕОМЕТРИЯ живёт здесь, ЦВЕТ - в блоке .cel--v-* ниже. Не смешивать. */
/* Отступ ТОЛЬКО у дней с лентой: лента занимает 5..10px, тексту нужен зазор.
   На .cel вообще этого делать нельзя - .cel__feast обрезается по двум строкам
   (line-clamp + overflow:hidden), и лишние 7px молча укоротили бы названия
   праздников во ВСЕХ месяцах, включая те, где цвет не проставлен. */
/* Отступ слева 17px ВОЗВРАЩЁН по просьбе владельца 03.08. Он появился когда-то
   под ленту, но остаётся нужен и без неё: угол облачения теперь стоит в верх-лево,
   ровно под номером дня и началом строки, и 17px уводят текст из самой плотной
   части заливки. Ставится ТОЛЬКО дням с цветом, как и раньше: на .cel вообще
   этого делать нельзя, .cel__feast обрезается по двум строкам, и лишние 17px
   молча укоротили бы названия праздников в месяцах, где цвет не проставлен.
   ОТМЕНЕНО 03.08 тем же владельцем: боковые поля сведены к минимуму, 6px с обеих
   сторон у ВСЕХ ячеек. Отдельный отступ у цветных дней снят, иначе «минимум» не
   получается. Ленте он по-прежнему нужен, поэтому живёт теперь только в блоке
   @supports ниже, где лента и рисуется. */
.cel--vest{position:relative}
/* Цвет облачения = ДВЕ УГЛОВЫЕ ЗАЛИВКИ, верх-лево и низ-право. Та же формула,
   что у воскресенья и «сегодня»: плотно в самом углу, прозрачно к середине,
   две остановки. Ни линии, ни кромки, ни border-radius: дуга, которую видно,
   это просто место, где заливка кончилась.
   ЛЕНТЫ БОЛЬШЕ НЕТ, и padding-left:17px вместе с ней: заливка текст не сдвигает,
   поэтому названия праздников снова получают полную ширину ячейки.
   color-mix НУЖЕН, потому что день хранит КЛЮЧ, а палитра приезжает из админки
   готовыми hex: превратить hex в тройку для rgba() средствами CSS нельзя, а
   color-mix берёт --vest как есть и остаётся редактируемым из админки. */
.cel--vest{--bg-vtl:radial-gradient(circle at top left, color-mix(in srgb, var(--vest) 45%, transparent) 0%, transparent 66%);--bg-vbr:radial-gradient(circle at bottom right, color-mix(in srgb, var(--vest) 45%, transparent) 0%, transparent 66%)}
/* Белое светлее бумаги, и заливкой белым по крему его не показать ни при какой
   плотности. Поэтому у белого дня светлеет САМА БУМАГА ячейки. Слой стоит НИЖЕ
   терракоты и золота, иначе воскресенье и «сегодня» на белом дне выцветают. */
.cel--v-white{--bg-lift:linear-gradient(#FFFCF6,#FFFCF6)}
/* Движки без color-mix (Safari до 16.2): без этого блока цвет облачения пропал бы
   молча. Откат на прежнюю ленту слева, вместе с её отступом. */
@supports not (color: color-mix(in srgb, red 45%, transparent)){
  /* Ленте нужны свои 17px: она садится ровно в них. Базовые 6px её не вмещают. */
  .cel--vest{padding-left:17px}
  .cel--vest::after{content:'';position:absolute;left:5px;top:9px;bottom:9px;width:5px;border-radius:3px;background:var(--vest,transparent);box-shadow:inset 0 0 0 1px var(--vest-key,rgba(44,26,14,.22));z-index:2;pointer-events:none}
}
/* Отдельное правило для дней с лентой облачения больше не нужно: grayscale на .cel--past
   обесцвечивает ленту вместе со всей ячейкой, что и требовалось. Оставлено пустым намеренно,
   чтобы было видно, что правило выведено из обихода 08.08.2026, а не потеряно. */

/* ═══ RASPISANIE - Цвет облачения (#88) - ЦВЕТ ═══
   Каждая строка задаёт только пользовательские свойства и ничего больше.
   Значения ПРЕДВАРИТЕЛЬНЫЕ: подобраны против кремовой ячейки #F5EDE0 и будут перенастроены
   под тёмно-зелёную тему. Механизм при этом не меняется: день хранит КЛЮЧ, а не hex,
   поэтому перенастройка - правка семи значений, а не миграция всех введённых месяцев.
   --vp-* приходят из палитры админки (:root, инжектится в raspisanie.html).
   Белый светлее фона - единственный в наборе, у кого есть этот признак; его держит
   ключевая линия #8E7B5E (4.08:1 к белому, 3.51:1 к крему).
   Чёрный никогда не #000: тёплые чернила #241E1B плюс золотая волосяная линия #8B6A20 -
   это и есть постное облачение с галуном, и это же отличает «чёрное облачение» от
   «ячейка не загрузилась». Золото здесь глубже акцентного --gold #D4A843 (тот даёт 1.91:1
   к крему и как сплошная метка непригоден) и стоит только на праздниках. */
.cel--v-gold{--vest:var(--vp-gold,#FFCF40)}
.cel--v-white{--vest:var(--vp-white,#FFFFFF);--vest-key:#8E7B5E}
.cel--v-blue{--vest:var(--vp-blue,#75DAFF)}
.cel--v-red{--vest:var(--vp-red,#F03B35)}
.cel--v-green{--vest:var(--vp-green,#2FC439)}
.cel--v-purple{--vest:var(--vp-purple,#B343D9)}
/* Чёрное единственное из семи облачений топило текст: угол 45% от #1E1E1E даёт #949089,
   и --brown на нём стоит 4.23:1, то есть НЕ проходит порог уже на активном дне. Гашение
   прошедших дней тут ни при чём, дефект наследственный. Лечим не цветом, а плотностью
   угла: 45% -> 32% даёт #B0ABA2 и 5.87:1. Ключевая кромка --vest-key не трогается, она
   не фон, а линия, и именно она несёт опознание чёрного облачения. */
.cel--v-black{--vest:var(--vp-black,#1E1E1E);--vest-key:#8B6A20}
.cel--v-black.cel--vest{--bg-vtl:radial-gradient(circle at top left, color-mix(in srgb, var(--vest) 32%, transparent) 0%, transparent 66%);--bg-vbr:radial-gradient(circle at bottom right, color-mix(in srgb, var(--vest) 32%, transparent) 0%, transparent 66%)}

/* Легенда облачений: миниатюра настоящей метки, читающая ТЕ ЖЕ свойства, что и ячейки,
   поэтому разойтись с календарём она не может. Кремовая подложка не украшение: фон
   страницы тёмный, и чёрная лента на нём без подложки нечитаема. */
.legend--vest{margin-top:10px}
/* Образец легенды это НАСТОЯЩАЯ ячейка в миниатюре: та же кремовая бумага, те же
   углы, та же формула заливки и те же переменные --vest и --bg-lift. Поэтому
   разойтись с календарём легенда не может в принципе: перекрасили палитру в
   админке - образец перекрасился сам. Проценты в градиенте отмеряются от размера
   элемента, поэтому на 20px угол выглядит так же, как на ячейке в 128px. */
/* Образец залит ЦЕЛИКОМ и в полную силу, а не углом на кремовой бумаге: в ячейке
   цвет разведён до 45% и на образце 14px такая же бледная заливка не различалась
   бы между семью цветами. Образец называет цвет, а ячейка его показывает.
   Цвет берётся из --vest, то есть из тех же .cel--v-*, куда приезжает палитра
   админки: перекрасили палитру, легенда перекрасилась сама.
   Тёмная волосяная линия внутри нужна белому: без неё белый квадрат на тёмно-
   зелёном поле теряет края и читается как дырка. */
.legend__sw{width:14px;height:14px;border-radius:3px;flex:0 0 auto;
  background:var(--vest,transparent);box-shadow:inset 0 0 0 1px rgba(44,26,14,.35)}
.legend__sw--sun{background:#E06B56}
.legend__sw--today{background:var(--gold)}

/* ═══ RASPISANIE - Info Box ═══ */
.info{background:rgba(245,237,224,.85);border:1px solid rgba(212,168,67,.3);border-radius:var(--r-lg);padding:24px 28px;margin-top:8px;backdrop-filter:blur(12px)}
.info h3{font:600 1.1rem/1.2 var(--hd);color:var(--brown);margin-bottom:10px}
.info p{font:.82rem/1.55 var(--sans);color:#5C3A28;margin-bottom:5px}
.info p:last-child{margin-bottom:0}
.info a{color:#8B3A2A;font-weight:600}

/* ═══ RESPONSIVE ═══ */
@media(max-width:1120px){
/* Было двумя объявлениями подряд: верхнее задавало justify-content:center и его молча
   перебивало нижнее. position:relative жил ТОЛЬКО в верхнем и обязан был переехать. */
.hdr__row{display:flex;justify-content:space-between;position:relative}
.hdr__logo{justify-self:auto}
/* МЕНЮ ПРИКЛЕЕНО К ШАПКЕ, 14.08.2026. Было position:fixed с жёстким top:64px, и оно
   ОТСТАЛО: 21.06.2026 коммит 79d13267 ужал ряд шапки с 56 до 48 пикселей, а число 64
   осталось. Замер до правки: зазор 15 пикселей, сужение по 13 с каждой стороны, панель
   317 против шапки 343. Меню читалось отдельной плашкой, а не продолжением шапки.
   top в ПРОЦЕНТАХ намеренно: жёсткое число отстанет снова при следующей правке высоты.
   Привязка к .hdr__row, у которого position:relative объявлен в этом же диапазоне.
   backdrop-filter УБРАН, а не подкручен: .hdr выше по дереву несёт свой backdrop-filter и
   образует Backdrop Root, поэтому вложенный фильтр берёт пустую подложку и не работает
   ВООБЩЕ. Проверено A/B: при .hdr{backdrop-filter:none} размытие оживает. Оставлять
   мёртвое свойство хуже, чем убрать: оно выглядит работающим. Вместо него фон поднят до
   .995, и текст страницы больше не просвечивает резкими буквами. */
.hdr__nav{display:none;position:absolute;top:calc(100% + 1px);left:-1px;right:-1px;bottom:auto;background:rgba(18,38,24,.995);flex-direction:column;padding:12px 16px;gap:2px;border:1px solid rgba(255,240,220,.12);border-top:0;border-radius:var(--r-xl);border-top-left-radius:0;border-top-right-radius:0;box-shadow:0 14px 34px rgba(10,24,14,.34);z-index:250;animation:navSlide .25s ease-out}
body.nav-open .hdr{border-bottom-left-radius:0;border-bottom-right-radius:0}
@keyframes navSlide{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}
.hdr__nav.open{display:flex}
/* body.nav-open{overflow:hidden} removed to fix width jump */
/* opacity:.8 снят 14.08.2026: приглушение шло ДВАЖДЫ, альфой в цвете и здесь, и вместе
   они съедали треть контраста ни за чем. Источник приглушения теперь один, альфа цвета.
   Пункты 5.61 -> 7.94:1. Отступ поднят до 15px по вертикали: зона нажатия была 38 при
   норме 44. */
.hdr__nav a{font-size:.9rem;padding:15px 8px;width:100%;text-align:center}
/* Признак раскрытого состояния. Класс и aria-expanded уже вешает nav.js, в CSS под них
   не было НИ ОДНОГО правила. Смещение 7px посчитано, а не подобрано: полоски стоят на
   y 29, 36 и 43 при высоте 2, то есть шаг ровно 7, и крайние сходятся точно на средней. */
.hdr__burger span{transform-origin:center;transition:transform .25s var(--ease),opacity .2s}
.hdr__burger[aria-expanded="true"] span{background:var(--gold)}
.hdr__burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.hdr__burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.hdr__burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}
.hdr__burger{display:flex;position:absolute;right:24px}
/* TABLET HAMBURGER STATE ALIGNMENTS (PROJECT BASE RULE: Tablet UI shifts at 1120px) */
.foot{text-align:center}
.foot__grid .hdr__logo, .foot__social{justify-content:center}
.legend{text-align:center}
.month-top{flex-direction:column;align-items:center;justify-content:center;gap:20px;margin-bottom:8px}
/* Visually perfectly center 'На главную' by offsetting the SVG arrow */
.page-hero__back{transform:translateX(-8px)}
}
@media(max-width:768px){
.hs{max-width:100%}
.hs__grid{grid-template-columns:1fr;row-gap:16px}
.hs__day{padding:14px}
}
@media(max-width:960px){
.foot__grid{grid-template-columns:1fr;gap:36px}
.word__inner{grid-template-columns:1fr;max-width:680px;margin-left:auto;margin-right:auto;text-align:center}
.word__photo{max-width:280px;margin:0 auto}
.word__content{text-align:center}
.news-grid{grid-template-columns:repeat(2,1fr)}
.article-body .gallery{grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}
}
/* Tablet + mobile hero: no Ken Burns zoom (show the widest view), cap the image to the viewport so the
   landscape shot is not stretched into a sliver over the tall content, and lock focus to the lit right side (bell tower). */
@media(max-width:1120px){
.hero{min-height:auto}
.hero__bg{animation:none!important;transform:none!important;top:0;bottom:0;height:100%;object-position:80% 42%}
}
@media(max-width:640px){
.w{padding:0 16px}
.hero{min-height:auto;flex-direction:column;justify-content:flex-start;align-items:center}
.hero__bg{object-position:84% 40%}
.hero__title{font-size:clamp(1.8rem,7.2vw,2.35rem);line-height:1.07;margin-bottom:16px}
.hero__inner{padding-bottom:24px;padding-top:80px;gap:20px}
.hero__tag{font-size:.66rem;letter-spacing:3.5px;margin-bottom:14px}
.hero__addr{font-size:.95rem}
.hs{padding:20px 20px 10px}
.hs > .block-head{margin:-20px -20px 0}
.block-card{padding:20px}
.block-card > .block-head{margin:-20px -20px 0}
.block-cta{padding:25px 22px}
.hero__map {width:100%; background:rgba(30,22,16,.4); border:1px solid rgba(212,168,67,.2); border-radius:8px;}
:root{--sec-gap:52px}
.word__q{font-size:1.06rem}
.word__inner{grid-template-columns:1fr;gap:24px}
.word__photo{max-width:280px;margin:0 auto}
.word__photo img{height:330px}
.word__content{text-align:center}
.news-grid{grid-template-columns:1fr}
.page-hero{padding:80px 0 16px}
.page-hero__title{font-size:1.8rem}
.news-section{padding:0 0 64px}
.article-section{padding:32px 0 64px}
.article-meta h1,.article-meta h2{font-size:1.6rem}
/* .article-nav column-reverse stacking removed per user request so links stay on one line */
.photo-gallery.gallery-plain{grid-template-columns:repeat(2,1fr)}
.info{padding:16px}
.foot{text-align:center}
.foot__grid{gap:28px}
/* Card h2 must sit BELOW the page title on phones (was 2.2rem = bigger than the h1, scan C35) */
.contact-card h2,.map-card h2,.rekv-card h2,.about-card h2,.tab-pane h2,.life-card h2,.word__content h2{font-size:1.55rem}
}
/* ═══ CALENDAR MOBILE AGENDA VIEW ═══
   Switches at <=960px: the 7-column grid stays on landscape tablets + desktop,
   and only portrait tablets + phones get the full-width agenda rows.
   Only the raspisanie calendar is affected. */
@media(max-width:960px){
/* Lebedev 21.07: the agenda KEEPS the white-contour float (line 1085) as a deliberate GENERAL FRAME around the day cards. (The old "frameless by design" kill-rule that lived here was dead code - 1085 comes later with equal specificity and won, so the frame leaked back and cards sat flush against it with zero air.) Now: frame spans header-pill width (100% of .w content = calc(100vw - 48px) tablets / - 32px phones via the 768 block below), r-xl corners echo header + month capsule, 12px inner padding = the air; the 700px cap moves from the grid to the CARDS so day cards keep their width and the frame grows around them. */
.cal__weekdays,.cal__grid{grid-template-columns:repeat(7,minmax(0,1fr))}
.cal__weekdays{display:none!important}
.cal__grid{display:flex!important;flex-direction:column;gap:6px;background:rgba(255,245,230,.06);border-radius:var(--r-xl);overflow:visible;max-width:none;margin-left:auto;margin-right:auto;padding:12px}
/* empty month: every cell is .cel--no-svc (hidden) - strip the frame so no stray empty box/line renders above the "not published" note */
.cal__grid:not(:has(.cel:not(.cel--no-svc):not(.cel--empty))){padding:0;border:none;background:transparent;box-shadow:none}
.cel--empty{display:none!important}
.cel{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;min-height:auto;padding:14px 16px;border-radius:12px;border:1px solid rgba(212,168,67,.2);-webkit-tap-highlight-color:transparent;width:100%;max-width:700px;margin-left:auto;margin-right:auto}
.cel__dow{display:block;order:-2;font:.6rem/1.35 var(--sans);text-transform:uppercase;letter-spacing:1.5px;color:#5C3A28;width:100%;position:static;height:auto;padding:0;margin:0 0 2px;overflow:visible;clip:auto;white-space:normal}   /* сброс sr-only-обрезки с :482 обязателен: без него height:1px+clip оставили бы эту строку невидимой и в агенде тоже */
.cel__num{font:700 1.5rem/1 var(--hd);color:var(--brown);width:34px;height:34px;display:flex;align-items:center;justify-content:center;order:-1;font-variant-numeric:lining-nums}
.cel__badge{order:0;font-size:.55rem;flex:1 1 auto;white-space:normal;overflow:visible;text-align:center;max-width:none}
/* height:auto ОБЯЗАТЕЛЕН. На десктопе слот названия жёстко зафиксирован тремя
   строками ради выравнивания служб; в ленте-агенде выравнивать нечего, шрифт
   крупнее (1.42rem против .92rem), и та же фиксированная высота обрезала бы
   название по середине. Здесь название показывается целиком. */
.cel__feast{display:block!important;font:italic 500 1.42rem/1.3 var(--hd);color:#5C3A28;flex:1 1 100%;order:1;height:auto;min-height:0;max-height:none;overflow:visible;-webkit-line-clamp:none;line-clamp:none}
.cel__svc{order:2;width:100%;margin-top:6px;padding-top:8px;border-top:1px solid rgba(212,168,67,.15);display:flex;flex-direction:column;gap:12px}
.cel__svc-group > span{display:flex;align-items:flex-start;gap:8px;padding:3px 0;font-size:.82rem!important;color:#5C3A28;min-height:auto}
.cel__svc b{font-size:.82rem!important;color:#8B3A2A;min-width:44px;flex-shrink:0}
.cel--no-svc{display:none!important}
.cel--sun .cel__num{color:#8B3A2A}
/* D-04, ВТОРОЕ объявление, мобильная лента-агенда. Значения те же: правка только десктопной
   строки оставила бы телефоны на старом светящемся фильтре. border-color гасим отдельно,
   до золотой кромки карточки слой фона не достаёт, а фильтр достаёт.
   Строка выше (.cel--sun .cel__num) это ВТОРОЕ объявление D-12, принятой слабины контраста.
   Оба дубля НАМЕРЕННЫ и оба обязаны совпадать по значениям. Полностью: DECISIONS.md */
.cel--past{filter:grayscale(.88) sepia(.38) saturate(1.7);--bg-past:linear-gradient(rgba(62,47,33,.44),rgba(62,47,33,.44));border-color:rgba(212,168,67,.08)}
/* today highlight = even light milky-cream tint, not the saturated gold radial: on the tall agenda card the desktop radial floods gold and washes out the dark text. Solid #FBF1DC keeps text readable (~8.9:1 vs #5C3A28, matches the base cell); the gold inset border from line 471 stays as the "today" marker */
.cel--today{--bg-today:linear-gradient(#FBF1DC,#FBF1DC)}
/* month bar = glass capsule echoing the site header (.hdr line 79): same 24px side insets, same r-xl radius, same hairline border + blur(16px) saturate(1.1) material. Tint is a lighter cut of the header brown (.45 vs .6) so the white month title stays readable when the capsule sticks over cream agenda cells (the old edge-to-edge transparent strip washed out there). Buttons + title untouched. */
/* Lebedev 21.07 v2 (owner): month pill at MAX width but visibly narrower than the header pill (12px more inset per side), fully-rounded ends (999px), arrows spread to the pill ends with the month centered between them, glass recipe = the secnav secondary header. Same shape at every viewport. */
.month-hdr{position:sticky;top:70px;z-index:100;margin:0 36px;padding:10px 10px;background:rgba(18,38,24,.62);border:1px solid rgba(255,240,220,.10);border-radius:999px;box-shadow:0 6px 24px rgba(10,24,14,.22);-webkit-backdrop-filter:blur(14px) saturate(1.1);backdrop-filter:blur(14px) saturate(1.1)}
.month-hdr .w{padding:0 10px}
/* gap:8px здесь молча перебивался объявлением .month-nav ниже. Сведено к победившему 16. */
.month-nav{justify-content:space-between;width:100%;gap:16px;margin-bottom:0}
.month-top{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;margin-bottom:0}   /* margin-bottom:8px pushed the row 4px above the pill's optical center (owner: "vertically off") */
.month-nav button{width:44px;height:44px;font-size:1rem;color:#fff!important;background:rgba(212,168,67,.25)!important;box-shadow:0 2px 8px rgba(44,26,14,.2)!important;border:1px solid rgba(255,240,220,.2)!important}
.month-nav button svg{width:15px;height:15px;display:block}
.month-nav__title{min-width:0}
.legend{display:none}
}
@media(max-width:380px){
.hero__tag{font-size:.58rem;letter-spacing:3px}
}
/* HEADER LOGO: shrink name on small phones so it never overlaps the burger */
/* Правила уменьшения названия на узких экранах ПЕРЕЕХАЛИ вниз, в блок @media(max-width:430px).
   Здесь они стояли и дважды не работали. Сначала из-за специфичности: `.hdr .hdr__name` с
   clamp (0,2,0) бил `.hdr__name` (0,1,0). Потом, когда специфичность подняли, из-за ПОРЯДКА:
   при равной специфичности побеждает то правило, что ниже по файлу, а блок с clamp ниже.
   Замер после первой попытки показал зазор ровно 0 и шрифт 11.2px вместо 9.6px, то есть
   правило снова не применилось. Держать их рядом с clamp и ПОСЛЕ него. */

/* ═══ SKIP TO CONTENT (a11y) ═══ */
.skip-link{position:absolute;top:-100%;left:50%;transform:translateX(-50%);z-index:999;background:#14281a;color:var(--parch);padding:12px 24px;border-radius:0 0 var(--r) var(--r);font:.85rem/1 var(--sans);font-weight:600;letter-spacing:.5px;text-decoration:none;transition:top .2s}
.skip-link:focus{top:0}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ═══ PRINT ═══ */
@media print{
  .hdr,.bg-waves,.social-fab,.foot__social,.foot__route,.hdr__burger,.skip-link{display:none!important}
  body{background:#fff!important;color:#000!important;font-size:11pt}
  .w{max-width:100%;padding:0}
  .foot{background:#fff!important;color:#333!important;border-top:1px solid #ccc}
  .foot p,.foot a{color:#333!important;opacity:1!important}
  a{color:#333!important}
  .hero{min-height:auto!important;padding:20px 0}
  .hero__bg{display:none}
  .hero__fade{display:none}
  .hero__text{color:#000!important}
  .hero__title,.hero__tag,.hero__addr{color:#000!important;text-shadow:none!important}
  .page-hero{background:#fff!important;padding:20px 0!important}
  .page-hero__title{color:#000!important}
  .cal__grid{box-shadow:none!important;border:1px solid #999}
  .cel{border:1px solid #ddd}
  .cel--today{box-shadow:inset 0 0 0 2px #000!important}
  /* Цвет облачения на бумаге. Браузер по умолчанию срезает фоны при печати, и без
     print-color-adjust ленты на листе просто нет. А печать в приходе чаще всего
     чёрно-белая, где голубой и золотой дают один и тот же тон, поэтому единственное,
     что переживает такой принтер, - развёрнутое СЛОВО в строке дня. */
  .cel--vest::after{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .cel__dow{position:static!important;width:auto!important;height:auto!important;margin:0 0 2px!important;overflow:visible!important;clip:auto!important;white-space:normal!important;font:8pt/1.3 var(--sans);color:#333!important}
  .legend,.legend--vest{display:flex!important}
  .legend__i{color:#333!important}
  .legend__note{color:#555!important}
  .card{break-inside:avoid;border:1px solid #ccc;box-shadow:none!important;backdrop-filter:none!important;background:#fff!important}
  .news-grid{gap:12px}
  img{max-width:100%!important}
}

/* ═══ PAGE-SPECIFIC STYLES (consolidated) ═══ */

/* --- dukhovenstvo --- */


.bio-toggle{display:flex;width:100%;align-items:center;justify-content:center;gap:10px;padding:16px 26px;margin-top:20px;background:rgba(20,12,6,.045);border:1px solid var(--border-glass);border-radius:var(--r-xl);font:500 .92rem/1.25 var(--sans);color:var(--gold-light);cursor:pointer;transition:background .25s var(--ease);letter-spacing:.3px}
.bio-toggle:hover{background:rgba(255,240,220,.1);border-color:var(--gold);color:var(--gold-light)}
.bio-full{display:none;margin-top:16px}
.bio-full.show{display:block}


/* Духовенство - one outer section frame holding two individual clergy frames */
.clergy-frame{background:var(--bg-card);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-glass);border-radius:var(--r-xl);padding:28px;margin-bottom:var(--sec-gap);scroll-margin-top:96px}
.clergy-frame__head{font:400 2.2rem/1.2 var(--hd);color:var(--text);margin:0 0 24px}
@media(max-width:768px){.clergy-frame{padding:20px}.clergy-frame__head{margin-bottom:18px;font-size:1.9rem}}

/* --- kontakty --- */
.contacts{padding:0 0 60px}
.contacts__grid{display:grid;grid-template-columns:1fr 1fr;gap:32px;margin-bottom:32px}
@media(max-width:768px){.contacts__grid{grid-template-columns:1fr}}

.contact-card{background:var(--bg-card);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-glass);border-radius:var(--r-xl);padding:28px}
.contact-card h2{font:400 2.2rem/1.2 var(--hd);color:var(--text);margin-bottom:20px;display:flex;align-items:center;gap:10px}
.contact-card h2 span{font-size:1.3rem}
.info-row{display:flex;align-items:flex-start;gap:14px;margin-bottom:16px;font:400 1.06rem/1.7 var(--sans);color:var(--text-light2)}
.info-row__icon{width:20px;height:20px;flex-shrink:0;color:var(--gold);margin-top:2px}
.info-row__time{font-weight:600;color:var(--gold-light)}
.info-row a{color:var(--text);text-decoration:underline;text-underline-offset:3px;transition:opacity .2s}
.info-row a:hover{opacity:.8}

.social-row{display:flex;gap:16px;margin-top:24px;padding-top:20px;border-top:1px solid var(--gold-dim)}
.social-row a{width:44px;height:44px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:rgba(255,240,220,.06);border:1px solid rgba(255,240,220,.1);color:var(--text-light2);transition:all .25s var(--ease)}
.social-row a:hover{background:rgba(255,240,220,.14);border-color:rgba(255,240,220,.3);color:var(--parch);transform:translateY(-2px)}
.social-row svg{width:22px;height:22px}

.map-card{background:var(--bg-card);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-glass);border-radius:var(--r-xl);overflow:hidden;display:flex;flex-direction:column}
.map-card h2{font:400 2.2rem/1.2 var(--hd);color:var(--text);padding:28px 28px 16px;display:flex;align-items:center;gap:10px}
.map-card h2 span{font-size:1.3rem}
.map-card p{font:400 1.06rem/1.7 var(--sans);color:var(--text-light2);padding:0 28px 16px;margin:0}
.map-card iframe{flex:1;min-height:320px;border:none}
/* Map facade: no third-party Yandex request/cookies until the visitor opts in (privacy + speed).
   Matches the iframe's flex:1/min-height:320px so swapping it in causes zero layout shift. */
.map-embed{flex:1;min-height:320px;display:flex}
.map-embed__btn{flex:1;min-height:320px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;cursor:pointer;border:none;color:var(--gold-light);font:inherit;
  background:linear-gradient(135deg,rgba(30,60,38,.5),rgba(20,45,26,.72)),repeating-linear-gradient(0deg,transparent,transparent 25px,rgba(255,240,220,.05) 26px),repeating-linear-gradient(90deg,transparent,transparent 25px,rgba(255,240,220,.05) 26px);
  transition:filter .2s}
.map-embed__btn:hover,.map-embed__btn:focus-visible{filter:brightness(1.14)}
.map-embed__label{font:600 1.06rem/1.2 var(--sans);letter-spacing:.3px}
.map-embed__hint{font:400 .82rem/1.3 var(--sans);color:var(--text-light2);opacity:.85}

.rekv-card{background:var(--bg-card);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-glass);border-radius:var(--r-xl);padding:28px}
.rekv-card h2{font:400 2.2rem/1.2 var(--hd);color:var(--text);margin-bottom:20px;display:flex;align-items:center;gap:10px}
.rekv-card h2 span{font-size:1.3rem}
.rekv-card p{font:400 1.06rem/1.7 var(--sans);color:var(--text-light2);margin-bottom:8px}
.rekv-card .detail{font-family:var(--sans);font-variant-numeric:tabular-nums;background:var(--gold-dim);padding:20px 24px;border-radius:var(--r-lg);border:1px solid var(--gold-dim);margin-top:16px}
.rekv-card .detail p{margin-bottom:4px;font-size:.95rem}


/* --- o-khrame --- */
.about-section{padding:0 0 48px}
.about-card{background:var(--bg-card);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-glass);border-radius:var(--r-xl);padding:28px;margin-bottom:var(--sec-gap)}
.about-card h2{font:400 2.2rem/1.2 var(--hd);color:var(--text);margin-bottom:20px;display:flex;align-items:center;gap:12px}
.about-card h2 span{font-size:1.3rem}
.about-card h3{font:400 1.5rem/1.3 var(--hd);color:var(--text);margin:24px 0 12px}
.about-card p{font:400 1.06rem/1.7 var(--sans);color:var(--text-light2);margin-bottom:14px}
.about-card blockquote{border-left:3px solid var(--gold);padding:16px 24px;margin:20px 0;background:var(--gold-dim);border-radius:var(--r);font-style:italic;color:var(--text-light2)}

.photo-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:24px 0}
@media(max-width:640px){.photo-gallery{grid-template-columns:repeat(2,1fr)}}
.photo-gallery a{display:block;border-radius:12px;overflow:hidden;aspect-ratio:1;position:relative}
.photo-gallery img{width:100%;height:100%;object-fit:cover;transition:transform 0.4s cubic-bezier(0.2,0.8,0.2,1)}
.photo-gallery a:hover img{transform:scale(1.05)}
.photo-gallery.gallery-plain{align-items:center}
.photo-gallery.gallery-plain img{width:100%;height:auto;object-fit:contain;border-radius:12px;display:block;transition:none}
/* Lightbox side-strip nav (scoped via mainClass 'pswp--sidenav'): prev/next arrows become
   full-height side strips so the whole left/right vertical area (+ a bit over the image edge)
   navigates; centre of the image closes. Used on novosti's lightbox. */
.pswp--sidenav .pswp__button--arrow{width:22%!important;height:100%!important;top:0!important;bottom:0!important;margin:0!important;transform:none!important}
.pswp--sidenav .pswp__top-bar{z-index:20!important}
.pswp--sidenav .pswp__button--arrow--prev{left:0!important;right:auto!important}
.pswp--sidenav .pswp__button--arrow--next{right:0!important;left:auto!important}
.pswp--sidenav .pswp__button--arrow .pswp__icn{top:50%!important;margin-top:-15px!important}
.pswp--sidenav .pswp__button--arrow--prev .pswp__icn{left:max(16px,3vw)!important;right:auto!important}
.pswp--sidenav .pswp__button--arrow--next .pswp__icn{right:max(16px,3vw)!important;left:auto!important}

/* PhotoSwipe dynamic dimension fix */
.pswp__img {
  object-fit: contain;
}


.timeline{position:relative;padding-left:28px;margin:20px 0}
.timeline::before{content:'';position:absolute;left:8px;top:0;bottom:0;width:2px;background:linear-gradient(to bottom,var(--gold),var(--gold-dim))}
.timeline__item{margin-bottom:20px;position:relative}
.timeline__item::before{content:'';position:absolute;left:-24px;top:6px;width:12px;height:12px;border-radius:50%;background:var(--gold);border:2px solid var(--bg-deep)}
.timeline__year{font:600 .85rem/1 var(--sans);color:var(--text);margin-bottom:4px;letter-spacing:.5px}
.timeline__text{font:.85rem/1.6 var(--sans);color:var(--text-light2)}

/* --- tainstva --- */
.tainstva{padding:0 0 60px}
.tabs{display:flex;gap:4px;margin-bottom:0;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab{padding:14px 28px;font:500 .85rem/1 var(--sans);letter-spacing:.5px;color:var(--text3);background:rgba(30,22,16,.6);border:1px solid var(--gold-dim);border-radius:var(--r) var(--r) 0 0;cursor:pointer;transition:all .25s;white-space:nowrap;flex-shrink:0}
.tab:hover{color:var(--text-light2);background:rgba(30,22,16,.8)}
.tab.active{color:var(--gold);background:rgba(0,0,0,.02);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,243,228,.2);border-bottom-color:transparent;position:relative;z-index:2;margin-bottom:-1px}
.tab.active::after{content:'';position:absolute;bottom:-2px;left:-1px;right:-1px;height:4px;background:rgba(0,0,0,.02);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);z-index:3}

.tab-content{background:var(--bg-card);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-glass);border-radius:0 0 var(--r-xl) var(--r-xl);padding:28px;position:relative;z-index:1}
.tab-pane{display:none}
.tab-pane.active{display:block}
.tab-pane h2{font:400 2.2rem/1.2 var(--hd);color:var(--text);margin-bottom:20px}
.tab-pane h3{font:400 1.5rem/1.3 var(--hd);color:var(--text);margin:28px 0 12px}
.tab-pane p{font:400 1.06rem/1.7 var(--sans);color:var(--text-light2);margin-bottom:14px}
.tab-pane blockquote{border-left:3px solid var(--gold);padding:16px 24px;margin:20px 0;background:var(--gold-dim);border-radius:var(--r)}
.tab-pane blockquote p{font-style:italic;color:var(--text-light2);margin-bottom:0}
.tab-pane blockquote cite{display:block;margin-top:8px;font:400 .85rem/1 var(--sans);color:var(--gold-text);font-style:normal}
.tab-pane ol,.tab-pane ul{margin:12px 0 16px 20px;font:1.06rem/1.7 var(--sans);color:var(--text-light2)}
.tab-pane li{margin-bottom:8px}

.info-box{background:var(--gold-dim);border:1px solid var(--gold-glow);border-radius:var(--r-lg);padding:20px 24px;margin:20px 0}
.info-box__title{font:600 .68rem/1 var(--sans);color:var(--text);text-transform:uppercase;letter-spacing:4px;margin-bottom:10px}
.info-box p{font:400 1.06rem/1.7 var(--sans);color:var(--text-light2);margin-bottom:4px}

/* --- zhizn --- */
.life{padding:0 0 60px}
.life-card{background:var(--bg-card);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid var(--border-glass);border-radius:var(--r-xl);padding:28px;margin-bottom:var(--sec-gap)}
.life-card h2{font:400 2.2rem/1.2 var(--hd);color:var(--text);margin-bottom:20px;display:flex;align-items:center;gap:12px}
.life-card h2 span{font-size:1.4rem}
.life-card h3{font:400 1.5rem/1.3 var(--hd);color:var(--text);margin:20px 0 10px}
.life-card p{font:400 1.06rem/1.7 var(--sans);color:var(--text-light2);margin-bottom:12px}
.life-card ul{margin:12px 0 16px 20px;font:400 1.06rem/1.7 var(--sans);color:var(--text-light2)}
.life-card li{margin-bottom:6px}

/* Youth card: landscape group photo as a full-width band below the text (no crop) */
.youth-photo{margin:20px auto 0;max-width:960px}
.youth-photo img{display:block;width:100%;height:auto;border-radius:var(--r-lg);border:1px solid var(--border-glass)}


/* minmax(0,1fr), а НЕ 1fr, и это не педантизм. `1fr` это `minmax(auto,1fr)`, а `auto` тут
   равен min-content, поэтому колонка отказывается сужаться ниже самого длинного слова внутри.
   В карточках стоят «Кишинёвско-Молдавская митрополия» и «Православное христианство.ru», их
   min-content около 146px, и при ширине окна 320 две такие колонки плюс зазор дают 311px в
   коробке на 232px. Замер 12.08.2026: документ становился шире окна на 36px ровно, и это тот
   самый горизонтальный вылет, который `body{overflow-x:hidden}` прятал, обрезая содержание.
   С minmax(0,1fr) колонки сужаются, и страница перестаёт быть шире окна при ЛЮБОМ шрифте:
   тот же дефект в CI выглядел как +49px вместо +36px просто из-за других запасных шрифтов. */
.links-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-top:20px}
@media(max-width:768px){.links-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* Ниже 400px даже суженная пара колонок оставляет на карточку меньше 100px, и подпись под
   логотипом рвётся в столбик по букве. Одна колонка честнее: карточек всего четыре. */
@media(max-width:400px){.links-grid{grid-template-columns:1fr}}
.link-item{background:transparent;border:1px solid var(--border-glass);border-radius:var(--r-lg);padding:20px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;text-align:center;transition:all .25s var(--ease);gap:10px}
/* uniform logo slot: wide/short logos (e.g. YuZV) otherwise let the caption ride higher than neighbours */
.link-item > a:first-child{height:64px;display:flex;align-items:center;justify-content:center;flex:0 0 auto}
.link-item:hover{background:rgba(255,240,220,.06);border-color:var(--gold-glow)}
.link-item img{max-width:60px;max-height:60px;object-fit:contain;border-radius:8px;display:block;margin:0 auto}
.link-item a{font:.82rem/1.4 var(--sans);color:var(--text-light2);text-decoration:none;display:block;font-weight:500}
.link-item a:hover{color:var(--gold)}
.link-item a small{color:var(--text3);font-weight:400;font-size:.72rem;display:block;margin-top:3px}

.feature-badge{display:inline-flex;align-items:center;gap:6px;background:transparent;border:1px solid var(--border-glass);border-radius:var(--r);padding:6px 14px;font:600 .68rem/1 var(--sans);letter-spacing:.5px;text-transform:uppercase;color:var(--text3);margin-right:8px;margin-bottom:8px}

/* ═══ CATEGORY FILTER TABS ═══ */
.cat-tabs{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-bottom:32px;padding:4px}
.cat-tabs::-webkit-scrollbar{display:none}
.cat-tab{padding:8px 18px;font:.7rem/1 var(--sans);font-weight:600;color:#fff;cursor:pointer;white-space:nowrap;flex-shrink:0;border:1px solid rgba(255,255,255,.15);border-radius:40px;position:relative;transition:all .3s var(--ease);text-transform:uppercase;letter-spacing:.5px;box-shadow:0 4px 16px rgba(44,26,14,.08);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px)}
.cat-tab:hover{color:#fff;border-color:rgba(255,255,255,.3);transform:translateY(-2px);box-shadow:0 6px 20px rgba(44,26,14,.12)}
.cat-tab.active{color:#fff;border-color:var(--gold);box-shadow:0 0 0 2px var(--gold),0 6px 24px rgba(44,26,14,.25);background-blend-mode:screen}

.cat-tab[data-cat=""]{background:rgba(212,168,67,.25)}
.cat-tab[data-cat="news"]{background:rgba(30,58,38,.45)}
.cat-tab[data-cat="voskresnaya-shkola"]{background:rgba(74,120,74,.3)}
.cat-tab[data-cat="opk"]{background:rgba(100,80,140,.3)}
.cat-tab[data-cat="social"]{background:rgba(80,130,180,.3)}
.cat-tab[data-cat="youth"]{background:rgba(180,120,60,.3)}
.cat-tab[data-cat="missionary"]{background:rgba(140,60,80,.3)}

/* ═══ CATEGORY BADGE (on cards) ═══ */
.card__fig{position:relative;width:100%;margin:0}
.cat-badge{position:absolute;top:12px;left:12px;z-index:2;font:.55rem/1 var(--sans);font-weight:700;text-transform:uppercase;letter-spacing:2px;padding:6px 14px;border-radius:var(--r);color:#fff;pointer-events:none;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);border:1px solid rgba(255,255,255,.15);box-shadow:0 4px 16px rgba(0,0,0,.25);text-shadow:0 1px 4px rgba(0,0,0,.6)}
.cat-badge--news{background:rgba(30,58,38,.45)}
.cat-badge--voskresnaya-shkola{background:rgba(74,120,74,.3)}
.cat-badge--opk{background:rgba(100,80,140,.3)}
.cat-badge--social{background:rgba(80,130,180,.3)}
.cat-badge--youth{background:rgba(180,120,60,.3)}
.cat-badge--missionary{background:rgba(140,60,80,.3)}
.cat-badge--default{background:rgba(212,168,67,.25)}

/* ═══ LOAD MORE BUTTON ═══ */
.load-more-wrap{padding:36px 0 0}

@media(max-width: 768px) {
  body:not(.home) #newsGrid { min-height: 800px; }
  /* Reserve the JS-filled widget's typical height (3 day-cards ~620px) to kill mobile CLS; 520 = safe floor */
  #schedule-grid { min-height: 520px; }
}

/* ==========================================================================
   PhotoSwipe End Screen
   ========================================================================== */

.pswp-end-screen {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}

.pswp-end-screen__bg {
  position: absolute;
  top: -10%;
  left: -10%;
  width: 120%;
  height: 120%;
  background-repeat: no-repeat;
  background-position: center center;
  background-size: cover;
  filter: blur(20px) brightness(0.72);
  transform: scale(1.1);
  z-index: 1;
  pointer-events: none;
}

.pswp-end-screen__content {
  position: relative;
  z-index: 2;
  text-align: center;
  animation: pswpFadeInUp 0.6s cubic-bezier(0.16, 1, 0.3, 1) forwards;
  text-shadow: 0 1px 16px rgba(0, 0, 0, 0.7), 0 1px 3px rgba(0, 0, 0, 0.5);
}

.pswp-end-screen__btn {
  appearance: none;
  background: rgba(255, 255, 255, 0.05);
  border: 1px solid rgba(255, 255, 255, 0.2);
  border-radius: 100px;
  padding: 16px 36px;
  color: #fff;
  font-family: var(--sans);
  font-size: 18px;
  font-weight: 500;
  cursor: pointer;
  backdrop-filter: blur(15px);
  -webkit-backdrop-filter: blur(15px);
  transition: all 0.4s cubic-bezier(0.16, 1, 0.3, 1);
  display: inline-flex;
  align-items: center;
  gap: 12px;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
}

.pswp-end-screen__btn svg {
  width: 20px;
  height: 20px;
  transition: transform 0.4s ease;
}

.pswp-end-screen__btn:hover {
  background: rgba(255, 255, 255, 0.15);
  border-color: rgba(255, 255, 255, 0.4);
  transform: translateY(-2px);
  box-shadow: 0 15px 40px rgba(0, 0, 0, 0.3);
}

.pswp-end-screen__btn:hover svg {
  transform: rotate(-45deg);
}

.pswp-end-screen__label {
  font: 600 .72rem/1 var(--sans, 'Inter', sans-serif);
  text-transform: uppercase;
  letter-spacing: 3px;
  color: rgba(255, 255, 255, .72);
  margin-bottom: 22px;
}

/* "Все новости" link sits on its own centered row above "Начать сначала". */
.pswp-end-screen__allnews-row {
  margin-bottom: 20px;
}
.pswp-end-screen__allnews-row .pswp-end-screen__news svg {
  transition: transform .25s;
}
.pswp-end-screen__allnews-row .pswp-end-screen__news:hover svg {
  transform: translateX(-3px);
}

.pswp-end-screen__newsrow {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px 26px;
  margin-top: 28px;
}

.pswp-end-screen__news {
  appearance: none;
  background: transparent;
  border: none;
  color: rgba(255, 255, 255, .68);
  font: 500 .92rem/1 var(--sans, 'Inter', sans-serif);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  gap: 8px;
  padding: 8px 4px;
  transition: color .25s;
}

.pswp-end-screen__news svg { width: 16px; height: 16px; flex-shrink: 0; }
.pswp-end-screen__news:hover { color: #fff; }

.pswp-end-screen__hint {
  position: absolute;
  left: 0; right: 0; bottom: max(24px, 5vh);
  z-index: 2;
  text-align: center;
  font: 400 .78rem/1 var(--sans, 'Inter', sans-serif);
  color: rgba(255, 255, 255, .38);
  pointer-events: none;
}

@keyframes pswpFadeInUp {
  0% {
    opacity: 0;
    transform: translateY(20px);
  }
  100% {
    opacity: 1;
    transform: translateY(0);
  }
}

@media(max-width:768px){.foot__social{justify-content:center} .foot__grid .hdr__logo{justify-content:center;margin-bottom:12px}}

/* ═══ BUTTON BLUEPRINT ═══ */

@media(max-width:768px){
}

.hs ul{color:#fff;font-weight:400}
.hs__day--today .hs__day-name{color:#fff}

/* ═══════════ V3 (on ORIGINAL live terracotta base #A0624E) - rev C ═══════════ */

/* L2 frames: keep live dark card, a hair more intense + glass top-edge */
.about-card,.contact-card,.map-card,.rekv-card,.life-card,.tab-content,.clergy-frame,.block-card,.card{
  background:rgba(0,0,0,.02);
  border:1px solid rgba(255,243,228,.2);
}
/* L3 nested: a hair more intense + brighter glass edge */
.info-box,.rekv-card .detail,
.about-card blockquote,.tab-pane blockquote,.article-body blockquote{
  background:rgba(0,0,0,.035);
  border:1px solid rgba(255,243,228,.26);
}

/* D-02. НАМЕРЕННОЕ РЕШЕНИЕ, не «пропущенный литерал старой терракотовой палитры».
   Плашку «БЛИЖАЙШЕЕ» на первой карточке богослужений оставили ТЁПЛОЙ: её видел и одобрил
   Владыка, зафиксировано телом коммита ac278990 от 29.07.2026.
   Атаковано уже дважды: перекрасом 29.07 и уборкой остатков терракоты T-26 09.08.
   Тот же селектор объявлен выше по файлу через var(--gold): побеждает ЭТА строка,
   специфичность равна, выигрывает последнее. Приводить их к одному значению не надо.
   Владыка одобрил ТОН, а не конкретный hex: подбор оттенка внутри тёплого диапазона
   не запрещён, замена на зелёный или золотой из палитры запрещена. Полностью: DECISIONS.md */
.hs__day:first-child .hs__badge{background:#8A6410;color:#fff}

/* Main buttons (.block-cta): static half-a-hair darker than the background; the gradient
   INVERTS on hover (static<->hover), no element colour change */

/* Maps button: KEEP background colour/transparency; restore the frame + text colour change
   on hover (border->gold, text->gold-light), but no bg darkening ("hollow") */
.hero__map,.foot a.foot__route{background:rgba(20,40,26,.55);border:1px solid rgba(212,168,67,.3)}
.foot a.foot__route{padding:10px 18px;font:400 .88rem/1.55 var(--sans);letter-spacing:normal;border-radius:6px;opacity:.82}
/* Четыре правки, каждая по замеру. Размер, вес и трекинг приведены к остальному тексту
   подвала (было 15.2px/w500/ls .5px, единственный такой элемент во всём подвале).
   opacity .82 добавлена потому, что кнопка это ПРЯМОЙ ребёнок колонки, сестра абзацев,
   и в группу прозрачности от .foot p не попадала: 13.45:1, самый яркий текст подвала,
   ярче абзаца прямо над ней. Стало 9.46:1, ровно как у соседей. */
.hero__map:hover,.foot a.foot__route:hover{background:rgba(20,40,26,.75);border-color:var(--gold);color:#FCF4DA}

/* Remove italics everywhere - hard to read */
.hs__feast,.cel__feast,.about-card blockquote,.tab-pane blockquote,
.tab-pane blockquote p,.article-body blockquote,.tab-pane blockquote cite,em,i,cite{font-style:normal}

/* Homepage: logo text gold = active "main" state, inline with nav active items */
body.home .hdr__name{color:var(--gold)}

/* ============================================================
   FLOATING FRAMES (body.framed - now on ALL 7 pages incl. main + news):
   white contour + drop shadow over the v3 fill + restored side gutters +
   centered footer. Card grids (.card) use a lighter float.
   ============================================================ */
body.framed .about-card,body.framed .clergy-frame,body.framed .contact-card,body.framed .map-card,body.framed .rekv-card,body.framed .life-card,body.framed .tab-content,body.framed .block-card,body.framed .hs{
  border:1px solid rgba(255,248,240,.42);border-top-color:rgba(255,251,245,.66);
  box-shadow:0 1px 0 rgba(255,251,245,.28) inset,0 16px 38px rgba(0,0,0,.34);
}
/* Sacrament tabs cap the panel's top edge: drop the floating frame's bright white top
   border + inset highlight on .tab-content so no white coating runs behind the active tab.
   Keep the lift (drop shadow) and the left/right/bottom contour. */
body.framed .tab-content{border-top-color:transparent;box-shadow:0 16px 38px rgba(0,0,0,.34)}
body.framed .card,body.framed .news-grid .card{
  border:1px solid rgba(255,248,240,.40);border-top-color:rgba(255,251,245,.58);
  box-shadow:0 1px 0 rgba(255,251,245,.22) inset,0 10px 26px rgba(0,0,0,.26);
}
body.framed .info-box,body.framed .rekv-card .detail,body.framed .about-card blockquote,body.framed .tab-pane blockquote{
  border:1px solid rgba(255,248,240,.46);border-top-color:rgba(255,251,245,.76);
  box-shadow:0 1px 0 rgba(255,251,245,.38) inset,0 8px 24px rgba(0,0,0,.28);
}
/* Raspisanie: the calendar grid + the Информация panel carried a gold frame, not the
   white-contour float. Give them the same floating treatment as every other framed page. */
body.framed .cal__grid,body.framed .info{
  border:1px solid rgba(255,248,240,.42);border-top-color:rgba(255,251,245,.66);
  box-shadow:0 1px 0 rgba(255,251,245,.28) inset,0 16px 38px rgba(0,0,0,.34);
}
body.framed .about-section,body.framed .contacts,body.framed .tainstva,body.framed .life,body.framed .news-section{padding-left:24px;padding-right:24px}
body.framed .foot{text-align:center}
body.framed .foot__grid{justify-items:center}
body.framed .foot__social,body.framed .foot__grid .hdr__logo{justify-content:center}
@media(max-width:768px){
  body.framed .about-section,body.framed .contacts,body.framed .tainstva,body.framed .life,body.framed .news-section{padding-left:16px;padding-right:16px}
  body.framed .hdr{width:calc(100vw - 32px);max-width:none}
  /* phones: header pill narrows to 16px insets (rule above) - general frame follows; month pill stays 12px more inset than the header */
  .month-hdr{margin:0 28px}
  .cal .w{padding:0 16px}
}

/* Header on mobile/tablet (<=1120px, burger shown): dead-center the logo in the header
   (absolute), keep the burger pinned right, and scale the name so it never reaches it. */
@media(max-width:1120px){
  .hdr .hdr__row{position:relative}
  .hdr .hdr__logo{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);justify-self:auto;white-space:nowrap}
  .hdr .hdr__name{font-size:clamp(.75rem,2.5vw,.95rem);letter-spacing:.6px;white-space:nowrap}
  /* Крест был втрое выше строчки названия: чернила 23.58 против 7.61. Масштаб самой маски
     и её ориентация НЕ трогаются (D-01: канон верен). Меняется только кегль на бургерных
     ширинах: бокс 28.08 -> 23.91, отношение становится 2.64:1 против десктопных 2.33:1. */
  .hdr .hdr__cross{font-size:1.15rem}
}

/* Ниже 430 логотип ВОЗВРАЩАЕТСЯ В ПОТОК, и центровка снимается. Причина геометрическая:
   абсолютно центрованный блок расходится в обе стороны от середины, а бургер приколот
   справа, поэтому безопасная ширина названия равна ширине окна МИНУС удвоенная зона
   бургера. При 320 это оставляло названию 168 пикселей на нужные 207, отсюда налезание.
   В потоке слева название получает всю ширину до бургера, и той же надписи хватает.
   Замер после правки: при 320 зазор 27 пикселей вместо налезания на 29, при 360 зазор 57.
   Порог 430, а не 400: при 431 центровка ещё даёт 27 пикселей запаса, проверено. */
/* ПЕРЕСМОТРЕНО 14.08.2026: название снова ПО ЦЕНТРУ, но иным способом.
   Прежнее возражение было верным для прежней схемы и неверно для этой. Абсолютный центр
   расходится в обе стороны от середины РЯДА, а бургер приколот к правому краю, поэтому
   безопасная ширина названия равнялась ширине окна МИНУС УДВОЕННАЯ зона бургера: при 320 это
   оставляло 168 пикселей на нужные 207, отсюда налезание, отсюда возврат в поток.
   Трёхколоночная сетка мерит иначе. Слева ставится РАСПОРКА шириной ровно с бургер, и она
   уравновешивает его справа. Название центрируется в средней колонке и физически не может
   налезть: колонка кончается там, где начинается бургер.
   Распорка сделана псевдоэлементом, чтобы не трогать разметку девяти страниц.
   ЗАМЕРЕНО 15.08.2026 в браузере, прежняя прикидка в этом комментарии была неверна и
   утверждала запас там, где его не было. Настоящие числа: дорожка названия = ширина
   экрана минус 148; логотип = крест 23.9 + зазор + текст. Отсюда две правки ниже,
   ширина распорки 33 и граница мелкого кегля 355. Проверено на 320-430 с шагом 5. */
@media(max-width:430px){
  .hdr .hdr__row{display:grid;grid-template-columns:auto 1fr auto;align-items:center}
  /* 33 = 44 ширина бургера минус 11 отрицательного поля ниже. Распорка уравнивает
     колонку бургера, иначе центр названия уезжает ровно на (44-11)/2 = 5.5 px */
  .hdr .hdr__row::before{content:"";width:33px;height:1px}
  .hdr .hdr__logo{position:static;transform:none;min-width:0;justify-self:center}
  .hdr .hdr__burger{position:static;flex:0 0 auto;justify-self:end}
  /* Оптическая симметрия: чернила логотипа начинались в 24px от края, а чернила бургера
     кончались в 35px. Половина разницы снята отрицательным полем, бокс 44x44 сохранён
     целиком и просто заезжает в правый отступ ряда, который пуст. */
  .hdr .hdr__burger{margin-right:-11px}
}
/* Уменьшение названия. Стоит ПОСЛЕ блока с clamp намеренно: специфичность у них одинаковая
   (0,2,0), поэтому решает порядок, и раньше это правило проигрывало именно из-за него. */
@media(max-width:400px){.hdr .hdr__name{font-size:.75rem;letter-spacing:.4px}}
/* Граница 355, а не 345. Замерено: логотип на .75rem занимает 200.6 px (крест 23.9 +
   зазор 10 + текст 166.7), а дорожка равна ширине экрана минус 148. Значит .75rem
   перестаёт влезать ниже 349, и на 346-348 название наезжало на бургер. */
@media(max-width:355px){
  .hdr .hdr__name{font-size:.64rem;letter-spacing:0}
  .hdr .hdr__logo{gap:7px}
}

/* ============================================================
   TAINSTVA - roof-tile sacrament accordion (pure CSS, hidden radios).
   The 4 radios precede .tiles and .tab-content as siblings inside .tainstva,
   so :checked drives both the tile that expands and the text panel shown.
   Крещение (t-kresch) is open by default. Reduced-motion is handled globally.
   ============================================================ */
/* Option A: one outer frame around the whole block; cards float on top (rounded bottoms), text plain inside */
.tainstva-frame{background:var(--bg-card);border:1px solid rgba(255,248,240,.42);border-top-color:rgba(255,251,245,.66);
  border-radius:var(--r-xl);box-shadow:0 1px 0 rgba(255,251,245,.28) inset,0 16px 40px rgba(0,0,0,.34);padding:16px;overflow:hidden}
body.framed .tainstva-frame .tab-content{background:transparent;border:none;box-shadow:none;border-radius:0;padding:4px 4px 0}
.tainstva .tiles{display:flex;height:clamp(300px,42vh,440px);margin:-16px -16px 16px;padding:0}
.tainstva .tile{position:relative;flex:0 0 8%;min-width:0;overflow:hidden;cursor:pointer;background:#2f5537;
  border-radius:var(--r-xl);margin-left:-26px;
  border:1px solid var(--border-glass);border-top-color:rgba(255,251,245,.55);
  box-shadow:-13px 5px 24px rgba(0,0,0,.3),13px 5px 24px rgba(0,0,0,.3);
  transition:flex .7s cubic-bezier(.16,1,.3,1)}
.tainstva .tile:first-child{margin-left:0}
.tainstva .tile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:var(--focus,50% 45%);
  filter:saturate(.82) brightness(.8);transition:filter .8s ease;transform-origin:center}
@keyframes tileKen{from{transform:scale(1)}to{transform:scale(1.055)}}
@media(prefers-reduced-motion:reduce){.tainstva .tile{transition:none}.tainstva .tile img{animation:none!important}}
.tainstva .tile::after{content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(74,60,52,.03) 0%,rgba(74,60,52,.12) 68%,rgba(74,60,52,.22) 100%)}
.tainstva .tile__name{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;pointer-events:none;
  writing-mode:vertical-rl;transform:rotate(180deg);
  font:600 .8rem/1 var(--sans);letter-spacing:2.5px;text-transform:uppercase;color:var(--gold-light);white-space:nowrap;
  text-shadow:0 1px 2px rgba(0,0,0,.85),0 2px 12px rgba(0,0,0,.55)}
/* the OPEN tile: grow, on top, full colour; softer scrim; name -> horizontal gold serif, bottom-left */
#t-kresch:checked ~ .tiles .tile:nth-child(1),
#t-prich:checked ~ .tiles .tile:nth-child(2),
#t-vench:checked ~ .tiles .tile:nth-child(3),
#t-sobor:checked ~ .tiles .tile:nth-child(4){flex:1 1 79%;border-radius:var(--r-xl)}
/* Cascade FROM the highlighted card: z-index peaks at the open tile and steps down
   outward on both sides, so every card recedes away from the highlighted one. */
#t-kresch:checked ~ .tiles .tile:nth-child(1){z-index:5}
#t-kresch:checked ~ .tiles .tile:nth-child(2){z-index:4}
#t-kresch:checked ~ .tiles .tile:nth-child(3){z-index:3}
#t-kresch:checked ~ .tiles .tile:nth-child(4){z-index:2}
#t-prich:checked ~ .tiles .tile:nth-child(2){z-index:5}
#t-prich:checked ~ .tiles .tile:nth-child(1){z-index:4}
#t-prich:checked ~ .tiles .tile:nth-child(3){z-index:4}
#t-prich:checked ~ .tiles .tile:nth-child(4){z-index:3}
#t-vench:checked ~ .tiles .tile:nth-child(3){z-index:5}
#t-vench:checked ~ .tiles .tile:nth-child(2){z-index:4}
#t-vench:checked ~ .tiles .tile:nth-child(4){z-index:4}
#t-vench:checked ~ .tiles .tile:nth-child(1){z-index:3}
#t-sobor:checked ~ .tiles .tile:nth-child(4){z-index:5}
#t-sobor:checked ~ .tiles .tile:nth-child(3){z-index:4}
#t-sobor:checked ~ .tiles .tile:nth-child(2){z-index:3}
#t-sobor:checked ~ .tiles .tile:nth-child(1){z-index:2}
#t-kresch:checked ~ .tiles .tile:nth-child(1) img,
#t-prich:checked ~ .tiles .tile:nth-child(2) img,
#t-vench:checked ~ .tiles .tile:nth-child(3) img,
#t-sobor:checked ~ .tiles .tile:nth-child(4) img{filter:none;animation:tileKen 9s ease-in-out infinite alternate}
#t-kresch:checked ~ .tiles .tile:nth-child(1)::after,
#t-prich:checked ~ .tiles .tile:nth-child(2)::after,
#t-vench:checked ~ .tiles .tile:nth-child(3)::after,
#t-sobor:checked ~ .tiles .tile:nth-child(4)::after{background:linear-gradient(180deg,transparent 28%,rgba(38,26,17,.46) 50%,transparent 72%),linear-gradient(180deg,rgba(74,60,52,0) 38%,rgba(74,60,52,.34) 100%)}
#t-kresch:checked ~ .tiles .tile:nth-child(1) .tile__name,
#t-prich:checked ~ .tiles .tile:nth-child(2) .tile__name,
#t-vench:checked ~ .tiles .tile:nth-child(3) .tile__name,
#t-sobor:checked ~ .tiles .tile:nth-child(4) .tile__name{writing-mode:horizontal-tb;transform:none;
  align-items:center;justify-content:center;padding:22px 26px;
  font:600 2.1rem/1 var(--sans);letter-spacing:2.5px;text-transform:uppercase;color:var(--gold-light)}
/* DESKTOP ONLY: centre each collapsed sliver's label in its VISIBLE area. The edge facing the
   open card is hidden under the 26px HORIZONTAL lap, so nudge the label away by half the lap.
   Guarded to min-width so it never applies on mobile (there the lap is vertical -> would shove
   the centred labels off-axis). */
@media(min-width:681px){
#t-kresch:checked ~ .tiles .tile:nth-child(2) .tile__name,
#t-kresch:checked ~ .tiles .tile:nth-child(3) .tile__name,
#t-kresch:checked ~ .tiles .tile:nth-child(4) .tile__name,
#t-prich:checked ~ .tiles .tile:nth-child(3) .tile__name,
#t-prich:checked ~ .tiles .tile:nth-child(4) .tile__name,
#t-vench:checked ~ .tiles .tile:nth-child(4) .tile__name{left:26px}
#t-prich:checked ~ .tiles .tile:nth-child(1) .tile__name,
#t-vench:checked ~ .tiles .tile:nth-child(1) .tile__name,
#t-vench:checked ~ .tiles .tile:nth-child(2) .tile__name,
#t-sobor:checked ~ .tiles .tile:nth-child(1) .tile__name,
#t-sobor:checked ~ .tiles .tile:nth-child(2) .tile__name,
#t-sobor:checked ~ .tiles .tile:nth-child(3) .tile__name{right:26px}
}
/* keyboard focus ring on the tile whose radio is focused (sheet :focus-visible covers only a/button) */
#t-kresch:focus-visible ~ .tiles label[for=t-kresch],
#t-prich:focus-visible ~ .tiles label[for=t-prich],
#t-vench:focus-visible ~ .tiles label[for=t-vench],
#t-sobor:focus-visible ~ .tiles label[for=t-sobor]{outline:2px solid var(--gold);outline-offset:-3px;z-index:4}
/* text panels are radio-driven (no JS, no .active class) */
.tainstva .tab-content > .tab-pane{display:none}
#t-kresch:checked ~ .tab-content #kreshchenie,
#t-prich:checked ~ .tab-content #prichashchenie,
#t-vench:checked ~ .tab-content #venchanie,
#t-sobor:checked ~ .tab-content #soborovanie{display:block}
/* no tab caps this frame now: restore the top contour the earlier tab fix zeroed */
body.framed .tainstva .tab-content{border-top-color:rgba(255,248,240,.42)}
/* mobile: vertical accordion, horizontal labels, roof-lap on the vertical axis */
@media(max-width:680px){
  .tainstva .tiles{flex-direction:column;height:auto}
  .tainstva .tile{flex:0 0 auto;height:58px;margin-left:0;margin-top:-10px;transition:none;border-radius:0}
  .tainstva .tile:first-child{margin-top:0}
  /* rounded OUTER block, square junctions (no clay): frame clips the top corners; the last band
     floats above the text so round its bottom, mirroring the desktop tile's rounded float. */
  .tainstva .tile:last-child{border-bottom-left-radius:var(--r-xl);border-bottom-right-radius:var(--r-xl)}
  .tainstva .tile__name{writing-mode:horizontal-tb;transform:none;justify-content:center;padding:0 22px;
    font-size:.82rem;letter-spacing:2px}
  #t-kresch:checked ~ .tiles .tile:nth-child(1),
  #t-prich:checked ~ .tiles .tile:nth-child(2),
  #t-vench:checked ~ .tiles .tile:nth-child(3),
  #t-sobor:checked ~ .tiles .tile:nth-child(4){flex-basis:auto;height:auto;aspect-ratio:16/10;border-radius:0}
  #t-kresch:checked ~ .tiles .tile:nth-child(1) .tile__name,
  #t-prich:checked ~ .tiles .tile:nth-child(2) .tile__name,
  #t-vench:checked ~ .tiles .tile:nth-child(3) .tile__name,
  #t-sobor:checked ~ .tiles .tile:nth-child(4) .tile__name{align-items:center;padding:16px 22px;font-size:1.2rem}
}

/* ============================================================
   Духовенство: accordion carousel. Copies the Таинства roof-tile
   mechanism (hidden radios drive the tile that expands AND the bio
   panel shown), but with SIX clergy and WIDER inactive slivers so
   every priest stays visible in portrait when not selected.
   ============================================================ */
.dukh-frame{border-radius:var(--r-lg);overflow:hidden}
.dukh-tiles{display:flex;height:470px;gap:0}
.dukh-tile{position:relative;flex:0 1 11.6%;min-width:0;overflow:hidden;cursor:pointer;background:#2f5537;
  border-radius:var(--r-lg);margin-left:-16px;
  border:1px solid var(--gold-glow);border-top-color:rgba(255,251,245,.5);
  box-shadow:-10px 5px 20px rgba(0,0,0,.28),10px 5px 20px rgba(0,0,0,.28);
  transition:flex .7s cubic-bezier(.16,1,.3,1)}
.dukh-tile:first-child{margin-left:0}
.dukh-tile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:var(--focus,50% 22%);
  filter:saturate(.85) brightness(.82);transition:filter .8s ease;display:block}
.dukh-tile::after{content:'';position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(180deg,rgba(74,60,52,.02),rgba(74,60,52,.30) 100%)}
.dukh-tile__label{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:flex-start;pointer-events:none;padding-top:32px;
  writing-mode:vertical-rl;transform:rotate(180deg);
  font:700 .8rem/1 var(--sans);letter-spacing:1.6px;text-transform:uppercase;color:var(--gold-light);white-space:nowrap;
  -webkit-text-stroke:.35px rgba(28,16,7,.85);text-shadow:0 1px 2px rgba(0,0,0,.95),0 0 5px rgba(0,0,0,.75),0 2px 14px rgba(0,0,0,.5)}
/* Гербовый знак митрополита - золотом в верхнем правом углу его карточки, только когда она раскрыта */
.dukh-tile__gerb{position:absolute;top:22px;right:22px;width:10rem;height:12.8rem;z-index:3;display:none;pointer-events:none;
  background:var(--gerb,url(img/clergy_gerb_gold.avif)) no-repeat center/contain;filter:drop-shadow(0 2px 6px rgba(0,0,0,.55))}
@media(max-width:680px){.dukh-tile__gerb{width:7rem;height:9rem;top:14px;right:14px}}

/* ============================================================
   Святыни: accordion carousel (4 tiles) - same roof-tile pattern
   as Духовенство/Таинства. Radios s-1..s-4 drive tile + text panel.
   ============================================================ */
.svt-frame{border-radius:var(--r-lg);overflow:hidden}
.svt-tiles{display:flex;height:440px;gap:0}
.svt-tile{position:relative;flex:0 1 12.5%;min-width:0;overflow:hidden;cursor:pointer;background:#2f5537;border-radius:var(--r-lg);margin-left:-16px;border:1px solid var(--gold-glow);border-top-color:rgba(255,251,245,.5);box-shadow:-10px 5px 20px rgba(0,0,0,.28),10px 5px 20px rgba(0,0,0,.28);transition:flex .7s cubic-bezier(.16,1,.3,1)}
.svt-tile:first-child{margin-left:0}
.svt-tile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:var(--focus,50% 45%);filter:saturate(.85) brightness(.82);transition:filter .8s ease;display:block}
.svt-tile::after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,rgba(74,60,52,.02),rgba(74,60,52,.30) 100%)}
/* Sliver labels (shrines + clergy) centre with BOTH justify-content AND text-align, and need both:
   when the rotated vertical text wraps and fills the axis, justify-content is inert so text-align
   centres it; when it is nowrap/short (or the horizontal mobile bar) justify-content centres it.
   Keep both; the mobile overrides deliberately re-specify neither so they inherit this centring. */
.svt-tile__label{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:flex-start;pointer-events:none;padding-top:24px;writing-mode:vertical-rl;transform:rotate(180deg);font:700 .76rem/1.25 var(--sans);letter-spacing:1.4px;text-transform:uppercase;color:var(--gold-light);-webkit-text-stroke:.35px rgba(28,16,7,.85);text-shadow:0 1px 2px rgba(0,0,0,.95),0 0 5px rgba(0,0,0,.75),0 2px 14px rgba(0,0,0,.5)}
.svt-tile:focus-within{outline:2px solid var(--gold);outline-offset:-3px;z-index:6}
@media(prefers-reduced-motion:reduce){.svt-tile{transition:none}.svt-tile img{animation:none!important}}
/* Active states generated for up to 8 tiles so the admin can add/remove святыни freely. */
#s-1:checked~.svt-tiles .svt-tile:nth-child(1),
#s-2:checked~.svt-tiles .svt-tile:nth-child(2),
#s-3:checked~.svt-tiles .svt-tile:nth-child(3),
#s-4:checked~.svt-tiles .svt-tile:nth-child(4),
#s-5:checked~.svt-tiles .svt-tile:nth-child(5),
#s-6:checked~.svt-tiles .svt-tile:nth-child(6),
#s-7:checked~.svt-tiles .svt-tile:nth-child(7),
#s-8:checked~.svt-tiles .svt-tile:nth-child(8),
#s-9:checked~.svt-tiles .svt-tile:nth-child(9),
#s-10:checked~.svt-tiles .svt-tile:nth-child(10){flex:1 1 0}
#s-1:checked~.svt-tiles .svt-tile:nth-child(1) img,
#s-2:checked~.svt-tiles .svt-tile:nth-child(2) img,
#s-3:checked~.svt-tiles .svt-tile:nth-child(3) img,
#s-4:checked~.svt-tiles .svt-tile:nth-child(4) img,
#s-5:checked~.svt-tiles .svt-tile:nth-child(5) img,
#s-6:checked~.svt-tiles .svt-tile:nth-child(6) img,
#s-7:checked~.svt-tiles .svt-tile:nth-child(7) img,
#s-8:checked~.svt-tiles .svt-tile:nth-child(8) img,
#s-9:checked~.svt-tiles .svt-tile:nth-child(9) img,
#s-10:checked~.svt-tiles .svt-tile:nth-child(10) img{filter:none;animation:dukhKen 10s ease-in-out infinite alternate}
#s-1:checked~.svt-tiles .svt-tile:nth-child(1)::after,
#s-2:checked~.svt-tiles .svt-tile:nth-child(2)::after,
#s-3:checked~.svt-tiles .svt-tile:nth-child(3)::after,
#s-4:checked~.svt-tiles .svt-tile:nth-child(4)::after,
#s-5:checked~.svt-tiles .svt-tile:nth-child(5)::after,
#s-6:checked~.svt-tiles .svt-tile:nth-child(6)::after,
#s-7:checked~.svt-tiles .svt-tile:nth-child(7)::after,
#s-8:checked~.svt-tiles .svt-tile:nth-child(8)::after,
#s-9:checked~.svt-tiles .svt-tile:nth-child(9)::after,
#s-10:checked~.svt-tiles .svt-tile:nth-child(10)::after{background:linear-gradient(180deg,transparent 46%,rgba(38,26,17,.62) 100%)}
#s-1:checked~.svt-tiles .svt-tile:nth-child(1) .svt-tile__label,
#s-2:checked~.svt-tiles .svt-tile:nth-child(2) .svt-tile__label,
#s-3:checked~.svt-tiles .svt-tile:nth-child(3) .svt-tile__label,
#s-4:checked~.svt-tiles .svt-tile:nth-child(4) .svt-tile__label,
#s-5:checked~.svt-tiles .svt-tile:nth-child(5) .svt-tile__label,
#s-6:checked~.svt-tiles .svt-tile:nth-child(6) .svt-tile__label,
#s-7:checked~.svt-tiles .svt-tile:nth-child(7) .svt-tile__label,
#s-8:checked~.svt-tiles .svt-tile:nth-child(8) .svt-tile__label,
#s-9:checked~.svt-tiles .svt-tile:nth-child(9) .svt-tile__label,
#s-10:checked~.svt-tiles .svt-tile:nth-child(10) .svt-tile__label{writing-mode:horizontal-tb;transform:none;align-items:flex-end;justify-content:center;padding:22px 26px 66px;white-space:normal;font:600 1.7rem/1.12 var(--sans);letter-spacing:1px;text-transform:uppercase;color:var(--gold-light);text-align:center;-webkit-text-stroke:0}
#s-1:checked~.svt-tiles .svt-tile:nth-child(1){z-index:10}
#s-1:checked~.svt-tiles .svt-tile:nth-child(2){z-index:9}
#s-1:checked~.svt-tiles .svt-tile:nth-child(3){z-index:8}
#s-1:checked~.svt-tiles .svt-tile:nth-child(4){z-index:7}
#s-1:checked~.svt-tiles .svt-tile:nth-child(5){z-index:6}
#s-1:checked~.svt-tiles .svt-tile:nth-child(6){z-index:5}
#s-1:checked~.svt-tiles .svt-tile:nth-child(7){z-index:4}
#s-1:checked~.svt-tiles .svt-tile:nth-child(8){z-index:3}
#s-1:checked~.svt-tiles .svt-tile:nth-child(9){z-index:2}
#s-1:checked~.svt-tiles .svt-tile:nth-child(10){z-index:1}
#s-2:checked~.svt-tiles .svt-tile:nth-child(1){z-index:9}
#s-2:checked~.svt-tiles .svt-tile:nth-child(2){z-index:10}
#s-2:checked~.svt-tiles .svt-tile:nth-child(3){z-index:9}
#s-2:checked~.svt-tiles .svt-tile:nth-child(4){z-index:8}
#s-2:checked~.svt-tiles .svt-tile:nth-child(5){z-index:7}
#s-2:checked~.svt-tiles .svt-tile:nth-child(6){z-index:6}
#s-2:checked~.svt-tiles .svt-tile:nth-child(7){z-index:5}
#s-2:checked~.svt-tiles .svt-tile:nth-child(8){z-index:4}
#s-2:checked~.svt-tiles .svt-tile:nth-child(9){z-index:3}
#s-2:checked~.svt-tiles .svt-tile:nth-child(10){z-index:2}
#s-3:checked~.svt-tiles .svt-tile:nth-child(1){z-index:8}
#s-3:checked~.svt-tiles .svt-tile:nth-child(2){z-index:9}
#s-3:checked~.svt-tiles .svt-tile:nth-child(3){z-index:10}
#s-3:checked~.svt-tiles .svt-tile:nth-child(4){z-index:9}
#s-3:checked~.svt-tiles .svt-tile:nth-child(5){z-index:8}
#s-3:checked~.svt-tiles .svt-tile:nth-child(6){z-index:7}
#s-3:checked~.svt-tiles .svt-tile:nth-child(7){z-index:6}
#s-3:checked~.svt-tiles .svt-tile:nth-child(8){z-index:5}
#s-3:checked~.svt-tiles .svt-tile:nth-child(9){z-index:4}
#s-3:checked~.svt-tiles .svt-tile:nth-child(10){z-index:3}
#s-4:checked~.svt-tiles .svt-tile:nth-child(1){z-index:7}
#s-4:checked~.svt-tiles .svt-tile:nth-child(2){z-index:8}
#s-4:checked~.svt-tiles .svt-tile:nth-child(3){z-index:9}
#s-4:checked~.svt-tiles .svt-tile:nth-child(4){z-index:10}
#s-4:checked~.svt-tiles .svt-tile:nth-child(5){z-index:9}
#s-4:checked~.svt-tiles .svt-tile:nth-child(6){z-index:8}
#s-4:checked~.svt-tiles .svt-tile:nth-child(7){z-index:7}
#s-4:checked~.svt-tiles .svt-tile:nth-child(8){z-index:6}
#s-4:checked~.svt-tiles .svt-tile:nth-child(9){z-index:5}
#s-4:checked~.svt-tiles .svt-tile:nth-child(10){z-index:4}
#s-5:checked~.svt-tiles .svt-tile:nth-child(1){z-index:6}
#s-5:checked~.svt-tiles .svt-tile:nth-child(2){z-index:7}
#s-5:checked~.svt-tiles .svt-tile:nth-child(3){z-index:8}
#s-5:checked~.svt-tiles .svt-tile:nth-child(4){z-index:9}
#s-5:checked~.svt-tiles .svt-tile:nth-child(5){z-index:10}
#s-5:checked~.svt-tiles .svt-tile:nth-child(6){z-index:9}
#s-5:checked~.svt-tiles .svt-tile:nth-child(7){z-index:8}
#s-5:checked~.svt-tiles .svt-tile:nth-child(8){z-index:7}
#s-5:checked~.svt-tiles .svt-tile:nth-child(9){z-index:6}
#s-5:checked~.svt-tiles .svt-tile:nth-child(10){z-index:5}
#s-6:checked~.svt-tiles .svt-tile:nth-child(1){z-index:5}
#s-6:checked~.svt-tiles .svt-tile:nth-child(2){z-index:6}
#s-6:checked~.svt-tiles .svt-tile:nth-child(3){z-index:7}
#s-6:checked~.svt-tiles .svt-tile:nth-child(4){z-index:8}
#s-6:checked~.svt-tiles .svt-tile:nth-child(5){z-index:9}
#s-6:checked~.svt-tiles .svt-tile:nth-child(6){z-index:10}
#s-6:checked~.svt-tiles .svt-tile:nth-child(7){z-index:9}
#s-6:checked~.svt-tiles .svt-tile:nth-child(8){z-index:8}
#s-6:checked~.svt-tiles .svt-tile:nth-child(9){z-index:7}
#s-6:checked~.svt-tiles .svt-tile:nth-child(10){z-index:6}
#s-7:checked~.svt-tiles .svt-tile:nth-child(1){z-index:4}
#s-7:checked~.svt-tiles .svt-tile:nth-child(2){z-index:5}
#s-7:checked~.svt-tiles .svt-tile:nth-child(3){z-index:6}
#s-7:checked~.svt-tiles .svt-tile:nth-child(4){z-index:7}
#s-7:checked~.svt-tiles .svt-tile:nth-child(5){z-index:8}
#s-7:checked~.svt-tiles .svt-tile:nth-child(6){z-index:9}
#s-7:checked~.svt-tiles .svt-tile:nth-child(7){z-index:10}
#s-7:checked~.svt-tiles .svt-tile:nth-child(8){z-index:9}
#s-7:checked~.svt-tiles .svt-tile:nth-child(9){z-index:8}
#s-7:checked~.svt-tiles .svt-tile:nth-child(10){z-index:7}
#s-8:checked~.svt-tiles .svt-tile:nth-child(1){z-index:3}
#s-8:checked~.svt-tiles .svt-tile:nth-child(2){z-index:4}
#s-8:checked~.svt-tiles .svt-tile:nth-child(3){z-index:5}
#s-8:checked~.svt-tiles .svt-tile:nth-child(4){z-index:6}
#s-8:checked~.svt-tiles .svt-tile:nth-child(5){z-index:7}
#s-8:checked~.svt-tiles .svt-tile:nth-child(6){z-index:8}
#s-8:checked~.svt-tiles .svt-tile:nth-child(7){z-index:9}
#s-8:checked~.svt-tiles .svt-tile:nth-child(8){z-index:10}
#s-8:checked~.svt-tiles .svt-tile:nth-child(9){z-index:9}
#s-8:checked~.svt-tiles .svt-tile:nth-child(10){z-index:8}
#s-9:checked~.svt-tiles .svt-tile:nth-child(1){z-index:2}
#s-9:checked~.svt-tiles .svt-tile:nth-child(2){z-index:3}
#s-9:checked~.svt-tiles .svt-tile:nth-child(3){z-index:4}
#s-9:checked~.svt-tiles .svt-tile:nth-child(4){z-index:5}
#s-9:checked~.svt-tiles .svt-tile:nth-child(5){z-index:6}
#s-9:checked~.svt-tiles .svt-tile:nth-child(6){z-index:7}
#s-9:checked~.svt-tiles .svt-tile:nth-child(7){z-index:8}
#s-9:checked~.svt-tiles .svt-tile:nth-child(8){z-index:9}
#s-9:checked~.svt-tiles .svt-tile:nth-child(9){z-index:10}
#s-9:checked~.svt-tiles .svt-tile:nth-child(10){z-index:9}
#s-10:checked~.svt-tiles .svt-tile:nth-child(1){z-index:1}
#s-10:checked~.svt-tiles .svt-tile:nth-child(2){z-index:2}
#s-10:checked~.svt-tiles .svt-tile:nth-child(3){z-index:3}
#s-10:checked~.svt-tiles .svt-tile:nth-child(4){z-index:4}
#s-10:checked~.svt-tiles .svt-tile:nth-child(5){z-index:5}
#s-10:checked~.svt-tiles .svt-tile:nth-child(6){z-index:6}
#s-10:checked~.svt-tiles .svt-tile:nth-child(7){z-index:7}
#s-10:checked~.svt-tiles .svt-tile:nth-child(8){z-index:8}
#s-10:checked~.svt-tiles .svt-tile:nth-child(9){z-index:9}
#s-10:checked~.svt-tiles .svt-tile:nth-child(10){z-index:10}
.svt-bios{margin-top:20px;min-height:120px}
.svt-bio{display:none}
#s-1:checked~.svt-bios .svt-bio:nth-child(1),
#s-2:checked~.svt-bios .svt-bio:nth-child(2),
#s-3:checked~.svt-bios .svt-bio:nth-child(3),
#s-4:checked~.svt-bios .svt-bio:nth-child(4),
#s-5:checked~.svt-bios .svt-bio:nth-child(5),
#s-6:checked~.svt-bios .svt-bio:nth-child(6),
#s-7:checked~.svt-bios .svt-bio:nth-child(7),
#s-8:checked~.svt-bios .svt-bio:nth-child(8),
#s-9:checked~.svt-bios .svt-bio:nth-child(9),
#s-10:checked~.svt-bios .svt-bio:nth-child(10){display:block;animation:dukhFade .5s ease}
.svt-bio__name{font:400 1.7rem/1.25 var(--hd);color:var(--text);margin:0 0 10px;text-align:center}
.svt-bio__text{font:400 1.02rem/1.7 var(--sans);color:var(--text-light2)}
.svt-bio__text p{margin-bottom:10px}
/* ── Long bios read in two full-width columns on wide desktop, one full-width column
   on tablet/mobile (owner-agreed 2026-07-16). Lists/paragraphs never split the gap. ── */
@media(min-width:961px){
  .svt-bios .svt-bio__text,
  .dukh-bios .dukh-bio__text{columns:2;column-gap:2.75rem}
  .svt-bios .svt-bio__text > *,
  .dukh-bios .dukh-bio__text > *{break-inside:avoid;margin-top:0}
  /* The expand toggle and the timeline must NOT ride the column flow: the button spans
     both columns (same centred position collapsed and expanded, can never be fragmented
     by a column break), and the expanded timeline becomes its own two-column block with
     per-item dots (the single continuous rail cannot cross columns). */
  /* margin-top is restored after the blanket reset above: the reset exists to keep column
     tops flush, but it also stripped the toggle's own air and glued the button to the last
     line of the bio (measured 0px at >=961). 28px equals the .clergy-frame padding, so the
     button now sits with the same air above it as below it. */
  .dukh-bios .bio-toggle{column-span:all;margin-top:28px}
  .dukh-bios .bio-full{column-span:all;margin-top:16px}
  .dukh-bios .bio-full .timeline{columns:2;column-gap:2.75rem;padding-left:0}
  .dukh-bios .bio-full .timeline::before{display:none}
  .dukh-bios .bio-full .timeline .timeline__item{break-inside:avoid;padding-left:28px}
  .dukh-bios .bio-full .timeline .timeline__item::before{left:4px}
}
/* ── Body-prose lists (site-wide). The global ul{list-style:none} strips markers; restore
   real bullets/numbers wherever the bake emits a list from "- " / "1." author lines. ── */
/* In-text subheading inside shrine/clergy bios ("### " marker in admin text, scan C22) */
.svt-sub{font:600 1.05rem/1.4 var(--sans);color:var(--gold-text);margin:18px 0 6px;letter-spacing:.2px;text-align:left}
.svt-bio__text ul,.dukh-bio__text ul,.about-card ul,.life-card ul,.tab-pane ul,.article-body ul{list-style:disc;padding-left:1.35em;margin:.55em 0}
.svt-bio__text ol,.dukh-bio__text ol,.about-card ol,.life-card ol,.tab-pane ol,.article-body ol{list-style:decimal;padding-left:1.5em;margin:.55em 0}
.svt-bio__text li,.dukh-bio__text li,.about-card li,.life-card li,.tab-pane li,.article-body li{margin:.3em 0;padding-left:.2em}
.svt-bio__text li::marker,.dukh-bio__text li::marker,.about-card li::marker,.life-card li::marker,.tab-pane li::marker,.article-body li::marker{color:var(--gold-text)}
@media(max-width:680px){
.svt-tiles{flex-direction:column;height:auto}
.svt-tile{flex:0 0 auto;height:54px;margin-left:0;margin-top:-10px;transition:none;border-radius:var(--r-lg)}
.svt-tile:first-child{margin-top:0}
.svt-tile__label{writing-mode:horizontal-tb;transform:none;justify-content:center;text-align:center;padding:0 22px;font-size:.8rem;padding-top:0}
#s-1:checked~.svt-tiles .svt-tile:nth-child(1),
#s-2:checked~.svt-tiles .svt-tile:nth-child(2),
#s-3:checked~.svt-tiles .svt-tile:nth-child(3),
#s-4:checked~.svt-tiles .svt-tile:nth-child(4),
#s-5:checked~.svt-tiles .svt-tile:nth-child(5),
#s-6:checked~.svt-tiles .svt-tile:nth-child(6),
#s-7:checked~.svt-tiles .svt-tile:nth-child(7),
#s-8:checked~.svt-tiles .svt-tile:nth-child(8),
#s-9:checked~.svt-tiles .svt-tile:nth-child(9),
#s-10:checked~.svt-tiles .svt-tile:nth-child(10){flex-basis:auto;height:auto;aspect-ratio:4/5}
#s-1:checked~.svt-tiles .svt-tile:nth-child(1) .svt-tile__label,
#s-2:checked~.svt-tiles .svt-tile:nth-child(2) .svt-tile__label,
#s-3:checked~.svt-tiles .svt-tile:nth-child(3) .svt-tile__label,
#s-4:checked~.svt-tiles .svt-tile:nth-child(4) .svt-tile__label,
#s-5:checked~.svt-tiles .svt-tile:nth-child(5) .svt-tile__label,
#s-6:checked~.svt-tiles .svt-tile:nth-child(6) .svt-tile__label,
#s-7:checked~.svt-tiles .svt-tile:nth-child(7) .svt-tile__label,
#s-8:checked~.svt-tiles .svt-tile:nth-child(8) .svt-tile__label,
#s-9:checked~.svt-tiles .svt-tile:nth-child(9) .svt-tile__label,
#s-10:checked~.svt-tiles .svt-tile:nth-child(10) .svt-tile__label{font-size:1.15rem;padding:16px 22px 56px}
}
@keyframes dukhKen{from{transform:scale(1)}to{transform:scale(1.05)}}
@media(prefers-reduced-motion:reduce){.dukh-tile{transition:none}.dukh-tile img{animation:none!important}}
.dukh-tile:focus-within{outline:2px solid var(--gold);outline-offset:-3px;z-index:6}
/* keyboard focus ring on the carousel tile whose sr-only radio is focused (mirrors the tainstva pattern) */
#d-1:focus-visible~.dukh-tiles .dukh-tile:nth-child(1),#d-2:focus-visible~.dukh-tiles .dukh-tile:nth-child(2),#d-3:focus-visible~.dukh-tiles .dukh-tile:nth-child(3),#d-4:focus-visible~.dukh-tiles .dukh-tile:nth-child(4),#d-5:focus-visible~.dukh-tiles .dukh-tile:nth-child(5),#d-6:focus-visible~.dukh-tiles .dukh-tile:nth-child(6),#d-7:focus-visible~.dukh-tiles .dukh-tile:nth-child(7),#d-8:focus-visible~.dukh-tiles .dukh-tile:nth-child(8),#s-1:focus-visible~.svt-tiles .svt-tile:nth-child(1),#s-2:focus-visible~.svt-tiles .svt-tile:nth-child(2),#s-3:focus-visible~.svt-tiles .svt-tile:nth-child(3),#s-4:focus-visible~.svt-tiles .svt-tile:nth-child(4),#s-5:focus-visible~.svt-tiles .svt-tile:nth-child(5),#s-6:focus-visible~.svt-tiles .svt-tile:nth-child(6),#s-7:focus-visible~.svt-tiles .svt-tile:nth-child(7),#s-8:focus-visible~.svt-tiles .svt-tile:nth-child(8),#s-9:focus-visible~.svt-tiles .svt-tile:nth-child(9),#s-10:focus-visible~.svt-tiles .svt-tile:nth-child(10){outline:2px solid var(--gold);outline-offset:-3px;z-index:9}
/* the OPEN tile: expand, lift above neighbours, full colour + slow ken-burns */
/* Духовенство active states - generated for up to 10 tiles so the admin can add/remove clergy freely.
   1-10 CONTRACT (do not "optimize"): the pages are static and the accordion is pure CSS, so rules for
   ALL 10 possible tiles ship in advance even though the data may hold fewer. d-7..d-10 / s-7..s-10 are
   NOT dead code. Grouped selectors span many lines and ONLY THE LAST line carries the {declarations} -
   deleting any line decapitates the whole rule (this happened 21.07.2026; restored 22.07). */
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1),
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2),
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3),
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4),
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5),
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6),
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7),
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8),
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9),
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10){flex:1 1 0}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1) img,
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2) img,
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3) img,
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4) img,
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5) img,
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6) img,
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7) img,
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8) img,
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9) img,
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10) img{filter:none;animation:dukhKen 10s ease-in-out infinite alternate}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1)::after,
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2)::after,
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3)::after,
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4)::after,
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5)::after,
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6)::after,
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7)::after,
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8)::after,
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9)::after,
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10)::after{background:linear-gradient(180deg,transparent 46%,rgba(38,26,17,.62) 100%)}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1) .dukh-tile__label,
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2) .dukh-tile__label,
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3) .dukh-tile__label,
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4) .dukh-tile__label,
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5) .dukh-tile__label,
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6) .dukh-tile__label,
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7) .dukh-tile__label,
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8) .dukh-tile__label,
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9) .dukh-tile__label,
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10) .dukh-tile__label{writing-mode:horizontal-tb;transform:none;align-items:flex-end;justify-content:center;padding:22px 26px 66px;white-space:normal;font:600 2.1rem/1.1 var(--sans);letter-spacing:2.5px;text-transform:uppercase;color:var(--gold-light);text-align:center;-webkit-text-stroke:0}

.dukh-tile__label .tl-f{display:none}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1) .tl-s,
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2) .tl-s,
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3) .tl-s,
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4) .tl-s,
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5) .tl-s,
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6) .tl-s,
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7) .tl-s,
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8) .tl-s,
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9) .tl-s,
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10) .tl-s{display:none}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1) .tl-f,
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2) .tl-f,
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3) .tl-f,
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4) .tl-f,
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5) .tl-f,
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6) .tl-f,
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7) .tl-f,
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8) .tl-f,
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9) .tl-f,
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10) .tl-f{display:inline}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1) .dukh-tile__gerb,
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2) .dukh-tile__gerb,
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3) .dukh-tile__gerb,
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4) .dukh-tile__gerb,
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5) .dukh-tile__gerb,
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6) .dukh-tile__gerb,
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7) .dukh-tile__gerb,
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8) .dukh-tile__gerb,
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9) .dukh-tile__gerb,
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10) .dukh-tile__gerb{display:block}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:10}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:9}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:8}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:7}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:6}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:5}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:4}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:3}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:2}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:1}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:9}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:10}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:9}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:8}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:7}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:6}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:5}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:4}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:3}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:2}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:8}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:9}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:10}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:9}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:8}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:7}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:6}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:5}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:4}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:3}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:7}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:8}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:9}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:10}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:9}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:8}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:7}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:6}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:5}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:4}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:6}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:7}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:8}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:9}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:10}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:9}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:8}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:7}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:6}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:5}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:5}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:6}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:7}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:8}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:9}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:10}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:9}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:8}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:7}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:6}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:4}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:5}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:6}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:7}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:8}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:9}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:10}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:9}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:8}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:7}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:3}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:4}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:5}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:6}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:7}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:8}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:9}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:10}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:9}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:8}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:2}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:3}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:4}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:5}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:6}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:7}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:8}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:9}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:10}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:9}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(1){z-index:1}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(2){z-index:2}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(3){z-index:3}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(4){z-index:4}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(5){z-index:5}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(6){z-index:6}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(7){z-index:7}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(8){z-index:8}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(9){z-index:9}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10){z-index:10}
.dukh-bios{margin-top:20px;min-height:130px}
.dukh-bio{display:none}
#d-1:checked~.dukh-bios .dukh-bio:nth-child(1),
#d-2:checked~.dukh-bios .dukh-bio:nth-child(2),
#d-3:checked~.dukh-bios .dukh-bio:nth-child(3),
#d-4:checked~.dukh-bios .dukh-bio:nth-child(4),
#d-5:checked~.dukh-bios .dukh-bio:nth-child(5),
#d-6:checked~.dukh-bios .dukh-bio:nth-child(6),
#d-7:checked~.dukh-bios .dukh-bio:nth-child(7),
#d-8:checked~.dukh-bios .dukh-bio:nth-child(8),
#d-9:checked~.dukh-bios .dukh-bio:nth-child(9),
#d-10:checked~.dukh-bios .dukh-bio:nth-child(10){display:block;animation:dukhFade .5s ease}
@keyframes dukhFade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.dukh-bio__role{font:600 .68rem/1 var(--sans);text-transform:uppercase;letter-spacing:4px;color:var(--gold-text);margin-bottom:8px;text-align:center}
.dukh-bio__name{font:400 2.2rem/1.25 var(--hd);color:var(--text);margin:0 0 8px;text-align:center}
.dukh-bio__meta{font:500 .85rem/1.4 var(--sans);color:var(--text3);margin-bottom:14px;text-align:center}
.dukh-bio__text{font:400 1.04rem/1.7 var(--sans);color:var(--text-light2)}
.dukh-bio__text p{margin-bottom:10px}
@media(max-width:680px){
.dukh-tiles{flex-direction:column;height:auto}
.dukh-tile{flex:0 0 auto;height:56px;margin-left:0;margin-top:-10px;transition:none;border-radius:var(--r-lg)}
.dukh-tile:first-child{margin-top:0}
.dukh-tile__label{writing-mode:horizontal-tb;transform:none;justify-content:center;text-align:center;padding:0 22px;font-size:.82rem;letter-spacing:2px}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1),
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2),
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3),
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4),
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5),
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6),
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7),
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8),
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9),
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10){flex-basis:auto;height:auto;aspect-ratio:4/5}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1) .dukh-tile__label,
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2) .dukh-tile__label,
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3) .dukh-tile__label,
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4) .dukh-tile__label,
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5) .dukh-tile__label,
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6) .dukh-tile__label,
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7) .dukh-tile__label,
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8) .dukh-tile__label,
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9) .dukh-tile__label,
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10) .dukh-tile__label{font-size:1.3rem;padding:16px 22px 56px}
}

/* «Подробнее →» pill: shown ONLY on the expanded/active homepage card (baked homepage-only). Sits centred BELOW the name; a nested <a> inside the <label> deep-links to that exact person/shrine on О храме and does NOT re-toggle the accordion radio. Gold fill, dark ink (inverted).
   CAROUSEL CAPTION RULE (clergy + shrines, and any future overlay-carousel): the pill is bottom-anchored (bottom:20px desktop / 16px mobile) and the name block is bottom-anchored too (align-items:flex-end), with padding-bottom set to clear the pill by a TIGHT ~10px gap - identical on both carousels regardless of font size (desktop 66px, mobile 56px). Names may wrap to 2 lines; they grow UPWARD from this fixed baseline so the name-to-button gap stays constant. Do not re-introduce per-carousel padding drift. */
.dukh-more,.svt-more{display:none;position:absolute;left:50%;bottom:20px;transform:translateX(-50%);z-index:4;pointer-events:auto;align-items:center;gap:6px;
  font:600 .95rem/1 var(--hd);letter-spacing:.3px;color:#2a1b0c;text-decoration:none;padding:9px 18px;border-radius:999px;
  background:var(--gold-light);border:1.5px solid #6b4a1e;
  box-shadow:0 4px 14px rgba(0,0,0,.42),0 1px 0 rgba(255,255,255,.35) inset;transition:background .25s var(--ease),box-shadow .25s var(--ease),border-color .25s var(--ease)}
.dukh-more:hover,.svt-more:hover,.dukh-more:focus-visible,.svt-more:focus-visible{background:#f3dd93;border-color:#573a15;box-shadow:0 6px 18px rgba(0,0,0,.48),0 1px 0 rgba(255,255,255,.45) inset}
.dukh-more .cta-arr,.svt-more .cta-arr{width:1.05em;height:1.05em;flex:0 0 auto;transition:transform .25s var(--ease)}
.dukh-more:hover .cta-arr,.svt-more:hover .cta-arr{transform:translateX(3px)}
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(1) .dukh-more,
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(2) .dukh-more,
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(3) .dukh-more,
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(4) .dukh-more,
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(5) .dukh-more,
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(6) .dukh-more,
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(7) .dukh-more,
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(8) .dukh-more,
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(9) .dukh-more,
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(10) .dukh-more,
#s-1:checked~.svt-tiles .svt-tile:nth-child(1) .svt-more,
#s-2:checked~.svt-tiles .svt-tile:nth-child(2) .svt-more,
#s-3:checked~.svt-tiles .svt-tile:nth-child(3) .svt-more,
#s-4:checked~.svt-tiles .svt-tile:nth-child(4) .svt-more,
#s-5:checked~.svt-tiles .svt-tile:nth-child(5) .svt-more,
#s-6:checked~.svt-tiles .svt-tile:nth-child(6) .svt-more,
#s-7:checked~.svt-tiles .svt-tile:nth-child(7) .svt-more,
#s-8:checked~.svt-tiles .svt-tile:nth-child(8) .svt-more,
#s-9:checked~.svt-tiles .svt-tile:nth-child(9) .svt-more,
#s-10:checked~.svt-tiles .svt-tile:nth-child(10) .svt-more{display:inline-flex}
@media(max-width:680px){.dukh-more,.svt-more{bottom:16px;font-size:.85rem;padding:8px 15px}}

/* ── Объявление на главной (task #63): variant V floating card, links to a chosen news article.
   Baked by bake-carousels.js into bk:announce; shown by its inline script ~1.1s after load unless
   dismissed (localStorage annDismissed = post id). Sits above the social fab stack. ── */
.ann-card{position:fixed;right:22px;bottom:132px;z-index:310;width:min(330px,calc(100vw - 44px));
  /* Было rgba(38,23,13,.97), тёмный шоколад терракотового поколения. Карточка сейчас не
     рендерится (объявление выключено в админке), поэтому перекрас 29.07 её не заметил, и
     это мина: при включении она вышла бы коричневой на зелёном сайте. Тон взят у шапки
     rgba(18,38,24,.93) и подвала #14281a, а не изобретён. Контраст текста #f5ede0 при
     этом 12.43:1, запас большой. */
  background:rgba(20,45,26,.97);border:1px solid rgba(212,168,67,.4);border-radius:14px;overflow:hidden;
  color:var(--cream,#f5ede0);box-shadow:0 16px 50px rgba(0,0,0,.5);
  opacity:0;transform:translateY(14px);transition:opacity .5s var(--ease),transform .5s var(--ease)}
.ann-card--in{opacity:1;transform:none}
.ann-card__link{display:block;text-decoration:none;color:inherit}
.ann-card__img{display:block;width:100%;height:150px;object-fit:cover;border-bottom:1px solid rgba(212,168,67,.25)}
.ann-card__body{display:block;padding:14px 18px 16px}
.ann-card__tag{display:inline-flex;align-items:center;gap:7px;margin-bottom:8px;color:var(--gold-light);
  font:600 .72rem/1 var(--sans);letter-spacing:1.5px;text-transform:uppercase}
.ann-card__title{display:block;font:400 1.02rem/1.4 var(--sans);color:#f5ede0;margin-bottom:12px}
.ann-card__btn{display:inline-block;background:var(--gold-light);color:#2a1b0c;font:600 .8rem/1 var(--sans);
  padding:9px 16px;border-radius:999px;transition:background .25s var(--ease)}
.ann-card__link:hover .ann-card__btn{background:#f3dd93}
.ann-card__x{position:absolute;right:4px;top:4px;z-index:2;background:rgba(20,12,6,.55);border:0;border-radius:50%;
  width:28px;height:28px;color:rgba(245,237,224,.85);font-size:1.05rem;line-height:1;cursor:pointer;padding:0}
.ann-card__x:hover{color:#fff;background:rgba(20,12,6,.8)}
@media(max-width:680px){.ann-card{right:14px;bottom:96px}.ann-card__img{height:128px}}
@media(prefers-reduced-motion:reduce){.ann-card{transition:none;transform:none}}

/* scr2: collapsed accordion labels are ~8px off-centre because tiles overlap 16px on the
   active-facing side (z-cascade). Nudge each back into its visible sliver. Padding direction
   is flipped by writing-mode:vertical-rl + rotate(180deg): before-active=>padding-left,
   after-active=>padding-right (both verified live to land at ~0px offset). Desktop only
   (mobile accordion is a vertical stack, no overlap). */
@media(min-width:681px){
#d-1:checked~.dukh-tiles .dukh-tile:nth-child(n+2) .dukh-tile__label{padding-right:16px}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(-n+1) .dukh-tile__label{padding-left:16px}
#d-2:checked~.dukh-tiles .dukh-tile:nth-child(n+3) .dukh-tile__label{padding-right:16px}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(-n+2) .dukh-tile__label{padding-left:16px}
#d-3:checked~.dukh-tiles .dukh-tile:nth-child(n+4) .dukh-tile__label{padding-right:16px}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(-n+3) .dukh-tile__label{padding-left:16px}
#d-4:checked~.dukh-tiles .dukh-tile:nth-child(n+5) .dukh-tile__label{padding-right:16px}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(-n+4) .dukh-tile__label{padding-left:16px}
#d-5:checked~.dukh-tiles .dukh-tile:nth-child(n+6) .dukh-tile__label{padding-right:16px}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(-n+5) .dukh-tile__label{padding-left:16px}
#d-6:checked~.dukh-tiles .dukh-tile:nth-child(n+7) .dukh-tile__label{padding-right:16px}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(-n+6) .dukh-tile__label{padding-left:16px}
#d-7:checked~.dukh-tiles .dukh-tile:nth-child(n+8) .dukh-tile__label{padding-right:16px}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(-n+7) .dukh-tile__label{padding-left:16px}
#d-8:checked~.dukh-tiles .dukh-tile:nth-child(n+9) .dukh-tile__label{padding-right:16px}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(-n+8) .dukh-tile__label{padding-left:16px}
#d-9:checked~.dukh-tiles .dukh-tile:nth-child(n+10) .dukh-tile__label{padding-right:16px}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(-n+9) .dukh-tile__label{padding-left:16px}
#d-10:checked~.dukh-tiles .dukh-tile:nth-child(n+11) .dukh-tile__label{padding-right:16px}
#s-1:checked~.svt-tiles .svt-tile:nth-child(n+2) .svt-tile__label{padding-right:16px}
#s-2:checked~.svt-tiles .svt-tile:nth-child(-n+1) .svt-tile__label{padding-left:16px}
#s-2:checked~.svt-tiles .svt-tile:nth-child(n+3) .svt-tile__label{padding-right:16px}
#s-3:checked~.svt-tiles .svt-tile:nth-child(-n+2) .svt-tile__label{padding-left:16px}
#s-3:checked~.svt-tiles .svt-tile:nth-child(n+4) .svt-tile__label{padding-right:16px}
#s-4:checked~.svt-tiles .svt-tile:nth-child(-n+3) .svt-tile__label{padding-left:16px}
#s-4:checked~.svt-tiles .svt-tile:nth-child(n+5) .svt-tile__label{padding-right:16px}
#s-5:checked~.svt-tiles .svt-tile:nth-child(-n+4) .svt-tile__label{padding-left:16px}
#s-5:checked~.svt-tiles .svt-tile:nth-child(n+6) .svt-tile__label{padding-right:16px}
#s-6:checked~.svt-tiles .svt-tile:nth-child(-n+5) .svt-tile__label{padding-left:16px}
#s-6:checked~.svt-tiles .svt-tile:nth-child(n+7) .svt-tile__label{padding-right:16px}
#s-7:checked~.svt-tiles .svt-tile:nth-child(-n+6) .svt-tile__label{padding-left:16px}
#s-7:checked~.svt-tiles .svt-tile:nth-child(n+8) .svt-tile__label{padding-right:16px}
#s-8:checked~.svt-tiles .svt-tile:nth-child(-n+7) .svt-tile__label{padding-left:16px}
#s-8:checked~.svt-tiles .svt-tile:nth-child(n+9) .svt-tile__label{padding-right:16px}
#s-9:checked~.svt-tiles .svt-tile:nth-child(-n+8) .svt-tile__label{padding-left:16px}
#s-9:checked~.svt-tiles .svt-tile:nth-child(n+10) .svt-tile__label{padding-right:16px}
#s-10:checked~.svt-tiles .svt-tile:nth-child(-n+9) .svt-tile__label{padding-left:16px}
}

/* ═══ SECONDARY SECTION NAV (.secnav) - per-page section nav, subordinate sibling of .hdr ═══
   Sticky (not a 2nd fixed bar), no logo, shorter/inset/quieter than the header. Lebedev spec 2026-07-14. */
.secnav{position:sticky;top:68px;z-index:150;width:calc(100vw - 96px);max-width:1152px;margin:6px auto 22px;background:rgba(18,38,24,.62);backdrop-filter:blur(14px) saturate(1.1);-webkit-backdrop-filter:blur(14px) saturate(1.1);border:1px solid rgba(255,240,220,.10);border-radius:var(--r-lg);box-shadow:0 6px 24px rgba(10,24,14,.22)}
.secnav__row{display:flex;justify-content:space-between;align-items:center;gap:8px;height:40px;padding:0 20px}
.secnav a{display:inline-flex;align-items:center;gap:7px;font:600 .76rem/1 var(--sans);color:rgba(237,228,213,.72);letter-spacing:.2px;white-space:nowrap;position:relative;transition:color .25s var(--ease)}
.secnav a svg{width:16px;height:16px;flex:0 0 auto;transition:transform .25s var(--ease)}
.secnav a::after{content:'';position:absolute;bottom:-3px;left:0;right:0;height:1px;background:var(--gold);transform:scaleX(0);transform-origin:left;transition:transform .3s var(--ease)}
.secnav a:hover,.secnav a:focus-visible{color:var(--gold)}
.secnav a:hover svg,.secnav a:focus-visible svg{transform:translateY(-2px)}
.secnav a:hover::after,.secnav a:focus-visible::after{transform:scaleX(1)}
.secnav a[aria-current="location"]{color:var(--gold-text)}
.secnav a[aria-current="location"]::after{transform:scaleX(1)}
.life-card[id],section[id]{scroll-margin-top:120px}
@media(max-width:1000px){
  .secnav{width:calc(100vw - 32px);max-width:none;top:64px;border-radius:var(--r);margin-top:18px}
  .secnav__row{justify-content:flex-start;height:38px;padding:0 14px;gap:18px;overflow-x:auto;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch;scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 85%,transparent);mask-image:linear-gradient(90deg,#000 85%,transparent)}
  .secnav__row::-webkit-scrollbar{display:none}
  .secnav a{scroll-snap-align:start}
}
@media(prefers-reduced-motion:reduce){.secnav a:hover svg,.secnav a:focus-visible svg{transform:none}}
@media print{.secnav{display:none!important}}

/* ═══ D-05. Выключка по формату: full-width justified body prose, БЕЗ переносов слов ═══
   НАМЕРЕННОЕ РЕШЕНИЕ. Выглядит как канонический анти-паттерн типографики (разреженные
   строки, вертикальные реки), и правится уверенно в одну строку. Аудит 16.07 назвал это
   «единственным дефектом, который независимо отметили все четыре линзы», правка дошла
   до кода коммитом 3b8be376 и была откачена через 7 ч 39 мин коммитом ef57dcb2.
   Это единственная атака на решение, дошедшая до боевого кода. Полностью: DECISIONS.md
   Просьба Натальи + решение владельца (20.07.2026): церковные титулы
   («Высокопреосвященству», «благочинный», «протодиакон») нельзя рвать переносом
   НИГДЕ на сайте. Слово, которое не помещается, уходит на следующую строку целиком,
   строка добирается пробелами (поведение Word при запрете переносов).
   Выключка по ширине сохранена (Lebedev-panel 15.07). overflow-wrap остаётся
   аварийным клапаном для сверхдлинных строк-URL. */
.about-card p,
.life-card p,
.tab-pane p,
.rekv-card p,
.svt-bio__text p,
.dukh-bio__text p,
.article-body p{
  text-align:justify;
  text-justify:inter-word;
  -webkit-hyphens:none;
  -ms-hyphens:none;
  hyphens:none;
  text-wrap:pretty;
  hanging-punctuation:first;
  text-align-last:left;
  overflow-wrap:break-word;
}
/* Per-paragraph alignment override (admin editor, owner-locked feature 22.07). Only these three
   classes survive the sanitizers; absence of a class = the justified site default above. */
.article-body p.ta-l{text-align:left}
.article-body p.ta-c{text-align:center}
.article-body p.ta-r{text-align:right}
/* Photo captions: centered, and EXCLUDED from the justify block above - its text-align-last:left
   is a separate longhand that an inline text-align:center cannot override, so a one-line caption
   was dragged flush left under its centered image (Lebedev scan 2026-07-19). Same 0-1-1
   specificity as ".about-card p", declared later -> wins. */
.about-card p.photo-caption,.life-card p.photo-caption,p.photo-caption{
  text-align:center;text-align-last:center;-webkit-hyphens:manual;hyphens:manual;
  font:400 .9rem/1.5 var(--sans);color:var(--text-light2);margin-top:8px}
/* Keep ragged: bank/account numbers + display quotes must not stretch or mid-break */
.rekv-card .detail p,
.tab-pane blockquote p,
.about-card blockquote{
  text-align:left;
  text-align-last:left;
  -webkit-hyphens:manual;
  -ms-hyphens:manual;
  hyphens:manual;
}
/* ОТМЕНЕНО 20.07.2026, комментарий оставлен НАМЕРЕННО и переписан в отмену.
   Просьба владельца от 16.07 сохранить автоперенос на телефонах снята решением владельца
   и Натальи 19-20.07 (коммит 9b8498a0): церковные титулы не рвутся переносом нигде.
   Прежняя редакция этого комментария предписывала обратное и была на три дня СТАРШЕ
   отменившего её решения, то есть приглашала вернуть переносы, и звучала убедительнее
   кода. Замок D-05 такую ловушку не ловит: он считает text-align:justify и hyphens:none,
   а комментарий их не меняет.
   Правило под этим комментарием отсутствует намеренно. Полностью: DECISIONS.md, D-05. */

/* Фокус на <summary>: сайтовый стиль фокуса сюда не доезжал, и браузер рисовал свою
   синюю обводку (#005FCC на фоне подвала это расчётно 2.60:1 при требуемых 3:1).
   Спорить с тем, вытягивает ли Chrome двухтональным кольцом, дешевле не спорить:
   задаём свой фокус явно, и вопрос снимается независимо от того, кто прав. */
summary:focus-visible{outline:2px solid var(--gold);outline-offset:3px;border-radius:4px}

/* Иконка PDF: высоту задаём ЯВНО, иначе глобальное img{height:auto} перебивает атрибут
   height="20", и до декодирования AVIF высота равна нулю. Замер Lighthouse 13.08:
   рост иконки с 0 до 20 px двигал section.cal высотой 5870 px и давал CLS 0.823 на
   мобильном. Правило обязано жить в КРИТИЧЕСКОМ листе: в основном оно приедет поздно. */
#schPdfLink img{width:20px;height:20px;flex:0 0 auto}

/* ВОЗВРАТ МОБИЛЬНОГО КЕГЛЯ КАРТОЧНЫХ h2, 14.08.2026.
   Замер: h1 страницы 28.8px, а .about-card h2 внутри неё 35.2px, то есть заголовок
   РАЗДЕЛА на 22% крупнее заголовка СТРАНИЦЫ. Иерархия читалась наоборот.
   Причина не в отсутствии правила: объявление font-size:1.55rem на :904 существует, но
   его перебивают шорткаты `font:` на :1023, :1037, :1052, :1062, :1111 и :1127, а шорткат
   сбрасывает font-size целиком. Работал только .word__content h2, чей шорткат стоит выше
   медиазапроса.
   Правило дописано В КОНЕЦ, а не переставлено: специфичность та же, решает позиция, и
   существующий порядок не трогается. */
@media(max-width:640px){
  .contact-card h2,.map-card h2,.rekv-card h2,.about-card h2,
  .tab-pane h2,.life-card h2{font-size:1.55rem;line-height:1.2}
}

/* ═══ МОБИЛЬНЫЕ ПРАВКИ 14.08.2026, разбор по мерке Лебедева ═══
   Собраны в конец файла ОДНИМ блоком намеренно: специфичность у них та же, что у исходных
   правил, решает позиция, и существующий порядок не трогается. Так правку видно целиком,
   и откатывается она одним куском. */

/* КОНТРАСТ ЗОЛОТОГО. Замер на боевом: подзаголовки истории 3.54:1, ссылка возврата 2.79:1
   при норме 4.5:1 для основного текста. Новых цветов НЕ заводится: в палитре уже лежит
   --gold-text #F2DC97, дающий 4.55:1 на том же фоне, и он для того и сделан.
   --gold и --gold-light остаются как есть: они работают на крупном кегле и на плашках,
   где норма 3:1, и там проходят. */
@media(max-width:960px){
  .about-card h3.hist-sub{color:var(--gold-text)}
  .hist-back{color:var(--gold-text)}
}

/* СИРОТЫ В ЗАГОЛОВКАХ. Замер: из 21 подзаголовка истории 8 переносятся на две строки, и у
   семи вторая строка короче 35% первой, вплоть до одного слова в 36 пикселей.
   text-wrap:balance выравнивает строки по длине и не трогает ни переносы, ни выключку,
   поэтому D-05 здесь ни при чём: свойство работает на РАЗБИЕНИИ, а не на выравнивании. */
h1,h2,h3,.hist-sub,.card__title,.block-cta{text-wrap:balance}

/* ТИПОГРАФИКА РАСПИСАНИЯ. Замер карточки дня: название праздника 22.72px, а ОТВЕТ НА ВОПРОС
   ЧИТАТЕЛЯ, то есть время и название службы, 13.12px. Иерархия перевёрнута: человек приходит
   узнать, когда служба, а крупнее всего набрано то, что он и так знает из календаря.
   Праздник не уменьшается (это заголовок карточки), поднимается служба. */
@media(max-width:960px){
  .cel__svc-group>span,.cel__svc{font-size:.94rem;line-height:1.45}
  .cel__svc b{font-size:.94rem}
  .info p{font-size:.94rem;line-height:1.5}
}

/* ЗОНЫ НАЖАТИЯ. Четыре класса недобирали норму 44x44: ряд подчинённой навигации давал 16px
   по высоте ссылки, пилюли фильтра новостей 29.2px, ссылки подвала 17px. Правится высотой
   строки и отступом, а не увеличением кегля: кегль тут ни при чём. */
@media(max-width:960px){
  .secnav__row{height:48px}
  .secnav a{align-self:stretch;display:flex;align-items:center}
  .cat-tab{padding:13px 18px}
  .site-foot a{display:inline-block;padding:6px 0}
}


/* ═══ Блок «Чем можно заняться при храме», перенесено со стенда 18.08.2026 ═══ */
/* ── Предсборка блока занятий: стили в стенде, лист сайта не трогаем ── */
/* Ритм страницы: каждая секция несёт padding-top 80 (у соседей это news/shrine/word
   из trinity-style.css). Без этой строки карточка занятий прилипала к «Святыням»
   вплотную: замер 18.08 дал 0 px между карточками при 80 у всех остальных пар. */
.act{padding:var(--sec-gap) 0 0}
.act__head{pointer-events:none}
/* Круги сидят вплотную к кнопке-заголовку (правка владельца 19.08): без зазора
   сетки и с ужатым нижним полем кнопки только в этом блоке. */
.act .block-cta{padding-bottom:10px}
.act__grid{display:grid;grid-template-columns:1fr;gap:10px;margin-top:0}
@media(min-width:700px){.act__grid{grid-template-columns:repeat(2,1fr);gap:12px}}
/* Девять карточек в две колонки дают сироту: последняя занимает ряд целиком */
@media(min-width:700px) and (max-width:1019.98px){.act__item:last-child{grid-column:1/-1}}
@media(min-width:1020px){.act__grid{grid-template-columns:repeat(3,1fr)}}
.act__item{display:flex;align-items:center;gap:14px;padding:12px 14px;
  border:1px solid rgba(255,240,220,.13);border-radius:14px;
  /* Фон плотный НАМЕРЕННО. Рецензия 18.08: полупрозрачная карточка поверх размывки
     block-card пропускала светлые волны фона, и настоящий контраст описаний по
     пикселям снимка был 3.25:1 при норме 4.5. Сверка доказала, что подкрутка альфы
     текста не лечит (максимум 4.32:1). Лечится плотным тёмным фоном карточки. */
  background:rgba(24,46,30,.88);text-decoration:none;color:inherit;
  transition:border-color .25s var(--ease),background .25s var(--ease),transform .25s var(--ease)}
a.act__item:hover{background:rgba(31,57,38,.94);border-color:rgba(212,168,67,.5);transform:translateY(-2px)}
a.act__item:focus-visible{outline:2px solid var(--gold,#D4A843);outline-offset:2px}
.act__pic{width:64px;height:64px;flex:0 0 64px;border-radius:50%;object-fit:cover;
  border:2px solid rgba(212,168,67,.4);background:rgba(255,255,255,.05)}
.act__pic--ph{display:flex;align-items:center;justify-content:center;color:var(--gold,#D4A843)}
.act__body{min-width:0;display:block}
.act__t{display:block;font:600 1.08rem/1.2 var(--hd,Georgia,serif);letter-spacing:.02em;color:var(--parch,#EDE4D5);margin-bottom:3px}
.act__d{display:block;font-size:.84rem;line-height:1.4;color:rgba(237,228,213,.86)}

