/* MedLab booking widget — стилизация под сайт medlabspb.ru */

/* === Service-страницы: виджет внутри .ml-accordion__links--booking, на месте якорного меню. === */
.ml-accordion__links--booking {
    padding: 0 !important;
    box-sizing: border-box;
}
.ml-accordion__links--booking .ml-booking {
    margin: 0;
    background: #fff;
    border: 1.5px solid var(--ml-accent);
    padding: 16px;
}
/* Зазор между контентом (слева) и виджетом (справа): уменьшаем max-width контента,
   space-between на .ml-accordion__container превращает разницу в 32px gap.
   Брейкпойнты выровнены под main.css: до 1298px секция была 800px, выше — 1000px. */
@media (min-width: 992px) and (max-width: 1298.98px) {
    .ml-content--with-booking .ml-accordion__section {
        max-width: 768px;
    }
}
@media (min-width: 1299px) {
    .ml-content--with-booking .ml-accordion__section {
        max-width: 968px;
    }
}

/* === Doctors-страницы: aside + main, 2-колоночный flex (структура другая, accordion'а нет) === */
@media (min-width: 992px) {
    .ml-content.ml-content--with-booking {
        display: flex;
        flex-direction: row;
        flex-wrap: nowrap;
        gap: 32px;
        align-items: stretch;
    }
    .ml-content.ml-content--with-booking > .ml-content__main {
        flex: 1 1 auto;
        min-width: 0;
        order: 1;
    }
    .ml-content.ml-content--with-booking > .ml-doctor-booking-sidebar {
        flex: 0 0 360px;
        order: 2;
        align-self: stretch;
    }
    .ml-content.ml-content--with-booking > .ml-doctor-booking-sidebar .ml-doctor-booking-sidebar__inner {
        position: sticky;
        top: 160px;
    }
    .ml-content.ml-content--with-booking > .ml-doctor-booking-sidebar .ml-booking {
        margin: 0;
        background: #fff;
        border: 1.5px solid var(--ml-accent);
        padding: 16px;
    }
}

/* main.css на max-width:1060px скрывает все .ml-accordion__links (для якорного TOC).
   Возвращаем видимость варианту с виджетом и перестраиваем layout — виджет уходит наверх. */
@media (max-width: 1060px) {
    /* Мобильный/планшетный порядок: заголовок → пилюли → виджет → контент.
       Достигаем через display:contents у section/header — их дети всплывают
       в flex-контейнер ml-accordion__container и сортируются через `order`. */
    .ml-content--with-booking .ml-accordion__container {
        display: flex;
        flex-direction: column;
    }
    .ml-content--with-booking .ml-accordion__container > .ml-accordion__section { display: contents; }
    .ml-accordion__section > .ml-services-header { display: contents; }

    .ml-services-header__top  { order: 1; margin: 0 0 20px; }
    .ml-services-header__toc  { order: 2; margin: 20px 0 28px; }
    .ml-accordion__links--booking {
        order: 3 !important;
        display: block !important;
        width: 100% !important;
        position: static !important;
        padding: 0 !important;
        margin: 0 0 32px !important;
    }
    .ml-accordion__section-body { order: 4; display: block; }
    .ml-accordion__section-body > * + * { margin-top: 18px; }
}

@media (max-width: 991px) {
    /* Doctors-страницы: card → виджет → остальное */
    .ml-content.ml-content--with-booking {
        display: flex;
        flex-direction: column;
    }
    .ml-content.ml-content--with-booking > .ml-content__main { display: contents; }
    .ml-content.ml-content--with-booking .ml-card { order: 1; }
    .ml-content.ml-content--with-booking > .ml-doctor-booking-sidebar { order: 2; margin: 16px 0; width: 100%; }
    .ml-content.ml-content--with-booking .ml-services-content__info,
    .ml-content.ml-content--with-booking .ml-card__education,
    .ml-content.ml-content--with-booking .ml-card__qualifications,
    .ml-content.ml-content--with-booking .ml-card-pro,
    .ml-content.ml-content--with-booking .ml-card-reviews,
    .ml-content.ml-content--with-booking .ml-services-content,
    .ml-content.ml-content--with-booking .ml-card-other__wraper,
    .ml-content.ml-content--with-booking .ml-card-slider { order: 3; }
    .ml-doctor-booking-sidebar__inner {
        background: #eaf6e6; border-radius: 12px; padding: 12px;
    }
}

/* CSS-переменные на :root, чтобы модалка после перемещения в <body> их тоже видела. */
/* Палитра выровнена под токены сайта (main.css):
   accent #55B043 (CTA), fg #202C22 (тёмный текст), muted #898F9A (caption/label),
   bg-soft #F4F7F6 (input/card), error #E33131. */
:root {
    --ml-accent: #55B043;
    --ml-accent-hover: #469135;
    --ml-accent-soft: rgba(85, 176, 67, 0.08);
    --ml-fg: #202C22;
    --ml-muted: #898F9A;
    --ml-border: #E2E6EE;
    --ml-bg-soft: #F4F7F6;
    --ml-error: #E33131;
}
.ml-booking {
    background: #fff;
    border: 1px solid var(--ml-border);
    border-radius: 12px;
    padding: 18px 18px 16px;
    margin: 16px 0;
    color: var(--ml-fg);
    font-family: inherit;
    /* Резервируем высоту и фиксируем ширину чтобы layout не скакал между initializing → loaded.
       Loader позиционируется абсолютно (см. ниже), контент проявляется внутри той же коробки.
       min-width:0 + overflow-x:clip гарантируют, что чипы слотов (white-space:nowrap +
       длинный «10:30 · 3 000 ₽») не раздвигают виджет при переключении дней. */
    position: relative;
    width: 100%;
    min-width: 0;
    max-width: 100%;
    overflow-x: clip;
    box-sizing: border-box;
    min-height: 480px;
}
@media (max-width: 991px) {
    .ml-booking { min-height: 440px; }
}
.ml-booking__header { margin-bottom: 12px; }
.ml-booking__title  { margin: 0; font-size: 18px; font-weight: 700; line-height: 1.2; font-family: 'Manrope', 'Source Sans 3', sans-serif; }
.ml-booking__subtitle { margin: 4px 0 0; color: var(--ml-muted); font-size: 13px; }

.ml-booking__filters {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 12px;
}
.ml-booking__filter {
    flex: 1 1 160px;
    min-width: 0;
}
/* Мобила: каждый фильтр на всю ширину (длинные имена услуг/центров не помещаются в 160px). */
@media (max-width: 767px) {
    .ml-booking__filters { gap: 12px; margin-bottom: 16px; }
    .ml-booking__filter { flex: 1 1 100%; }
}
.ml-booking__filter label {
    display: block;
    font-size: 12px;
    color: var(--ml-muted);
    margin-bottom: 4px;
    font-weight: 500;
}
.ml-booking__filter input,
.ml-booking__filter select {
    width: 100%;
    padding: 0 14px;
    border: 1px solid var(--ml-border);
    border-radius: 10px;
    font-size: 14px;
    line-height: 1.2;
    background: #fff;
    font-family: inherit;
    color: var(--ml-fg);
    height: 44px;
    box-sizing: border-box;
    transition: border-color .15s, box-shadow .15s;
}
.ml-booking__filter input:hover,
.ml-booking__filter select:hover {
    border-color: #c8d6cd;
}
.ml-booking__filter input:focus,
.ml-booking__filter select:focus {
    outline: none;
    border-color: var(--ml-accent);
    box-shadow: 0 0 0 3px rgba(85, 176, 67, 0.18);
}

/* Custom select chevron: nativный dropdown работает (важно для mobile),
   но стрелка перерисована в стиле сайта. */
