/* ==========================================================================
   system.css — дизайн-система резиновых страниц Дона, классы ds-*

   Источник: Figma TAFxb8e2b2vIpCzH7GdiOD, canvas 1273:30 «SALON_page».

   Подключается на всех страницах последним стилем
   (functions.php, wp_enqueue_scripts, приоритет PHP_INT_MAX). Поэтому:
   - никаких правил для html, body, тегов и * — только классы ds-* и переменные на :root;
   - элемент с ds-* классом не несёт старых классов оформления: старые глубокие селекторы
     специфичнее и победят даже при загрузке последним. JS-хуки — id, data-*, js-*;
   - специфичность плоская: .ds-x, .ds-x__el, .ds-x--mod, .ds-x.is-state, .ds-x > img;
     единственная цепочка — элемент в состоянии блока: .ds-x.is-state .ds-x__el и .ds-x:hover .ds-x__el.
     Без !important.

   Размеры компонентов от ширины экрана не зависят, брейкпоинты меняют раскладку:
   max-width: 499px и min-width: 800px, потолок ширины 1000px (ds-page__inner).
   Roboto 600 из макета = 500 на сайте.

   Иконки: <i class="ds-icon ds-icon--{name}"></i>, цвет задаётся через color
   (mask + currentColor). SVG — /wp-content/themes/don/images/ds/{name}.svg.
   Многоцветные иконки — обычным <img>.

   Токены: --ds-color-*, --ds-space-*, --ds-card-pad, --ds-card-gap, --ds-radius-s|m|l,
   --ds-border, --ds-border-bold, --ds-font.
   ========================================================================== */


/* === 1. Токены ============================================================ */

:root {
	/* цвета */
	--ds-color-page:       #F2F2F2; /* фон страницы, ячейки расписания */
	--ds-color-surface:    #FFFFFF; /* карточки */
	--ds-color-text:       #000000;
	--ds-color-text-2:     #656978; /* крошки */
	--ds-color-text-3:     #6D6D6D; /* нейтральная плашка */
	--ds-color-muted:      #B5B5B5; /* номер программы, «1 час», даты, серые иконки, рамки таблицы */
	--ds-color-divider:    #D9D9D9; /* разделители внутри карточек */
	--ds-color-accent:     #088999; /* ссылки, фильтры, «показать ещё», название программы, иконки, рамки кнопок */
	--ds-color-success:    #009922; /* «в смене», «24 ч», звёзды, «цены подтверждены» */
	--ds-color-success-bg: #F6FFF3; /* фон плашки --success */
	--ds-color-warning:    #D97B00; /* «появится» */
	--ds-color-danger:     #FF6D6D; /* бейдж NEW */
	--ds-color-highlight:  #CBF6FC; /* колонка «сегодня» */
	--ds-color-soft:       #FCEEDC; /* круглая подложка иконки репортажа */
	--ds-color-hover:      #EDF7F8; /* ховер раскрывающейся программы (из style.css) */
	--ds-color-accent-soft: rgba(8, 137, 153, 0.1); /* ховер кнопок-обводок и плиток мессенджеров */

	/* отступы */
	--ds-space-2:  2px;
	--ds-space-5:  5px;
	--ds-space-10: 10px;
	--ds-space-15: 15px;
	--ds-space-20: 20px;
	--ds-card-pad: 15px; /* внутренний отступ карточки */
	--ds-card-gap: 10px; /* между карточками */

	/* скругления */
	--ds-radius-s: 10px; /* фото, плитки мессенджеров, ds-icon-box, ds-btn */
	--ds-radius-m: 15px; /* ds-btn--l */
	--ds-radius-l: 20px; /* карточки, плашка, превью видео */

	/* рамки */
	--ds-border:      1px;
	--ds-border-bold: 1.5px; /* ds-btn, плитки мессенджеров */

	/* подчёркивание ссылок: в макете точки 1.5px с шагом 3px (у dotted шаг = 2 толщины), на 2px ниже базовой линии */
	--ds-underline:        1.5px;
	--ds-underline-offset: 0.14em;

	/* шрифт */
	--ds-font: Roboto, Arial, sans-serif;
}


