:root{--red:#c9d6b4;--red-dark:#c9d6b4;--line:#496052;--red-tint:#304838;--red-line:#4c6352;--dark-warm:#241a18}.brand{color:var(--red)}.brand small{color:var(--ink)}.brand-mark{color:var(--white);background:var(--red);border-color:var(--red);font-style:normal}.brand-mark>span{transform:rotate(-45deg)}.primary{background:var(--red)}.primary:hover{background:var(--red-dark)}.hero h1 em{color:var(--red)}.hero-facts strong{font-size:32px}.hero-facts span{font-size:12px}.hero-facts{gap:28px}.hero .lead{font-size:16px}.eyebrow{font-size:12px}.brand small{font-size:10px}footer .brand small{color:var(--paper)}footer .brand{color:var(--paper)}footer .brand-mark{color:var(--paper);border-color:#b8cbaa}.mobile-book a{background:var(--red)}
.section{max-width:1440px;padding:88px 64px;margin:auto}.section.compact{padding-top:10px;padding-bottom:48px}.section-heading{display:flex;justify-content:space-between;align-items:flex-end;gap:40px;margin-bottom:36px}.section-heading h2{margin:0}.section-heading p:not(.eyebrow){font-size:14px;line-height:1.7;color:var(--muted);margin:0 0 5px}.section-heading .eyebrow{margin-bottom:16px}.text-link{display:inline-flex;gap:28px;align-items:center;font-size:14px;border-bottom:1px solid currentColor;padding-bottom:6px}.text-link:hover{color:var(--red)}.room-cards{display:grid;grid-template-columns:1fr 1fr;gap:28px}.card-photo{height:370px;position:relative;overflow:hidden;border-radius:8px}.card-photo img{width:100%;height:100%;transition:transform .65s cubic-bezier(.2,.7,.2,1)}.room-card:hover .card-photo img{transform:scale(1.04)}.badge{position:absolute;top:20px;left:20px;background:#fffdf4ec;backdrop-filter:blur(8px);padding:7px 13px;border-radius:3px;font-size:12px}.round-link{display:grid;place-items:center;position:absolute;bottom:20px;right:20px;width:48px;height:48px;border-radius:50%;background:var(--white);font-size:25px}.card-heading{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:24px}.card-heading h3{margin:0}.card-heading p{font-size:13px;margin:0;text-align:right}.card-heading strong{font-size:20px;font-weight:500}.card-heading small{display:block;color:var(--muted);font-size:12px}.card-features{font-size:14px;margin:14px 0 6px}.card-note{font-size:12px;color:var(--muted);margin:0}
.about{display:grid;grid-template-columns:1fr 1fr;gap:85px;align-items:center;background:var(--red-tint);max-width:none;padding-left:max(64px,calc((100vw - 1312px)/2));padding-right:max(64px,calc((100vw - 1312px)/2))}.about-photo{position:relative;height:565px;border-radius:8px;overflow:hidden}.about-photo img{width:100%;height:100%}.about-photo span{position:absolute;bottom:0;left:0;right:0;background:var(--red);padding:16px 24px;color:white;font-size:12px;letter-spacing:.12em}.about>div>p:not(.eyebrow){color:var(--muted);font-size:16px}.about-details{display:flex;gap:40px;border-top:1px solid var(--red-line);margin:30px 0;padding-top:24px;font-size:17px}.about-details small{font-size:12px;color:var(--muted)}.offers{padding-bottom:72px}.promo-grid{display:grid;grid-template-columns:1.12fr 1fr;gap:28px}.promo{position:relative;border-radius:8px;overflow:hidden;min-height:480px;color:var(--white)}.promo>img{position:absolute;width:100%;height:100%}.promo>div{position:relative;z-index:1;padding:42px;height:100%}.promo h3{font-size:43px}.morning:after{content:'';position:absolute;inset:0;background:linear-gradient(90deg,#1e1512e6,#2a1c1670)}.morning .promo-price{font-family:var(--serif);font-size:58px;line-height:1;margin:24px 0 14px}.promo-price small{font:16px var(--sans)}.promo .promo-condition{font-size:12px;color:#ddd9cd}.light{background:var(--paper);color:var(--red-dark);margin-top:16px}.happy{background:var(--red-dark)}.happy .eyebrow{color:#d3dfbf}/* 2026-09-10, финальное решение по крупным цифрам в акциях. Правилось трижды,
   поэтому: НЕ «чинить» на единообразие. Владелец сознательно оставил разное.
   «1 000 ₽» — Cormorant со старостильными цифрами по умолчанию: единица похожа
   на римскую I, ноль на O. Так и задумано.
   «4 + 1» — тот же Cormorant, но с обычными цифрами через lining-nums:
   отдельно стоящая единица в старом стиле читалась плохо.
   Промежуточно пробовали свести обе к одному виду, а потом к третьей гарнитуре
   Playfair Display — владелец забраковал оба варианта. Подробности и причины
   в CHANGELOG.md за 10.09.2026. Обычный font-feature-settings:"lnum" 1 здесь
   не работает, нужен именно font-variant-numeric. */
.gift-number{font-family:var(--serif);font-size:110px;font-variant-numeric:lining-nums;line-height:1;margin:-10px 0 8px}.gift-number em{color:#c5d4ae;font-style:normal}.happy h3{font-size:38px}.happy p:not(.gift-number):not(.eyebrow){font-size:16px}.light-outline{border-color:#f1c9c488;color:white;margin-top:10px}.light-outline:hover{background:#ffffff10}.gift-footnote{position:absolute;right:22px;top:60px;writing-mode:vertical-rl;font-size:12px;letter-spacing:.13em}
.home-reviews{padding-top:36px}.home-reviews blockquote{position:relative;max-width:850px;margin:36px auto 0;padding:20px;text-align:center}/* 2026-09-10: отдельный знак кавычки убран — цитату обозначают «ёлочки» в самом тексте */.home-reviews blockquote p{font-family:var(--serif);font-size:32px;line-height:1.35}.home-reviews cite{font-size:14px;font-style:normal}.home-reviews cite span{color:var(--muted);font-size:12px}.booking{display:flex;align-items:center;justify-content:space-between;gap:50px;border-top:1px solid var(--line)}.booking h2{font-size:52px}.booking p:not(.eyebrow){color:var(--muted);font-size:16px}.booking>div+div{display:flex;align-items:flex-start;flex-direction:column}.big-phone{font-size:clamp(22px,2.5vw,36px);letter-spacing:-.04em;margin-bottom:24px;white-space:nowrap}.small{font-size:13px;color:var(--muted);line-height:1.6}.booking .small{margin-top:12px}.page-heading{max-width:1440px;margin:auto;padding:24px 64px 52px}.breadcrumb{display:inline-block;margin-bottom:38px;font-size:12px;color:var(--muted)}.breadcrumb:after{content:' /';margin-left:12px;color:#c3b3ae}.page-heading .eyebrow{margin-bottom:18px}.page-heading h1{font-size:clamp(3.5rem,6vw,6rem);margin-bottom:24px}.page-heading h1 em{color:var(--red)}.page-heading .lead{font-size:17px;color:var(--muted);max-width:660px;margin:0}
.room-intro{display:grid;grid-template-columns:1.3fr 1fr;gap:50px;align-items:center}.room-main-photo{height:510px;border-radius:8px;overflow:hidden}.room-main-photo img{width:100%;height:100%}.room-summary h2{font-size:52px}.room-summary>p:not(.eyebrow):not(.small){color:var(--muted)}.summary-price{font-family:var(--serif);font-size:38px}.summary-price small{font-family:var(--sans);font-size:12px;display:block;color:var(--muted)}.room-summary .button{margin:6px 0 20px}.room-summary .text-link{display:table;font-size:14px}.feature-list{display:flex;flex-wrap:wrap;border-top:1px solid var(--line);border-bottom:1px solid var(--line);padding:20px 0;gap:12px}.feature-list span{font-size:14px;border-right:1px solid var(--line);padding-right:14px}.gallery-track{display:flex;gap:18px;overflow-x:auto;scroll-snap-type:x mandatory;scrollbar-width:none;scroll-behavior:smooth;overscroll-behavior-x:contain;cursor:grab;padding:4px 0 8px}.gallery-track::-webkit-scrollbar,.lightbox-track::-webkit-scrollbar{display:none}.gallery-item{flex:0 0 70%;padding:0;border:0;background:transparent;scroll-snap-align:start;text-align:left;color:var(--ink);min-width:0}.gallery-item img{width:100%;height:440px;border-radius:8px;user-select:none;-webkit-user-drag:none;pointer-events:none}.gallery-item>span{display:flex;justify-content:space-between;padding:14px 2px;font-size:14px}.gallery-item b{font-size:18px;font-weight:400}.circle{width:46px;height:46px;border:1px solid var(--red-line);border-radius:50%;background:transparent;color:var(--ink);transition:background .2s}.circle:hover{background:#304838}.price-grid{display:grid;grid-template-columns:1fr 1fr;gap:28px}.price-card{background:var(--white);padding:36px;border:1px solid var(--line);border-radius:8px}.price-card .eyebrow{margin-bottom:18px;font-size:12px;color:var(--muted)}.price-card h3{font-size:42px}.price-card dl{margin:26px 0 22px}.price-card dl>div{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:18px 0;border-bottom:1px solid var(--line)}.price-card dt{font-size:17px}.price-card dd{font-family:var(--serif);font-size:35px;line-height:1.2;margin:0;text-align:right;white-space:nowrap}.price-card small{display:block;font-family:var(--sans);font-size:12px;color:var(--muted);line-height:1.6;margin-top:4px}.extra-guests{font-size:14px;max-width:340px}.price-card .text-link{margin-top:8px}.price-promo{display:flex;gap:24px;justify-content:space-between;background:var(--red);color:white;margin-top:24px;padding:24px 28px;border-radius:6px;font-size:14px}.price-promo>span+span{white-space:nowrap}
.included{display:grid;grid-template-columns:1fr 1fr;gap:50px;background:var(--red-tint);max-width:none;padding-left:max(64px,calc((100vw - 1312px)/2));padding-right:max(64px,calc((100vw - 1312px)/2))}.included h2{max-width:470px}.included ul{list-style:none;padding:0;margin:0}.included li{padding:13px 0;border-bottom:1px solid var(--red-line)}.included li:before{content:'✓';margin-right:18px;color:var(--red)}.extras table{width:100%;border-collapse:collapse;margin:30px 0}.extras th,.extras td{padding:21px 0;border-bottom:1px solid var(--line);text-align:left;font-size:16px}.extras thead th{font-size:12px;color:var(--muted);font-weight:500}.extras th[scope=row]{font-weight:400}.extras td{text-align:right;font-size:18px;white-space:nowrap;padding-left:24px}.extras thead th:last-child{text-align:right}.room-rates{display:grid;grid-template-columns:1fr 1fr;gap:80px;background:var(--red-tint);max-width:none;padding-left:max(64px,calc((100vw - 1312px)/2));padding-right:max(64px,calc((100vw - 1312px)/2));align-items:center}.room-rates>div>p:not(.eyebrow){color:var(--muted);max-width:460px}.offer-note{text-align:center;font-size:13px;color:var(--muted);margin:25px 0 0}.gallery-jump{display:flex;flex-wrap:wrap;gap:12px;max-width:1440px;padding:0 64px;margin:auto}.gallery-jump a{padding:11px 20px;background:var(--red-tint);border-radius:30px;font-size:14px}.gallery-jump a:hover{background:var(--red);color:white}.video-section{display:grid;grid-template-columns:.75fr 1.25fr;gap:60px;align-items:center;border-top:1px solid var(--line)}.video-section p:not(.eyebrow){color:var(--muted)}video{width:100%;border-radius:8px;background:var(--dark-warm);aspect-ratio:16/9}.contact-grid{display:grid;grid-template-columns:1fr 1.15fr;gap:40px}.contact-panel{padding:30px 0}.contact-phone{display:block;font-size:clamp(22px,2.8vw,36px);letter-spacing:-.04em}.contact-whatsapp{display:block;color:var(--red);margin-top:10px;font-size:16px}.contact-panel hr{border:0;border-top:1px solid var(--line);margin:30px 0}.contact-panel h3{font-size:40px}.contact-panel p:not(.eyebrow){color:var(--muted);max-width:420px}.map-panel{overflow:hidden;border-radius:8px;background:var(--red-tint)}.map-panel iframe{width:100%;height:470px;border:0;display:block}.faq{display:grid;grid-template-columns:1fr 1.1fr;gap:70px;border-top:1px solid var(--line)}details{border-bottom:1px solid var(--line);padding:18px 0}summary{font-size:17px;cursor:pointer;padding-right:10px}details p{font-size:16px;color:var(--muted);margin:20px 0 8px}details a{text-decoration:underline}.review-list{padding-bottom:0}.review{display:grid;grid-template-columns:250px 1fr;gap:50px;padding:35px 0;border-top:1px solid var(--line)}.review-avatar{display:grid;place-items:center;width:42px;height:42px;background:var(--red-tint);color:var(--red-dark);border-radius:50%;font-family:var(--serif);font-size:25px;margin-bottom:14px}.review h3{font-size:28px;margin-bottom:8px}.review time{font-size:12px;color:var(--muted)}.review p{font-size:16px;margin:0}.review-response{border-left:2px solid var(--red);padding:12px 22px;margin-top:22px;background:#304838}.review-response strong{font-size:12px;font-weight:600}.review-response p{font-size:14px;margin-top:8px}.review-invite{border-top:1px solid var(--line);text-align:center;margin-top:20px}.review-invite p{color:var(--muted);max-width:640px;margin:0 auto 24px}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.reveal-ready{opacity:0;transform:translateY(20px);transition:opacity .7s ease,transform .7s cubic-bezier(.2,.7,.2,1)}.reveal-ready.is-visible{opacity:1;transform:none}.gallery-track.dragging,.lightbox-track.dragging{scroll-behavior:auto;scroll-snap-type:none;cursor:grabbing}
@media(max-width:1150px){.section{padding:64px 32px}.section.compact{padding-bottom:40px}.page-heading{padding:24px 32px 40px}.about,.included,.room-rates{padding-left:32px;padding-right:32px;gap:45px}.card-photo{height:310px}.card-heading h3{font-size:33px}.card-heading strong{font-size:18px}.gallery-item img{height:380px}.gallery-jump{padding:0 32px}.room-intro{gap:32px}.room-main-photo{height:470px}.promo>div{padding:32px}.gift-number{font-size:100px}.booking h2{font-size:44px}.hero-facts{gap:20px}.hero-facts strong{font-size:29px}.hero-facts span{font-size:12px}.hero .eyebrow{font-size:12px}.hero .lead{font-size:16px}.hero-photo{min-height:650px}}
@media(max-width:850px){.section{padding:56px 24px}.page-heading{padding:20px 24px 40px}.section-heading{gap:24px;align-items:flex-start;flex-direction:column}.section-heading p:not(.eyebrow){font-size:14px}.card-photo{height:260px}.card-heading{align-items:flex-start;flex-direction:column;gap:10px}.card-heading p{text-align:left}.card-heading small{display:inline;margin-left:7px}.about,.included,.room-rates{padding:56px 24px;gap:32px}.about-photo{height:560px}.about-details{gap:20px;font-size:15px}.promo>div{padding:28px}.promo h3{font-size:34px}.promo .promo-price{font-size:50px}.gift-number{font-size:90px}.gift-footnote{display:none}.promo .button{font-size:14px;padding:15px 16px;gap:8px}.room-main-photo{height:450px}.room-intro{grid-template-columns:1fr 1fr;gap:28px}.room-summary h2{font-size:42px}.summary-price{font-size:32px}.room-summary .button{font-size:14px;padding:15px}.price-card{padding:26px}.price-card h3{font-size:37px}.price-card dd{font-size:30px}.booking{gap:30px}.booking h2{font-size:38px}.big-phone{font-size:23px}.gallery-jump{padding:0 24px}.gallery-item{flex-basis:85%}.gallery-item img{height:340px}.video-section{grid-template-columns:1fr;gap:24px}.contact-grid{grid-template-columns:1fr;gap:16px}.map-panel iframe{height:380px}.contact-panel{padding:10px 0 25px}.faq{gap:32px}.review{grid-template-columns:170px 1fr;gap:24px}.hero-photo{min-height:690px}.hero-facts{gap:14px}.hero-facts strong{font-size:26px}}
@media(max-width:600px){.section{padding:50px 20px}.section.compact{padding-top:0;padding-bottom:35px}.page-heading{padding:16px 20px 35px}.breadcrumb{margin-bottom:25px}.page-heading h1{font-size:3.6rem}.page-heading .lead{font-size:16px}.eyebrow,.hero .eyebrow{font-size:12px;letter-spacing:.1em}.hero .lead{font-size:16px}.hero h1{font-size:4.2rem}.hero .button{font-size:14px;padding:14px 16px}.hero .actions{flex-direction:column;align-items:stretch}.hero-facts{gap:8px;justify-content:space-between}.hero-facts strong{font-size:28px}.hero-facts span{font-size:12px}.hero-facts>div{max-width:33%}.hero-photo{min-height:410px}.section-heading{gap:18px;margin-bottom:25px}.section-heading h2{font-size:42px}.room-cards,.promo-grid,.about,.price-grid,.included,.room-rates,.room-intro,.faq{grid-template-columns:1fr}.room-cards{gap:36px}.card-photo{height:290px}.card-heading{flex-direction:row;align-items:center;margin-top:19px}.card-heading h3{font-size:34px}.card-heading p{text-align:right;font-size:12px}.card-heading strong{font-size:18px}.card-heading small{display:block;margin:0;font-size:12px}.card-features{font-size:14px}.card-note{font-size:12px}.about{gap:32px}.about-photo{height:350px}.about-details{gap:34px}.about h2{font-size:47px}.promo{min-height:440px}.promo>div{padding:30px}.promo h3{font-size:38px}.promo .button{font-size:14px}.promo-grid{gap:18px}.gift-number{font-size:100px}.happy h3{font-size:38px}.home-reviews blockquote{padding:16px 0;margin-top:20px}.home-reviews blockquote p{font-size:28px}.home-reviews cite span{display:block;font-size:12px;margin-top:5px}.booking{align-items:flex-start;flex-direction:column;gap:12px}.booking h2{font-size:42px}.big-phone{font-size:29px}.booking>div+div{width:100%}.booking .button{width:100%}.room-main-photo{height:320px}.room-summary h2{font-size:45px}.room-summary .button{display:flex;font-size:14px}.summary-price{font-size:38px}.feature-list span{font-size:14px;padding-right:12px}.gallery-item{flex-basis:92%}.gallery-item img{height:270px}.gallery-item>span{font-size:14px}.circle{width:42px;height:42px}.price-card{padding:28px 24px}.price-card dd{font-size:35px}.price-card h3{font-size:40px}.price-promo{padding:22px;flex-direction:column;gap:12px;font-size:14px}.included{gap:24px}.included h2{font-size:44px;margin-bottom:0}.extras th,.extras td{padding:18px 0;font-size:14px}.extras td{padding-left:16px;font-size:16px}.room-rates{gap:30px}.gallery-jump{padding:0 20px;gap:10px}.gallery-jump a{font-size:14px;padding:9px 13px}.map-panel iframe{height:360px}.contact-panel h3{font-size:35px}.contact-phone{font-size:28px}.contact-whatsapp{font-size:14px}.faq{gap:20px}summary{font-size:16px}.review{grid-template-columns:1fr;gap:22px;padding:28px 0}.review>div:first-child{display:grid;grid-template-columns:44px 1fr;column-gap:15px;align-items:center}.review-avatar{grid-row:span 2;margin:0}.review h3{font-size:25px;margin:0}.review time{font-size:12px}.review p{font-size:16px}.review-invite h2{font-size:40px}.review-invite p{font-size:16px}.amenity-strip span{font-size:12px}.footer-bottom{font-size:12px}.mobile-book a{font-size:13px}.photo-label{font-size:12px}.hero-side{font-size:12px}.badge{font-size:12px}.brand small{font-size:10px}.header{gap:14px}.brand{font-size:22px}}
.brand-logo{display:block;width:146px;height:100px;flex-shrink:0}.brand{letter-spacing:normal}.brand-logo text{font-family:var(--sans)}/* 2026-09-10: плашку под логотипом убрали — в подвале теперь светлое начертание знака, оно читается на зелёном без подложки */.header{min-height:108px;height:auto}.header .brand{margin-left:-10px}.brand-logo [letter-spacing]{letter-spacing:revert}.brand-logo text:last-of-type{font-weight:700}.hero-facts strong{white-space:nowrap}.hero-facts>div{min-width:0}.room-cards,.room-intro,.price-grid,.about,.included,.room-rates,.faq,.contact-grid{min-width:0}.room-cards>*,.room-intro>*,.price-grid>*,.about>*,.included>*,.room-rates>*,.faq>*,.contact-grid>*{min-width:0}
@media(max-width:600px){.header{min-height:94px}.brand-logo{width:126px;height:88px}#mobile-nav:not([hidden]){top:88px}.hero h1{font-size:clamp(3.2rem,11.2vw,4.2rem)}.hero-facts strong{font-size:clamp(22px,6.7vw,28px)}.hero-facts span{font-size:12px}.hero-facts>div{max-width:35%}.hero-facts{gap:10px}.page-heading h1{font-size:clamp(2.7rem,9.6vw,3.6rem)}.brand small{font-size:12px}.card-heading h3{font-size:clamp(28px,7.8vw,34px)}.big-phone{font-size:clamp(23px,7vw,29px)}.contact-phone{font-size:clamp(23px,7vw,28px)}}
.header-phones{display:flex;flex-direction:column;align-items:flex-end;font-size:14px;line-height:1.6;flex-shrink:0}.header-phones>a{font-weight:600;white-space:nowrap}.header-phones>a:hover,.footer-phones>a:hover{color:var(--red)}.header-phones>small{font-size:12px;color:var(--muted);margin-top:3px}.footer-phones{display:flex;flex-direction:column;font-size:20px;white-space:nowrap;gap:4px}.hero-contact{font-size:13px;color:var(--muted);margin:18px 0 0;line-height:1.7}.hero-contact a{color:var(--red);text-decoration:underline;text-underline-offset:3px}.hero-contact a[href^=tel]{white-space:nowrap}.hero .hero-facts{margin-top:26px}.booking>div:first-child{max-width:640px}.booking .big-phone{margin-bottom:8px}.booking .second-phone{margin-bottom:25px}.contact-panel .second-phone{font-size:clamp(22px,2.8vw,36px);margin-top:4px}.about h2{font-size:clamp(38px,3.7vw,56px)}.hero-photo{min-height:670px}.hero h1{font-size:clamp(3.4rem,5.5vw,6rem)}.hero-copy{min-width:0}.header-phones small{white-space:normal;text-align:right}.header{gap:22px}
@media(max-width:1000px){.header-phones{font-size:13px}.header-phones small{font-size:12px}.hero h1{font-size:clamp(3.1rem,5.5vw,4.6rem)}.hero-photo{min-height:690px}.desktop-nav{gap:16px}.header{gap:18px}.header-phones{max-width:175px}}
@media(max-width:600px){.header-phones{display:none}.hero h1{font-size:clamp(2.9rem,10.6vw,4rem)}.hero-photo{min-height:410px}.hero-contact{font-size:14px}.about h2{font-size:42px}.booking .big-phone{font-size:clamp(23px,7vw,29px)}.booking .second-phone{margin-bottom:22px}.contact-panel .second-phone{font-size:clamp(23px,7vw,28px)}}
.brand-logo{width:146px;height:124px;object-fit:contain}.header{min-height:128px}.header .brand{margin-left:0}
@media(max-width:600px){.brand-logo{width:120px;height:108px}.header{min-height:110px}#mobile-nav:not([hidden]){top:104px}}
@media(prefers-reduced-motion:reduce){.reveal-ready{opacity:1;transform:none}}

/* Главная: ромб на фотографии, спокойная навигация и один блок связи. */
.home-page .about{max-width:1312px;width:calc(100% - 64px);padding:48px;gap:54px;border-radius:24px;margin:24px auto 32px;border:1px solid var(--red-line)}
.home-page .about-photo{height:530px;border-radius:14px}
.home-page .home-reviews{padding-top:28px;padding-bottom:72px}
.home-page .home-reviews blockquote{max-width:none;margin-top:32px;background:var(--white);border:1px solid var(--line);border-radius:20px;padding:50px max(32px,9%);box-shadow:0 12px 36px #f7f2e404}
.home-page .home-reviews blockquote:before{content:'';display:block;width:44px;height:3px;background:var(--red);margin:0 auto 28px}
.home-page .booking{max-width:1312px;width:calc(100% - 64px);background:#2b4235;border:1px solid #496052;border-radius:24px;padding:54px 48px;margin-bottom:64px}
.home-page .room-card{background:var(--white);padding:12px 12px 24px;border:1px solid var(--line);border-radius:18px}
.home-page .room-card .card-photo{border-radius:10px}
.home-page .room-card .card-heading,.home-page .room-card .card-features,.home-page .room-card .card-note{margin-left:14px;margin-right:14px}
@media(max-width:1000px){.home-page .about{padding:32px;gap:32px}.home-page .booking{padding:40px 32px}}
@media(max-width:600px){
 .home-page .about{width:calc(100% - 24px);padding:16px 16px 30px;gap:28px;border-radius:18px;margin:8px auto 20px}
 .home-page .about-photo{height:340px;border-radius:10px}.home-page .about-photo span{font-size:10px;padding:14px}
 .home-page .home-reviews blockquote{padding:30px 22px;border-radius:16px}.home-page .home-reviews blockquote p{font-size:27px}
 .home-page .booking{width:calc(100% - 24px);padding:30px 22px;border-radius:18px;margin-bottom:32px}
 .home-page .room-card{padding:8px 8px 22px;border-radius:14px}
 .home-page .room-card .card-heading,.home-page .room-card .card-features,.home-page .room-card .card-note{margin-left:8px;margin-right:8px}
}
.header-wordmark{display:flex;flex-direction:column;flex-shrink:0;color:var(--red);line-height:1}
.header-wordmark>span{font-family:var(--serif);font-size:33px;font-weight:600;letter-spacing:.01em;white-space:nowrap}
.header-wordmark>small{margin-top:9px;font-size:9px;font-weight:600;letter-spacing:.15em;color:var(--ink)}
.home-page .header{min-height:100px}
.home-page .hero-photo{min-height:650px}
/* 2026-10-19: вертикальный кадр с умеренной высотой, текст по центру. */
@media(min-width:851px){
 .home-page .hero{padding-bottom:32px}
 .home-page .hero-photo{width:100%;max-width:500px;aspect-ratio:5/6;min-height:520px;align-self:center;justify-self:end}
 .home-page .hero-copy{max-width:740px;align-self:center;padding:20px 0}
 .home-page .hero-emblem{top:8%;width:clamp(165px,16vw,212px)}
}
@media(min-width:1151px){
 .home-page .hero{grid-template-columns:minmax(0,1fr) minmax(0,500px);gap:clamp(36px,5vw,72px)}
}
.home-page .hero-photo:after{inset:0;background:linear-gradient(180deg,#241a1826 0%,#241a1840 42%,transparent 68%,#241a1899 100%)}
/* 2026-09-10: знак поднят и уменьшен, чтобы под ним была видна банная шапка
   с вениками — раньше он накрывал её собой. Держим его в верхней трети кадра:
   так он читается как навершие, а не как наклейка посреди фотографии. */
.hero-emblem{position:absolute;z-index:1;top:13%;left:50%;transform:translateX(-50%);width:clamp(165px,19.5vw,258px);pointer-events:none}
.hero-emblem:before{content:'';position:absolute;inset:15%;background:#fff4e5;transform:rotate(45deg);border:1px solid #dec6a1;box-shadow:0 5px 24px #25170f55;z-index:-1}
.hero-emblem img{width:100%;height:auto;object-fit:contain;filter:drop-shadow(0 2px 8px #241a1866)}
/* 2026-09-10: правила .header-address удалены. Адрес был внутри .header-phones
   один промежуточный заход, потом переехал в .location-bar над шапкой, а стили
   остались висеть без элемента. Понадобится адрес в самой шапке — верните из
   метки backup-2026-09-10-1654. */
/* Тёплые красные оттенки только на фото главной; форма исходного PNG сохранена. */
@supports (mask-image:url('/assets/rebus-logo-light-800.png')) or (-webkit-mask-image:url('/assets/rebus-logo-light-800.png')){
 .hero-emblem img{opacity:0}
 .hero-emblem:after{content:'';position:absolute;inset:0;background:#c9d6b4;-webkit-mask:url('/assets/rebus-logo-light-800.png') center/contain no-repeat;mask:url('/assets/rebus-logo-light-800.png') center/contain no-repeat}
}
.home-page .hero .actions{gap:24px;flex-direction:row;align-items:center}
.hero-contact-link{font-size:14px;display:inline-flex;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid #aaa99c}
.hero-contact-link:hover{color:var(--red)}
.home-page .photo-link{background:transparent;backdrop-filter:none;color:var(--paper);padding:14px 0;border-top:1px solid #ffffff70;border-radius:0}
.home-page .photo-label{bottom:92px}
.home-page .about-photo img{object-position:48% center}
.promo-details{display:inline-flex;gap:30px;align-items:center;margin-top:16px;padding:8px 0;border-bottom:1px solid #ffffff70;font-size:14px}
.promo-details:hover{border-color:white}

/* Карусель большого зала. Малый зал сохраняет прежнюю подачу. */
/* 2026-09-10: размеры вынесены в переменные, потому что от высоты фото
   зависит вертикальное положение боковых стрелок, а от ширины «выглядывающего»
   следующего кадра — положение правой. Раньше эти числа стояли в трёх местах
   и разъезжались. Мобильные значения переопределяются в конце файла. */
.gallery-editorial{--gal-h:clamp(300px,44vw,600px);--gal-peek:12%;--gal-gap:20px;--gal-edge:16px;--gal-outside:clamp(58px,calc((100vw - 1440px) / 2 + 40px),110px);min-width:0;position:relative}
.gallery-editorial .gallery-track{position:relative;gap:var(--gal-gap);padding:0;align-items:stretch;border-radius:12px;scroll-snap-stop:always}
.gallery-editorial .gallery-track:after{content:'';flex:0 0 calc(var(--gal-peek) - var(--gal-gap))}
.gallery-editorial .gallery-item{position:relative;flex-basis:88%;overflow:hidden;border-radius:12px;background:var(--dark-warm);isolation:isolate}
.gallery-editorial .gallery-item img{height:var(--gal-h);border-radius:0;opacity:.65;transition:opacity .45s ease;object-fit:cover}
.gallery-editorial .gallery-item.is-active img{opacity:1}
.gallery-editorial .gallery-item>span{position:absolute;bottom:0;left:0;right:0;align-items:center;color:white;padding:50px 26px 22px;background:linear-gradient(transparent,#1a100ee6);font-size:16px;pointer-events:none}
.gallery-editorial .gallery-item b{display:grid;place-items:center;width:42px;height:42px;border:1px solid #ffffff80;border-radius:50%;flex-shrink:0;margin-left:12px}
.editorial-controls{display:flex;justify-content:space-between;align-items:center;gap:16px;padding:24px 0 20px}
.gallery-position{display:flex;align-items:baseline;gap:10px;font-variant-numeric:tabular-nums}
.gallery-current{font-size:28px;font-weight:500;color:var(--red);line-height:1}
.gallery-total{font-size:14px;color:var(--muted)}
.gallery-hint{font-size:12px;color:var(--muted);margin-left:20px}
/* 2026-09-10: стрелки были под фотографией справа. Владелец попросил
   разнести их по бокам кадра — так листать удобнее и рука не тянется вниз.
   Блок остаётся в .editorial-controls по разметке (там же счётчик), но
   выводится из потока и позиционируется относительно .gallery-editorial.
   pointer-events:none на контейнере, чтобы пустая полоса между стрелками
   не перехватывала свайп по фотографии. */
.gallery-arrows{position:absolute;z-index:2;top:calc(var(--gal-h) / 2);left:var(--gal-edge);right:calc(var(--gal-peek) + var(--gal-edge));display:flex;justify-content:space-between;transform:translateY(-50%);pointer-events:none}
.gallery-arrows .circle{pointer-events:auto;box-shadow:0 8px 24px #1a100e4d;backdrop-filter:blur(4px)}.gallery-editorial .circle{width:50px;height:50px;font-size:22px;background:var(--paper)}
.gallery-editorial .circle:not(:disabled):hover{background:var(--red);color:white;border-color:var(--red)}
.gallery-thumbnails{position:relative;display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:12px}
.gallery-thumb{position:relative;min-width:0;padding:4px;background:transparent;border:1px solid transparent;border-radius:7px;transition:border-color .25s}
.gallery-thumb img{width:100%;aspect-ratio:1.5;height:auto;object-fit:cover;border-radius:4px;opacity:.6;transition:opacity .25s}
.gallery-thumb[aria-pressed=true]{border-color:var(--red)}.gallery-thumb[aria-pressed=true] img,.gallery-thumb:hover img{opacity:1}
.gallery-thumb>span{position:absolute;bottom:8px;right:8px;color:white;background:#c9d6b4cc;border-radius:3px;padding:1px 4px;font-size:10px;line-height:1.5}
.gallery-editorial .gallery-track.dragging{scroll-snap-type:none;scroll-behavior:auto;cursor:grabbing}
@media(max-width:600px){
 .gallery-editorial{--gal-h:310px;--gal-peek:8%;--gal-gap:12px;--gal-edge:10px}.gallery-editorial .gallery-track{border-radius:8px}
 
 .gallery-editorial .gallery-item{flex-basis:92%;border-radius:8px}
 
 .gallery-editorial .gallery-item>span{padding:46px 16px 16px;font-size:14px}
 .gallery-editorial .gallery-item b{width:32px;height:32px;font-size:16px}
 .gallery-hint{display:none}.editorial-controls{padding:18px 0 14px}
 .gallery-editorial .circle{width:44px;height:44px}
 .gallery-thumbnails{display:flex;gap:8px;overflow-x:auto;padding-bottom:6px;scrollbar-width:thin;scrollbar-color:#77907d transparent;overscroll-behavior-x:contain}.gallery-thumb{flex:0 0 56px;padding:3px;border-radius:5px}.gallery-thumb img{aspect-ratio:1;height:48px;border-radius:3px}.gallery-thumb>span{display:none}
}
@media(max-width:850px){.home-page #mobile-nav:not([hidden]){top:88px}.home-page .hero .actions{gap:14px}.hero-contact-link{font-size:13px}}
@media(max-width:600px){
 .home-page .header{min-height:80px}
 .home-page #mobile-nav:not([hidden]){top:72px}
 .header-wordmark>span{font-size:26px}.header-wordmark>small{font-size:8px;margin-top:7px}
 .home-page .hero-photo{min-height:410px}
 .hero-emblem{width:172px;top:12%}
 .home-page .hero .actions{gap:16px;flex-wrap:wrap}
 .home-page .photo-label{font-size:10px;bottom:83px;letter-spacing:.08em}
 .home-page footer{padding-bottom:36px}
}

/* =========================================================================
   МОБИЛЬНОЕ МЕНЮ И ПРАВКИ ПОД iOS — 2026-09-10, Claude
   Причина: на телефоне меню было белым прямоугольником с семью одинаковыми
   ссылками, без затемнения фона и без контактов; страница за ним продолжала
   прокручиваться. На ПК всё было хорошо, поэтому правки живут в медиазапросе.
   Подробности — в CHANGELOG.md.
   ========================================================================= */

/* Цифры в фактах первого экрана: там цена «от 1 000 ₽», а старостильные цифры
   Cormorant рисуют её как «от I OOO ₽». Правило точечное — остальной сайт
   сохраняет прежнее начертание цифр по решению владельца (см. CHANGELOG). */
.hero-facts strong{font-variant-numeric:lining-nums}
/* На телефоне первым идёт фотография с ромбом, потом текст. По просьбе
   владельца: на узком экране сначала должно быть видно, куда он попал, а
   описание — ниже. На ПК порядок прежний (текст слева, фото справа), поэтому
   правило живёт только там, где .hero уже выстроен в колонку — до 600px. */
@media(max-width:600px){
 .hero-photo{order:-1}
 .hero-copy{padding-top:4px}
}
/* Убирает серую вспышку при тапе в Safari/Chrome на iOS. */
a,button,summary{-webkit-tap-highlight-color:transparent}

@media(max-width:850px){

 /* --- Бесшовная кнопка меню: только три линии внутри шапки.
    Область нажатия остаётся 44px, но видимой плашки, рамки и тени нет. --- */
 .menu-button{position:relative;z-index:120;width:44px;height:44px;padding:0;
  display:block;border:0;border-radius:0;background:transparent;box-shadow:none}
 /* Все три линии лежат в одной точке и разведены сдвигом на целые 6px:
     так у них одинаковая геометрия и одинаковое округление. Раскладка флексом
     с gap давала дробные позиции, и крайние линии выглядели толще средней. */
 .menu-button span{position:absolute;top:50%;left:50%;width:24px;height:1px;
  margin:-.5px 0 0 -12px;background:var(--ink);border-radius:0;transform-origin:center;
  transition:width .22s,transform .32s cubic-bezier(.22,.61,.36,1),opacity .18s,background .2s}
 .menu-button span:first-child{transform:translateY(-6px)}
 .menu-button span:last-child{transform:translateY(6px)}
 .menu-button span:nth-child(2){transform:none}
 .menu-button[aria-expanded="true"]{background:transparent;border:0;box-shadow:none}
 .menu-button[aria-expanded="true"] span{position:absolute;width:24px;background:var(--red)}
 .menu-button[aria-expanded="true"] span:first-child{transform:rotate(45deg)}
 .menu-button[aria-expanded="true"] span:nth-child(2){opacity:0;transform:scaleX(0)}
 .menu-button[aria-expanded="true"] span:last-child{transform:rotate(-45deg)}

 /* --- Затемнение под панелью --- */
 .nav-backdrop{position:fixed;top:var(--header-real);
  left:0;right:0;bottom:0;z-index:100;background:#1a100ecc;
  -webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);
  opacity:0;animation:navFade .38s ease forwards}
 .nav-backdrop.is-closing{animation:navFadeOut .32s ease both}
 @keyframes navFade{to{opacity:1}}
 @keyframes navFadeOut{from{opacity:1}to{opacity:0}}

 /* --- Панель меню ---
    2026-10-16: высота больше не считается от единиц экрана. Было
    calc(100dvh - 72px - env(...)), и во встроенном браузере Telegram, где высота
    окна скачет вместе с его панелями, низ панели с кнопкой WhatsApp уезжал под
    кромку. Теперь панель растянута от низа шапки до низа окна: top + bottom:0.
    Верх берётся из --header-real, её ставит app.js по настоящей высоте шапки:
    в чужом WebView шрифт может быть крупнее, и жёсткие 72px промахивались.
    env(safe-area-inset-*) — отступы под чёлку и полосу жестов; они работают
    только с viewport-fit=cover в мета-теге (build.py, shell()). */
 /* Селектор с .home-page нужен намеренно: от прежнего выпадающего меню в файле
    выше остались правила вида ".home-page #mobile-nav:not([hidden]){top:72px}".
    У них специфичность выше, и без этого дубля панель на главной съезжает вниз
    на высоту шапки, открывая полосу затемнённой страницы над собой. */
 #mobile-nav:not([hidden]),
 .home-page #mobile-nav:not([hidden]){display:block;position:fixed;z-index:110;
  top:var(--header-real);left:0;right:0;bottom:0;
  height:auto;max-height:none;
  padding:0;border:0;border-radius:0;box-shadow:none;
  background:var(--paper);overflow-y:auto;overscroll-behavior:contain;
  -webkit-overflow-scrolling:touch;
  will-change:clip-path;animation:navIn .46s cubic-bezier(.22,.61,.36,1) both}
 #mobile-nav.is-closing,
 .home-page #mobile-nav.is-closing{animation:navOut .34s cubic-bezier(.4,0,.6,1) both}
 /* Переход по пункту меню короче обычного закрытия: панель успевает показать
    направление движения, но не задерживает открытие заранее загруженной страницы. */
 #mobile-nav:not([hidden]).is-navigating,
 .home-page #mobile-nav:not([hidden]).is-navigating{
  animation:navNavigateOut .18s cubic-bezier(.4,0,.6,1) both}
 .nav-backdrop.is-navigating{animation:navFadeOut .16s ease both}
 html.is-leaving #mobile-nav.is-navigating .mobile-nav-inner{
  filter:none;opacity:1;transition:none;pointer-events:none;
  animation:navNavigateContentOut .16s ease both}
 @keyframes navIn{from{clip-path:inset(0 0 100% 0)}to{clip-path:inset(0)}}
 @keyframes navOut{from{clip-path:inset(0)}to{clip-path:inset(0 0 100% 0)}}
 @keyframes navNavigateOut{from{clip-path:inset(0)}to{clip-path:inset(0 0 100% 0)}}
 @keyframes navNavigateContentOut{from{opacity:1;transform:none}to{opacity:0;transform:translateY(-10px)}}

 .mobile-nav-inner{display:flex;flex-direction:column;min-height:100%;
  padding:26px 24px calc(env(safe-area-inset-bottom,0px) + 28px);gap:22px}

 /* Шапка остаётся над раскрытой панелью, поэтому второй логотип внутри меню
    скрыт: навигация выглядит прямым продолжением шапки без дублирования. */
 #mobile-nav .mobile-nav-brand{display:none}
 /* --- Пункты навигации: крупная антиква, как в заголовках сайта --- */
 .mobile-nav-links{display:flex;flex-direction:column}
 #mobile-nav .mobile-nav-links a{position:relative;display:flex;align-items:center;
  justify-content:space-between;padding:15px 0;font-family:var(--serif);
  font-size:30px;line-height:1.15;color:var(--ink);
  border-bottom:1px solid var(--line);
  transition:color .22s,padding-left .28s cubic-bezier(.22,.61,.36,1)}
 #mobile-nav .mobile-nav-links a:before{content:'';position:absolute;left:0;top:17px;
  bottom:17px;width:2px;background:var(--red);transform:scaleY(0);transform-origin:center;
  transition:transform .24s ease}
 #mobile-nav .mobile-nav-links a.is-selected{color:var(--red);padding-left:12px}
 #mobile-nav .mobile-nav-links a.is-selected:before{transform:scaleY(1)}
 #mobile-nav .mobile-nav-links a:first-child{border-top:1px solid var(--line)}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-brand{animation:navItemIn .34s .12s both}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-links a{animation:navItemIn .36s both}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-links a:nth-child(1){animation-delay:.15s}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-links a:nth-child(2){animation-delay:.18s}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-links a:nth-child(3){animation-delay:.21s}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-links a:nth-child(4){animation-delay:.24s}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-links a:nth-child(5){animation-delay:.27s}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-links a:nth-child(6){animation-delay:.3s}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-links a:nth-child(7){animation-delay:.33s}
 #mobile-nav:not([hidden]):not(.is-closing) .mobile-nav-contact{animation:navItemIn .4s .29s both}
 @keyframes navItemIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}
 /* 2026-09-11: новый веник по просьбе владельца. Плотный контур банного пучка,
    перевязка и короткая ручка; размер 26px, наклон внутри SVG. Правило находится
    ВНУТРИ мобильного @media: заменять только его, не обрезать остаток файла.
    Маска встроена в CSS: её обновление входит в общий хэш asset_v(). */
 #mobile-nav .mobile-nav-links a[aria-current]{color:var(--red)}
 #mobile-nav .mobile-nav-links a[aria-current]:after{content:'';width:26px;height:26px;
  flex-shrink:0;margin-left:16px;background:var(--red);
  -webkit-mask:url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22none%22%3E%0A%20%20%3Cg%20transform%3D%22rotate%2825%2016%2016%29%22%20stroke%3D%22%23b42c30%22%20stroke-width%3D%221.45%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M13%2022C10%2020%207%2017%206%2013c-1-2%200-4%202-4-1-3%201-5%203-4%200-3%203-4%205-2%202-2%205-1%205%202%203-1%205%202%203%204%203%201%203%204%201%206-1%203-4%205-6%207Z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M16%207v14M10%2011l5%2010M22%2010l-5%2011%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M12.5%2022h7v2h-7Z%22%20fill%3D%22%23b42c30%22%20stroke%3D%22none%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22m14%2025-.5%204h5l-.5-4%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A') center/contain no-repeat;
  mask:url('data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22none%22%3E%0A%20%20%3Cg%20transform%3D%22rotate%2825%2016%2016%29%22%20stroke%3D%22%23b42c30%22%20stroke-width%3D%221.45%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%0A%20%20%20%20%3Cpath%20d%3D%22M13%2022C10%2020%207%2017%206%2013c-1-2%200-4%202-4-1-3%201-5%203-4%200-3%203-4%205-2%202-2%205-1%205%202%203-1%205%202%203%204%203%201%203%204%201%206-1%203-4%205-6%207Z%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M16%207v14M10%2011l5%2010M22%2010l-5%2011%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22M12.5%2022h7v2h-7Z%22%20fill%3D%22%23b42c30%22%20stroke%3D%22none%22%2F%3E%0A%20%20%20%20%3Cpath%20d%3D%22m14%2025-.5%204h5l-.5-4%22%2F%3E%0A%20%20%3C%2Fg%3E%0A%3C%2Fsvg%3E%0A') center/contain no-repeat;}

 /* --- Контакты внизу панели --- */
 .mobile-nav-contact{margin-top:auto;display:flex;flex-direction:column;gap:10px}
 .mobile-nav-contact .eyebrow{margin:0 0 2px}
 #mobile-nav .mobile-nav-phone{font-size:25px;font-weight:600;letter-spacing:-.01em;
  color:var(--ink);padding:0}
 #mobile-nav .mobile-nav-wa{margin-top:8px;display:flex;align-items:center;
  justify-content:center;background:var(--red);color:var(--white);
  border-radius:12px;padding:16px;font-size:16px;font-weight:600}
 .mobile-nav-address{margin:6px 0 0;font-size:13px;line-height:1.6;color:var(--muted)}

 /* Пока панель открыта, страница под ней не прокручивается. */
 body.nav-open{overflow:hidden}
 /* Блокирует повторное нажатие, пока идёт переход. 2026-09-15: линия под шапкой
    (body.nav-leaving .header:after) убрана — вместе с полоской вверху экрана на
    телефоне шли «две анимации загрузки». Индикатор загрузки теперь один — пар
    .nav-loader в конце файла. Не возвращать. */
 body.nav-leaving .menu-button{pointer-events:none}
}

@media(prefers-reduced-motion:reduce){
 .menu-button,.menu-button span,#mobile-nav:not([hidden]),
 .nav-backdrop,#mobile-nav .mobile-nav-brand,#mobile-nav .mobile-nav-links a,
 #mobile-nav .mobile-nav-links a:before,#mobile-nav .mobile-nav-contact,
 html.is-leaving #mobile-nav.is-navigating .mobile-nav-inner{transition:none;animation:none;opacity:1}
}

/* На ПК активный пункт отмечает один реальный элемент, а не отдельное
   подчёркивание у каждой ссылки. Его стабильное имя позволяет View Transitions
   плавно перенести линию к новому разделу даже между разными HTML-страницами. */
@media(min-width:851px){
 /* При наведении меняется только цвет текста. Линия принадлежит активному
    разделу и не дублируется под пунктом, на который лишь навели указатель. */
 .desktop-nav a:hover:after,.desktop-nav a[aria-current]:after{transform:scaleX(0)}
 .desktop-nav-indicator{position:absolute;left:0;right:0;bottom:2px;height:1px;
  background:var(--red);view-transition-name:desktop-nav-indicator}
 ::view-transition-group(desktop-nav-indicator){animation-duration:.32s;
  animation-timing-function:cubic-bezier(.22,.61,.36,1)}
 ::view-transition-old(desktop-nav-indicator),
 ::view-transition-new(desktop-nav-indicator){animation:none;mix-blend-mode:normal}
}
/* Ссылка активного раздела общая для обоих меню; в мобильной панели её
   состояние уже показывает веник, поэтому вторая отметка там не нужна. */
.mobile-nav-links .desktop-nav-indicator{display:none}


/* Закреплённая навигация. Без transform/backdrop-filter на самой шапке:
   они меняют containing block и ломают position:fixed полноэкранного меню.
   2026-10-16: высота шапки живёт в --header-h, а не числом в шести местах файла.
   --header-real это та же высота плюс safe-area; app.js перезаписывает её
   настоящей измеренной высотой, и от неё отсчитываются меню, затемнение и
   прокрутка к якорю. Раньше там стояли жёсткие 72px, и в чужом WebView с
   увеличенным шрифтом меню наползало на шапку. */
:root{--header-h:84px;--header-real:calc(var(--header-h) + env(safe-area-inset-top,0px))}
.header,.home-page .header{position:sticky;top:0;z-index:50;max-width:none;
 min-height:var(--header-h);background:var(--paper);border-bottom:1px solid var(--line);
 box-shadow:0 5px 18px #f7f2e408;
 padding-left:max(64px,calc((100% - 1312px)/2));
 padding-right:max(64px,calc((100% - 1312px)/2))}
.location-bar{display:flex;justify-content:space-between;gap:24px;padding:8px max(64px,calc((100% - 1312px)/2));background:var(--red-tint);color:var(--muted);font-size:11px;line-height:1.5;border-bottom:1px solid var(--red-line)}
.location-bar a{color:var(--ink)}.location-bar a:hover{color:var(--red);text-decoration:underline;text-underline-offset:3px}
/* Спокойная пауза между секциями на одном фоне. Цветные поверхности уже
   создают границу сами, поэтому рядом с ними остаётся только воздух. */
.section-divider{display:flex;align-items:center;max-width:1312px;width:calc(100% - 128px);margin:28px auto;height:1px;pointer-events:none}
.section-divider:before{content:'';display:block;width:100%;height:1px;background:linear-gradient(90deg,transparent,var(--red-line) 12%,var(--red-line) 88%,transparent);transform-origin:center center;transition:transform .65s cubic-bezier(.22,.61,.36,1),opacity .45s ease}
.section-divider:after,.section-divider>span{display:none}
.section-divider:has(+ :is(.about,.included,.room-rates,.booking,.video-section,.faq,.review-invite)),
:is(.about,.included,.room-rates,.booking,.video-section,.faq,.review-invite)+.section-divider{height:0;margin:0 auto}
.section-divider:has(+ :is(.about,.included,.room-rates,.booking,.video-section,.faq,.review-invite)):before,
:is(.about,.included,.room-rates,.booking,.video-section,.faq,.review-invite)+.section-divider:before{display:none}
.section-divider.reveal-ready{opacity:1;transform:none}
.section-divider.reveal-ready:before{opacity:0;transform:scaleX(0)}
.section-divider.reveal-ready.is-visible:before{opacity:1;transform:scaleX(1)}
/* Подпись действия вместо декоративной стрелки. */
.room-details{position:absolute;bottom:20px;right:20px;padding:9px 17px;background:var(--white);border-radius:24px;font-size:13px;font-weight:600;color:var(--ink);transition:background .2s,color .2s}
.room-card:hover .room-details,.room-card:focus-visible .room-details{background:var(--red);color:var(--white)}
.expand-icon{display:block;width:20px;height:20px;flex-shrink:0}
.home-page .hero-facts{justify-content:flex-start;gap:48px}
.home-page .hero-facts>div{max-width:none}
.room-main-photo,.about-photo,.card-photo{outline:1px solid #b9b8a780;outline-offset:5px}
.gallery-editorial .gallery-item:after{content:'';position:absolute;inset:9px;border:1px solid #fff6e54d;border-radius:6px;pointer-events:none;z-index:1}
html{scroll-padding-top:calc(var(--header-real) + 20px)}
@media(max-width:1150px){.location-bar{padding-left:32px;padding-right:32px}.section-divider{width:calc(100% - 64px)}}
@media(max-width:850px){.location-bar{display:none}.section-divider{width:calc(100% - 40px);height:0;margin:0 auto}.section-divider:before{display:none}.room-main-photo,.about-photo,.card-photo{outline-offset:3px}}
@media(max-width:1150px){.header,.home-page .header{padding-left:32px;padding-right:32px}}
@media(max-width:850px){
 :root{--header-h:72px}
 .header,.home-page .header{height:auto;min-height:calc(var(--header-h) + env(safe-area-inset-top,0px));
  padding:env(safe-area-inset-top,0px) 20px 0}
 .header .header-phones{display:none}
 .header .header-wordmark>span{font-size:28px}
 .header .header-wordmark>small{font-size:8px;margin-top:6px}
}

/* 2026-10-16: «своя рамка прокрутки» во встроенном браузере Telegram на iPhone.
   Класс tg-frame ставит скрипт в <head> (TG_FRAME_SCRIPT в build.py), только
   там, где есть объект TelegramWebviewProxy, и только на iPhone/iPad.
   Telegram рисует прокрученную страницу выше своего окна, под стеклянной
   панелью: https://github.com/TelegramMessenger/Telegram-iOS/issues/2347.
   Перекрыть эту полосу оформлением нельзя: в ТГ-03..05 пробовали фон над
   шапкой (псевдоэлемент, тень, sticky-блок за краем окна и заходящий на экран),
   на iPhone ни один не нарисовался. Поэтому здесь прокручивается не окно, а
   body: окно Telegram стоит в самом верху, а содержимое body обрезается по его
   рамке, и вылезать за окно нечему. Шапка прилипает к верху body, меню и
   нижняя кнопка fixed, они от этого не зависят.
   Цена (только в Telegram): его панель не сворачивается при прокрутке, нет
   «потянуть, чтобы обновить». Прокрутку и «Наверх» для этого режима ведёт
   app.js (pageScroller), место на странице при «назад» он же и возвращает. */
html.tg-frame{height:100%;overflow:hidden}
html.tg-frame body{height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior-y:contain;
 -webkit-overflow-scrolling:touch;scroll-behavior:smooth;scroll-padding-top:calc(var(--header-real) + 20px)}
/* Пока открыто меню, лист под ним не прокручивается: тот же смысл, что у
   body.nav-open{overflow:hidden} выше, но здесь прокручивается сам body. */
html.tg-frame body.nav-open{overflow:hidden}
@media(prefers-reduced-motion:reduce){html.tg-frame body{scroll-behavior:auto}}
/* 2026-10-16, ТГ-08, понравилось владельцу на iPhone: кремовые поля. С рамкой
   над окном и под нижними кнопками Telegram стал виден его собственный фон (у
   владельца чёрный). Telegram рисует там то, что у страницы лежит за краем окна.
   Даём ему кремовые поля: у html отступ 240 px сверху и снизу, а app.js держит
   окно сдвинутым ровно на верхний отступ (pin в блоке tgFrame). За краями окна
   лежат кремовые поля html, в самом окне, как и раньше, body с сайтом.
   content-box: у сайта box-sizing:border-box на всём, и тогда поля html съедали
   бы высоту body (было 332 px вместо 812 на проверке). scroll-behavior:auto:
   окно двигает только скрипт, и делать это он должен мгновенно. */
html.tg-frame{box-sizing:content-box;padding:240px 0;background:var(--paper);scroll-behavior:auto}

/* 2026-09-10: стрелки перелистывания вынесены за пределы кадра, в поля
   страницы — владелец показал место на скриншоте. Поверх фотографии они
   закрывали её край.
   Поля даёт .section: padding 64px по бокам. Кнопка 50px плюс зазор — это
   58px, влезает с запасом. Но ниже 1150px тот же .section ужимает padding до
   32px, и вынесенная стрелка уехала бы за край экрана вместе с полосой
   прокрутки. Поэтому вынос включается только там, где поля есть, а на узких
   экранах и на телефоне стрелки остаются на кадре — там их и не выносили.
   По вертикали они по-прежнему по центру фотографии: top = --gal-h / 2. */
@media(min-width:1151px){
 .gallery-arrows{left:calc(-1 * var(--gal-outside));right:calc(-1 * var(--gal-outside))}
 /* Тень и размытие нужны были, чтобы кнопка читалась на фотографии.
    На светлом фоне полей они превращают её в парящий диск — убираем,
    остаётся тонкая рамка из базового .circle. */
 /* Вид кнопки в полях. Тень и размытие были нужны поверх фотографии,
 здесь они делают из кнопки парящий диск — убраны.
 Цвет рамки: раньше #b7c0b2 на фоне #22352b давал контраст ~1.5:1. Это ниже
 порога 3:1, который WCAG 1.4.11 требует для границ управляющих элементов, и
 кнопки действительно терялись. Взят --ink: ~10:1, видно сразу.
 Красный сюда сознательно НЕ берём, хотя он и есть цвет .primary: красный на
 сайте закреплён за «Позвонить и забронировать». Две крупные красные кнопки
 рядом с фотографиями перетянули бы внимание с брони на перелистывание.
 Заливка появляется на наведении — тем же зелёным, что у .primary:hover. */
 .gallery-arrows .circle{box-shadow:none;backdrop-filter:none;background:transparent;
  width:56px;height:56px;font-size:20px;border:1.5px solid var(--ink);color:var(--ink)}
 .gallery-arrows .circle:not(:disabled):hover{background:var(--red);border-color:var(--red);color:var(--white)}
}

/* ============================================================
   2026-09-10: КРУПНЫЕ ПЛАШКИ — ФИРМЕННЫЙ КРАСНЫЙ ВМЕСТО ЗЕЛЁНОГО
   ============================================================
   По просьбе владельца. Меняются только сплошные заливки больших блоков:
   подвал, полоса акции на «Ценах» и подпись на фото главной. Мелкие зелёные
   акценты (галочки в списке услуг, аватарки отзывов, наведения) оставлены —
   зелёный остаётся вторым цветом палитры, а не исчезает совсем.

   Тёмный фон подложки лайтбокса (#11251ef5) намеренно не трогаем: там нужен
   нейтральный тёмный, на красном фотографии смотрелись бы дико. */
footer{background:var(--red)}
.price-promo{background:var(--red)}
.about-photo span{background:var(--red)}

/* Подгонка мелочей под новый фон. Всё, что ниже, было подобрано под зелёный. */
/* Мелкий текст подвала: #d0dacd на красном даёт 4.3:1 — ниже нормы 4.5:1
   для мелкого текста. Тёплый светлый даёт 4.8:1. */
.footer-bottom{color:#e7eddd}
/* Наведение на телефоны в подвале красило их в красный — на красном фоне
   ссылка просто исчезала бы. В шапке наведение остаётся красным: там фон
   светлый. */
.footer-phones>a:hover{color:var(--white)}
/* Кромка ромба у логотипа была розоватой под зелёный фон. */
footer .brand-mark{border-color:#ffffff66}

/* 2026-09-10: класс вешается на время бесшумной перестановки ленты на
   настоящий кадр после проезда через клон. Без него кадр стартует с
   притушенных 0.65 и заново проявляется за 0.45с — на переходе через край
   это выглядело как мигание фотографии. Снимается в следующем кадре
   отрисовки, обычное листание анимируется как прежде. */
.gallery-editorial .gallery-track.no-fade .gallery-item img{transition:none}

/* 2026-09-10: адрес на первом экране главной. Раньше он был только в тонкой
   строке над шапкой и в подвале — владелец сказал, что на главной адреса не
   видно. Дописан в надстрочник над заголовком, улица кликабельна и ведёт на
   «Контакты». Подчёркивание появляется по наведению: сплошная линия под
   разрядкой в 0.15em выглядит рвано. На узких экранах строка переносится
   по разделителю, поэтому у него запрещён перенос внутри частей. */
.hero-place{text-wrap:balance}
/* На узких экранах строка не влезает и переносится. Разделитель при этом
   повисал в конце первой строки — убираем его и разводим части по строкам:
   так получается два аккуратных ряда вместо строки с болтающейся точкой. */
@media(max-width:600px){
 .hero-place-dot{display:none}
 .hero-place-metro{display:block}
}
.hero-place a{border-bottom:1px solid transparent;transition:border-color .2s}
.hero-place a:hover{border-bottom-color:currentColor}

/* 2026-09-10: наведение на стрелки перелистывания и прочую навигацию галереи
   красило их в тёмно-зелёный. По просьбе владельца — фирменный красный.
   В покое кнопки остаются тихим тёмным кольцом: красный тут только на
   наведении, поэтому он не спорит с красными кнопками бронирования. */

/* ============================================================
   2026-09-10: ОКНО ЗВОНКА ДЛЯ ПК
   ============================================================
   На телефоне ссылка tel: открывает набор номера — всё понятно. На ПК по ней
   чаще всего не происходит НИЧЕГО, и гость остаётся в недоумении: нажал
   «Забронировать» — и тишина. Поэтому на ПК клик по любой ссылке tel:
   открывает это окно. На телефоне окно не показывается.

   ВАЖНО про отступы. Первая версия задавала их через margin у детей окна:
   #call>*{margin-left:38px}. Это не сработало — правила #call .eyebrow и
   #call h2 весомее селектора #call>* и обнуляли margin, поэтому надстрочник
   с заголовком прижимались к краю, а остальное стояло с отступом. Форма
   выглядела кривой. Теперь отступ один — padding у самого окна, и у детей
   боковых margin нет вообще. Не возвращай сюда margin, наступишь на то же. */
#call{padding:38px;border:0;border-radius:14px;background:var(--paper);color:var(--ink);width:min(460px,92vw);box-shadow:0 30px 80px #241a1840}
#call::backdrop{background:#1a100ea8;backdrop-filter:blur(3px)}
.call-close{position:absolute;top:14px;right:14px;width:38px;height:38px;border:1px solid var(--line);border-radius:50%;background:transparent;color:var(--muted);line-height:1}
.call-close:hover{background:var(--red);border-color:var(--red);color:var(--white)}
/* Заголовок в две строки не помещался бы рядом с кнопкой закрытия, поэтому
   у первых двух блоков справа оставлено место под неё. */
#call .eyebrow{margin:0 0 14px;padding-right:34px;color:var(--muted)}
#call h2{font-size:34px;line-height:1.1;letter-spacing:-.03em;margin:0 0 12px;padding-right:34px}
.call-lead{color:var(--muted);font-size:15px;line-height:1.55;margin:0 0 24px}
.call-numbers{display:grid;gap:10px;margin:0 0 20px}
.call-number{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid var(--line);border-radius:8px;padding:13px 14px;background:var(--white)}
.call-number a{font-size:22px;font-weight:600;white-space:nowrap;letter-spacing:-.01em}
.call-number a:hover{color:var(--red)}
.call-copy{border:1px solid var(--line);border-radius:20px;background:transparent;color:var(--muted);font-size:12px;padding:7px 13px;white-space:nowrap;transition:background .2s,color .2s,border-color .2s}
.call-copy:hover{background:var(--ink);border-color:var(--ink);color:var(--white)}
/* Подтверждение появляется на самой кнопке — гость смотрит именно на неё. */
.call-copy.done{background:var(--red);border-color:var(--red);color:var(--white)}
.call-wa{width:100%;margin:0 0 18px}
.call-note{font-size:12px;color:var(--muted);line-height:1.6;margin:0}
@media(max-width:600px){
 #call{padding:26px}
 #call h2{font-size:29px}
 .call-number a{font-size:19px}
}

/* 2026-09-10: на главной было одно большое высказывание во всю ширину,
   стало три карточки. Прежний вид не выбрасываем, а разворачиваем в сетку:
   белая карточка, тонкая рамка, короткая красная черта сверху — тот же язык,
   просто теперь их три. Правила ниже перекрывают старые размеры одиночной
   цитаты, поэтому идут после них. */
.review-quotes{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;margin-top:34px;align-items:stretch}
.home-page .home-reviews .review-quotes blockquote{margin:0;padding:34px 30px 30px;text-align:left;display:flex;flex-direction:column;height:100%}
.home-page .home-reviews .review-quotes blockquote:before{margin:0 0 22px}
/* Цитата занимает всё свободное место, поэтому подписи трёх карточек стоят
   на одной линии, даже когда тексты разной длины. */
.home-page .home-reviews .review-quotes blockquote p{font-size:21px;line-height:1.45;margin:0 0 22px;flex:1}
.home-reviews .review-quotes cite{display:block}
.home-reviews .review-quotes cite span{display:block;margin-top:4px}
@media(max-width:1000px){
 .review-quotes{grid-template-columns:1fr;gap:14px;margin-top:26px}
 .home-page .home-reviews .review-quotes blockquote{padding:26px 22px 24px}
 .home-page .home-reviews .review-quotes blockquote p{font-size:19px;margin-bottom:16px}
 .home-page .home-reviews .review-quotes blockquote:before{margin-bottom:16px}
}

/* ============================================================
   2026-09-10: ПОЛОСА УДОБСТВ — СЕТКА С ИКОНКАМИ
   ============================================================
   Было: пять слов в строку через ромбики-разделители. На ПК терялось между
   двумя крупными блоками, на телефоне ломалось на две рваные строки, причём
   ромбик оказывался в начале строки. Владелец: «вообще не заметно и не о чём,
   хотя здесь перечисляются удобства».

   Стало: сетка. Разделители больше не нужны — их работу делает сама сетка,
   поэтому рваных строк не бывает в принципе. Границы между ячейками тонкой
   линией: это уже язык сайта, тут же рядом разделители секций и рамки фото.
   Иконки нарисованы вручную в build.py, одной линией, на currentColor —
   цвет приходит из палитры, отдельно их красить не нужно. */
.amenity-strip{display:grid;grid-template-columns:repeat(4,1fr);gap:0;padding:0;max-width:1440px;margin:auto}
.amenity-strip span{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:12px;padding:26px 14px;font-size:13px;line-height:1.35;text-align:center}
.amenity-strip span+span{border-left:1px solid var(--line)}
.amenity-strip svg{width:26px;height:26px;flex-shrink:0}

@media(max-width:850px){
 /* 2026-10-18: после удаления «Своя компания» четыре пункта в двух рядах. */
 .amenity-strip{grid-template-columns:1fr 1fr}
 .amenity-strip span{flex-direction:row;justify-content:flex-start;align-items:center;gap:10px;padding:15px 16px;font-size:12.5px;text-align:left}
 .amenity-strip svg{width:22px;height:22px}
 /* Границы собираем заново: вертикальная только между колонками одного ряда,
    горизонтальная — начиная со второго ряда. */
 .amenity-strip span+span{border-left:0}
 .amenity-strip span:nth-child(odd):not(:last-child){border-right:1px solid var(--line)}
 .amenity-strip span:nth-child(n+3){border-top:1px solid var(--line)}
}

/* ============================================================
   2026-09-10: ПОЛОСА УДОБСТВ НА СТРАНИЦАХ ЗАЛОВ
   ============================================================
   Тот же приём, что и на главной: сетка с иконками вместо строки слов через
   палочки. Владелец попросил сделать одинаково.

   Разница с главной одна: пунктов не пять, а шесть у малого зала и семь у
   большого — у него сверх того бильярд. Поэтому на ПК не фиксированные пять
   колонок, а flex с равными долями: раскладка сама подстраивается под число
   пунктов, считать их в CSS не нужно.

   На узких экранах — две колонки. Последний пункт растягивается на всю ширину
   ТОЛЬКО когда он оказался нечётным: у большого зала их семь и он повисал бы
   один, у малого шесть и растягивать нечего. Условие :last-child:nth-child(odd)
   решает это без подсчёта в разметке. */
.feature-list{display:flex;flex-wrap:nowrap;gap:0;padding:0;border-top:1px solid var(--red-line);border-bottom:1px solid var(--red-line)}
.feature-list span{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:12px;padding:24px 10px;font-size:12.5px;line-height:1.35;text-align:center;border-right:0;padding-right:10px}
.feature-list span+span{border-left:1px solid var(--red-line)}
.feature-list svg{width:25px;height:25px;flex-shrink:0}

@media(max-width:850px){
 .feature-list{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);flex-wrap:wrap}
 .feature-list span{min-width:0;overflow-wrap:anywhere;flex-direction:row;justify-content:flex-start;align-items:center;gap:10px;padding:15px 16px;font-size:12.5px;text-align:left}
 .feature-list svg{width:22px;height:22px}
 .feature-list span+span{border-left:0}
 .feature-list span:nth-child(odd):not(:last-child){border-right:1px solid var(--red-line)}
 .feature-list span:nth-child(n+3){border-top:1px solid var(--red-line)}
 .feature-list span:last-child:nth-child(odd){grid-column:1/-1;justify-content:center}
}

/* ============================================================
   2026-09-11: ШАПКА НА ПК И КНОПКА «НАВЕРХ»
   ============================================================
   Наведение в шапке красит только текст пункта в фирменный красный — так же,
   как телефоны рядом и ссылки в строке адреса. Единственная линия принадлежит
   активному разделу и плавно переезжает между страницами (блок выше).

   Кнопка «Наверх» намеренно НЕ в шапке: шапка и так закреплена и занята
   навигацией с телефонами. Это плавающий круг в правом нижнем углу, в тех же
   пропорциях, что стрелки галереи в полях: тонкое тёмное кольцо в покое,
   заливка фирменным красным на наведении.
   До 851px она скрыта — там своя кнопка в нижней панели.
   Это ссылка на #top, а не кнопка: работает и без скриптов, прокрутку
   делает сам браузер по scroll-behavior. Скрипт отвечает только за
   появление после прокрутки. */
.desktop-nav a:hover{color:var(--red)}
.desktop-nav a:after{background:currentColor}

.to-top{position:fixed;right:34px;bottom:34px;z-index:40;width:54px;height:54px;
 display:grid;place-items:center;border-radius:50%;border:1.5px solid var(--ink);
 background:var(--paper);color:var(--ink);opacity:0;transform:translateY(10px);
 transition:opacity .28s ease,transform .28s cubic-bezier(.22,.61,.36,1),
  background .2s,border-color .2s,color .2s}
.to-top.is-visible{opacity:1;transform:none}
.to-top:hover{background:var(--red);border-color:var(--red);color:var(--white)}
.to-top svg{width:20px;height:20px}
@media(max-width:850px){.to-top{display:none}}
@media(prefers-reduced-motion:reduce){.to-top{transition:none;transform:none}}

/* ============================================================
   2026-09-14: ОТЗЫВЫ С ЯНДЕКС КАРТ НА СТРАНИЦЕ «ОТЗЫВЫ»
   ============================================================
   Две вкладки выглядят по-разному нарочно (решение владельца 14.09.2026):
   «Яндекс Карты» — живые отзывы с рейтингом: карточка рейтинга, подборка до
   18 отзывов карточками в две колонки и ссылка «Ещё N отзывов на Картах»;
   «Гостевая книга» — письма гостей: текст антиквой с красной кавычкой.

   Карточка рейтинга — на бледно-красной подложке, а не на ярком --red: яркий
   закреплён за кнопками бронирования (см. AGENTS.md про палитру).
   Звёзды — inline SVG: закрашенные заливкой --red, пустые контуром того же
   цвета. Новых цветов нет. */
.yandex-reviews{padding-bottom:0}
.yandex-rating-stars,.review-stars{display:inline-flex;gap:2px}
.yandex-rating-stars svg{width:18px;height:18px}
.review-stars svg{width:16px;height:16px}
.yandex-rating-stars svg.on,.review-stars svg.on{fill:var(--red)}
.review-stars svg.off{fill:none;stroke:var(--red);stroke-width:1.3}
.review .review-source{margin-top:14px;font-size:12px;color:var(--muted);letter-spacing:.04em}
.review-list-title{margin:0 0 18px}

/* Карточка рейтинга: крупная цифра, звёзды, число отзывов и оценок, ссылка. */
.yandex-summary{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:36px;
 padding:32px 40px;margin:0 0 56px;background:var(--red-tint);border:1px solid var(--red-line)}
.yandex-summary-score{display:flex;flex-direction:column;align-items:flex-start;gap:10px}
.yandex-summary-score strong{font-family:var(--serif);font-weight:400;font-size:76px;line-height:.85;color:var(--red-dark)}
.yandex-summary-text .eyebrow{margin:0 0 10px}
.yandex-summary-counts{margin:0;font-size:16px;color:var(--ink)}
.yandex-summary-link{display:inline-flex;align-items:center;justify-content:center;padding:15px 24px;
 border:1px solid var(--red);color:var(--red-dark);font-size:14px;letter-spacing:.02em;text-decoration:none;white-space:nowrap;
 transition:background .3s ease,color .3s ease}
.yandex-summary-link:hover{background:var(--red);color:var(--white)}
.yandex-summary-link:focus-visible,.yandex-all-link a:focus-visible,.review-more:focus-visible{outline:2px solid var(--red);outline-offset:4px}
/* Награда Яндекс Карт «Хорошее место 2026» — плашка в карточке рейтинга рядом
   с 4,9, под числом отзывов. Владелец убрал отдельную строку под линией и
   ссылку «О награде». Плашка без заливки (белый выбивался из дизайна), держится
   рамкой того же красного на 28% — обычная --red-line на розовой подложке
   рейтинга почти не видна; значок свой — тонкое кольцо со звездой фирменного красного
   (логотип Яндекса не используем). Когда вкладка появляется, кольцо
   прорисовывается по кругу, затем проявляется звезда. */
.yandex-award{display:inline-flex;align-items:center;gap:10px;margin:14px 0 0;padding:6px 16px 6px 7px;
 background:transparent;border:1px solid rgba(180,44,48,.28);border-radius:40px}
.yandex-award-emblem{width:28px;height:28px;flex-shrink:0;overflow:visible}
.yandex-award-emblem circle{fill:none;stroke:var(--red);stroke-width:1.6;stroke-dasharray:136;stroke-dashoffset:0}
.yandex-award-emblem path{fill:var(--red);transform-origin:24px 24px}
.yandex-award span{font-size:13px;line-height:1.3;color:var(--muted)}
/* Цифры года — «ровные» (lining-nums). У Cormorant по умолчанию старостильные
   цифры, «2026» стояло как строчные буквы и терялось (замечание владельца). Тот
   же приём, что у «4 + 1» в акциях: font-feature-settings здесь не работает. */
.yandex-award strong{font-family:var(--serif);font-weight:400;font-size:18px;color:var(--red-dark);font-variant-numeric:lining-nums}
.yandex-award-dash{font-style:normal}
.review-panel.is-entering .yandex-award-emblem circle{animation:awardRing 1.2s cubic-bezier(.22,.61,.36,1) .3s both}
.review-panel.is-entering .yandex-award-emblem path{animation:awardStar .6s cubic-bezier(.22,.61,.36,1) .95s both}
@keyframes awardRing{from{stroke-dashoffset:136}to{stroke-dashoffset:0}}
@keyframes awardStar{from{opacity:0;transform:scale(.55) rotate(-30deg)}to{opacity:1;transform:none}}
.yandex-intro{margin:0 0 30px;max-width:720px}
.yandex-intro h2{margin:0 0 10px}
.yandex-intro p{margin:0;color:var(--muted);font-size:15px}

/* Карточки отзывов. Высота в ряду общая (stretch), автор прижат к низу —
   так соседние карточки заканчиваются на одной линии. Длинный текст скрипт
   сворачивает до шести строк (.is-clamped); низ свёрнутого текста мягко
   гаснет маской, раскрытие — плавный рост max-height. */
.review-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}
/* Без белой подложки (владелец: «белый цвет выбивается из дизайна», выбран вариант
   «без белого»): карточка прозрачная на кремовом фоне, держится тонкой тёплой
   рамкой — как линии-разделители и письма гостевой книги. */
.review.review-card{display:flex;flex-direction:column;gap:16px;padding:28px 30px;background:transparent;
 border:1px solid var(--line);transition:border-color .35s ease,transform .35s cubic-bezier(.22,.61,.36,1)}
.review.review-card:hover{border-color:var(--red-line);transform:translateY(-3px)}
.review-card-top{display:flex;align-items:center;justify-content:space-between;gap:12px}
.review-card .review-stars{margin:0}
.review-card time{font-size:12px;color:var(--muted)}
.review-card-body{font-size:15.5px;line-height:1.65}
.review-card .review-card-body p{font-size:inherit;line-height:inherit;margin:0}
.review-card.is-clamped .review-card-body{max-height:calc(1.65em * 6);overflow:hidden;
 transition:max-height .5s cubic-bezier(.22,.61,.36,1)}
.review-card.has-more:not(.is-open) .review-card-body{-webkit-mask-image:linear-gradient(180deg,#000 60%,transparent);mask-image:linear-gradient(180deg,#000 60%,transparent)}
.review-more{align-self:flex-start;font:inherit;font-size:13px;letter-spacing:.02em;background:none;border:0;border-radius:0;
 padding:0 0 2px;color:var(--red-dark);border-bottom:1px solid currentColor;cursor:pointer;transition:color .2s}
.review-more:hover{color:var(--red)}
.review-more[hidden]{display:none}
.review-card-author{display:flex;align-items:center;gap:12px;margin-top:auto;padding-top:16px;border-top:1px solid var(--line)}
.review-card .review-avatar{width:40px;height:40px;font-size:21px;margin:0;flex-shrink:0}
.review-card .review-card-author h3{font-size:21px;line-height:1.15;margin:0}
.review-card .review-source{margin:3px 0 0}

/* Ссылка «Читать все N отзывов на Яндекс Картах» под карточками. Раньше здесь
   был большой блок с кнопкой; при шести отзывах это лишнее — кнопка «Все
   отзывы на Картах» уже есть в карточке рейтинга сверху. Но дочитавший до конца
   её не видит, поэтому внизу скромная текстовая ссылка сайта по центру; на
   наведении значок «открыть в другом месте» чуть уходит вправо-вверх. */
.yandex-all-link{margin:34px 0 0;text-align:center}
.yandex-all-link a{display:inline-flex;align-items:center;gap:8px;padding-bottom:3px;font-size:15px;letter-spacing:.02em;
 color:var(--red-dark);text-decoration:none;border-bottom:1px solid currentColor;transition:color .25s ease}
.yandex-all-link a:hover{color:var(--red)}
.yandex-all-link svg{width:15px;height:15px;flex-shrink:0;transition:transform .3s cubic-bezier(.22,.61,.36,1)}
.yandex-all-link a:hover svg{transform:translate(2px,-2px)}

/* Гостевая книга — письма: текст антиквой с красной кавычкой, ответ
   администратора на бледно-красной подложке. Содержание прежнее. */
.review.review-letter{grid-template-columns:230px minmax(0,1fr);gap:56px;padding:44px 0}
.review-letter-head{display:flex;flex-direction:column;align-items:flex-start;gap:14px}
.review-letter .review-avatar{margin:0}
.review-letter-head h3{margin:0 0 6px}
.review-letter blockquote{position:relative;margin:0;padding:0 0 0 38px;max-width:780px}
.review-letter blockquote:before{content:"«";position:absolute;left:0;top:-12px;font-family:var(--serif);font-size:58px;line-height:1;color:var(--red)}
.review.review-letter blockquote p{font-family:var(--serif);font-size:23px;line-height:1.5;color:var(--ink);margin:0}
.review.review-letter .review-response{margin:24px 0 0 38px;max-width:742px;padding:16px 22px;background:var(--red-tint);border-left:2px solid var(--red)}
.review.review-letter .review-response p{font-size:14px;margin-top:6px}
@media(max-width:1000px){.review.review-letter{grid-template-columns:180px minmax(0,1fr);gap:32px}}
/* 2026-09-18: звёзды у писем гостевой книги — между именем и датой. Пяти старым
   отзывам владелец поставил 5; новые приходят из формы со своей оценкой. */
.review-letter-head .review-stars{display:flex;margin:0 0 8px}

/* 2026-09-18: форма гостевой книги (только в сборке для RU-CENTER, см. build.py).
   Оформлена как ещё одно письмо: та же сетка «слева заголовок — справа текст»,
   линия сверху, без белых подложек (решение владельца 14.09). Поля — линия снизу,
   как в строке письма; текст отзыва набирается антиквой, как в самих письмах.
   Звёзды — радиокнопки: стрелки на клавиатуре работают сами. Сколько звёзд
   закрасить, считает CSS: --v ставит выбранная или наведённая звезда, а у каждой
   звезды прозрачность заливки clamp(0, --v − номер + 1, 1). Правила наведения идут
   после правил выбора с той же специфичностью — при наведении показывается
   будущая оценка. */
.guestbook-form{display:grid;grid-template-columns:230px minmax(0,1fr);gap:56px;padding:44px 0;border-top:0;scroll-margin-top:120px}
.gb-intro h3{margin:0 0 12px;font-size:32px}
.gb-intro p{margin:0;color:var(--muted);font-size:15px}
.gb-fields{display:grid;gap:26px;max-width:780px}
.gb-field{display:grid;gap:8px}
.gb-field>span,.gb-rating legend{font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink)}
.gb-field input,.gb-field textarea{width:100%;font:inherit;font-size:17px;color:var(--ink);background:transparent;
 border:0;border-bottom:1px solid var(--red-line);border-radius:0;padding:10px 0;transition:border-color .25s ease}
.gb-field textarea{font-family:var(--serif);font-size:21px;line-height:1.5;min-height:8.5em;resize:none;overflow:hidden}
.gb-field input:focus,.gb-field textarea:focus{outline:none;border-bottom-color:var(--red)}
.gb-field small{font-size:13px;color:var(--muted)}
.gb-rating{border:0;margin:0;padding:0;min-width:0}
.gb-rating legend{padding:0}
.gb-stars{--v:0;display:flex;gap:4px;margin-top:10px}
.gb-stars label{position:relative;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;cursor:pointer}
.gb-stars input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}
.gb-stars svg{width:30px;height:30px;fill:var(--red);fill-opacity:0;stroke:var(--red);stroke-width:1.2;transition:fill-opacity .2s ease,transform .2s ease}
.gb-stars label:has(input:focus-visible){outline:2px solid var(--red);outline-offset:1px}
.gb-stars label:active svg{transform:scale(.88)}
.gb-stars:has(input[value="1"]:checked){--v:1}
.gb-stars:has(input[value="2"]:checked){--v:2}
.gb-stars:has(input[value="3"]:checked){--v:3}
.gb-stars:has(input[value="4"]:checked){--v:4}
.gb-stars:has(input[value="5"]:checked){--v:5}
.gb-stars:has(label:nth-child(1):hover){--v:1}
.gb-stars:has(label:nth-child(2):hover){--v:2}
.gb-stars:has(label:nth-child(3):hover){--v:3}
.gb-stars:has(label:nth-child(4):hover){--v:4}
.gb-stars:has(label:nth-child(5):hover){--v:5}
.gb-stars label:nth-child(1) svg{fill-opacity:clamp(0,var(--v),1)}
.gb-stars label:nth-child(2) svg{fill-opacity:clamp(0,calc(var(--v) - 1),1)}
.gb-stars label:nth-child(3) svg{fill-opacity:clamp(0,calc(var(--v) - 2),1)}
.gb-stars label:nth-child(4) svg{fill-opacity:clamp(0,calc(var(--v) - 3),1)}
.gb-stars label:nth-child(5) svg{fill-opacity:clamp(0,calc(var(--v) - 4),1)}
.gb-hp{position:absolute;left:-9999px;width:1px;height:1px;overflow:hidden}
.gb-status{margin:0;min-height:1.4em;font-size:14px;color:var(--red-dark)}
.guestbook-form .button{justify-self:start}
.guestbook-form .button[disabled]{opacity:.6;cursor:progress}
.gb-thanks{border-left:2px solid var(--red);padding:6px 0 6px 24px;animation:reviewItemIn .6s cubic-bezier(.22,.61,.36,1) both}
.gb-thanks h3{margin:0 0 8px}
.gb-thanks p{margin:0;color:var(--muted)}
/* 2026-09-19: форма — вверху вкладки. Закрытая — красная кнопка «Написать отзыв»
   по центру; по нажатию кнопка раздвигается влево, вправо и вниз и становится
   бледно-красной карточкой с формой (просьба владельца). Превращение — в app.js:
   блок сначала обрезан по размеру кнопки и залит её красным, затем обрезка уходит
   к краям, высота растёт, красный светлеет до --red-tint, подпись кнопки гаснет,
   а шапка карточки и поля проявляются. Без скрипта карточка открывается сразу.
   (Промежуточный вариант ChatGPT — широкая строка «Открыть / Закрыть» — заменён.) */
.gb-compose{position:relative;display:flex;flex-direction:column;align-items:center;margin:0 0 40px;padding:0;
 border:1px solid transparent;border-radius:6px}
.gb-toggle{display:inline-flex;align-items:center;justify-content:center;min-width:260px;padding:18px 34px;border-radius:6px;
 background:var(--red);color:var(--white);font-size:15px;font-weight:600;letter-spacing:.02em;cursor:pointer;list-style:none;
 user-select:none;transition:background .3s ease,transform .25s ease}
.gb-toggle::-webkit-details-marker{display:none}
.gb-toggle:hover{background:var(--red-dark);transform:translateY(-2px)}
.gb-toggle-label{display:inline-flex;align-items:center;gap:12px}
.gb-pen{width:19px;height:19px;flex:none}
.gb-toggle-head{display:none}
/* Открыто: карточка во всю ширину. Подпись кнопки остаётся для диктора и как
   «след» кнопки — app.js гасит её в начале превращения, поэтому она лежит поверх
   карточки ровно там, где была кнопка (высота — --gb-button-h из app.js). */
.gb-compose[open]{align-items:stretch;padding:28px 40px 6px;background:var(--red-tint);border-color:var(--red-line)}
.gb-compose[open]>.gb-toggle{display:block;min-width:0;padding:0;background:none;color:var(--ink);border-radius:0;transform:none;transition:none}
/* Смена кнопка ↔ карточка — мгновенная: цвет плавно меняет сам блок (app.js), а
   собственный переход фона кнопки дал бы мелькание красной полосы. */
.gb-compose.is-still>.gb-toggle{transition:none}
.gb-compose[open] .gb-toggle-label{position:absolute;left:0;right:0;top:0;height:var(--gb-button-h,56px);justify-content:center;
 color:var(--white);opacity:0;pointer-events:none}
.gb-compose[open] .gb-toggle-head{display:flex;align-items:baseline;justify-content:space-between;gap:20px;padding:0 0 20px;
 border-bottom:1px solid var(--red-line)}
.gb-toggle-title{font-family:var(--serif);font-size:32px;line-height:1.1}
.gb-toggle-close{display:inline-flex;align-items:center;gap:10px;font-size:12px;font-weight:600;letter-spacing:.08em;
 text-transform:uppercase;color:var(--muted);transition:color .25s ease}
.gb-toggle:hover .gb-toggle-close{color:var(--red-dark)}
.gb-toggle-x{position:relative;width:14px;height:14px}
.gb-toggle-x:before,.gb-toggle-x:after{content:'';position:absolute;left:0;right:0;top:50%;height:1.5px;background:currentColor;
 transform:rotate(45deg);transition:transform .35s cubic-bezier(.22,.61,.36,1)}
.gb-toggle-x:after{transform:rotate(-45deg)}
.gb-toggle:hover .gb-toggle-x:before,.gb-toggle:hover .gb-toggle-x:after{transform:rotate(0)}
.gb-compose[open] .guestbook-form{border-top:0;padding:30px 0 34px}
/* Под кнопкой/карточкой — первое письмо со своей линией сверху. */
.review-tabs.is-ready #panel-guestbook>.gb-compose~.review:first-of-type{border-top:1px solid var(--line);padding-top:44px}
/* «Показать ещё» (app.js): письма по 10. Вид — как контурная кнопка «Все отзывы на
   Картах» в карточке рейтинга; под подписью — сколько уже показано. */
.gb-more{display:flex;justify-content:center;padding:40px 0 0;border-top:1px solid var(--line)}
.gb-more-button{display:inline-flex;flex-direction:column;align-items:center;gap:4px;padding:15px 34px;border:1px solid var(--red);border-radius:5px;
 background:transparent;color:var(--red-dark);font:inherit;font-size:14px;font-weight:600;letter-spacing:.02em;cursor:pointer;
 transition:background .3s ease,color .3s ease,transform .25s ease}
.gb-more-button small{font-size:12px;font-weight:400;letter-spacing:0;opacity:.75}
.gb-more-button:hover{background:var(--red);color:var(--white);transform:translateY(-2px)}
.gb-more-button:focus-visible{outline:2px solid var(--red);outline-offset:4px}
.review-panel.is-entering>.gb-compose{animation:reviewItemIn .6s cubic-bezier(.22,.61,.36,1) both}
@media(max-width:1000px){.guestbook-form{grid-template-columns:180px minmax(0,1fr);gap:32px}}
@media(prefers-reduced-motion:reduce){.gb-field input,.gb-field textarea,.gb-stars svg{transition:none}.gb-thanks{animation:none}
 .gb-toggle,.gb-toggle-close,.gb-toggle-x:before,.gb-toggle-x:after,.gb-more-button{transition:none}.gb-toggle:hover,.gb-more-button:hover{transform:none}
 .review-panel.is-entering>.gb-compose{animation:none}}
@media(max-width:850px){
 .review-cards{grid-template-columns:minmax(0,1fr)}
 .yandex-summary{grid-template-columns:auto minmax(0,1fr);gap:22px 28px;padding:26px 28px}
 .yandex-summary-link{grid-column:1/-1}
}
/* Вкладки «Яндекс Карты» / «Гостевая книга». Вид — как активный пункт шапки:
   крупная антиква, выбранная тёмная, остальные приглушённые. Числа отзывов в
   капсулах рядом с названием были, владелец попросил их убрать (14.09.2026).

   Анимации (владелец: «оформить красиво с плавными анимациями»):
   - красная линия-указатель одна на всю панель и ПЕРЕЕЗЖАЕТ под выбранную
     вкладку (transform + width), а не появляется заново под каждой;
   - прежняя панель за 0.18 с гаснет и чуть опускается, новая проявляется, её
     отзывы выезжают снизу лесенкой с шагом 0.05 с — первые шесть, дальше без
     задержки, чтобы длинный список не ждал;
   - кривая та же, что у меню и кнопки «Наверх», — движение на сайте одно.
   Пока скрипт не запустился (.is-ready нет), линия рисуется рамкой самой
   кнопки; при prefers-reduced-motion всё переключается мгновенно. */
.review-tablist{position:relative;display:flex;gap:44px;border-bottom:1px solid var(--line);margin:0 0 44px}
.review-tablist[hidden],.review-panel[hidden]{display:none}
.review-tablist button{font:inherit;appearance:none;background:none;border:0;border-radius:0;
 display:inline-flex;align-items:center;gap:12px;padding:0 0 18px;margin-bottom:-1px;
 border-bottom:2px solid transparent;font-family:var(--serif);font-size:32px;line-height:1.1;
 color:var(--muted);cursor:pointer;transition:color .3s ease,border-color .3s ease}
.review-tablist button:hover{color:var(--red)}
.review-tablist button[aria-selected="true"]{color:var(--ink);border-bottom-color:var(--red)}
.review-tablist button:focus-visible{outline:2px solid var(--red);outline-offset:6px}
.review-tabs.is-ready .review-tablist button[aria-selected="true"]{border-bottom-color:transparent}
.review-tab-indicator{position:absolute;left:0;bottom:-1px;height:2px;width:0;background:var(--red);
 transition:transform .5s cubic-bezier(.22,.61,.36,1),width .5s cubic-bezier(.22,.61,.36,1)}
.review-tab-indicator.is-instant{transition:none}
.review-tabs.is-ready .review-list-title{display:none}
/* Во вкладке «Гостевая книга» первый отзыв стоит прямо под линией вкладок, и
   его верхняя граница давала вторую линию подряд. Без скрипта над ним подпись
   «Из гостевой книги», там граница уместна — поэтому только при .is-ready. */
.review-tabs.is-ready #panel-guestbook>.review:first-of-type{border-top:0;padding-top:0}
.review-panel.is-leaving{opacity:0;transform:translateY(8px);transition:opacity .18s ease,transform .18s ease}
.review-panel.is-entering{animation:reviewPanelIn .45s ease both}
.review-panel.is-entering>.yandex-summary,
.review-panel.is-entering>.yandex-intro,
.review-panel.is-entering>.review,
.review-panel.is-entering>.review-cards>.review{animation:reviewItemIn .6s cubic-bezier(.22,.61,.36,1) both}
.review-panel.is-entering>.yandex-intro{animation-delay:.06s}
.review-panel.is-entering>.review-cards>.review:nth-child(1){animation-delay:.12s}
.review-panel.is-entering>.review-cards>.review:nth-child(2){animation-delay:.17s}
.review-panel.is-entering>.review-cards>.review:nth-child(3){animation-delay:.22s}
.review-panel.is-entering>.review-cards>.review:nth-child(4){animation-delay:.27s}
.review-panel.is-entering>.review-cards>.review:nth-child(5){animation-delay:.32s}
.review-panel.is-entering>.review-cards>.review:nth-child(6){animation-delay:.37s}
.review-panel.is-entering>.review:nth-of-type(1){animation-delay:.05s}
.review-panel.is-entering>.review:nth-of-type(2){animation-delay:.1s}
.review-panel.is-entering>.review:nth-of-type(3){animation-delay:.15s}
.review-panel.is-entering>.review:nth-of-type(4){animation-delay:.2s}
.review-panel.is-entering>.review:nth-of-type(5){animation-delay:.25s}
.review-panel.is-entering>.review:nth-of-type(6){animation-delay:.3s}
/* Приглашение внизу страницы следует за вкладкой: тот же проявляющийся
   подъём, что у отзывов, чтобы смена кнопки не выглядела рывком. */
.invite-variant[hidden]{display:none}
/* 2026-09-18: в сборке для RU-CENTER у гостевой книги своего приглашения нет — форма
   стоит прямо над блоком. Когда вкладки работают, открыта «Гостевая книга» и
   своего приглашения у неё нет, блок и разделитель перед ним не рисуются, чтобы не
   висела пустая линия. Без скрипта видны обе вкладки — и приглашение на Карты.
   :has() внутри :has() по правилам CSS нельзя — браузер выбросил бы всё правило,
   поэтому условие собрано на уровне <main>. */
main:has(.review-tabs.is-ready #panel-guestbook:not([hidden])):not(:has(.invite-variant[data-for="panel-guestbook"])) :is(.review-invite,.section-divider:has(+ .review-invite)){display:none}
.invite-variant.is-entering{animation:reviewItemIn .6s cubic-bezier(.22,.61,.36,1) .1s both}
@keyframes reviewPanelIn{from{opacity:0}to{opacity:1}}
@keyframes reviewItemIn{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){
 .review-tab-indicator,.review-panel.is-leaving,.review-tablist button,
 .review.review-card,.review-card.is-clamped .review-card-body,.yandex-summary-link,
 .yandex-all-link a,.yandex-all-link svg{transition:none}
 .review.review-card:hover,.yandex-all-link a:hover svg{transform:none}
 .review-panel.is-entering .yandex-award-emblem circle,.review-panel.is-entering .yandex-award-emblem path{animation:none}
 .review-panel.is-entering,.review-panel.is-entering>.yandex-summary,.review-panel.is-entering>.yandex-intro,
 .review-panel.is-entering>.review,.review-panel.is-entering>.review-cards>.review,.invite-variant.is-entering{animation:none}
}
@media(max-width:600px){
 .yandex-summary{grid-template-columns:minmax(0,1fr);gap:18px;padding:24px 22px;margin-bottom:40px}
 .yandex-summary-score{flex-direction:row;align-items:center;gap:14px}
 .yandex-summary-score strong{font-size:56px}
 /* На телефоне текст в одну строку не влезал и переносился где придётся
    («…— награда / Яндекс Карт»). Перенос сделан намеренным: название
    сверху, «награда Яндекс Карт» мелко под ним, тире скрыто; скругление меньше
    под две строки. */
 .yandex-award{margin-top:12px;padding:7px 16px 7px 8px;border-radius:24px}
 .yandex-award span{font-size:12px;line-height:1.25}
 .yandex-award strong{display:block;font-size:17px;line-height:1.2}
 .yandex-award-dash{display:none}
 .review.review-card{padding:22px 20px}
 .review.review-card>.review-card-top{display:flex}
 .yandex-all-link{margin-top:26px}
 .yandex-all-link a{font-size:14px}
 .review.review-letter{grid-template-columns:minmax(0,1fr);gap:18px;padding:30px 0}
 .review.review-letter>.review-letter-head{display:flex;flex-direction:row;align-items:center}
 .review-letter blockquote{padding-left:26px}
 .review-letter blockquote:before{font-size:44px;top:-8px}
 .review.review-letter blockquote p{font-size:19px}
 .review.review-letter .review-response{margin-left:26px}
 .guestbook-form{grid-template-columns:minmax(0,1fr);gap:22px;padding:30px 0}
 .gb-intro h3{font-size:26px}
 .gb-field textarea{font-size:19px}
 .guestbook-form .button{justify-self:stretch}
 .gb-toggle{min-width:240px;padding:17px 28px}
 .gb-compose{margin-bottom:30px}
 .gb-compose[open]{padding:22px 18px 4px}
 .gb-toggle-title{font-size:26px}
 .gb-compose[open] .guestbook-form{padding:24px 0 28px}
 .review-tabs.is-ready #panel-guestbook>.gb-compose~.review:first-of-type{padding-top:30px}
 .gb-more{padding-top:30px}.gb-more-button{width:100%}
 /* На телефоне названия не переносятся: «Яндекс / Карты» в две строки выглядело
    сломанным. Если шрифт у гостя крупнее и две вкладки всё же не влезут, панель
    прокручивается вбок сама, а не ломает строку. */
 .review-tablist{gap:20px;margin-bottom:30px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none}
 .review-tablist::-webkit-scrollbar{display:none}
 .review-tablist button{font-size:20px;padding-bottom:12px;gap:7px;white-space:nowrap;flex-shrink:0}
}

/* ============================================================
   2026-09-15: УХОД СО СТРАНИЦЫ И ЗАГРУЗКА
   ============================================================
   Владелец: «нажал — страница в блюр, загрузка пошла, и из блюра вышла новая».
   Класс is-leaving на <html> ставит dist/app.js в момент нажатия на ссылку
   другой страницы сайта. Содержимое плавно расплывается и приглушается; шапка
   остаётся резкой. Если загрузка дольше четверти секунды — в центре проявляются
   три тонкие струи пара: они поочерёдно рисуются снизу вверх и растворяются. На быстрых
   переходах (страница уже скачана заранее) пар не успевает появиться — и не
   мелькает. Выход новой страницы из размытия — в style.css.
   До 15.09 была красная полоска вверху экрана (.nav-progress), затем ромб;
   оба варианта убраны, индикатор загрузки по-прежнему один. */
html.is-leaving main,html.is-leaving footer,html.is-leaving .location-bar,
html.is-leaving #mobile-nav .mobile-nav-inner{filter:blur(3px);opacity:.72;pointer-events:none;
 transition:filter .24s cubic-bezier(.4,0,.2,1),opacity .24s cubic-bezier(.4,0,.2,1)}
html.is-leaving .mobile-book,html.is-leaving .to-top{opacity:0;pointer-events:none;transition:opacity .2s ease}
.nav-loader{position:fixed;left:50%;top:50%;z-index:300;width:72px;height:54px;margin:-27px 0 0 -36px;
 opacity:0;visibility:hidden;pointer-events:none;transition:opacity .2s ease,visibility 0s linear .2s}
.nav-loader svg{display:block;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 7px 10px #c9d6b424)}
.nav-loader .steam{fill:none;stroke:var(--red);stroke-width:2.1;stroke-linecap:round;
 stroke-dasharray:1;stroke-dashoffset:1;opacity:0;transform-box:fill-box;transform-origin:center bottom;
 animation:navLoaderSteam 1.55s cubic-bezier(.45,0,.35,1) infinite}
.nav-loader .steam-left{animation-delay:-1.18s;stroke-opacity:.72}
.nav-loader .steam-center{animation-delay:-1.48s;stroke-width:2.35}
.nav-loader .steam-right{animation-delay:-.88s;stroke-opacity:.82}
html.is-leaving .nav-loader{opacity:1;visibility:visible;transition:opacity .35s ease .25s,visibility 0s linear .25s}
/* На телефоне пар начинает проявляться до location.assign: Safari может
   перестать перерисовывать старую страницу сразу после начала навигации. Меню
   складывается за 0,18 с, поэтому первые кадры пара совпадают с концом движения,
   а не выглядят отдельной паузой. */
@media(max-width:850px){
 html.is-leaving .nav-loader{transition:opacity .22s ease .1s,visibility 0s linear .1s}
}
@keyframes navLoaderSteam{
 0%{stroke-dashoffset:1;opacity:0;transform:translateY(6px) scaleY(.88)}
 24%{opacity:.92}
 62%{stroke-dashoffset:0;opacity:.9;transform:translateY(0) scaleY(1)}
 100%{stroke-dashoffset:-1;opacity:0;transform:translateY(-7px) scaleY(1.05)}
}
@media(prefers-reduced-motion:reduce){
 html.is-leaving main,html.is-leaving footer,html.is-leaving .location-bar,
 html.is-leaving #mobile-nav .mobile-nav-inner{filter:none}
 .nav-loader .steam{animation:none;stroke-dashoffset:0;opacity:.78;transform:none}
}

/* 2026-10-16: вопросы и ответы на «Контактах» раскрывались рывком (владелец:
   «раскрывается резко, надо красиво»). Плавную высоту делает dist/app.js, здесь
   только вид: вместо стандартного треугольника своя стрелка, она поворачивается
   за то же время, что и раскрытие. Без скрипта всё работает как раньше. */
.faq details{transition:border-color .3s ease}
.faq summary{display:flex;align-items:center;gap:14px;list-style:none;transition:color .25s ease}
.faq summary::-webkit-details-marker{display:none}
.faq summary:before{content:'';flex:none;width:8px;height:8px;margin-left:2px;
 border-right:1.5px solid var(--red);border-bottom:1.5px solid var(--red);
 transform:rotate(-45deg);transform-origin:60% 60%;
 transition:transform .38s cubic-bezier(.22,.61,.36,1)}
.faq details[open] summary:before{transform:rotate(45deg)}
.faq summary:hover{color:var(--red-dark)}
.faq details[open] summary{color:var(--ink)}
@media(prefers-reduced-motion:reduce){.faq summary,.faq summary:before,.faq details{transition:none}}
/* 2026-10-16: страница политики обработки данных. Документ читают глазами, а не
   проглядывают, поэтому колонка узкая, строки свободные, заголовки разделов мелкие.
   Пометки «заполняет директор» видны нарочно: пока они на месте, текст черновой. */
.policy{max-width:860px;padding-top:0}
.policy h2{font-size:22px;line-height:1.3;margin:40px 0 14px}
.policy h2:first-of-type{margin-top:8px}
.policy p{font-size:17px;line-height:1.75;color:var(--muted);margin:0 0 14px}
.policy a{color:var(--red)}
.policy-draft{background:var(--red-tint);border-left:3px solid var(--red);border-radius:4px;padding:18px 22px;color:var(--ink)!important}
.policy-draft strong{color:var(--red)}
.policy-fill{background:#fdf3d6;border-bottom:1px dashed #c9a227;padding:0 4px;color:var(--ink);font-style:italic}
.policy-date{margin-top:26px;font-size:14px}
.policy-contact{max-width:860px}
.policy-contact h2{font-size:26px;margin:0 0 14px}
.policy-contact p{font-size:17px;line-height:1.75;color:var(--muted);margin:0 0 12px}
@media(max-width:850px){.policy,.policy-contact{padding-left:20px;padding-right:20px}.policy h2{font-size:20px;margin-top:32px}.policy p,.policy-contact p{font-size:16px}.policy-contact h2{font-size:22px}}


/* 2026-10-16: строку удобств (.card-features) из карточек залов убрали по просьбе
   владельца. Её верхний отступ 14 px переходит к строке про доплату, иначе она
   прилипала к названию зала. */
.room-card .card-note{margin-top:14px}

/* 2026-10-16: первый экран «Сауна, куда хочется / возвращаться.» (решение владельца).
   На ПК «Сауна, куда хочется» одной строкой. На телефоне она не влезает, и без
   подсказки «хочется» уезжало бы на следующую строку одно; перенос после
   «Сауна,» держит «куда хочется» вместе. */
.hero-br-phone{display:none}
@media(max-width:600px){.hero-br-phone{display:inline}}

/* Основные описания читаются темнее служебных подписей. */
:root{--body-copy:#f7f2e4}
.hero .lead,
.about>div>p:not(.eyebrow),
.page-heading .lead,
.room-page .room-summary>p:not(.eyebrow):not(.small),
.booking p:not(.eyebrow),
.faq details p{color:var(--body-copy)}
@media(min-width:851px){
 .home-page .about>div>p{font-size:17px;line-height:1.7}
}




/* 2026-10-17: подвал тёмно-красный, как карточка «Счастливый час» (просьба
   владельца: на телефоне подвал казался ярче остального красного). Он был залит
   тем же --red, что и кнопки, а большая площадь чистого красного кажется ярче. */
footer{background:var(--red-dark)}

/* 2026-10-17: вместимость тарифа читается рядом с названием, а не на фото. */
.room-capacity{font-size:17px;line-height:1.5;margin:14px 0 0;color:var(--ink)}
.room-capacity strong{font-weight:600;color:var(--red-dark);white-space:nowrap}
.home-page .room-card .room-capacity{margin-left:14px;margin-right:14px}
.room-card .card-note{margin-top:8px;font-size:13px;line-height:1.65}
.price-card .room-capacity{margin-top:10px;font-size:20px}
.promo-terms{padding:20px 24px;margin:0 0 28px;border:1px solid var(--line);border-radius:8px;background:var(--white)}
.promo-terms strong{font-size:18px;font-weight:500;color:var(--red-dark)}
.promo-terms p{font-size:15px;line-height:1.6;margin:5px 0 0}
@media(max-width:600px){
 .home-page .room-card .room-capacity{margin-left:8px;margin-right:8px}
 .promo-terms{padding:18px 20px;margin-bottom:20px}
}

/* 2026-10-17: условие сочетания видно внутри самой карточки 4 + 1. */
.promo.happy p.promo-combination{font-size:15px;line-height:1.6;color:var(--paper);border-top:1px solid #ffffff38;padding-top:14px;margin:18px 0 0}

/* 2026-10-17: две цены уборки зависят от числа гостей по прейскуранту. */
.extras .extra-service-note{display:block;margin-top:9px;font-size:14px;line-height:1.65;color:var(--muted);font-weight:400;white-space:pre-line}
.extras .extra-service-note:empty{display:none}

/* 2026-10-18: WhatsApp и MAX равноправной парой в стиле сайта. */
.messenger-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:100%;max-width:360px;margin:16px 0}
.messenger-actions .button{min-width:0;padding:15px 16px;font-size:14px;line-height:1.4;justify-content:center;white-space:nowrap}
.booking .messenger-actions{margin-top:0}
/* Подвал: общая ось для телефонов и двух одинаковых ссылок мессенджеров. */
.footer-phones{align-items:flex-end}
.footer-messengers{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;width:100%;margin-top:12px}
.footer-phones .footer-messengers a{display:flex;align-items:center;justify-content:center;min-height:42px;padding:8px 16px;border:1px solid #ffffff50;border-radius:5px;font-size:13px;line-height:1.4;white-space:nowrap;transition:background .2s,border-color .2s}
.footer-messengers a:hover{background:#ffffff12;border-color:#ffffff90}
@media(min-width:851px){
 .footer-bottom{display:grid;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);gap:24px}
 .footer-bottom>div{justify-content:center;gap:24px}
 .footer-bottom>span:last-child{justify-self:end;padding-right:48px;white-space:nowrap}
}
@media(max-width:850px){
 .footer-bottom{display:flex;flex-direction:column;align-items:flex-start;gap:12px}
 .footer-bottom>div{flex-wrap:wrap;gap:8px 24px}
 .footer-bottom>div a{padding:6px 0}
}
@media(max-width:600px){
 .footer-phones{align-items:flex-start;width:min(100%,320px)}
 .footer-messengers{margin-top:12px}
}
.mobile-nav-contact .messenger-actions{margin:16px 0 20px}
.about>div>p:first-child{margin-top:0}
@media(max-width:600px){
 #call .call-number{flex-wrap:wrap;gap:10px}
}

/* 2026-10-18: контакты на ПК. Мобильная компоновка до 850 px прежняя. */
@media(min-width:851px){
 .contacts-page .page-heading{padding-top:24px;padding-bottom:30px}
 .contacts-page .breadcrumb{margin-bottom:24px}
 .contacts-page .page-heading .eyebrow{margin-bottom:12px}
 .contacts-page .page-heading h1{font-size:clamp(40px,3.8vw,56px);line-height:1.12;margin:0 0 16px}
 .contacts-page .page-heading h1 br{display:none}
 .contacts-page .page-heading .lead{max-width:none;font-size:16px}
 .contacts-page .contact-grid{grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:28px;padding-top:10px;padding-bottom:52px;align-items:stretch}
 .contacts-page .contact-panel{padding:28px 30px;background:var(--white);border:1px solid var(--line);border-radius:16px}
 .contacts-page .contact-panel .eyebrow{margin:0 0 14px}
 .contacts-page .contact-phone,.contacts-page .contact-panel .second-phone{font-size:clamp(26px,2.4vw,34px);line-height:1.3;letter-spacing:-.025em;white-space:nowrap}
 .contacts-page .contact-panel .second-phone{margin-top:6px}
 .contacts-page .contact-panel .messenger-actions{max-width:none;margin:18px 0 0}
 .contacts-page .contact-panel hr{margin:24px 0}
 .contacts-page .contact-panel h3{font-size:clamp(27px,2.4vw,34px);line-height:1.22;margin:0 0 12px}
 .contacts-page .contact-panel p:not(.eyebrow){max-width:none;font-size:15px;line-height:1.7;margin:0 0 20px}
 .contacts-page .contact-panel>.button{font-size:14px;padding:14px 20px}
 .contacts-page .map-panel{display:grid;grid-template-rows:minmax(0,1fr);min-height:480px;background:var(--white);border:1px solid var(--line);border-radius:16px}
 .contacts-page .map-panel iframe{height:100%;min-height:0}
 .contacts-page .faq{display:block;padding-top:48px;padding-bottom:64px}
 .contacts-page .faq>div:first-child{margin-bottom:28px}
 .contacts-page .faq .eyebrow{margin:0 0 12px}
 .contacts-page .faq h2{font-size:clamp(34px,3.2vw,46px);margin:0;line-height:1.15}
 .contacts-page .faq>div+div{border-top:1px solid var(--line)}
 .contacts-page .faq details{padding:21px 0}
 .contacts-page .faq summary{font-size:18px}
 .contacts-page .faq details p{max-width:880px;line-height:1.7;margin:16px 0 0}
}

/* 2026-10-18: заголовок подборки отзывов на ПК без одинокого слова «Карт». */
@media(min-width:851px){
 .yandex-reviews .yandex-intro{max-width:none;margin-bottom:24px}
 .yandex-reviews .yandex-intro h2{font-size:clamp(32px,3vw,42px);line-height:1.18;margin:0}
}

/* 2026-10-19: кнопки бронирования на общей нижней линии в соседних акциях.
   На главной вместо кнопок ссылки условий, её карточки здесь не меняются. */
@media(min-width:601px){
 .promo:has(>div>.button){display:flex}
 .promo>div:has(>.button){display:flex;flex-direction:column;align-items:flex-start;width:100%;height:auto}
 .promo>div>.button{margin-top:auto}
 .promo.happy p.promo-combination{margin-bottom:20px}
}
@media(min-width:601px) and (max-width:720px){
 .promo>div>.button{min-height:80px}
}

/* 2026-10-19: результаты локального аудита. Условия доплаты читаются
   обычным размером; компактное вступление прайса только на компьютере. */
.card-note,.room-summary>p.small{font-size:14px;line-height:1.65}
@media(max-width:360px){
 .extras h2{font-size:clamp(32px,10vw,36px)}
 .feature-list span{flex-direction:column;gap:8px;padding:16px 8px;text-align:center}
}
@media(min-width:851px){
 .prices-page .page-heading{padding-top:24px;padding-bottom:24px}
 .prices-page .page-heading h1{font-size:clamp(44px,4.2vw,60px);line-height:1.1;margin-bottom:20px}
 .prices-page .page-heading .lead{max-width:760px}
 .prices-page .page-heading+.section{padding-top:24px}
 /* Прайс и бронирование читаются подряд, без двойного отступа по 88 px. */
 .prices-page .extras{padding-bottom:24px}
 .prices-page .extras+.section-divider+.booking{padding-top:40px}
}

/* 2026-10-19: тарифы рядом с описанием зала вместо повторной карточки
   после галереи. У обоих залов общая разметка тарифов и данных. */
.room-page .room-summary>.eyebrow{margin-bottom:12px}
.room-page .room-summary h2{font-size:42px;line-height:1.15;margin-bottom:18px}
.room-page .room-summary>p:not(.eyebrow):not(.small){font-size:16px;line-height:1.65;margin:0 0 18px}
.room-tariffs{margin:24px 0 18px;border-top:1px solid var(--line)}
.room-tariffs>div{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:16px 0;border-bottom:1px solid var(--line)}
.room-tariffs dt{font-size:15px;line-height:1.5}
.room-tariffs dt small{display:block;font-size:12px;color:var(--muted);margin-top:2px}
.room-tariffs dd{font-family:var(--serif);font-size:32px;line-height:1.2;white-space:nowrap;margin:0}
.room-tariffs dd small{font-family:var(--sans);font-size:12px;color:var(--muted);margin-left:8px}
.room-page .room-summary>.room-extra{margin:0 0 24px}
.room-actions{display:flex;flex-wrap:wrap;align-items:center;gap:16px 22px}
.room-page .room-actions .button{margin:0;min-height:52px;font-size:14px}
.room-page .room-gallery{padding-bottom:40px}
.room-page .room-gallery+.section-divider+.booking{padding-top:48px}
.other-room{margin-top:40px}
.other-room-card{display:grid;grid-template-columns:224px minmax(0,1fr);align-items:center;gap:28px;padding:16px;background:var(--white);border:1px solid var(--line);border-radius:16px;transition:border-color .2s,box-shadow .2s}
.other-room-card:hover,.other-room-card:focus-visible{border-color:var(--red);box-shadow:0 6px 22px #f7f2e408}
.other-room-photo{height:160px;overflow:hidden;border-radius:9px}
.other-room-photo img{width:100%;height:100%;object-fit:cover}
.other-room-copy{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-right:12px;min-width:0}
.other-room-copy .eyebrow{font-size:11px;color:var(--muted);margin:0 0 8px}
.other-room-copy h3{font-size:36px;line-height:1.15;margin:0 0 8px}
.other-room-facts{font-size:14px;line-height:1.6;color:var(--muted);margin:0}
.other-room-link{display:inline-flex;gap:12px;align-items:center;flex-shrink:0;font-size:14px;color:var(--red);border-bottom:1px solid var(--red-line);padding-bottom:5px}
@media(min-width:851px){
 .room-page .room-intro{grid-template-columns:1.1fr 1fr;gap:40px}
 /* Полоса удобств связывает первый блок и галерею без двойных отступов. */
 .room-page .room-intro{padding-bottom:24px}
 .room-page .room-intro+.section-divider,
 .room-page .room-features+.section-divider{display:none}
 .room-page .room-features{padding-top:8px;padding-bottom:0}
 .room-page .room-features .feature-list span{padding:16px 10px}
 .room-page .room-gallery{padding-top:40px}
 .room-page .room-main-photo{position:relative;height:auto;min-height:480px;align-self:stretch}
 .room-page .room-main-photo img{position:absolute;inset:0;width:100%;height:100%}
}
@media(max-width:1150px){
 .other-room-card{grid-template-columns:180px minmax(0,1fr);gap:24px}
 .other-room-copy h3{font-size:32px}
}
@media(max-width:850px){
 .room-page .room-intro{grid-template-columns:1fr;gap:28px}
}
@media(max-width:600px){
 .room-page .room-summary h2{font-size:36px}
 .room-tariffs dd{font-size:30px}
 .room-actions{gap:18px}
 .room-page .room-actions .button{width:100%;justify-content:center}
 .other-room-card{grid-template-columns:96px minmax(0,1fr);gap:16px;padding:14px}
 .other-room-copy{flex-direction:column;align-items:flex-start;gap:12px;padding-right:0}
 .other-room-copy .eyebrow{font-size:10px;margin-bottom:6px}
 .other-room-copy h3{font-size:28px}
 .other-room-facts,.other-room-link{font-size:13px}
}
@media(max-width:360px){
 .other-room-card{grid-template-columns:80px minmax(0,1fr);gap:12px}
 .other-room-copy h3{font-size:26px}
 .room-tariffs dd{font-size:27px}
 .room-tariffs dd small{margin-left:4px}
}

/* 2026-10-19: локальный тест плотности мобильной версии, без публикации.
   Основной текст 16 px, safe-area, прокрутка WebView и нижняя панель прежние. */
@media(max-width:600px){
 :root{--header-h:64px}
 .header .header-wordmark>span{font-size:26px}
 .header .header-wordmark>small{margin-top:5px}
 .section{padding:36px 20px}
 .page-heading{padding:12px 20px 24px}
 .breadcrumb{margin-bottom:16px}
 .eyebrow{margin-bottom:16px}
 .page-heading h1{font-size:clamp(36px,9vw,42px);line-height:1.08;margin-bottom:16px}
 .page-heading .lead{margin-bottom:0}
 .section h2{font-size:36px;margin-bottom:16px}
 .section-heading{margin-bottom:20px}
 .home-page .hero{gap:22px}
 .home-page .hero-photo{min-height:330px}
 .hero .lead{margin-bottom:22px}
 .home-page .about{gap:22px;padding-bottom:24px}
 .home-page .about-photo{height:280px}
 .room-page .room-intro{gap:20px;padding-top:0;padding-bottom:20px}
 .room-main-photo{height:260px}
 .room-page .room-summary h2{font-size:32px;margin-bottom:12px}
 .room-page .room-summary>p:not(.eyebrow):not(.small){line-height:1.55;margin-bottom:14px}
 .room-tariffs{margin:18px 0 14px}
 .room-tariffs>div{padding:12px 0}
 .room-page .room-summary>.room-extra{line-height:1.55;margin-bottom:18px}
 .room-actions{gap:12px}
 .room-page .room-actions .button{min-height:48px;padding-top:13px;padding-bottom:13px}
 .room-page .room-features{padding:0 20px}
 .room-page .room-gallery{padding-top:32px;padding-bottom:32px}
 .gallery-editorial{--gal-h:clamp(240px,70vw,280px)}
 .editorial-controls{padding:12px 0 10px}
 .other-room{margin-top:24px}
 .room-page .room-gallery+.section-divider+.booking{padding-top:32px}
 .home-page .booking{padding:24px 20px;margin-bottom:24px}
 .booking p:not(.eyebrow){line-height:1.55;margin-bottom:14px}
 .booking .second-phone{margin-bottom:16px}
 .booking .messenger-actions{margin-bottom:12px}
 footer,.home-page footer{padding:28px 20px max(28px,calc(env(safe-area-inset-bottom,0px) + 20px))}
 .footer-top{display:grid;grid-template-columns:76px minmax(0,1fr);align-items:start;gap:16px;padding-bottom:20px}
 .footer-top>.brand{display:block;align-self:start}
 .footer-top .brand-logo{width:76px;height:76px}
 .footer-phones{width:100%;font-size:clamp(16px,4.5vw,18px);gap:5px}
 .footer-messengers{gap:8px;margin-top:8px}
 .footer-phones .footer-messengers a{padding:8px 10px}
 .footer-bottom{padding-top:18px;gap:10px}
}

/* 2026-10-19: полный текст о сауне в первом блоке, локальный вариант. */
.hero-intro{font-size:16px;line-height:1.6;color:var(--body-copy);margin:0 0 24px;max-width:680px}
.hero-intro p{margin:0 0 12px}
.hero-intro p:last-child{margin-bottom:0}
@media(min-width:851px){
 .home-page .hero h1{font-size:clamp(48px,4.8vw,72px);line-height:1.05;margin-bottom:24px}
 .home-page .hero-copy{padding:8px 0}
 .home-page .hero .hero-place{margin-bottom:20px}
}
@media(max-width:600px){
 .hero-intro{line-height:1.55;margin-bottom:22px}
 .hero-intro p{margin-bottom:12px}
}

/* 2026-10-19: после удаления подборок бронирование идёт сразу за удобствами. */
.home-page .amenity-strip+.booking{margin-top:32px}
@media(max-width:600px){.home-page .amenity-strip+.booking{margin-top:24px}}

/* Approved forest/red design 14. Canonical production stylesheet since 2026-10-27. */
:root{--brand-red:#e35148;--action:#e9e6d4;--footer-bg:#18291f;--on-action:#24392d}
.header-wordmark{color:#e35148}
.hero h1 em,.page-heading h1 em{color:#e35148}
.hero-emblem:after{background:var(--brand-red)}
.primary,.mobile-book a:first-child,.mobile-nav-book{background:var(--action);color:var(--on-action)}
.primary:hover,.mobile-book a:first-child:hover,.mobile-nav-book:hover{background:var(--action);filter:brightness(.9)}
footer,.happy{background:var(--footer-bg);color:#f7f3e7}
.footer-bottom,footer .brand,footer .brand small,.footer-phones>a:hover{color:#edf0df}
.happy .eyebrow,.happy .gift-number,.happy .gift-number span{color:#e1e8cc}
.promo.happy .button{color:#f7f3e7;border-color:#f7f3e770}
.price-promo{background:#18291f;color:#f7f3e7}
.home-page .photo-link,.photo-label{color:#fff9ed}

.price-card,.promo-terms,.contacts-page .contact-panel,.contacts-page .map-panel,.call-number{background:#2b4235}
/* 28.10: на телефонах контакты располагаются на общем тёмном фоне страницы. */
@media(max-width:850px){.contacts-page .contact-panel{background:transparent}}
.home-page .booking{background:#2b4235}
.promo.morning{color:#fff9ed}
.promo .light{background:#f5f0df;color:#263d2e}
.lightbox-close{color:#24392d}
.promo.happy p.promo-combination{color:#f7f3e7}
.happy .gift-number span{color:#e3a6ad}
.booking p:not(.eyebrow),.hero-intro,.page-heading .lead,.faq details p{color:#f7f2e4}
.promo.happy{background:#802f2c}
.promo.happy .gift-number em{color:#e9e6d4}

/* A separated hairline follows the existing rounded photo without resizing it. */
.home-page .hero-photo{box-shadow:0 0 0 6px var(--paper),0 0 0 7px #e9e6d455}
@media(max-width:600px){
 .home-page .hero-photo{box-shadow:0 0 0 4px var(--paper),0 0 0 5px #e9e6d455}
}

.promo-terms{background:var(--paper)}
.promo-terms strong{color:var(--brand-red);font-size:20px;font-weight:700;line-height:1.4}

/* Reuse the exact original alpha silhouette, including its soft edges. */
@supports (mask-image:url('assets/rebus-logo-light-800.png')) or (-webkit-mask-image:url('assets/rebus-logo-light-800.png')){
 footer .footer-top>.brand{position:relative}
 footer .footer-top>.brand .brand-logo{opacity:0}
 footer .footer-top>.brand:after{content:'';position:absolute;inset:0;background:var(--action);-webkit-mask:url('assets/rebus-logo-light-800.png') center/contain no-repeat;mask:url('assets/rebus-logo-light-800.png') center/contain no-repeat;pointer-events:none}
}

/* Facts belong to the actions, rather than a separate statistics block. */
.home-page .hero .hero-facts{display:flex;align-items:center;justify-content:flex-start;flex-wrap:wrap;gap:16px 24px;width:fit-content;max-width:100%;margin-top:22px;padding-top:0;border-top:0}
.home-page .hero-facts>div{display:flex;align-items:baseline;gap:10px;max-width:none}
.home-page .hero-facts>div+div{border-left:1px solid var(--line);padding-left:24px}
.home-page .hero-facts strong{font-size:26px;line-height:1.2;color:var(--action)}
.home-page .hero-facts span{font-size:12px;line-height:1.5}
@media(max-width:600px){
 .home-page .hero .hero-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;width:100%;margin-top:20px}
 .home-page .hero-facts>div{display:block}
 .home-page .hero-facts>div+div{padding-left:20px}
 .home-page .hero-facts strong{font-size:24px;margin-bottom:3px}
}

.home-page .hero-emblem:before{background:var(--action)}