.ml-booking__filter select {
    -webkit-appearance: none;
    -moz-appearance: none;
    appearance: none;
    padding-right: 38px;
    cursor: pointer;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'><path d='M1 1.5L6 6.5L11 1.5' stroke='%23202c22' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/></svg>");
    background-repeat: no-repeat;
    background-position: right 14px center;
    background-size: 12px 8px;
}
.ml-booking__filter select:hover { background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8' fill='none'><path d='M1 1.5L6 6.5L11 1.5' stroke='%2355b043' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'/></svg>"); }
.ml-booking__filter select::-ms-expand { display: none; }
/* Disabled опции (например центры с has_any_slots_30d:false) — приглушённые,
   плюс JS добавляет суффикс «— нет окон» к label. */
.ml-booking__filter select option:disabled { color: var(--ml-muted); font-style: italic; }

/* Стилизация native date input.
   ::-webkit-calendar-picker-indicator работает в Chromium-браузерах. */
.ml-booking__filter input[type="date"] {
    padding-right: 14px;
    color: var(--ml-fg);
    font-variant-numeric: tabular-nums;
}
.ml-booking__filter input[type="date"]::-webkit-calendar-picker-indicator {
    cursor: pointer;
    width: 18px;
    height: 18px;
    padding: 0;
    margin-left: 8px;
    opacity: 0.6;
    filter: invert(35%) sepia(13%) saturate(820%) hue-rotate(85deg) brightness(95%) contrast(85%);
    transition: opacity .15s;
}
.ml-booking__filter input[type="date"]:hover::-webkit-calendar-picker-indicator { opacity: 1; }
.ml-booking__filter input[type="date"]::-webkit-datetime-edit { padding: 0; }
.ml-booking__filter input[type="date"]::-webkit-inner-spin-button { display: none; }

/* Специалист и дата — всегда в отдельной строке (полная ширина).
   Селектор с двумя классами специфичнее .ml-booking__filter — переопределяет flex-basis. */
.ml-booking__filter.ml-booking__filter--doctor,
.ml-booking__filter.ml-booking__filter--date {
    flex: 1 1 100%;
    width: 100%;
}

/* Date picker: trigger button + popover calendar */
.ml-booking__date-wrap { position: relative; }
.ml-booking__date-trigger {
    width: 100%;
    height: 44px;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 0 14px;
    border: 1px solid var(--ml-border);
    border-radius: 10px;
    background: #fff;
    color: var(--ml-fg);
    font-family: inherit;
    font-size: 14px;
    cursor: pointer;
    text-align: left;
    transition: border-color .15s, box-shadow .15s;
}
.ml-booking__date-trigger:hover { border-color: #c8d6cd; }
.ml-booking__date-trigger:focus,
.ml-booking__date-trigger[aria-expanded="true"] {
    outline: none;
    border-color: var(--ml-accent);
    box-shadow: 0 0 0 3px rgba(85, 176, 67, 0.18);
}
.ml-booking__date-trigger svg { color: var(--ml-muted); flex-shrink: 0; }

/* Doctor picker — кастомный выпадающий со списком врачей с фото и ссылкой "подробнее" */
.ml-booking__doctor-picker { position: relative; }
.ml-booking__doctor-trigger {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    padding: 6px 10px;
    background: #fff;
    border: 1px solid var(--ml-border);
    border-radius: 8px;
    font-family: inherit;
    font-size: 14px;
    color: var(--ml-fg);
    cursor: pointer;
    text-align: left;
    min-height: 44px;
}
.ml-booking__doctor-trigger:hover { border-color: var(--ml-accent); }
.ml-booking__doctor-trigger svg { color: var(--ml-muted); margin-left: auto; flex-shrink: 0; }
.ml-booking__doctor-trigger-avatar {
    width: 28px; height: 28px;
    border-radius: 50%;
    background: var(--ml-accent-soft);
    color: var(--ml-accent-hover);
    display: flex; align-items: center; justify-content: center;
    flex-shrink: 0;
    font-weight: 600;
    overflow: hidden;
}
.ml-booking__doctor-trigger-avatar img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ml-booking__doctor-trigger-avatar:empty {
    background: var(--ml-accent-soft);
}
.ml-booking__doctor-trigger-avatar--any svg {
    color: var(--ml-accent);
    margin: 0;
}
.ml-booking__doctor-trigger-label {
    flex: 1 1 auto;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ml-booking__doctor-list {
    position: absolute;
    top: calc(100% + 4px);
    left: 0; right: 0;
    z-index: 60;
    margin: 0; padding: 4px;
    list-style: none;
    background: #fff;
    border: 1px solid var(--ml-border);
    border-radius: 10px;
    box-shadow: 0 14px 32px rgba(15, 22, 40, 0.12);
    max-height: 360px;
    overflow-y: auto;
}
.ml-booking__doctor-list[hidden] { display: none; }
.ml-booking__doctor-item {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 8px 10px;
    border-radius: 8px;
    cursor: pointer;
    font-size: 14px;
    transition: background 0.12s;
}
.ml-booking__doctor-item:hover { background: var(--ml-accent-soft); }
.ml-booking__doctor-avatar {
    width: 36px; height: 36px;
    border-radius: 50%;
    flex-shrink: 0;
    object-fit: cover;
    background: var(--ml-accent-soft);
    color: var(--ml-accent-hover);
    display: flex; align-items: center; justify-content: center;
    font-weight: 600;
    overflow: hidden;
}
.ml-booking__doctor-avatar img { width: 100%; height: 100%; object-fit: cover; }
.ml-booking__doctor-info {
    flex: 1 1 auto;
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 2px;
}
.ml-booking__doctor-name {
    font-weight: 500;
    color: var(--ml-fg);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ml-booking__doctor-specialty {
    font-size: 12px;
    color: var(--ml-muted);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ml-booking__doctor-link {
    color: var(--ml-accent-hover);
    text-decoration: none;
    flex-shrink: 0;
    width: 28px;
    height: 28px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    border-radius: 50%;
    transition: background 0.12s, color 0.12s;
}
.ml-booking__doctor-link:hover { background: var(--ml-accent); color: #fff; }

/* Кастомный календарь — popover (скрыт по умолчанию). Цветовая подсветка дней:
   зелёный = много слотов, жёлтый = мало, серый = нет. */
.ml-booking__calendar {
    position: absolute;
    top: calc(100% + 6px);
    left: 0;
    right: auto;
    width: 320px;
    max-width: 100%;
    z-index: 50;
    background: #fff;
    border: 1px solid var(--ml-border);
    border-radius: 12px;
    padding: 10px;
    box-shadow: 0 12px 32px rgba(15, 22, 40, 0.12);
    user-select: none;
}
.ml-booking__calendar--above {
    top: auto;
    bottom: calc(100% + 6px);
    box-shadow: 0 -12px 32px rgba(15, 22, 40, 0.12);
}
.ml-booking__calendar[hidden] { display: none; }
.ml-booking__cal-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 8px;
    gap: 4px;
}
.ml-booking__cal-title {
    font-weight: 600;
    font-size: 14px;
    color: var(--ml-fg);
    flex: 1;
    text-align: center;
}
.ml-booking__cal-nav {
    width: 28px; height: 28px;
    display: flex; align-items: center; justify-content: center;
    border: 0; background: transparent; cursor: pointer;
    font-size: 22px; line-height: 1; color: var(--ml-fg);
    border-radius: 6px;
    transition: background .15s;
}
.ml-booking__cal-nav:hover:not(:disabled) { background: var(--ml-accent-soft); color: var(--ml-accent-hover); }
.ml-booking__cal-nav:disabled { opacity: .25; cursor: default; }

.ml-booking__cal-weekdays {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    text-align: center;
    color: var(--ml-muted);
    font-size: 11px;
    margin-bottom: 4px;
}
.ml-booking__cal-grid {
    display: grid;
    grid-template-columns: repeat(7, 1fr);
    gap: 2px;
}
.ml-booking__cal-blank { display: block; }
.ml-booking__cal-day {
    aspect-ratio: 1 / 1;
    border: 0;
    border-radius: 8px;
    cursor: pointer;
    background: transparent;
    color: var(--ml-fg);
    font-size: 13px;
    font-family: inherit;
    position: relative;
    transition: background .15s, color .15s;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 0;
}
.ml-booking__cal-day--many  { background: #cfeac4; color: #2c5e22; font-weight: 600; }
.ml-booking__cal-day--few   { background: #fff3c4; color: #6b5500; font-weight: 600; }
.ml-booking__cal-day--none  { background: #f3f4f6; color: #9ca3af; }
.ml-booking__cal-day--disabled { background: transparent; color: #d1d5db; cursor: default; }
.ml-booking__cal-day:not(:disabled):hover {
    background: var(--ml-accent);
    color: #fff;
}
.ml-booking__cal-day--selected {
    outline: 2px solid var(--ml-accent);
    outline-offset: -2px;
}
.ml-booking__cal-num { line-height: 1; }
.ml-booking__cal-dot {
    position: absolute;
    bottom: 3px;
    width: 4px; height: 4px;
    background: currentColor;
    border-radius: 50%;
    opacity: .6;
}

/* Visit-type — сегментированный контрол на pill-кнопках вместо native radio
   (iOS рендерит системные радио огромными и не уважает size). */
.ml-booking__visit-type {
    display: inline-flex;
    gap: 0;
    align-items: stretch;
    border: 1px solid var(--ml-border);
    border-radius: 22px;
    padding: 3px;
    background: #fff;
    height: 44px;
    box-sizing: border-box;
}
.ml-booking__visit-type label {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    padding: 0 16px;
    font-size: 13px;
    line-height: 1;
    cursor: pointer;
    margin: 0;
    color: var(--ml-fg);
    font-weight: 500;
    border-radius: 18px;
    transition: background .15s, color .15s;
    user-select: none;
    -webkit-user-select: none;
    white-space: nowrap;
}
.ml-booking__visit-type label:hover {
    color: var(--ml-accent);
}
.ml-booking__visit-type label:has(input:checked) {
    background: var(--ml-accent);
    color: #fff;
}
.ml-booking__visit-type label:has(input:checked):hover {
    color: #fff;
}
/* Скрываем native radio визуально, но оставляем accessible (focus, voice-over, keyboard). */
.ml-booking__visit-type input[type="radio"] {
    position: absolute;
    opacity: 0;
    pointer-events: none;
    width: 0;
    height: 0;
    margin: 0;
}
/* Focus-индикатор для клавиатуры — outline на родительском label. */
.ml-booking__visit-type label:focus-within {
    outline: 2px solid rgba(85, 176, 67, 0.4);
    outline-offset: 1px;
}

/* Подсказка-тултип рядом с сегмент-контролом «Приём». Hint вынесен из <label>,
   чтобы клик по иконке не переключал radio. */
.ml-booking__visit-type-wrap {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
.ml-booking__hint {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 18px;
    height: 18px;
    border-radius: 50%;
    background: transparent;
    border: 1.5px solid var(--ml-muted);
    color: var(--ml-muted);
    font-size: 12px;
    font-weight: 700;
    line-height: 1;
    cursor: help;
    position: relative;
    user-select: none;
    flex: 0 0 auto;
    transition: background .15s, color .15s, border-color .15s;
}
.ml-booking__hint:hover,
.ml-booking__hint:focus {
    background: var(--ml-accent);
    border-color: var(--ml-accent);
    color: #fff;
    outline: none;
}
.ml-booking__hint::after {
    content: attr(data-tip);
    position: absolute;
    bottom: calc(100% + 8px);
    left: 50%;
    transform: translateX(-50%);
    width: 240px;
    background: var(--ml-fg);
    color: #fff;
    font-size: 12px;
    font-weight: 400;
    font-style: normal;
    line-height: 1.4;
    padding: 8px 10px;
    border-radius: 8px;
    text-align: left;
    white-space: normal;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .15s, visibility .15s;
    z-index: 100;
}
.ml-booking__hint::before {
    content: '';
    position: absolute;
    bottom: calc(100% + 2px);
    left: 50%;
    transform: translateX(-50%);
    border: 6px solid transparent;
    border-top-color: var(--ml-fg);
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: opacity .15s, visibility .15s;
    z-index: 100;
}
.ml-booking__hint:hover::after,
.ml-booking__hint:focus::after,
.ml-booking__hint:hover::before,
.ml-booking__hint:focus::before {
    opacity: 1;
    visibility: visible;
}

.ml-booking__time-filter {
    display: flex;
    gap: 6px;
    margin: 4px 0 12px;
    flex-wrap: wrap;
}
.ml-booking__time-chip {
    flex: 1 1 0;
    min-width: 0;
    height: 32px;
    border: 1px solid var(--ml-border);
    border-radius: 16px;
    background: #fff;
    color: var(--ml-fg);
    font-family: inherit;
    font-size: 13px;
    cursor: pointer;
    padding: 0 12px;
    transition: background .15s, border-color .15s, color .15s;
}
.ml-booking__time-chip:hover {
    border-color: var(--ml-accent);
    color: var(--ml-accent-hover);
}
.ml-booking__time-chip--active {
    background: var(--ml-accent);
    border-color: var(--ml-accent);
    color: #fff;
}
.ml-booking__time-chip--active:hover { color: #fff; }
.ml-booking__time-chip:disabled,
.ml-booking__time-chip--disabled {
    background: #f3f4f6;
    color: #9ca3af;
    border-color: transparent;
    cursor: not-allowed;
}
.ml-booking__time-chip:disabled:hover,
.ml-booking__time-chip--disabled:hover {
    background: #f3f4f6;
    color: #9ca3af;
    border-color: transparent;
}

.ml-booking__slots-status {
    font-size: 13px;
    color: var(--ml-muted);
    margin: 6px 0 10px;
    min-height: 18px;
    display: flex;
    align-items: center;
    gap: 8px;
}
.ml-booking__slots-status--error { color: var(--ml-error); }

.ml-booking__spinner {
    display: inline-block;
    width: 14px;
    height: 14px;
    border: 2px solid rgba(85, 176, 67, 0.25);
    border-top-color: var(--ml-accent);
    border-radius: 50%;
    animation: ml-booking-spin 0.8s linear infinite;
    flex-shrink: 0;
}
.ml-booking__spinner--lg {
    width: 32px;
    height: 32px;
    border-width: 3px;
}
@keyframes ml-booking-spin {
    to { transform: rotate(360deg); }
}

/* === Skeleton screen (вместо ajax-spinner) === */
/* Показывается пока виджет --initializing, повторяет layout content'а с shimmer-анимацией
   → нет резкого скачка при появлении реальных данных. */
.ml-booking__skeleton { display: none; }
.ml-booking--initializing .ml-booking__skeleton { display: block; }
.ml-booking--initializing .ml-booking__content {
    display: none;
}
/* Когда initialized — реальный content fade-in для мягкости */
.ml-booking:not(.ml-booking--initializing) .ml-booking__content {
    animation: ml-booking-fade-in .25s ease-out;
}
@keyframes ml-booking-fade-in {
    from { opacity: 0; transform: translateY(2px); }
    to   { opacity: 1; transform: none; }
}

/* Shimmer-блок (общая основа для всех placeholder'ов) */
.ml-booking__skel-input,
.ml-booking__skel-label,
.ml-booking__skel-chip,
.ml-booking__skel-day-header,
.ml-booking__skel-slot {
    display: block;
    background: linear-gradient(90deg, #eef3ee 0%, #f6f9f6 50%, #eef3ee 100%);
    background-size: 200% 100%;
    animation: ml-booking-shimmer 1.3s ease-in-out infinite;
    border-radius: 8px;
}
@keyframes ml-booking-shimmer {
    0%   { background-position: 200% 0; }
    100% { background-position: -200% 0; }
}
@media (prefers-reduced-motion: reduce) {
    .ml-booking__skel-input,
    .ml-booking__skel-label,
    .ml-booking__skel-chip,
    .ml-booking__skel-day-header,
    .ml-booking__skel-slot {
        animation: none;
        background: #eef3ee;
    }
}

/* Filters row (3 placeholder filter'а) */
.ml-booking__skel-filters {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 12px;
}
.ml-booking__skel-filter {
    flex: 1 1 160px;
    min-width: 0;
}
.ml-booking__skel-label {
    height: 11px;
    width: 60%;
    margin-bottom: 6px;
    border-radius: 3px;
}
.ml-booking__skel-input {
    height: 44px;
    border-radius: 10px;
}

/* Time chips */
.ml-booking__skel-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 14px;
}
.ml-booking__skel-chip {
    height: 32px;
    width: 70px;
    border-radius: 16px;
}
.ml-booking__skel-chip--wide { width: 88px; }

/* Day header — like real .ml-booking__day-header */
.ml-booking__skel-day-header {
    height: 14px;
    width: 200px;
    margin-bottom: 12px;
    border-radius: 4px;
}

/* Slots grid */
.ml-booking__skel-slots {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
}
.ml-booking__skel-slot {
    height: 36px;
    width: 84px;
    border-radius: 8px;
}

.ml-booking__slots {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-bottom: 4px;
    max-height: 380px;
    overflow-y: auto;
    padding-right: 4px;
    /* Контейнер слотов не должен раздвигать виджет: ширина = ширина родителя минус padding,
       внутренние flex-wrap чипы перенесутся на новую строку, layout не «прыгает». */
    width: 100%;
    min-width: 0;
    box-sizing: border-box;
}
/* Аккуратный scrollbar внутри блока слотов */
.ml-booking__slots::-webkit-scrollbar { width: 6px; }
.ml-booking__slots::-webkit-scrollbar-thumb { background: #cfd6d1; border-radius: 3px; }
.ml-booking__slots::-webkit-scrollbar-track { background: transparent; }
.ml-booking__day-header {
    font-weight: 700;
    font-size: 14px;
    margin-bottom: 6px;
    text-transform: capitalize;
    color: var(--ml-fg);
    font-family: 'Manrope', 'Source Sans 3', sans-serif;
}
.ml-booking__day-slots { display: flex; flex-wrap: wrap; gap: 6px; }

/* Группировка слотов по врачу (service-mode + "Любой специалист") */
.ml-booking__doc-group {
    margin-bottom: 10px;
    padding: 8px 10px;
    border-radius: 10px;
    background: rgba(85, 176, 67, 0.04);
}
.ml-booking__doc-group:last-child { margin-bottom: 0; }
.ml-booking__doc-group-head {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 6px;
}
.ml-booking__doc-group-avatar {
    width: 28px; height: 28px;
    border-radius: 50%;
    flex-shrink: 0;
    object-fit: cover;
    background: var(--ml-accent-soft);
    color: var(--ml-accent-hover);
    display: flex; align-items: center; justify-content: center;
    font-weight: 600;
    font-size: 13px;
    overflow: hidden;
}
.ml-booking__doc-group-avatar img { width: 100%; height: 100%; object-fit: cover; }
.ml-booking__doc-group-name {
    font-size: 13px;
    color: var(--ml-fg);
    font-weight: 500;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ml-booking__doc-group-link {
    color: var(--ml-fg);
    text-decoration: none;
}
.ml-booking__doc-group-link:hover { color: var(--ml-accent-hover); text-decoration: underline; }
.ml-booking__doc-group-slots {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
}
.ml-booking__slot {
    background: var(--ml-accent-soft);
    color: var(--ml-accent-hover);
    border: 1px solid transparent;
    border-radius: 20px;
    padding: 7px 12px;
    font-size: 14px;
    font-family: inherit;
    cursor: pointer;
    transition: background .15s, border-color .15s, color .15s;
    white-space: nowrap;
    text-align: center;
    flex: 0 0 auto;
}
.ml-booking__slot:hover {
    background: var(--ml-accent);
    color: #fff;
}

/* fallback ml-btn-phone-fallback — серый, под виджетом */
.ml-btn--phone-fallback {
    background: #fff !important;
    color: var(--ml-fg) !important;
    border: 1px solid var(--ml-border) !important;
    margin-top: 8px;
    font-size: 14px !important;
}

/* === Modal === */
.ml-booking__modal {
    position: fixed;
    inset: 0;
    z-index: 2147483000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 16px;
}
.ml-booking__modal[hidden] { display: none; }
.ml-booking__modal-overlay {
    position: absolute; inset: 0;
    background: rgba(15, 22, 40, 0.55);
    backdrop-filter: blur(2px);
    -webkit-backdrop-filter: blur(2px);
}
.ml-booking__modal-window {
    position: relative;
    background: #fff;
    border-radius: 18px;
    max-width: 480px;
    width: 100%;
    padding: 28px 28px 24px;
    max-height: 92vh;
    overflow-y: auto;
    box-shadow: 0 30px 80px rgba(0, 0, 0, 0.22);
    animation: ml-booking-modal-in 0.18s ease-out;
}
/* На десктопе модалка шире — ФИО в 3 колонки и legal-текст не сжимаются. */
@media (min-width: 768px) {
    .ml-booking__modal-window { max-width: 620px; }
}
@keyframes ml-booking-modal-in {
    from { opacity: 0; transform: translateY(8px) scale(0.98); }
    to   { opacity: 1; transform: none; }
}
.ml-booking__modal-close {
    position: absolute; top: 12px; right: 12px;
    width: 32px; height: 32px;
    background: transparent;
    border: 0;
    border-radius: 50%;
    display: flex; align-items: center; justify-content: center;
    color: var(--ml-muted);
    cursor: pointer;
    transition: background 0.15s, color 0.15s;
}
.ml-booking__modal-close:hover { background: var(--ml-bg-soft, #f3f4f6); color: var(--ml-fg); }

.ml-booking__modal-title {
    margin: 4px 0 16px;
    font-size: 20px;
    font-weight: 700;
    color: var(--ml-fg);
    text-align: center;
    font-family: 'Manrope', 'Source Sans 3', sans-serif;
}

/* Slot summary card */
.ml-booking__slot-summary {
    background: linear-gradient(135deg, #eaf6e6 0%, #d8efd0 100%);
    border-radius: 12px;
    padding: 14px 16px;
    margin-bottom: 18px;
    font-size: 14px;
    line-height: 1.45;
    color: var(--ml-fg);
}
.ml-booking__slot-summary-row {
    display: flex;
    align-items: flex-start;
    gap: 10px;
    margin-bottom: 6px;
}
.ml-booking__slot-summary-row:last-child { margin-bottom: 0; }
.ml-booking__slot-summary-icon {
    flex-shrink: 0;
    color: var(--ml-accent-hover);
    margin-top: 2px;
}
.ml-booking__slot-summary-row strong { font-weight: 600; }

/* Form */
.ml-booking__row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}
/* ФИО — 3 колонки на десктопе, на мобильном стек. */
.ml-booking__row--fio { grid-template-columns: 1fr 1fr 1fr; }
@media (max-width: 640px) {
    .ml-booking__row--fio { grid-template-columns: 1fr; }
}
/* Чекбокс «У меня нет отчества». */
.ml-booking__no-middle-name {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: -4px 0 14px;
    font-size: 13px;
    color: var(--ml-muted);
    cursor: pointer;
    user-select: none;
}
.ml-booking__no-middle-name input[type="checkbox"] {
    width: 16px;
    height: 16px;
    margin: 0;
    accent-color: var(--ml-accent, #55b043);
    cursor: pointer;
}
/* Отключённое поле отчества (когда чекбокс активен). */
.ml-booking__field--disabled label { opacity: .5; }
.ml-booking__field input:disabled {
    background: var(--ml-bg-soft, #f3f7f2);
    color: var(--ml-muted);
    cursor: not-allowed;
}
/* Выбор канала подтверждения (Email / SMS). Compact pill-row. */
.ml-booking__channel {
    border: 0;
    padding: 0;
    margin: -4px 0 14px;
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}
.ml-booking__channel legend {
    padding: 0;
    font-size: 12px;
    color: var(--ml-muted);
    font-weight: 500;
    margin-right: 4px;
}
.ml-booking__channel-opt {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
    padding: 6px 12px;
    border: 1.5px solid var(--ml-border);
    border-radius: 999px;
    background: #fff;
    font-size: 13px;
    color: var(--ml-fg);
    transition: background .12s, border-color .12s;
}
.ml-booking__channel-opt:hover { background: var(--ml-bg-soft); }
.ml-booking__channel-opt input[type="radio"] {
    appearance: none; -webkit-appearance: none;
    width: 14px; height: 14px; border-radius: 50%;
    border: 1.5px solid var(--ml-border);
    margin: 0;
    position: relative;
    cursor: pointer;
}
.ml-booking__channel-opt input[type="radio"]:checked {
    border-color: var(--ml-accent, #55b043);
}
.ml-booking__channel-opt input[type="radio"]:checked::after {
    content: '';
    position: absolute;
    inset: 2px;
    border-radius: 50%;
    background: var(--ml-accent, #55b043);
}
.ml-booking__channel-opt:has(input:checked) {
    border-color: var(--ml-accent, #55b043);
    background: rgba(85, 176, 67, 0.06);
}

/* Чекбокс «Напомнить за день» — выровнен с легендой формы. */
.ml-booking__check {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 4px 0 16px;
    cursor: pointer;
    font-size: 13px;
    color: var(--ml-fg);
    line-height: 1.35;
}
.ml-booking__check input[type="checkbox"] {
    appearance: none; -webkit-appearance: none;
    width: 18px; height: 18px;
    border: 1.5px solid var(--ml-border);
    border-radius: 4px;
    background: #fff;
    position: relative;
    cursor: pointer;
    flex-shrink: 0;
    margin: 0;
    transition: background .12s, border-color .12s;
}
.ml-booking__check input[type="checkbox"]:checked {
    background: var(--ml-accent, #55b043);
    border-color: var(--ml-accent, #55b043);
}
.ml-booking__check input[type="checkbox"]:checked::after {
    content: '';
    position: absolute;
    left: 4px; top: 1px;
    width: 6px; height: 10px;
    border: solid #fff;
    border-width: 0 2px 2px 0;
    transform: rotate(45deg);
}
.ml-booking__check:hover input[type="checkbox"]:not(:checked) {
    border-color: var(--ml-accent, #55b043);
}

/* Ссылка в legal-тексте — зелёная, как остальные в форме. */
.ml-booking__legal a {
    color: var(--ml-accent, #55b043);
    text-decoration: underline;
    text-underline-offset: 2px;
}
.ml-booking__legal a:hover { text-decoration: none; }
.ml-booking__field { margin-bottom: 12px; }
.ml-booking__field label {
    display: block;
    font-size: 12px;
    color: var(--ml-muted);
    margin-bottom: 6px;
    font-weight: 500;
    letter-spacing: 0.01em;
}
.ml-booking__field input,
.ml-booking__field textarea {
    width: 100%;
    padding: 11px 14px;
    border: 1.5px solid var(--ml-border);
    border-radius: 10px;
    font-size: 14px;
    font-family: inherit;
    background: #fff;
    color: var(--ml-fg);
    transition: border-color 0.15s, box-shadow 0.15s;
}
.ml-booking__field input:focus,
.ml-booking__field textarea:focus {
    outline: none;
    border-color: var(--ml-accent);
    box-shadow: 0 0 0 3px rgba(85, 176, 67, 0.15);
}
.ml-booking__field input::placeholder,
.ml-booking__field textarea::placeholder { color: #9aa0b0; }
.ml-booking__req { color: var(--ml-error); margin-left: 2px; }

/* Optional details */
.ml-booking__optional {
    margin: 4px 0 14px;
    border-top: 1px dashed var(--ml-border);
    padding-top: 12px;
}
.ml-booking__optional summary {
    cursor: pointer;
    font-size: 13px;
    color: var(--ml-accent-hover);
    list-style: none;
    user-select: none;
    padding: 4px 0;
    font-weight: 500;
}
.ml-booking__optional summary::-webkit-details-marker { display: none; }
.ml-booking__optional summary::before {
    content: '+';
    display: inline-block;
    margin-right: 6px;
    transition: transform 0.2s;
    font-weight: 700;
}
.ml-booking__optional[open] summary::before { content: '−'; }
.ml-booking__optional-body { padding-top: 10px; }

.ml-booking__error {
    color: var(--ml-error);
    font-size: 13px;
    margin: 0 0 12px;
    padding: 9px 12px;
    background: rgba(220, 53, 69, 0.10);
    border-radius: 8px;
}
.ml-booking__error:empty { display: none; }
.ml-booking__error[hidden] { display: none; }

/* Подсветка ошибочного поля */
.ml-booking__field--error input,
.ml-booking__field--error textarea {
    border-color: var(--ml-error) !important;
    background: rgba(220, 53, 69, 0.04);
}
.ml-booking__field--error input:focus,
.ml-booking__field--error textarea:focus {
    box-shadow: 0 0 0 3px rgba(220, 53, 69, 0.15) !important;
}
.ml-booking__field--error label {
    color: var(--ml-error);
}
.ml-booking__code-input--error {
    border-color: var(--ml-error) !important;
    background: rgba(220, 53, 69, 0.04);
}

.ml-booking__legal {
    font-size: 11px;
    color: var(--ml-muted);
    text-align: center;
    margin: 10px 0 0;
    line-height: 1.4;
}

.ml-booking__btn {
    display: inline-block;
    padding: 11px 24px;
    border-radius: 28px;
    border: 0;
    font-size: 15px;
    font-family: inherit;
    font-weight: 600;
    cursor: pointer;
    transition: background 0.2s, opacity 0.15s, transform 0.05s;
    text-decoration: none;
    text-align: center;
    line-height: 1.2;
}
.ml-booking__btn:active { transform: translateY(1px); }
.ml-booking__btn--primary { background: var(--ml-accent); color: #fff; }
.ml-booking__btn--primary:hover { background: var(--ml-accent-hover); color: #fff; }
.ml-booking__btn--ghost { background: transparent; color: var(--ml-accent-hover); border: 1.5px solid var(--ml-accent); }
.ml-booking__btn--ghost:hover { background: var(--ml-accent-soft); }
.ml-booking__btn--block { display: block; width: 100%; }
.ml-booking__btn:disabled { opacity: 0.5; cursor: not-allowed; }

/* Code step */
.ml-booking__code-hint {
    text-align: center;
    color: var(--ml-muted);
    font-size: 14px;
    margin: 0 0 16px;
}
.ml-booking__code-hint .ml-booking__code-target {
    color: var(--ml-fg);
    font-weight: 600;
}
.ml-booking__code-input {
    width: 100%;
    padding: 18px 14px;
    font-size: 28px;
    font-weight: 600;
    text-align: center;
    letter-spacing: 0.6em;
    border: 1.5px solid var(--ml-border);
    border-radius: 12px;
    margin-bottom: 8px;
    color: var(--ml-fg);
    transition: border-color 0.15s, box-shadow 0.15s;
}
.ml-booking__code-input:focus {
    outline: none;
    border-color: var(--ml-accent);
    box-shadow: 0 0 0 3px rgba(85, 176, 67, 0.15);
}
.ml-booking__code-expiry {
    text-align: center;
    color: var(--ml-muted);
    font-size: 12px;
    margin: 0 0 14px;
}
.ml-booking__code-resend {
    text-align: center;
    margin-top: 12px;
}
.ml-booking__link {
    background: transparent;
    border: 0;
    color: var(--ml-accent-hover);
    font-family: inherit;
    font-size: 13px;
    cursor: pointer;
    text-decoration: underline;
    text-underline-offset: 3px;
    padding: 4px 8px;
}
.ml-booking__link:disabled { color: var(--ml-muted); cursor: not-allowed; text-decoration: none; }
.ml-booking__cooldown { opacity: 0.7; margin-left: 4px; }

/* Success step */
.ml-booking__step--success { text-align: center; }
.ml-booking__success-icon {
    width: 64px; height: 64px;
    margin: 0 auto 14px;
    color: var(--ml-accent);
    display: flex; align-items: center; justify-content: center;
}
.ml-booking__success-title { color: var(--ml-accent-hover); }
.ml-booking__success-text {
    font-size: 14px;
    color: var(--ml-muted);
    line-height: 1.5;
    margin: 14px 0 8px;
}
.ml-booking__success-text .ml-booking__success-email {
    color: var(--ml-fg);
    font-weight: 600;
}
.ml-booking__success-text--muted {
    font-size: 12px;
    color: var(--ml-muted);
    margin: 6px 0 18px;
}
.ml-booking__success-phone {
    color: var(--ml-accent-hover);
    font-weight: 600;
    text-decoration: none;
    white-space: nowrap;
}
.ml-booking__success-phone:hover { text-decoration: underline; }

@media (max-width: 600px) {
    .ml-booking__modal-window { padding: 24px 18px 18px; border-radius: 14px; }
    .ml-booking__modal-title { font-size: 18px; }
    .ml-booking__row { grid-template-columns: 1fr; gap: 0; }
    .ml-booking__code-input { font-size: 24px; padding: 14px; }
}

@media (max-width: 600px) {
    .ml-booking { padding: 14px; }
    .ml-booking__filter { flex: 1 1 100%; }
    .ml-booking__title { font-size: 16px; }
}

/* === Inline header (services detail page) ===
   Заголовок и цена — на белом фоне, в одну строку (заголовок слева, цена справа).
   Ниже — узкая бледно-зелёная плашка с подпунктами страницы (TOC). */
.ml-services-header {
    margin: 0 0 24px;
}
.ml-services-header__top {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 24px;
    margin: 0 0 14px;
}
.ml-services-header__title {
    margin: 0;
    font-family: 'Manrope', 'Source Sans 3', sans-serif;
    font-size: 28px;
    line-height: 1.15;
    font-weight: 800;
    color: #202C22;
    flex: 1 1 auto;
    min-width: 0;
}
.ml-services-header__price {
    flex: 0 0 auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 8px 16px;
    border-radius: 999px;
    background: #ECF5E7;
    font-family: 'Manrope', 'Source Sans 3', sans-serif;
    font-size: 18px;
    font-weight: 700;
    line-height: 1.2;
    color: #2e7d32;
    white-space: nowrap;
}
.ml-services-header__price .hint {
    font-size: 12px;
    margin-left: 2px;
    vertical-align: middle;
    color: #4a7042;
}
.ml-services-header__toc {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 6px;
    background: transparent;
    padding: 0;
    margin-top: 20px;
    border-radius: 0;
    line-height: 1.3;
}
.ml-services-header__toc-item {
    display: inline-flex;
    align-items: center;
    padding: 6px 12px;
    border-radius: 999px;
    background: #ECF5E7;
    color: #4a7042;
    font-size: 13px;
    font-weight: 500;
    text-decoration: none;
    transition: background .15s, color .15s;
    white-space: nowrap;
}
.ml-services-header__toc-item:hover {
    background: #DCEAD3;
    color: #2e7d32;
    text-decoration: none;
}
@media (max-width: 991px) {
    .ml-services-header { margin: 0 0 18px; }
    .ml-services-header__top {
        flex-direction: column;
        align-items: flex-start;
        gap: 6px;
        margin-bottom: 12px;
    }
    .ml-services-header__title { font-size: 22px; }
    .ml-services-header__price { font-size: 16px; padding: 6px 14px; }
    .ml-services-header__toc {
        gap: 5px;
    }
    .ml-services-header__toc-item { font-size: 13px; padding: 6px 11px; }
}

/* === Кастомные пикеры (service / center) ===
   Заменяют native <select>: длинные мед-названия + цены/статусы
   не помещаются в системный picker iOS. Скрытый <select> остаётся
   как state-mirror; UI-логика — здесь и в JS bindPicker. */
.ml-booking__picker {
    position: relative;
    width: 100%;
    box-sizing: border-box;
}
.ml-booking__picker-trigger {
    width: 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    height: auto;
    min-height: 44px;
    padding: 6px 14px;
    border: 1px solid var(--ml-border);
    border-radius: 10px;
    background: #fff;
    color: var(--ml-fg);
    font-family: inherit;
    font-size: 13px;
    line-height: 1.25;
    cursor: pointer;
    text-align: left;
    box-sizing: border-box;
    touch-action: manipulation;
    -webkit-tap-highlight-color: transparent;
    transition: border-color .15s, box-shadow .15s;
}
.ml-booking__picker-trigger:hover { border-color: #c8d6cd; }
.ml-booking__picker-trigger:focus {
    outline: none;
    border-color: var(--ml-accent);
    box-shadow: 0 0 0 3px rgba(85, 176, 67, 0.18);
}
.ml-booking__picker--open .ml-booking__picker-trigger { border-color: var(--ml-accent); }
.ml-booking__picker--open .ml-booking__picker-trigger svg { transform: rotate(180deg); }
.ml-booking__picker-trigger svg { flex: 0 0 auto; transition: transform .15s; color: var(--ml-muted); }
.ml-booking__picker-trigger-content {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    min-width: 0;
    flex: 1 1 auto;
}
.ml-booking__picker-trigger-title {
    width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 13px;
    font-weight: 500;
    line-height: 1.25;
}
.ml-booking__picker-trigger-meta {
    font-size: 11px;
    color: var(--ml-muted);
    line-height: 1.2;
}

/* Список */
.ml-booking__picker-list {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    right: 0;
    z-index: 100;
    margin: 0;
    padding: 6px;
    list-style: none;
    background: #fff;
    border: 1px solid var(--ml-border);
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(32, 44, 34, 0.10);
    max-height: 320px;
    overflow-y: auto;
    overscroll-behavior: contain;
    box-sizing: border-box;
}
/* Не используем display:flex+gap — это перебило бы display:none от атрибута [hidden]
   (специфичность класса > [hidden]). Поэтому раздвигаем margin'ом на самих item'ах. */
.ml-booking__picker-list .ml-booking__picker-item + .ml-booking__picker-item {
    margin-top: 2px;
}
/* Search-поле внутри dropdown'а (universal-mode, ~200 услуг). Виден когда picker открыт,
   sticky-позиционирование удерживает его сверху при скролле длинного списка. */
.ml-booking__picker-search { display: none; }
.ml-booking__picker--open .ml-booking__picker-search {
    display: flex;
    align-items: center;
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    right: 0;
    z-index: 101;
    height: 60px;
    background: #fff;
    padding: 8px;
    border: 1px solid var(--ml-border);
    border-bottom: 0;
    border-radius: 10px 10px 0 0;
    box-sizing: border-box;
}
.ml-booking__picker-search input {
    width: 100%;
    padding: 10px 14px 10px 40px;
    border: 1.5px solid var(--ml-border);
    border-radius: 8px;
    font-size: 14px;
    box-sizing: border-box;
    color: var(--ml-fg);
    background: #fff url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='%236b7570' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><circle cx='11' cy='11' r='7'/><line x1='21' y1='21' x2='16.65' y2='16.65'/></svg>") no-repeat 12px center;
}
.ml-booking__picker-search input:focus {
    outline: 0;
    border-color: var(--ml-accent, #55b043);
}
/* Когда есть search — сдвигаем список ровно на высоту поиск-панели (60px),
   чтобы чипы категорий не подлезали под поиск. */
.ml-booking__picker--open .ml-booking__picker-search ~ .ml-booking__picker-list {
    top: calc(100% + 4px + 60px);
    border-top: 0;
    border-radius: 0 0 10px 10px;
    padding-top: 4px;
}
/* Заголовок группы категорий (Приёмы врачей / Анализы / УЗИ / …). */
.ml-booking__picker-group {
    padding: 8px 10px 4px;
    margin-top: 6px;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.06em;
    color: var(--ml-muted);
    pointer-events: none;
}
.ml-booking__picker-group:first-child { margin-top: 0; }
/* Заголовок с цветом категории — тонируем текст и показываем цветную точку. */
.ml-booking__picker-group[style] { color: var(--cat-ink); }
.ml-booking__picker-group-dot {
    display: inline-block;
    width: 8px;
    height: 8px;
    margin-right: 6px;
    border-radius: 50%;
    background: var(--cat);
    vertical-align: middle;
}

/* Цветные чипы-фильтры по категориям услуг (universal-mode) — sticky-строка над списком. */
.ml-booking__picker-cats {
    position: sticky;
    top: 0;
    z-index: 6;
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin: 0 0 6px;
    padding: 2px 0 8px;
    background: #fff;
    border-bottom: 1px solid var(--ml-border);
}
.ml-booking__picker-cat {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 5px 10px;
    border: 1.5px solid var(--cat-mid);
    border-radius: 999px;
    background: var(--cat-soft);
    color: var(--cat-ink);
    font-family: inherit;
    font-size: 12px;
    font-weight: 600;
    line-height: 1.25;
    cursor: pointer;
    white-space: nowrap;
    -webkit-tap-highlight-color: transparent;
    transition: background .12s, border-color .12s, color .12s, transform .07s;
}
.ml-booking__picker-cat:hover { border-color: var(--cat); }
.ml-booking__picker-cat:active { transform: scale(.95); }
.ml-booking__picker-cat--active {
    background: var(--cat);
    border-color: var(--cat);
    color: #fff;
}
.ml-booking__picker-cat-count {
    font-size: 11px;
    font-weight: 700;
    opacity: .65;
}
.ml-booking__picker-cat--active .ml-booking__picker-cat-count { opacity: .9; }
/* Пустой стейт поиска. */
.ml-booking__picker-empty {
    padding: 16px 12px;
    color: var(--ml-muted);
    font-size: 13px;
    text-align: center;
}
/* Mobile-sheet: при ≤640px picker открывается на весь экран (sticky search + scroll по items). */
@media (max-width: 640px) {
    /* Полноэкранный bottom-sheet. !important обязателен — иначе universal-правило
       `.ml-booking__picker-search ~ .ml-booking__picker-list { top: calc(100% + …) }`
       (специфичность 0,3,0) перебивает мобильное, и при position:fixed список
       уезжает на ~100vh вниз за экран (виден только тёмный backdrop). */
    .ml-booking__picker--open .ml-booking__picker-list {
        position: fixed !important;
        inset: 56px 0 0 0 !important;
        max-height: none !important;
        border: 0 !important;
        border-radius: 14px 14px 0 0 !important;
        padding: 6px 12px 24px !important;
        box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.18);
        z-index: 2147483600;
    }
    /* Поиск — фиксируем под 56px-полосой backdrop'а (тап по полосе закрывает sheet). */
    .ml-booking__picker--open .ml-booking__picker-search {
        position: fixed !important;
        top: 56px;
        left: 0;
        right: 0;
        z-index: 2147483601;
        height: 64px;
        margin: 0 !important;
        padding: 10px 12px !important;
        display: flex;
        align-items: center;
        background: #fff;
        border: 0 !important;
        border-radius: 14px 14px 0 0 !important;
    }
    /* Когда есть поиск — список начинается ниже него (56px backdrop + 64px поиск). */
    .ml-booking__picker--open .ml-booking__picker-search ~ .ml-booking__picker-list {
        inset: 120px 0 0 0 !important;
        border-radius: 0 !important;
    }
    /* Backdrop, чтобы тапы вне закрывали picker. CSS-only через overlay-фикс. */
    .ml-booking__picker--open::before {
        content: '';
        position: fixed;
        inset: 0;
        background: rgba(15, 22, 40, 0.4);
        z-index: 2147483500;
    }
}

/* Waiting-state в universal-mode (/appointment/): пока услуга не выбрана —
   скрываем филтры центра/врача, календарь, summary и submit. Service-picker остаётся. */
.ml-booking--awaiting-service .ml-booking__filter--center,
.ml-booking--awaiting-service .ml-booking__filter--doctor,
.ml-booking--awaiting-service .ml-booking__filter--visit-type,
.ml-booking--awaiting-service .ml-booking__date-trigger,
.ml-booking--awaiting-service .ml-booking__calendar,
.ml-booking--awaiting-service .ml-booking__slots,
.ml-booking--awaiting-service .ml-booking__time-of-day,
.ml-booking--awaiting-service .ml-booking__slots-status,
.ml-booking--awaiting-service .ml-booking__init-loader { display: none !important; }
.ml-booking--awaiting-service .ml-booking__filter--service { margin-bottom: 0; }
.ml-booking--awaiting-service::after {
    content: 'Выберите услугу, чтобы продолжить.';
    display: block;
    padding: 14px 16px;
    margin-top: 8px;
    text-align: center;
    color: var(--ml-muted);
    font-size: 13px;
    background: var(--ml-bg-soft, #f3f7f2);
    border-radius: 10px;
}
.ml-booking__picker-item {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 11px 12px;
    border-radius: 6px;
    cursor: pointer;
    color: var(--ml-fg);
    transition: background .12s;
    position: relative;
}
.ml-booking__picker-item:hover { background: var(--ml-bg-soft); }
.ml-booking__picker-item--disabled {
    cursor: not-allowed;
    color: var(--ml-muted);
}
.ml-booking__picker-item--disabled:hover { background: transparent; }
.ml-booking__picker-item-text {
    display: flex;
    flex-direction: column;
    gap: 1px;
    min-width: 0;
    flex: 1 1 auto;
}
.ml-booking__picker-item-title {
    font-size: 13px;
    font-weight: 500;
    line-height: 1.25;
    white-space: normal;
    word-break: break-word;
}
.ml-booking__picker-item-meta {
    font-size: 11px;
    color: var(--ml-muted);
    line-height: 1.2;
}
.ml-booking__picker-item-badge {
    flex: 0 0 auto;
    align-self: center;
    padding: 3px 9px;
    border-radius: 999px;
    background: var(--ml-bg-soft);
    color: var(--ml-muted);
    font-size: 11px;
    font-weight: 500;
    line-height: 1.4;
    white-space: nowrap;
    letter-spacing: 0.01em;
}
/* Мягкие тона: status-индикатор, а не «громкий» бейдж. */
.ml-booking__picker-item-badge--ok {
    background: rgba(85, 176, 67, 0.08);
    color: #6a8f5e;
}
.ml-booking__picker-item-badge--nope {
    background: #F4F4F4;
    color: #898F9A;
}

/* Trigger meta для центра — небольшой бейдж справа от названия */
.ml-booking__picker--center .ml-booking__picker-trigger-meta {
    color: var(--ml-error);
    font-weight: 500;
}

/* === +1pt по тексту виджета (фидбек: мелковато) === */
.ml-booking__title { font-size: 19px; }
.ml-booking__subtitle { font-size: 14px; }
.ml-booking__filter label { font-size: 13px; }
.ml-booking__filter input,
.ml-booking__filter select { font-size: 15px; }
.ml-booking__picker-trigger { font-size: 14px; }
.ml-booking__picker-trigger-title { font-size: 14px; }
.ml-booking__picker-trigger-meta { font-size: 12px; }
.ml-booking__picker-item-title { font-size: 14px; }
.ml-booking__picker-item-meta { font-size: 12px; }
.ml-booking__picker-item-badge { font-size: 12px; }
.ml-booking__visit-type label { font-size: 14px; }
.ml-booking__time-chip { font-size: 14px; }
.ml-booking__date-trigger { font-size: 14px; }
.ml-booking__date-trigger-label { font-size: 14px; }
.ml-booking__doctor-trigger { font-size: 14px; }
.ml-booking__doctor-trigger-label { font-size: 14px; }
.ml-booking__doctor-name { font-size: 14px; }
.ml-booking__doctor-specialty { font-size: 12px; }
.ml-booking__slot { font-size: 15px; }
.ml-booking__slot-time { font-size: 15px; }
.ml-booking__slot-doctor,
.ml-booking__slot-meta { font-size: 13px; }
.ml-booking__slots-status { font-size: 14px; }
.ml-booking__cal-day { font-size: 14px; }
.ml-booking__cal-title { font-size: 15px; }
.ml-booking__cal-weekdays span { font-size: 12px; }
.ml-booking__field label { font-size: 13px; }
.ml-booking__field input,
.ml-booking__field textarea,
.ml-booking__field select { font-size: 15px; }
.ml-booking__legal { font-size: 13px; }
.ml-booking__optional summary { font-size: 14px; }
.ml-booking__btn { font-size: 15px; }
.ml-booking__code-input { font-size: 30px; }
.ml-booking__code-hint { font-size: 14px; }
.ml-booking__code-expiry { font-size: 13px; }
.ml-booking__success-text { font-size: 15px; }

/* +1pt оказалось мало — поднимаем заметнее с !important чтобы не перекрывалось media-query'ями. */
.ml-booking__picker-trigger,
.ml-booking__picker-trigger-title { font-size: 15px !important; }
.ml-booking__picker-trigger-meta { font-size: 13px !important; }
.ml-booking__picker-item-title { font-size: 15px !important; }
.ml-booking__picker-item-meta { font-size: 13px !important; }
.ml-booking__picker-item-badge { font-size: 12px !important; }
.ml-booking__filter label { font-size: 13px !important; }
.ml-booking__filter input,
.ml-booking__filter select { font-size: 15px !important; }
.ml-booking__visit-type label { font-size: 14px !important; }
.ml-booking__time-chip { font-size: 14px !important; }
.ml-booking__date-trigger,
.ml-booking__date-trigger-label { font-size: 15px !important; }
.ml-booking__doctor-trigger,
.ml-booking__doctor-trigger-label { font-size: 15px !important; }
.ml-booking__doctor-name { font-size: 14px !important; }
.ml-booking__doctor-specialty { font-size: 12px !important; }
.ml-booking__title { font-size: 19px !important; }
.ml-booking__subtitle { font-size: 14px !important; }

/* Единый font-weight для всех селектов/триггеров фильтров (Услуга, Центр, Специалист, Дата). */
.ml-booking__picker-trigger,
.ml-booking__picker-trigger-title,
.ml-booking__date-trigger,
.ml-booking__date-trigger-label,
.ml-booking__doctor-trigger,
.ml-booking__doctor-trigger-label,
.ml-booking__filter input,
.ml-booking__filter select {
    font-weight: 500 !important;
}

/* Каждый фильтр на свою строку (Услуга, Центр и т.д.) — без 2-колонок. */
.ml-booking__filter { flex: 1 1 100% !important; }

/* === Banner TOC pills === — пилюли навигации внутри баннера (на section-страницах) */
.ml-banner-toc {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 14px;
    line-height: 1.3;
}
.ml-banner-toc__item {
    display: inline-flex;
    align-items: center;
    padding: 6px 12px;
    border-radius: 999px;
    background: #ddefd9;
    color: #2e6b2c;
    font-size: 13px;
    font-weight: 500;
    text-decoration: none;
    transition: background .15s, color .15s;
    white-space: nowrap;
}
.ml-banner-toc__item:hover {
    background: #cbe6c4;
    color: #1e5a1e;
    text-decoration: none;
}
@media (max-width: 991px) {
    .ml-banner-toc { gap: 5px; margin-top: 12px; }
    .ml-banner-toc__item { font-size: 12.5px; padding: 6px 11px; }
}

/* Анализы с виджетом: правый sidebar убран, контент должен занимать 100% колонки.
   Иначе .ml-services-wrap (74%) оставляет лишний пустой блок справа. */
.ml-accordion__section .ml-services-wrap { width: 100% !important; max-width: 100% !important; }

/* === Replace "Записаться"-buttons в списках услуг → arrow link на детальную === */
/* Отступ цены от стрелки. Кост-таблица и section-list используют flex на правой части. */
.ml-cost__right,
.ml-med-service-center-items__price,
.ml-med-service-table__item-right {
    display: flex;
    align-items: center;
    gap: 12px;
}
.ml-service-go {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: #ECF5E7;
    color: #2e7d32;
    flex-shrink: 0;
    text-decoration: none;
    transition: background .15s, color .15s, transform .15s;
}
.ml-service-go:hover {
    background: #55B043;
    color: #ffffff;
    text-decoration: none;
    transform: translateX(2px);
}
.ml-service-go svg { display: block; }

/* Сжатие таблицы каталога с 4 колонок (title|inf|price|btn) до 2-3 колонок без кнопок.
   Старый CSS жёстко фиксировал nth-child(2)/(3)/(4) шириной 230px/230px/142px —
   с двумя колонками цена попадает в узкую колонку, а слева остаётся огромный «висяк».
   Цену прижимаем вправо, забираем фиксированную ширину, оставляем симметричный gap.
   Исключаем приёмы врачей (.table-service--doc) — там 2 одинаковых ценовых колонки. */
/* ТОЛЬКО десктоп (>=801px): эти правила сжимают 2-3-колоночный каталог. На мобильном
   (<=800px) таблица --sm перестраивается в stacked-строку (title сверху, deadline 40% + цена 50%),
   и width:auto/1% здесь ломали её (спецсифичность выше nth-child) — цена уезжала в центр,
   deadline схлопывался. Поэтому оборачиваем в min-width:801px (моб. каталог УЗИ/Диагн./Проц.
   получает свою верстку из [data-type-exam]-правил ниже). */
@media (min-width: 801px) {
    .table-service:not(.table-service--doc) tr td.table-service__bold {
        width: auto;
        white-space: nowrap;
        text-align: right;
        padding-right: 16px;
        padding-left: 24px;
    }
    .table-service:not(.table-service--doc) tr td.table-service__heading {
        padding-left: 16px;
        padding-right: 12px;
    }
    /* В 3-колоночном случае (Анализы/Процедуры) средняя ячейка с deadline/PRICE_INFO остаётся узкой,
       но сжимается под содержимое, а не торчит на 230px. */
    .table-service:not(.table-service--doc) tr td:nth-child(2):not(.table-service__bold) {
        width: 1%;
        white-space: nowrap;
        padding: 15px 12px 10px;
    }
}

/* Приёмы врачей: 3 колонки — название + Первичный + Повторный (стрелки и Записаться убраны).
   Фикс. ширина ценовых колонок, чтобы шапка совпадала с данными и не «виляла». */
.table-service--doc { table-layout: auto; }
.table-service--doc th.ml-table-col-price,
.table-service--doc td.ml-table-col-price {
    width: 180px;
    text-align: right;
    padding-left: 16px;
    padding-right: 16px;
    white-space: nowrap;
}
.table-service--doc th.ml-table-col-price { color: #898f9a; font-weight: 400; }
.table-service--doc td.table-service__heading { padding-left: 16px; padding-right: 12px; }
.table-service--doc td.ml-table-col-price:last-child { padding-right: 16px; }
.table-service--doc .table-mobile-heading { display: none; }
@media (max-width: 640px) {
    .table-service--doc th.ml-table-col-price { display: none; }
    .table-service--doc th.ml-table-col-price:first-of-type ~ th { display: none; }
    .table-service--doc td.ml-table-col-price { width: auto; padding-left: 8px; padding-right: 8px; }
    .table-service--doc .table-mobile-heading {
        display: block;
        font-size: 11px;
        color: #898f9a;
        font-weight: 400;
        margin-bottom: 2px;
    }
}

/* На десктопе меню разделов (.ml-navbar) прижимаем вправо к строке заголовка.
   position:absolute — чтобы не влиять на поток других элементов (search, чипы и т.д.).
   Координата top подобрана по высоте breadcrumb (~20px + 16px margin) — для типовых
   страниц services/* совпадает с базлайном h1. */
@media (min-width: 992px) {
    .ml-main-wrapper { position: relative; }
    .ml-main-wrapper > .ml-navbar {
        position: absolute;
        left: auto;
        /* Прижимаем правый край меню к правому краю общего .container (max-width: 1420, centered).
           Формула: расстояние от правого края viewport до правого края контейнера = (vw - 1420) / 2,
           клампим max(...) на узких экранах. Работает независимо от того, какой ancestor является
           positioned (viewport или .ml-main-wrapper), поскольку использует вычисленные единицы. */
        right: max(0px, calc((100vw - 1420px) / 2 + 16px));
        top: 36px;
        margin: 0;
        width: auto;
        display: flex;
        align-items: center;
    }
    .ml-main-wrapper > .ml-navbar .ml-nav,
    .ml-main-wrapper > .ml-navbar .ml-navigation__link {
        width: auto;
        margin-bottom: 0;
        border-bottom: 0;
        flex-wrap: nowrap;
        margin-left: auto;
    }
    .ml-main-wrapper > .ml-navbar .ml-navigation__acceptance:last-child {
        padding-right: 0;
        margin-right: 0;
    }
}

/* Блок «Рекомендуемые услуги»: на десктопе раскладываем сами секции
   (Приемы врачей / Процедуры / Анализы / Акции / ...) в 2 колонки.
   Сами карточки секций (белый фон, аккордеон со стрелкой) — оставляем как было. */
@media (min-width: 992px) {
    .ml-med-service {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        column-gap: 32px;
        row-gap: 24px;
        align-items: start;
    }
    .ml-med-service > h2 { grid-column: 1 / -1; margin-bottom: 0; }
    .ml-med-service > .ml-med-service-center {
        min-width: 0;
        margin-bottom: 0;
    }
    .ml-med-service > .ml-med-service-center:only-of-type { grid-column: 1 / -1; }
}

/* Старая цена в списке Акций — серая, перечёркнута. Использует существующий
   layout .ml-med-service-center-items__price, добавляется только модификатор. */
.ml-med-service-center-items__price-old {
    color: #898f9a;
    text-decoration: line-through;
    font-weight: 400 !important;
}

/* Tooltip-«i» возле названий услуг: 22px было слишком крупно — уменьшаем до 16px.
   После уменьшения иконка сидит на baseline; смещаем её на пару пикселей вверх. */
.hint.hint--main,
.hint.hint--alert {
    width: 16px !important;
    height: 16px !important;
    font-size: 11px !important;
    line-height: 16px !important;
    margin-left: 6px;
    margin-right: 5px;
    position: relative;
    top: -3px;
}
/* Красный вариант — для предупреждений (например, у Процедур: "стоимость зависит от метода"). */
.hint.hint--alert {
    background-color: #e74c3c !important;
    color: #fff !important;
}

/* Поиск по каталогу: при активном фильтре multicolumn ломает остатки таблиц —
   возвращаем одну колонку до сброса фильтра. */
@media (min-width: 992px) {
    .ml-content > .ml-section-wrapper.is-filtering {
        column-count: 1 !important;
    }
}

/* === Мобильная раскладка строки каталога ===
   Только для УЗИ/Диагностики/Процедур — для них убрали кнопки записаться, осталось title + цена,
   и логично держать их в одной строке. Анализы, забор материала и приёмы врачей оставляем
   как было (свои сложные layout, не трогаем). */
@media (max-width: 800px) {
    .ml-section-wrapper[data-type-exam="ULTRASOUND"] .table-service tr,
    .ml-section-wrapper[data-type-exam="DIAGNOSTIC"] .table-service tr,
    .ml-section-wrapper[data-type-exam="PROCEDURE"] .table-service tr {
        padding: 0;
        align-items: baseline;
    }
    .ml-section-wrapper[data-type-exam="ULTRASOUND"] .table-service tr td.table-service__heading,
    .ml-section-wrapper[data-type-exam="DIAGNOSTIC"] .table-service tr td.table-service__heading,
    .ml-section-wrapper[data-type-exam="PROCEDURE"] .table-service tr td.table-service__heading {
        flex: 1 1 0;
        min-width: 0;
        width: auto;
        order: 1;
        padding: 14px 12px 14px 0;
        font-size: 17px;
        line-height: 1.35;
    }
    .ml-section-wrapper[data-type-exam="ULTRASOUND"] .table-service tr td.table-service__heading a,
    .ml-section-wrapper[data-type-exam="DIAGNOSTIC"] .table-service tr td.table-service__heading a,
    .ml-section-wrapper[data-type-exam="PROCEDURE"] .table-service tr td.table-service__heading a {
        word-break: break-word;
    }
    .ml-section-wrapper[data-type-exam="ULTRASOUND"] .table-service tr td.table-service__bold,
    .ml-section-wrapper[data-type-exam="DIAGNOSTIC"] .table-service tr td.table-service__bold,
    .ml-section-wrapper[data-type-exam="PROCEDURE"] .table-service tr td.table-service__bold {
        flex: 0 0 auto;
        width: auto;
        order: 2;
        padding: 14px 0 14px 12px;
        font-size: 18px;
        text-align: right;
        white-space: nowrap;
    }
    /* Средняя ячейка (PRICE_INFO для Процедур) — отдельная подстрока под title+price, мелким серым */
    .ml-section-wrapper[data-type-exam="PROCEDURE"] .table-service tr td:nth-child(2):not(.table-service__bold) {
        flex: 1 0 100%;
        width: 100%;
        order: 3;
        padding: 0 0 12px;
        font-size: 13px;
        line-height: 1.35;
        color: #898f9a;
        white-space: normal;
    }
}

/* При скролле (sticky-режим .ml-wrapper-active) main.css прячет .ml-header__info display:none,
   из-за чего пропадает телефон в шапке. Оставляем только сам телефон-ссылку, скрывая часы (<p>). */
@media (min-width: 992px) {
    .ml-wrapper-active .ml-header__info {
        display: flex !important;
        align-items: center;
    }
    .ml-wrapper-active .ml-header__info > p { display: none; }
}

/* Анализы (.table-service--sm): фиксируем ширины «коротких» колонок (срок / цена / стрелка),
   а название (col 1) забирает весь оставшийся остаток. table-layout: fixed гарантирует, что
   во всех таблицах на странице ширины колонок совпадают (не прыгают). */
@media (min-width: 992px) {
    .table-service.table-service--sm { table-layout: fixed; width: 100%; }
    /* col 1 (heading) — без width, заберёт всю свободную ширину */
    /* col 2 — срок выполнения («1 календарный день» — длинный текст). */
    .table-service.table-service--sm tr td:nth-child(2),
    .table-service.table-service--sm tr th:nth-child(2) {
        width: 200px;
        white-space: nowrap;
        padding-right: 16px;
    }
    /* col 3 — цена (бейдж «АКЦИЯ» + старая перечёркнутая + новая цена) */
    .table-service.table-service--sm tr td:nth-child(3),
    .table-service.table-service--sm tr th:nth-child(3) {
        width: 235px;
        text-align: right;
        padding-right: 16px;
        white-space: nowrap;
    }
    /* col 4 — кнопка «+» / стрелка */
    .table-service.table-service--sm tr td:nth-child(4),
    .table-service.table-service--sm tr th:nth-child(4) {
        width: 56px;
    }
    /* Заголовки + перенос длинных названий внутри col 1 */
    .table-service.table-service--sm tr td.table-service__heading {
        word-wrap: break-word;
        overflow-wrap: break-word;
    }
}

/* Цены в списках/таблицах услуг — приводим к стилю .table-service__bold (как на УЗИ/Анализах):
   21px / weight 600, не Manrope, не 700. */
.ml-med-service-center-items__price p,
.ml-cost__price,
.ml-med-service-table__item-value,
.ml-med-service-table__item-price-long .ml-med-service-table__item-value {
    font-weight: 600;
    font-size: 21px;
    line-height: 24px;
    color: #202C22;
}
@media (max-width: 991px) {
    .ml-service-go { width: 34px; height: 34px; }
    .ml-med-service-center-items__price p,
    .ml-cost__price,
    .ml-med-service-table__item-value { font-size: 18px; line-height: 22px; }
}

/* Расширенный блок справа в таблице цен: цена в выбранном центре + бейдж + цены в других. */
.ml-cost__right { gap: 12px; }
.ml-cost__meta {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 4px;
    margin-right: 4px;
    line-height: 1.2;
}
.ml-cost__meta-here {
    font-weight: 700;
    font-size: 14px;
    color: #2e6b2c;
    font-family: 'Manrope', 'Source Sans 3', sans-serif;
    letter-spacing: -0.01em;
}
.ml-cost__meta-other {
    font-size: 11px;
    color: #898F9A;
    white-space: nowrap;
}
.ml-cost__badge {
    display: inline-block;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 11px;
    font-weight: 500;
    line-height: 1.4;
    white-space: nowrap;
}
.ml-cost__badge--ok   { background: rgba(85, 176, 67, 0.10); color: #6a8f5e; }
.ml-cost__badge--nope { background: #F4F4F4; color: #898F9A; }
@media (max-width: 767px) {
    .ml-cost__meta { font-size: 11px; }
    .ml-cost__meta-here { font-size: 13px; }
}

/* === 3-колоночная таблица цен ===
   Bitrix-композит не позволяет SSR-цены в выбранном филиале → JS подставляет.
   Фиксированные ширины колонок: layout не «прыгает» при подмене текста. */
.ml-cost--cols .ml-cost__head,
.ml-cost--cols .ml-cost__item {
    display: grid;
    grid-template-columns: minmax(0, 1fr) 160px 180px 44px;
    column-gap: 16px;
    align-items: center;
}
.ml-cost--cols .ml-cost__head {
    padding: 8px 0 10px;
    border-bottom: 1px solid #e6ebe6;
    font-size: 12px;
    color: #898F9A;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}
.ml-cost--cols .ml-cost__head-cell--others,
.ml-cost--cols .ml-cost__head-cell--here {
    text-align: right;
}
/* Шапка содержит только 3 ячейки (без title), привязываем явно к колонкам 2-4,
   иначе grid auto-flow складывает их со 1-й колонки и они уезжают влево. */
.ml-cost--cols .ml-cost__head-cell--others { grid-column: 2; }
.ml-cost--cols .ml-cost__head-cell--here   { grid-column: 3; }
.ml-cost--cols .ml-cost__head-cell--arrow  { grid-column: 4; }
.ml-cost--cols .ml-cost__head-cell--here {
    color: #2e6b2c;
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0;
    font-size: 13px;
}
.ml-cost--cols .ml-cost__item {
    flex-wrap: nowrap;
    padding: 16px 0;
}
.ml-cost--cols .ml-cost__left {
    width: auto;
    min-width: 0;
}
.ml-cost--cols .ml-cost__col {
    min-width: 0;
    text-align: right;
    line-height: 1.25;
    font-family: 'Manrope', 'Source Sans 3', sans-serif;
    letter-spacing: -0.01em;
}
.ml-cost--cols .ml-cost__col--others {
    font-weight: 500;
    font-size: 14px;
    color: #6b7570;
    white-space: nowrap;
}
.ml-cost--cols .ml-cost__col--here {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 4px;
}
.ml-cost--cols .ml-cost__price-here {
    font-weight: 800;
    font-size: 18px;
    color: #202C22;
    white-space: nowrap;
    line-height: 1.1;
}
.ml-cost--cols .ml-cost__col--here .ml-cost__badge { font-size: 11px; }
.ml-cost--cols .ml-cost__col--arrow {
    display: flex;
    justify-content: flex-end;
    align-items: center;
}

@media (max-width: 991px) {
    .ml-cost--cols .ml-cost__head,
    .ml-cost--cols .ml-cost__item {
        grid-template-columns: minmax(0, 1fr) 120px 140px 40px;
        column-gap: 12px;
    }
    .ml-cost--cols .ml-cost__price-here { font-size: 16px; }
}

@media (max-width: 640px) {
    /* На мобильных: заголовок строки занимает первую строку целиком,
       цены — вторую. Стрелка скрыта (по тапу на title всё равно ведёт на детальную). */
    .ml-cost--cols .ml-cost__head { display: none; }
    .ml-cost--cols .ml-cost__item {
        grid-template-columns: 1fr 1fr;
        grid-template-areas:
            "title title"
            "others here";
        row-gap: 6px;
        column-gap: 10px;
        padding: 14px 0;
    }
    .ml-cost--cols .ml-cost__left { grid-area: title; }
    .ml-cost--cols .ml-cost__col--others { grid-area: others; text-align: left; font-size: 12.5px; }
    .ml-cost--cols .ml-cost__col--here   { grid-area: here; flex-direction: row; align-items: baseline; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
    .ml-cost--cols .ml-cost__col--arrow  { display: none; }
    .ml-cost--cols .ml-cost__price-here { font-size: 15px; }
    /* Подпись "Другие филиалы" перед значением, чтобы было понятно без шапки */
    .ml-cost--cols .ml-cost__col--others::before {
        content: "Другие: ";
        color: #898F9A;
        font-weight: 400;
    }
}

/* Каталог УЗИ/Диагностика/Процедуры — на десктопе ряды сильно укоротились
   (убрали "Записаться"), уплотняем в 2 колонки. column-count само балансирует,
   а break-inside: avoid не даёт разорвать секцию между колонками.
   Анализы и приёмы врачей оставляем в одну колонку (data-type-exam отсутствует
   на странице врачей, для ANALYZE явно не включён). */
@media (min-width: 992px) {
    .ml-content > .ml-section-wrapper[data-type-exam="ULTRASOUND"],
    .ml-content > .ml-section-wrapper[data-type-exam="DIAGNOSTIC"],
    .ml-content > .ml-section-wrapper[data-type-exam="PROCEDURE"],
    .ml-content > .ml-section-wrapper[data-type-exam="MATERIAL"] {
        column-count: 2;
        column-gap: 40px;
    }
    .ml-content > .ml-section-wrapper[data-type-exam="ULTRASOUND"] .ml-analysis,
    .ml-content > .ml-section-wrapper[data-type-exam="DIAGNOSTIC"] .ml-analysis,
    .ml-content > .ml-section-wrapper[data-type-exam="PROCEDURE"] .ml-analysis,
    .ml-content > .ml-section-wrapper[data-type-exam="MATERIAL"] .ml-analysis {
        break-inside: avoid;
        -webkit-column-break-inside: avoid;
        page-break-inside: avoid;
        margin-bottom: 32px;
    }
    .ml-content > .ml-section-wrapper[data-type-exam="ULTRASOUND"] .ml-analysis:last-child,
    .ml-content > .ml-section-wrapper[data-type-exam="DIAGNOSTIC"] .ml-analysis:last-child,
    .ml-content > .ml-section-wrapper[data-type-exam="PROCEDURE"] .ml-analysis:last-child,
    .ml-content > .ml-section-wrapper[data-type-exam="MATERIAL"] .ml-analysis:last-child {
        margin-bottom: 32px;
    }
}

/* === Шапка: вертикальное центрирование всех элементов в правой части. === */
.ml-header__info { align-items: center; }
.ml-header__control { display: flex; align-items: center; }

/* === Кнопка «Записаться онлайн» в шапке (desktop) + в sidebar (mobile). === */
.ml-header__book-btn {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    padding: 12px 22px;
    margin-left: 14px;
    border-radius: 999px;
    font-family: 'Manrope', 'Source Sans 3', sans-serif;
    font-weight: 600;
    font-size: 15px;
    line-height: 1;
    color: #fff !important;
    background: var(--ml-accent, #55b043);
    border: 1.5px solid var(--ml-accent, #55b043);
    text-decoration: none !important;
    white-space: nowrap;
    transition: background .12s, border-color .12s, transform .12s;
}
.ml-header__book-btn:hover {
    background: #4ca03a;
    border-color: #4ca03a;
    color: #fff !important;
    text-decoration: none !important;
}
.ml-header__book-btn:active { transform: translateY(1px); }
/* На мобильных скрываем из шапки и показываем в sidebar (см. ниже). */
@media (max-width: 991px) {
    .ml-header__book-btn { display: none; }
}
/* В sidebar (мобильное меню) — full-width копия. */
.ml-sidebar__book-btn {
    display: flex;
    justify-content: center;
    align-items: center;
    padding: 12px 18px;
    border-radius: 10px;
    font-family: 'Manrope', 'Source Sans 3', sans-serif;
    font-weight: 600;
    font-size: 15px;
    color: #fff !important;
    background: var(--ml-accent, #55b043);
    text-decoration: none !important;
    margin: 12px 0 4px;
}
@media (min-width: 992px) {
    .ml-sidebar__book-btn { display: none; }
}

/* При scroll (sticky-режим) кнопка сохраняется — main.css прячет .ml-header__info,
   мы вернули info-видимость для телефона, теперь явно показываем и кнопку. */
@media (min-width: 992px) {
    .ml-wrapper-active .ml-header__book-btn { display: inline-flex !important; }
}

/* Отключаем sticky-шапку на /appointment/ (body.ml-page--no-sticky-header).
   JS всё ещё добавляет класс .ml-wrapper-active при скролле, но мы нейтрализуем
   все стили sticky-режима для этой страницы. */
body.ml-page--no-sticky-header .ml-wrapper.ml-fixed-wrapper {
    position: static !important;
}
body.ml-page--no-sticky-header .ml-wrapper-active .ml-header { height: auto !important; }
body.ml-page--no-sticky-header .ml-wrapper-active .ml-header__info,
body.ml-page--no-sticky-header .ml-wrapper-active .ml-logo__desktop p { display: revert !important; }
body.ml-page--no-sticky-header .ml-wrapper-active .ml-header__control { justify-content: revert !important; padding-right: 0 !important; }
body.ml-page--no-sticky-header .ml-wrapper-active .ml-wrapper-container header nav>ul { position: static !important; transform: none !important; }
body.ml-page--no-sticky-header .ml-wrapper-active .ml-sidebar__actions { position: static !important; transform: none !important; }
body.ml-page--no-sticky-header .ml-wrapper-active { box-shadow: none !important; }

/* === Страница /appointment/ — универсальная онлайн-запись.
   Заголовок выровнен по левому краю (как на остальных страницах сайта).
   Двойной обводки нет: виджет рисует свой контейнер, внешний wrapper только grid. */
.ml-content--appointment { margin-bottom: 48px; }
.ml-content--appointment .ml-main-heading { text-align: left; padding: 0; }
.ml-appointment__lede {
    color: var(--ml-muted, #6b7570);
    font-size: 15px;
    line-height: 1.5;
    margin: 0 0 24px;
    max-width: 720px;
}

/* Desktop: виджет слева (≈2/3), step-guide справа (≈1/3). Mobile: одна колонка. */
.ml-appointment__layout {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 24px;
    align-items: start;
}
@media (min-width: 992px) {
    .ml-appointment__layout {
        grid-template-columns: minmax(0, 1.9fr) minmax(280px, 1fr);
        gap: 32px;
    }
}
.ml-appointment__main { min-width: 0; }
/* Сбрасываем верхний margin виджета внутри grid'а — иначе виджет сдвигается ниже step-guide справа. */
.ml-appointment__main .ml-booking { margin-top: 0; }

/* Step-guide. */
.ml-appointment__steps { position: sticky; top: 20px; }
@media (max-width: 991px) { .ml-appointment__steps { position: static; order: -1; } }
.ml-appointment__step-list {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 10px;
}
.ml-appointment__step {
    display: flex;
    gap: 14px;
    align-items: flex-start;
    padding: 14px 16px;
    background: #fff;
    border: 1px solid var(--ml-border, #e6ebe6);
    border-radius: 12px;
    transition: border-color .15s, background .15s, box-shadow .15s;
}
.ml-appointment__step-num {
    flex: 0 0 auto;
    width: 30px;
    height: 30px;
    border-radius: 50%;
    background: #f1f4f1;
    color: #7a857d;
    font-weight: 700;
    font-size: 14px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    line-height: 1;
    transition: background .15s, color .15s;
}
.ml-appointment__step-body { min-width: 0; }
.ml-appointment__step-title {
    margin: 2px 0 4px;
    font-size: 15px;
    font-weight: 700;
    color: #202c22;
    line-height: 1.3;
}
.ml-appointment__step-desc {
    margin: 0;
    color: #6b7570;
    font-size: 13px;
    line-height: 1.45;
}
/* Активная ступень — зелёный акцент. */
.ml-appointment__step.is-active {
    border-color: var(--ml-accent, #55b043);
    background: #f4faf2;
    box-shadow: 0 1px 0 rgba(85, 176, 67, .08);
}
.ml-appointment__step.is-active .ml-appointment__step-num {
    background: var(--ml-accent, #55b043);
    color: #fff;
}
/* Пройденная ступень — серая галочка вместо цифры. */
.ml-appointment__step.is-done .ml-appointment__step-num {
    background: #dcecd7;
    color: var(--ml-accent, #55b043);
}
.ml-appointment__step.is-done .ml-appointment__step-num::before {
    content: '✓';
    font-weight: 700;
}
.ml-appointment__step.is-done .ml-appointment__step-num { font-size: 0; }
.ml-appointment__step.is-done .ml-appointment__step-num::before { font-size: 15px; }
.ml-appointment__step.is-done .ml-appointment__step-title { color: #5d6962; }

.ml-services-header__toc-item{display:inline-block;max-width:230px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