/* === 2. box-sizing — только для элементов с ds-* ========================== */

:where([class^="ds-"], [class*=" ds-"]),
:where([class^="ds-"], [class*=" ds-"])::before,
:where([class^="ds-"], [class*=" ds-"])::after {
	box-sizing: border-box;
}


/* === 3. Страница ========================================================== */

/* ds-page — корень резиновой страницы: фон, шрифт, цвет текста. Вешается на body или обёртку.
<body class="ds-page">
	<div class="ds-page__inner">…</div>
</body>
*/
.ds-page {
	padding: 10px 0;
	background: var(--ds-color-page);
	color: var(--ds-color-text);
	font-family: var(--ds-font);
}

.ds-page__inner {
	max-width: 1000px;
	margin: 0 auto;
}


/* === 4. Текстовые стили =================================================== */

/* Текстовые стили. Высота строки одна на размер, нестандартные — внутри компонентов.
   margin обнулён: вертикальный ритм задают gap раскладок. color/text-align/text-transform сброшены:
   style.css красит и капсит h1–h3 глобально, а стили вешаются и на заголовки.
<h1 class="ds-text-h1">«Ржевский»</h1>
<p class="ds-text-body">Все комнаты салона с душем</p>
<p class="ds-text-note">Из-за временных проблем со связью…</p>
*/
.ds-text-h1,
.ds-text-h2,
.ds-text-h3,
.ds-text-lead,
.ds-text-ui,
.ds-text-body,
.ds-text-small,
.ds-text-note,
.ds-text-caption {
	margin: 0;
	color: inherit;
	font-family: var(--ds-font);
	font-style: normal;
	text-align: inherit;
	text-transform: none;
	letter-spacing: normal;
}

/* style.css рисует h1:after (линия через заголовок) — у ds-заголовков декоративных псевдоэлементов нет */
:is(.ds-text-h1, .ds-text-h2, .ds-text-h3, .ds-text-lead, .ds-text-ui, .ds-text-body, .ds-text-small, .ds-text-note, .ds-text-caption)::before,
:is(.ds-text-h1, .ds-text-h2, .ds-text-h3, .ds-text-lead, .ds-text-ui, .ds-text-body, .ds-text-small, .ds-text-note, .ds-text-caption)::after {
	content: none;
}

.ds-text-h1      { font-size: 30px; line-height: 35px; font-weight: 500; }
/* h2: Roboto сайта при 24/500 шире фигмовского на ~1.1% (2–4px на заголовок) — −0.15px возвращает ширины
   макета; без этого «Расписание массажисток» (297) не влезает в 295 на 360 */
.ds-text-h2      { font-size: 24px; line-height: 28px; font-weight: 500; letter-spacing: -0.15px; }
.ds-text-h3      { font-size: 20px; line-height: 28px; font-weight: 500; }
.ds-text-lead    { font-size: 18px; line-height: 28px; font-weight: 400; }
.ds-text-ui      { font-size: 16px; line-height: 20px; font-weight: 400; }
.ds-text-body    { font-size: 15px; line-height: 20px; font-weight: 300; }
.ds-text-small   { font-size: 14px; line-height: 20px; font-weight: 300; }
.ds-text-note    { font-size: 14px; line-height: 20px; font-weight: 300; font-style: italic; }
.ds-text-caption { font-size: 12px; line-height: 15px; font-weight: 400; }


/* === 5. Модификаторы текста =============================================== */

/* Модификаторы — ставятся вместе с текстовым стилем, объявлены после него.
<span class="ds-text-body ds-medium ds-link">показать еще 5 программ</span>
<span class="ds-text-lead ds-c-muted">1 час</span>
*/
.ds-light   { font-weight: 300; }
.ds-regular { font-weight: 400; }
.ds-medium  { font-weight: 500; }

.ds-c-accent  { color: var(--ds-color-accent); }
.ds-c-muted   { color: var(--ds-color-muted); }
.ds-c-success { color: var(--ds-color-success); }
.ds-c-warning { color: var(--ds-color-warning); }
.ds-c-text-2  { color: var(--ds-color-text-2); }
.ds-c-text-3  { color: var(--ds-color-text-3); }

