@media (min-width:1024px) {/* Massage V7 prototype owner. Shared shell/actions/articles compile from Home;
   source styles own mobile exclusively. No production selectors are patched. */
.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
.crumbs{display:flex;gap:12px;padding-block:24px;font-size:12px;line-height:18px;color:var(--v7-muted)}
main>section,main>aside,main>details{margin-top:var(--v7-section);min-width:0}
/* 19.09.2026 (R2g, уровень hero): «крошки → герой» = роль секционной ступени
   (--v7-section: 64/88), та же, что у main>section, вместо промежуточных 8px. */
main>.hero{margin-top:var(--v7-section)}.subbrand-mark{display:flex;gap:16px;font-size:12px;line-height:18px;letter-spacing:.12em;color:var(--v7-gold);grid-column:1/-1}.sm-desc{color:var(--v7-muted);letter-spacing:0}
.dv2-hero-copy{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:24px 64px;align-items:start}
.hero h1{grid-column:1;grid-row:2}.hero .lead{grid-column:2;grid-row:2;border-left:1px solid var(--v7-gold);padding-left:24px}
.dv2-massage-index .hero h1{grid-row:1}
/* Семантический пакет 15.09.2026: подзаголовок (виды + программы) и блок
   «Виды массажа» — одна вторая колонка hero, как раньше строка intro. Колонка
   держит максимум из заголовка и своей пары блоков, поэтому длинный H1 не
   удваивает высоту hero. На мобильном это обычный вертикальный поток, см.
   mobile-massage.css. */
.dv2-massage-index .massage-hero-side{grid-column:2;grid-row:1;align-self:center;display:grid;gap:12px;min-width:0}
.massage-hero-sub{color:var(--v7-muted);font-size:17px;line-height:28px;max-width:56ch;text-wrap:pretty}
/* Блок «Виды массажа» — единственный владелец выбора вида и контекстной
   ссылки на его описание. */
.dv2-massage-index .massage-kinds{display:grid;gap:12px;min-width:0}
.massage-kinds__title{color:var(--v7-muted);font-size:12px;line-height:18px;letter-spacing:.12em;text-transform:uppercase}
/* Нативный выбор вместо ленты чипов: шесть практик уже не помещаются в
   строку на 390 px, а реестр может вырасти. Ширина — по колонке hero, высота
   совпадает с контролами каталога (48px). focus-ring системный, но видимый. */
.massage-kinds__select{width:100%;min-width:0;height:48px;min-height:48px;padding:0 12px;border:1px solid var(--v7-line);border-radius:10px;background:var(--v7-bg);color:var(--v7-text);font:inherit;font-size:15px;cursor:pointer}
.massage-kinds__select:focus-visible{outline:2px solid var(--v7-gold);outline-offset:2px}
/* Контекстная ссылка на описание вида. У блока нет собственного display,
   поэтому [hidden] из разметки (вид без посадочной, «Все виды») оставляет
   ноль отступа в grid-раскладке родителя. */
.massage-kinds__about{font-size:14px;line-height:22px}
.massage-kinds__about a{color:var(--v7-gold);text-decoration:underline;text-underline-offset:4px}
/* 18.09.2026 (владелец, вечер): правила блока «Подробнее о видах»
   (nav.massage-kinds-nav) удалены вместе с разметкой — блок убран со
   страницы-хаба совсем. */
/* 1024–1279: вторая колонка hero не должна схлопнуться меньше выбора вида и
   подзаголовка. Число — прежний минимум колонки; само содержимое блока от
   набора видов больше не зависит, поэтому при росте реестра высота hero не
   меняется. */
@media(width < 1280px){.dv2-massage-index .dv2-hero-copy{grid-template-columns:minmax(0,1fr) minmax(496px,1fr)}}
.service-hero-note{grid-column:1/-1;max-width:100%;font-size:14px;line-height:22px;color:var(--v7-muted);padding-top:24px;border-top:1px solid var(--v7-line)}
/* П2 (16.09.2026): запасной путь «не смог выбрать» рядом с выбором — сразу под
   сеткой мастеров, до гида. Строка ведёт якорем к существующей форме внизу и
   её не заменяет; верхней линии нет намеренно: под карточками она читалась бы
   как разделитель списка, а не как отдельная мысль. */
.master-grid-help{margin-top:16px;max-width:100%;font-size:14px;line-height:22px;color:var(--v7-muted)}
.master-grid-help a{color:var(--v7-gold);text-decoration:underline;text-underline-offset:4px}
/* Row subgrid: the tallest real content sets each row for its siblings.
   No clamped copy, guessed heights or empty spacer elements. */
/* 18.09.2026. Отрицательный margin-inline здесь — осознанная техника сетки, а не
   ритм-заплатка: карточки нечётной последней строки центрируются своими
   margin-inline +12px, поэтому контейнеру нужен парный −12px
   (calc(var(--master-grid-gap) / -2) при --master-grid-gap:24px), иначе крайние
   карточки уезжают вправо на половину щели. Значение выводится из токена щели,
   а не «под элемент». Проверка R7 (запрет отрицательных margin) смотрит
   свойства margin / margin-top / margin-bottom и литеральные px, поэтому
   calc-величину не видит; в отчёте волны это оговорено явно. */
.sigma-master-grid{--master-grid-gap:24px;display:grid;grid-template-columns:repeat(24,minmax(0,1fr));column-gap:0;row-gap:8px;margin-top:48px;margin-inline:calc(var(--master-grid-gap)/-2);align-items:stretch}
/* Twenty-four equal tracks preserve the existing three/four-card widths and
   subgrid rows, while allowing a genuinely centred incomplete final row. */
.sigma-master-grid>.master-card{grid-column:span 8;margin-inline:calc(var(--master-grid-gap)/2)}
@media(width < 1440px){
  .sigma-master-grid>.master-card:nth-child(3n + 1 of .master-card:not([hidden])):nth-last-child(1 of .master-card:not([hidden])){grid-column:9/span 8}
  .sigma-master-grid>.master-card:nth-child(3n + 1 of .master-card:not([hidden])):nth-last-child(2 of .master-card:not([hidden])){grid-column:5/span 8}
}
/* Owner-approved wide mode: at 1440px viewport, four >=326px cards fit the
   shared content width. Keep the original square photo and object-position. */
@media(min-width:1440px){
  .sigma-master-grid>.master-card{grid-column:span 6}
  .sigma-master-grid>.master-card:nth-child(4n + 1 of .master-card:not([hidden])):nth-last-child(1 of .master-card:not([hidden])){grid-column:10/span 6}
  .sigma-master-grid>.master-card:nth-child(4n + 1 of .master-card:not([hidden])):nth-last-child(2 of .master-card:not([hidden])){grid-column:7/span 6}
  .sigma-master-grid>.master-card:nth-child(4n + 1 of .master-card:not([hidden])):nth-last-child(3 of .master-card:not([hidden])){grid-column:4/span 6}
}
/* Кнопка применения живёт только в мобильной шторке. Специфичность важнее, чем
   у общего правила .catalog-filter__body .btn, иначе display кнопок перебил бы
   и display:none, и атрибут hidden. */
.catalog-filter__body .catalog-filter__apply{display:none}
.catalog-filter__body .catalog-filter__apply[hidden]{display:none}
/* Группа «Для кого» (решение владельца №16): тот же язык, что у соседних
   фильтров, — полноширинная строка панели, три равные кнопки .btn.o, активная
   подсвечена золотом. Значение по умолчанию — «Все». */
.cf-aud{display:grid;grid-column:1/-1;gap:7px;min-width:0}
.cf-aud-title{color:var(--v7-muted);font-size:12px;line-height:18px}
.cf-aud-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.cf-aud-btn.is-active{border-color:var(--v7-gold);color:var(--v7-gold)}
.catalog-empty__reset{margin-top:16px}
.catalog-empty{grid-column:1/-1;min-width:0;margin-inline:calc(var(--master-grid-gap)/2);padding:24px;border:1px dashed var(--v7-line);border-radius:var(--v7-radius);color:var(--v7-muted);text-align:center}
/* Category landing pages render program rows for the entire catalogue.
   Keep one row schedule per grid, including filtered/reordered results. */
.sigma-master-grid:has(> .master-card[data-context]:not([data-context="all"]))>.master-card{grid-row:span 8}
/* Desktop owner for the catalogue controls. Mobile owns the compact full-screen
   surfaces in sigma-massage.css; this keeps the same controls deliberate at
   wide widths instead of inheriting generic dialog geometry. */
.catalog-controls{margin-top:16px}
/* Д5 (17.09.2026): «Вид программы» переехал из героя в начало управления
   каталогом. На десктопе блок читается той же шириной, что и остальные
   контролы, и не растягивается на всю страницу. */
.catalog-controls>.massage-kinds{width:min(100%,420px);margin:0 0 16px}
.catalog-controls__top{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:min(100%,420px);gap:12px}.catalog-filter{position:relative;min-width:0;border:1px solid var(--v7-line);border-radius:var(--v7-radius);background:var(--v7-surface)}.catalog-filter>summary{display:flex;align-items:center;justify-content:space-between;gap:16px;min-height:48px;padding:0 20px;font-size:16px;line-height:24px;font-weight:600;cursor:pointer}.catalog-filter>summary span{color:var(--v7-gold);font-size:13px;line-height:18px}.catalog-filter__body{position:absolute;top:calc(100% + 8px);left:-1px;z-index:20;display:grid;box-sizing:border-box;width:min(620px,calc(100vw - 40px));grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;padding:16px;border:1px solid var(--v7-line);border-radius:var(--v7-radius);background:var(--v7-surface)}.catalog-filter__body label{display:grid;min-width:0;gap:7px;color:var(--v7-muted);font-size:12px;line-height:18px}.catalog-filter__body select{width:100%;min-width:0;height:48px;min-height:48px;border:1px solid var(--v7-line);border-radius:10px;background:var(--v7-bg);color:var(--v7-text);padding:0 12px;font:inherit}.catalog-filter__body .catalog-filter__check{display:flex;align-items:center;gap:8px;height:48px;min-height:48px;align-self:end}.catalog-filter__check input{accent-color:var(--v7-gold)}.catalog-filter__body .btn,.catalog-map-button{min-height:48px;justify-content:center;white-space:nowrap}.catalog-filter__body .btn{height:48px;align-self:end}.catalog-filter__body .catalog-filter__map{display:none}.catalog-map-button{width:100%;height:50px;min-height:50px;padding-block:0;align-self:start}.catalog-controls__result{margin:0;color:var(--v7-muted);font-size:13px;line-height:18px}.catalog-filter__hint{color:var(--v7-muted);font-size:11px;line-height:16px}.catalog-controls__result:not(.sr-only){margin-top:12px}.dv2-massage-index>.sigma-master-grid{margin-top:16px}.catalog-map{inline-size:min(680px,calc(100vw - 40px));max-block-size:min(720px,calc(var(--catalog-vvh,100dvh) - 40px));margin:auto;padding:28px;border:1px solid var(--v7-line);border-radius:var(--v7-radius);background:var(--v7-surface);color:var(--v7-text);overflow:auto}.catalog-map::backdrop{background:rgba(0,0,0,.72);backdrop-filter:blur(4px)}.catalog-map__head{display:flex;align-items:center;justify-content:space-between;gap:16px}.catalog-map__head h2{margin:0;font-size:28px;line-height:36px}.catalog-map p{margin:18px 0;color:var(--v7-muted);font-size:14px;line-height:22px}.catalog-map__close{border:0;background:none;color:var(--v7-gold);font:inherit;cursor:pointer}.catalog-map__venues,.catalog-map__metro-search-zone{display:grid;gap:10px}.catalog-map .catalog-map__metro-selected{margin:0;color:var(--v7-muted);font-size:13px;line-height:18px}.catalog-map .catalog-map__metro-selected strong{color:var(--v7-text);font-weight:600}.catalog-map__metro-search{color:var(--v7-muted);font-size:12px;line-height:18px}.catalog-map__venues input[type="search"]{box-sizing:border-box;width:100%;height:44px;padding:0 12px;border:1px solid var(--v7-line);border-radius:10px;background:var(--v7-bg);color:var(--v7-text);font:inherit}.catalog-map__venues input[type="search"]:focus-visible{outline:2px solid var(--v7-gold);outline-offset:2px}.catalog-map__venues .catalog-map__metro-toggle{width:100%;min-height:44px;justify-content:center}.catalog-map__metro-results{max-height:min(340px,calc(var(--catalog-vvh,100dvh) - 170px));min-height:156px;overflow-y:auto;overscroll-behavior:contain;border:1px solid var(--v7-line);border-radius:12px;background:var(--v7-bg)}.catalog-map .catalog-map__metro-line{margin:0;padding:12px}.catalog-map .catalog-map__metro-line+.catalog-map__metro-line{border-top:1px solid var(--v7-line)}.catalog-map .catalog-map__metro-line-title{display:flex;align-items:center;gap:8px;margin:0 0 8px;color:var(--v7-text);font-size:13px;line-height:18px;font-weight:600}.catalog-map__metro-line-dot{width:10px;height:10px;flex:none;border-radius:50%;background:var(--catalog-metro-line,var(--v7-muted))}.catalog-map__metro-line-stations{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}.catalog-map__metro-station{display:flex;align-items:center;gap:8px;min-height:44px;padding:6px 10px;border:1px solid var(--v7-line);border-radius:10px;background:var(--v7-surface);color:var(--v7-text);font:inherit;font-size:13px;line-height:18px;text-align:left;cursor:pointer}.catalog-map__metro-station .catalog-map__metro-name{flex:1 1 auto;min-width:0}.catalog-map__metro-lines{display:flex;flex:none;gap:4px}.catalog-map__metro-line-chip{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:50%;background:var(--catalog-metro-line,#8A8A8A);font-size:11px;line-height:1;font-weight:600}.catalog-map__metro-check{display:none;flex:none;color:var(--v7-gold)}.catalog-map__metro-station[aria-pressed="true"]{border-color:var(--v7-gold)}.catalog-map__metro-station[aria-pressed="true"] .catalog-map__metro-name{color:var(--v7-gold)}.catalog-map__metro-station[aria-pressed="true"] .catalog-map__metro-check{display:inline}.catalog-map .catalog-map__metro-message{margin:0;color:var(--v7-muted);font-size:13px;line-height:18px}.catalog-map__metro-message:empty{display:none}.catalog-map__metro-flat{padding:10px}.catalog-map [hidden],.catalog-map__venues [hidden]{display:none}
/* Фокус в панели фильтров: у селектов и чекбокса не было собственного стиля,
   поэтому браузер рисовал системную рамку поверх нашей границы — на тёмном
   фоне это читалось как две рамки сразу (жалоба владельца 15.09.2026).
   Рамка фокуса — одна, в языке сайта, и она же подсвечивает границу. */
.catalog-filter__body select:focus-visible{outline:2px solid var(--v7-gold);outline-offset:2px;border-color:var(--v7-gold)}
.catalog-filter__body .catalog-filter__check input:focus-visible{outline:2px solid var(--v7-gold);outline-offset:2px}
@media(width < 1280px){.crumbs{padding-block:12px}.dv2-hero-copy{row-gap:16px}}
.mm-strip{display:grid;grid-template-columns:repeat(3,1fr);margin-top:24px;border-block:1px solid var(--v7-line)}.mm-strip-i{padding:24px;text-align:center;font-size:14px;line-height:22px}.mm-strip-i+.mm-strip-i{border-left:1px solid var(--v7-line)}
.mm-unsure{display:flex;justify-content:space-between;align-items:center;gap:32px;padding:32px;border:1px solid var(--v7-line);border-radius:var(--v7-radius);background:var(--v7-surface)}.mm-unsure h2{font-size:24px;line-height:32px}.mm-unsure p{max-width:760px;margin-top:12px;color:var(--v7-muted);font-size:14px;line-height:22px}.mm-unsure .btn{flex:none}.mm-unsure--pro{background:transparent;border-color:var(--v7-gold)}
.mm-info-head{margin-bottom:32px}.mm-info-head h2{margin-top:16px}.mm-info-intro{max-width:68ch;margin-top:16px;color:var(--v7-muted);font-size:15px;line-height:24px}.mm-acc,.faq--split{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:32px;align-items:start}.col-flow{min-width:0}
summary{list-style:none;cursor:pointer}summary::-webkit-details-marker{display:none}
main details{border-top:1px solid var(--v7-line)}
main details>summary{display:flex;align-items:center;justify-content:space-between;gap:24px;padding-block:24px;min-height:104px;font-size:20px;line-height:28px}
main details>summary::after{content:'+';flex:none;font-size:24px;line-height:28px;color:var(--v7-gold)}main details[open]>summary::after{content:'−'}
main details p{padding-bottom:24px;color:var(--v7-muted);font-size:14px;line-height:22px}main details p a{color:var(--v7-gold);text-decoration:underline;text-underline-offset:4px}
.pdisc-body{padding-bottom:24px}.service-faq>h2{margin-bottom:32px}
.service-depth{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:32px 64px}.service-depth-intro{color:var(--v7-muted);font-size:17px;line-height:28px}
/* Owner-approved compact descriptions: each column expands independently.
   Native mobile disclosures retain their original DOM order and styling. */
.service-depth-grid{grid-column:1/-1;display:grid;grid-template-columns:1fr 1fr;gap:0 32px;align-items:start}.service-depth-pair{display:block;min-width:0}.service-depth-copy{display:flex;flex-direction:column}
.service-depth details>summary{min-height:80px;padding-block:20px;font-size:18px;line-height:26px}
.service-depth-body p{font-size:16px;line-height:26px}
main details[data-static-desktop][open]>summary{cursor:default;pointer-events:none}main details[data-static-desktop][open]>summary::after{content:none}
.service-depth-body p:last-child{padding-bottom:24px}.dv2-desktop-media{display:none}
/* C-1 (21.09.2026, волна h6-c135): десктопная шапка массажа совпадает с
   foundation — избыточное переопределение `.related-head{grid-column:1/-1}`
   удалено, владелец grid-column шапки один (foundation.css:27, колонка 1).
   Раньше massage.css:124 тянул 1/-1 (шапка на всю ширину ленты) и конкурировал
   с foundation `grid-column:1`; теперь массаж читает общую норму. */
/* M5 (19.09.2026, волна 7.3): второй носитель щели «шапка → карточки» снят.
   Раньше зазор давали два элемента: row-gap .related (32) и margin-top ленты
   (32) — в стопке это читалось как 64 вместо роли. Шаг держит один носитель,
   foundation.css через --related-head-gap. */
.bridge{display:flex;justify-content:space-between;align-items:center;gap:32px;border-block:1px solid var(--v7-line);padding-block:32px;font-size:14px;line-height:22px}.bridge>span:first-child{color:var(--v7-muted)}.bridge-links{display:flex;gap:32px;flex-wrap:wrap}.bridge-links a{color:var(--v7-gold);min-height:44px;display:flex;align-items:center}
@media(width < 1280px){.dv2-hero-copy,.service-depth{column-gap:32px}.sigma-master-grid{--master-grid-gap:16px}.mm-unsure{padding:24px}.bridge{align-items:flex-start;flex-direction:column;gap:16px}.mm-acc,.faq--split{gap:24px}}
/* Компактная форма заявки на рекламной посадочной /massage/tantric. */
.lead-cta{display:grid;grid-template-columns:minmax(0,.9fr) minmax(0,1.1fr);gap:48px;align-items:start;max-width:1100px}
.lead-cta__copy p{margin:12px 0 0;color:var(--v7-muted);font-size:17px;line-height:28px}
.lead-cta .fld{display:block;width:100%;min-height:48px;padding:12px 16px;margin-bottom:16px;border:1px solid var(--v7-line);border-radius:8px;background:var(--v7-bg);color:var(--v7-text);font:inherit}
.lead-cta .consent{display:flex;align-items:start;gap:12px;margin-block:16px;color:var(--v7-muted);font-size:12px;line-height:18px}
.lead-cta .consent input{accent-color:var(--v7-gold);flex:none;width:18px;height:18px;margin:0}
.lead-cta .consent a{color:var(--v7-gold);text-decoration:underline;text-underline-offset:3px}
.lead-cta__error,.lead-cta__ok{display:none}
.lead-cta__error.show,.lead-cta__ok.show{display:block}
.lead-cta__error{margin-block:16px;color:#e37b6b;font-size:14px;line-height:22px}
.lead-cta__form--sent{display:none}
.lead-cta .btn{width:100%}
.lead-cta__note{margin-top:16px;font-size:12px;line-height:18px;color:var(--v7-muted)}
.lead-cta .sigma-honeypot{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
}