.ds-link {
	color: var(--ds-color-accent);
	text-decoration: underline dotted;
	text-decoration-thickness: var(--ds-underline);
	text-underline-offset: var(--ds-underline-offset);
	cursor: pointer;
}

/* внешняя ссылка («перейти на сайт салона») в макете подчёркнута сплошной линией 1px на 1.5px ниже строки */
.ds-link--solid {
	text-decoration-style: solid;
	text-decoration-thickness: 1px;
	text-underline-offset: 1.5px;
}


/* === 6. Раскладки и карточка ============================================== */

/* ds-stack / ds-row — колонка и строка с gap 10.
<div class="ds-stack ds-stack--gap-15">…</div>
<div class="ds-row ds-row--wrap ds-row--between">…</div>
*/
.ds-stack {
	display: flex;
	flex-direction: column;
	gap: var(--ds-space-10);
}

.ds-row {
	display: flex;
	align-items: center;
	gap: var(--ds-space-10);
}

.ds-row--wrap {
	flex-wrap: wrap;
}

.ds-row--between {
	justify-content: space-between;
}

.ds-stack--gap-5,
.ds-row--gap-5 {
	gap: var(--ds-space-5);
}

.ds-stack--gap-15 {
	gap: var(--ds-space-15);
}

.ds-stack--gap-20,
.ds-row--gap-20 {
	gap: var(--ds-space-20);
}

/* ds-cols — колонки страницы. От 800: основная (не уже 470) + боковая 320–360: боковая растёт первой, до 360.
   Меньше 800: одна колонка,
   __main и __side становятся display: contents — порядок секций задаёт страница через order.
<div class="ds-cols">
	<div class="ds-cols__main">…карточки…</div>
	<div class="ds-cols__side">…карточки…</div>
</div>
*/
.ds-cols {
	display: flex;
	flex-direction: column;
	gap: var(--ds-card-gap);
}

.ds-cols__main,
.ds-cols__side {
	display: contents;
}

@media (min-width: 800px) {
	.ds-cols {
		display: grid;
		grid-template-columns: minmax(470px, 1fr) minmax(320px, 360px);
		align-items: start;
	}

	.ds-cols__main,
	.ds-cols__side {
		display: flex;
		flex-direction: column;
		gap: var(--ds-card-gap);
		min-width: 0;
	}
}

/* ds-card — белая карточка раздела: radius 20, padding 15, колонка с gap 10.
   --bleed убирает боковой padding на <500 (галерея, горизонтальная прокрутка видео).
<section class="ds-card ds-card--gap-15">…</section>
*/
.ds-card {
	display: flex;
	flex-direction: column;
	gap: var(--ds-space-10);
	min-width: 0;
	padding: var(--ds-card-pad);
	border-radius: var(--ds-radius-l);
	background: var(--ds-color-surface);
}

.ds-card--gap-15 {
	gap: var(--ds-space-15);
}

.ds-card--gap-20 {
	gap: var(--ds-space-20);
}

@media (max-width: 499px) {
	.ds-card--bleed {
		padding-left: 0;
		padding-right: 0;
	}
}


/* === 7. Простые компоненты ================================================ */

/* ds-icon — иконка-маска, цвет берётся из color (currentColor). Размер 25, модификаторы --19 и --30.
<i class="ds-icon ds-icon--question"></i>
<i class="ds-icon ds-icon--time ds-icon--19"></i>
*/
.ds-icon {
	display: inline-block;
	flex: none;
	width: 25px;
	height: 25px;
	vertical-align: middle;
	background-color: currentColor;
	-webkit-mask: var(--ds-icon) center / contain no-repeat;
	mask: var(--ds-icon) center / contain no-repeat;
}

.ds-icon--19 {
	width: 19px;
	height: 19px;
}

.ds-icon--30 {
	width: 30px;
	height: 30px;
}

/* ds-icon-box — «Иконка цен» (Figma 1507:1700): рамка 40×40, внутри картинка или ds-icon 28×28.
<span class="ds-icon-box"><img src="…/massage.svg" alt=""></span>
*/
.ds-icon-box {
	display: inline-flex;
	flex: none;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	border: var(--ds-border) solid var(--ds-color-text);
	border-radius: var(--ds-radius-s);
}

.ds-icon-box > * {
	width: 28px;
	height: 28px;
	object-fit: contain;
}

/* ds-logo — «Лого салона» (Figma 1502:981): 50×50.
<img class="ds-logo" src="…/logo.png" alt="">
*/
.ds-logo {
	display: block;
	flex: none;
	width: 50px;
	height: 50px;
	object-fit: cover;
}

/* ds-crumbs — «Крошки» (Figma 1503:994). Разделитель-шеврон рисует CSS. Шрифт Inter, как в макете
   (@font-face — в style.css; без него — Roboto); Inter сайта шире фигмовского на ~4% — −0.3px возвращает ширины.
   В макете крошки в одну строку (на 360 вылезают за фрейм на 3px) — не переносим, лишнее прокручивается.
<nav class="ds-crumbs">
	<a class="ds-crumbs__item" href="/msk/">Москва</a>
	<a class="ds-crumbs__item" href="/msk/salon/">Салоны эротического массажа</a>
	<span class="ds-crumbs__item">«Ржевский»</span>
</nav>
*/
.ds-crumbs {
	display: flex;
	flex-wrap: nowrap;
	align-items: center;
	gap: 8px;
	min-height: 20px;
	margin: 0;
	padding: 0 10px;
	overflow-x: auto;
	scrollbar-width: none;
	list-style: none;
	color: var(--ds-color-text-2);
	font: 400 12px/15px Inter, var(--ds-font);
	letter-spacing: -0.3px;
}

.ds-crumbs::-webkit-scrollbar {
	display: none;
}

.ds-crumbs__item {
	display: inline-flex;
	flex: none;
	align-items: center;
	gap: 8px;
	color: inherit;
	white-space: nowrap;
	text-decoration: none;
}

/* В крошках со schema.org __item — это li, ссылка внутри. */
.ds-crumbs__item > a {
	color: inherit;
	text-decoration: none;
}

.ds-crumbs__item + .ds-crumbs__item::before {
	content: "";
	flex: none;
	width: 4px;
	height: 6px;
	background-color: currentColor;
	-webkit-mask: url(/wp-content/themes/don/images/ds/crumb.svg) center / contain no-repeat;
	mask: url(/wp-content/themes/don/images/ds/crumb.svg) center / contain no-repeat;
}

/* ds-btn — кнопка-обводка «Показать телефон» (из Figma 1503:1327).
   --l — «Кнопка маршрута» (Figma 1507:1600): иконки по краям, текст в __text; тянется на ширину, но не шире 400.
<a class="ds-btn" href="#">Показать телефон</a>
<a class="ds-btn ds-btn--l" href="#">
	<i class="ds-icon ds-icon--route"></i>
	<span class="ds-btn__text">Построить маршрут</span>
	<i class="ds-icon ds-icon--expand"></i>
</a>
*/
.ds-btn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 10px;
	min-height: 40px;
	padding: 0 10px;
	border: var(--ds-border-bold) solid var(--ds-color-accent);
	border-radius: var(--ds-radius-s);
	background: transparent;
	color: var(--ds-color-accent);
	font: 500 16px/20px var(--ds-font);
	text-align: center;
	text-decoration: none;
	cursor: pointer;
}

.ds-btn--l {
	width: 100%;
	max-width: 400px;
	padding: 10px;
	border-width: var(--ds-border);
	border-radius: var(--ds-radius-m);
	font-size: 18px;
	line-height: 20px;
}

.ds-btn__text {
	flex: 1 1 auto;
	min-width: 0;
}

/* ds-more — «Кнопка показать еще» (Figma 1511:2954).
<button class="ds-more" type="button">
	<i class="ds-icon ds-icon--more"></i>
	<span class="ds-more__text">показать еще 5 программ</span>
</button>
*/
.ds-more {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	justify-content: center;
	gap: 10px;
	width: 100%;
	padding: 10px 0;
	border: 0;
	background: none;
	color: var(--ds-color-accent);
	font: 500 15px/20px var(--ds-font);
	text-decoration: none;
	cursor: pointer;
}

.ds-more__text {
	text-decoration: underline dotted;
	text-decoration-thickness: var(--ds-underline);
	text-underline-offset: var(--ds-underline-offset);
}

/* ds-plate — «Плашка» (Figma 1503:1417). --success: «Цены подтверждены»,
   --neutral: «Внимание! Цены со слов администрации». Ведущая иконка берёт цвет плашки, __hint — всегда accent.
<div class="ds-plate ds-plate--success">
	<i class="ds-icon ds-icon--prices-proof"></i>
	<span class="ds-plate__text">Цены подтверждены</span>
	<i class="ds-icon ds-icon--question ds-plate__hint"></i>
</div>
*/
.ds-plate {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	padding: 15px;
	border-radius: var(--ds-radius-l);
}

/* однострочный текст в макете — строка 25 по высоте иконок (20/25, на 360 16/25), двухстрочный — 20/24 (16/20):
   min-height 25 и центровка дают оба случая без отдельной высоты строки */
.ds-plate__text {
	display: flex;
	flex: 1 1 auto;
	align-items: center;
	justify-content: center;
	min-width: 0;
	min-height: 25px;
	font: 500 20px/24px var(--ds-font);
	text-align: center;
}

.ds-plate__hint {
	color: var(--ds-color-accent);
	cursor: pointer;
}

.ds-plate--success {
	background: var(--ds-color-success-bg);
	color: var(--ds-color-success);
}

.ds-plate--neutral {
	background: var(--ds-color-surface);
	color: var(--ds-color-text-3);
}

@media (max-width: 499px) {
	.ds-plate {
		padding: 10px 15px;
	}

	.ds-plate__text {
		font-size: 16px;
		line-height: 20px;
	}
}


/* === 8. Составные компоненты ============================================== */

/* ds-section-head — «Заголовок раздела» (Figma 1503:1036).
<div class="ds-section-head">
	<h2 class="ds-section-head__title">Массажные программы</h2>
	<i class="ds-icon ds-icon--question ds-section-head__hint"></i>
</div>
*/
.ds-section-head {
	display: flex;
	align-items: flex-start;
	gap: 10px;
}

.ds-section-head__title {
	flex: 1 1 auto;
	min-width: 0;
	margin: 0;
	color: var(--ds-color-text);
	font: 500 24px/28px var(--ds-font);
	text-align: left;
	text-transform: none;
	letter-spacing: -0.15px; /* как у ds-text-h2: ширина заголовков макета */
}

/* style.css рисует h1:after и т.п. — у заголовка раздела декоративных псевдоэлементов нет */
.ds-section-head__title::before,
.ds-section-head__title::after,
.ds-program__name::before,
.ds-program__name::after {
	content: none;
}

.ds-section-head__hint {
	color: var(--ds-color-accent);
	cursor: pointer;
}

/* ds-filter — «Фильтр раздела» (Figma 1503:1189). Активный пункт — .is-active, переключает JS страницы.
<div class="ds-filter">
	<span class="ds-filter__item is-active">Все видео (37)</span>
	<a class="ds-filter__item" href="#">Видео в тренде (3)</a>
</div>
*/
.ds-filter {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 20px;
	padding: 10px 0;
}

.ds-filter__item {
	padding: 0;
	border: 0;
	background: none;
	color: var(--ds-color-accent);
	font: 400 16px/20px var(--ds-font);
	text-decoration: underline dotted;
	text-decoration-thickness: var(--ds-underline);
	text-underline-offset: var(--ds-underline-offset);
	cursor: pointer;
}

.ds-filter__item.is-active {
	color: var(--ds-color-text);
	font-weight: 500;
	text-decoration: none;
	cursor: default;
}

/* ds-contact — «Блок контактов 1» (Figma 1503:1239): иконка 30 + текст.
   «Блок контактов 2» (Figma 1503:1327) — тот же блок, в __body--actions лежат ds-btn и ds-messengers
   (без вертикальных отступов текста и не шире 300).
<div class="ds-contact">
	<i class="ds-icon ds-icon--pin ds-icon--30 ds-contact__icon"></i>
	<div class="ds-contact__body">Москва, ул. Ташкентская, 18к1</div>
</div>
<div class="ds-contact">
	<i class="ds-icon ds-icon--phone ds-icon--30 ds-contact__icon"></i>
	<div class="ds-contact__body ds-contact__body--actions">
		<a class="ds-btn" href="#">Показать телефон</a>
		<div class="ds-messengers">…</div>
	</div>
</div>
*/
.ds-contact {
	display: flex;
	align-items: flex-start;
	gap: 10px;
}

.ds-contact__icon {
	color: var(--ds-color-muted);
}

.ds-contact__body {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	gap: 10px;
	min-width: 0;
	padding: 4px 0;
	font: 300 16px/23px var(--ds-font);
}

.ds-contact__body--actions {
	max-width: 300px;
	padding: 0;
}

/* ds-messengers — плитки мессенджеров из «Блока контактов 2» (Figma 1503:1327): три равных квадрата,
   в каждом иконка и подпись цветом бренда. В макете плитка масштабируется целиком (76.7 / 93.3 / 86.7 на
   800 / 500 / 360): иконка 52.5% стороны на 13.7% от верха, подпись 15.2% стороны, верх букв на 74.2%;
   рамка и скругление постоянные. Поэтому плитка — контейнер, размеры внутри от --ds-tile.
   Мессенджера нет — .is-disabled (span вместо a).
<div class="ds-messengers">
	<a class="ds-messengers__item ds-messengers__item--telegram" href="#">
		<img class="ds-messengers__icon" src="…/Telegram_icon_new.svg" alt="">
		<span class="ds-messengers__label">Telegram</span>
	</a>
	<a class="ds-messengers__item ds-messengers__item--whatsapp" href="#">…WhatsApp…</a>
	<span class="ds-messengers__item ds-messengers__item--max is-disabled">…Max…</span>
</div>
*/
.ds-messengers {
	display: flex;
	gap: 10px;
}

.ds-messengers__item {
	--ds-tile: calc(100cqw + 2 * var(--ds-border-bold)); /* сторона плитки с рамкой; cqw считается у детей */
	display: flex;
	flex: 1 1 0;
	flex-direction: column;
	align-items: center;
	justify-content: flex-start;
	min-width: 0;
	container-type: inline-size;
	aspect-ratio: 1;
	overflow: hidden;
	border: var(--ds-border-bold) solid var(--ds-color-accent);
	border-radius: var(--ds-radius-s);
	background: var(--ds-color-surface);
	text-decoration: none;
}

.ds-messengers__icon {
	display: block;
	flex: none;
	width: calc(var(--ds-tile) * 0.525);
	height: calc(var(--ds-tile) * 0.525);
	margin-top: calc(var(--ds-tile) * 0.137 - var(--ds-border-bold));
	object-fit: contain;
}

/* line-height 1: верх прописных у Roboto на 0.131em ниже строки — отсюда зазор 6% до верха букв на 74.2% */
.ds-messengers__label {
	margin-top: calc(var(--ds-tile) * 0.06);
	font: 400 calc(var(--ds-tile) * 0.152) / 1 var(--ds-font);
	white-space: nowrap;
}

/* цвета брендов живут только здесь, в токены не выносятся */
.ds-messengers__item--telegram { color: #038BC9; }
.ds-messengers__item--whatsapp { color: #009634; }
.ds-messengers__item--max      { color: #9341DE; }

.ds-messengers__item.is-disabled {
	border-color: var(--ds-color-divider);
	color: var(--ds-color-divider);
	cursor: default;
}

.ds-messengers__item.is-disabled .ds-messengers__icon {
	opacity: 0.35;
	filter: grayscale(1);
}

/* ds-feature — «Состав» (Figma 1507:1510): иконка 45 + текст.
<div class="ds-feature">
	<img class="ds-feature__icon" src="…/shower.svg" alt="">
	<span class="ds-feature__text">Все комнаты салона с душем</span>
</div>
*/
.ds-feature {
	display: flex;
	align-items: center;
	gap: 10px;
}

.ds-feature__icon {
	display: block;
	flex: none;
	width: 45px;
	height: 45px;
	object-fit: contain;
}

.ds-feature__text {
	flex: 1 1 auto;
	min-width: 0;
	font: 300 15px/20px var(--ds-font);
}

/* ds-price — «Блок цены и времени» (Figma 1507:2139).
<div class="ds-price">
	<span class="ds-price__value">5 500 руб.</span>
	<i class="ds-icon ds-icon--time ds-icon--19 ds-price__icon"></i>
	<span class="ds-price__time">1 час</span>
</div>
*/
.ds-price {
	display: flex;
	align-items: center;
	gap: 5px;
	padding: 5px 0;
}

.ds-price__value {
	color: var(--ds-color-text);
	font: 500 18px/28px var(--ds-font);
}

.ds-price__icon {
	color: var(--ds-color-muted);
}

.ds-price__time {
	color: var(--ds-color-muted);
	font: 400 18px/28px var(--ds-font);
}

/* ds-program — «Свернутая программа» (Figma 1507:1747) / «Развернутая программа» (Figma 1507:2328).
   Свёрнута: ряд иконок __icons. Раскрыта (.is-open, переключает JS страницы): список __items.
<div class="ds-program">
	<span class="ds-program__num">1.</span>
	<div class="ds-program__body">
		<h3 class="ds-program__name">Название программы</h3>
		<div class="ds-price">…</div>
		<div class="ds-program__icons">
			<span class="ds-icon-box"><img src="…" alt=""></span>
		</div>
		<ul class="ds-program__items">
			<li class="ds-program__item">
				<span class="ds-icon-box"><img src="…" alt=""></span>
				<span class="ds-program__text">Состав массажной программы</span>
			</li>
		</ul>
	</div>
	<i class="ds-icon ds-icon--expand ds-program__toggle"></i>
</div>
*/
.ds-program {
	display: flex;
	align-items: flex-start;
	justify-content: space-between;
	padding: 5px 0;
}

.ds-program__num {
	flex: none;
	width: 25px;
	color: var(--ds-color-muted);
	font: 400 18px/28px var(--ds-font);
}

.ds-program__body {
	display: flex;
	flex: 1 1 auto;
	flex-direction: column;
	min-width: 0;
}

.ds-program__name {
	margin: 0;
	color: var(--ds-color-accent);
	font: 500 20px/28px var(--ds-font);
	text-align: left;
	text-transform: none;
	letter-spacing: normal;
}

.ds-program__icons {
	display: flex;
	flex-wrap: wrap;
	align-items: center;
	gap: 8px;
	padding: 5px 0;
}

.ds-program__items {
	display: none;
	flex-direction: column;
	margin: 0;
	padding: 0;
	list-style: none;
}

.ds-program__item {
	display: flex;
	align-items: flex-start;
	gap: 10px;
	padding: 5px 0;
}

/* однострочный пункт в макете — по центру иконки 40, многострочный — от верха (он выше иконки и растягивает строку) */
.ds-program__text {
	flex: 1 1 auto;
	align-self: center;
	min-width: 0;
	font: 300 15px/20px var(--ds-font);
}

.ds-program__toggle {
	color: var(--ds-color-accent);
	cursor: pointer;
}

.ds-program.is-open .ds-program__icons {
	display: none;
}

.ds-program.is-open .ds-program__items {
	display: flex;
}

.ds-program.is-open .ds-program__toggle {
	--ds-icon: url(/wp-content/themes/don/images/ds/collapse.svg);
}

/* ds-addon — «Дополнение» (Figma 1512:3171).
<div class="ds-addon">
	<span class="ds-icon-box"><img src="…" alt=""></span>
	<span class="ds-addon__text">Состав дополнения к массажной программе</span>
	<span class="ds-addon__price">2 500 руб.</span>
</div>
*/
.ds-addon {
	display: flex;
	flex-wrap: wrap;
	align-items: flex-start;
	gap: 10px;
	padding-bottom: 10px;
}

.ds-addon__text {
	flex: 1 1 0;
	min-width: 0;
	font: 300 15px/20px var(--ds-font);
}

.ds-addon__price {
	flex: none;
	font: 500 18px/28px var(--ds-font);
	text-align: right;
}


/* === 9. Иконки ============================================================ */

/* Имена иконок. Figma-экземпляры, из которых выгружены SVG: .figma/salon-page/svg-icons/_instance_ids.json */
.ds-icon--question     { --ds-icon: url(/wp-content/themes/don/images/ds/question.svg); }
.ds-icon--more         { --ds-icon: url(/wp-content/themes/don/images/ds/more.svg); }
.ds-icon--expand       { --ds-icon: url(/wp-content/themes/don/images/ds/expand.svg); }
.ds-icon--collapse     { --ds-icon: url(/wp-content/themes/don/images/ds/collapse.svg); }
.ds-icon--time         { --ds-icon: url(/wp-content/themes/don/images/ds/time.svg); }
.ds-icon--phone        { --ds-icon: url(/wp-content/themes/don/images/ds/phone.svg); }
.ds-icon--pin          { --ds-icon: url(/wp-content/themes/don/images/ds/pin.svg); }
.ds-icon--schedule     { --ds-icon: url(/wp-content/themes/don/images/ds/schedule.svg); }
.ds-icon--site         { --ds-icon: url(/wp-content/themes/don/images/ds/site.svg); }
.ds-icon--route        { --ds-icon: url(/wp-content/themes/don/images/ds/route.svg); }
.ds-icon--prices-proof { --ds-icon: url(/wp-content/themes/don/images/ds/prices-proof.svg); }
.ds-icon--report       { --ds-icon: url(/wp-content/themes/don/images/ds/report.svg); }
.ds-icon--crumb        { --ds-icon: url(/wp-content/themes/don/images/ds/crumb.svg); }


/* === 10. Атрибут hidden =================================================== */

/* display у ds-* перебивает [hidden] браузера — возвращаем. Специфичность 0,2,0 выше компонентной.
<div class="ds-program" hidden>…</div>
*/
[class^="ds-"][hidden],
[class*=" ds-"][hidden] {
	display: none;
}


/* === 11. Ховеры ============================================================ */

/* В макете ховеров нет — перенесены со старой страницы салона (style.css, ammi.js):
   пунктирные ссылки и «показать ещё» теряют подчёркивание, кнопки-обводки и мессенджеры получают
   светлую заливку, вопросик заливается, раскрывающаяся программа подсвечивается. */
.ds-link:hover,
.ds-filter__item:hover {
	text-decoration-line: none;
}

/* «перейти на сайт салона»: в старой вёрстке подчёркнута и при наведении (style.css a:hover её не снимает) */
.ds-link--solid:hover {
	text-decoration-line: underline;
}

.ds-more:hover .ds-more__text {
	text-decoration-line: none;
}

.ds-crumbs__item > a:hover {
	color: var(--ds-color-text);
}

.ds-btn:hover,
.ds-messengers__item:hover {
	background: var(--ds-color-accent-soft);
}

.ds-messengers__item.is-disabled:hover {
	background: var(--ds-color-surface);
}

.ds-icon--question:hover {
	--ds-icon: url(/wp-content/themes/don/images/ds/question-hover.svg);
}

/* ds-program--toggle — программа с составом (раскрывается по клику): курсор и подсветка строки.
   Поля 10 по бокам уходят в padding карточки, чтобы подсветка не прилипала к тексту и ничего не сдвигалось.
<div class="ds-program ds-program--toggle">…</div>
*/
.ds-program--toggle {
	margin: 0 -10px;
	padding: 5px 10px;
	border-radius: var(--ds-radius-s);
	cursor: pointer;
}

.ds-program--toggle:hover {
	background: var(--ds-color-hover);
}
