.mobile-only { display: none; }
.gantt-scroll { display: flex; flex: 1; min-height: 0; overflow: hidden; }
.gantt-section.collapsed .gantt-scroll { display: none; }

@media (max-width: 900px) {
    .map-diff-panel { top: auto; bottom: 4px; left: auto; right: 8px; width: min(292px, calc(100% - 16px)); max-height: max(44px, calc(100% - 8px)); }
    .map-diff-panel:not([open]) { width: 160px; }
    .map-diff-panel > summary { padding: 8px; font-size: 11px; }
    .map-diff-panel > summary, .map-diff-toggle { min-height: 44px; }
    .map-controls-clean .map-label-long { display: none; }
    .map-controls-clean .map-label-short { display: inline; }
    /* Шапка и основные управляющие элементы сохраняют палец-дружественную
       область 44px; высота шапки учитывает переносы на узких экранах. */
    :root { --topbar-height: calc(164px + env(safe-area-inset-top)); --mobile-nav-height: env(safe-area-inset-bottom); }
    .app-shell { height: 100dvh; }
    .app-body { padding-top: var(--topbar-height); padding-bottom: var(--mobile-nav-height); }
    .main-wrapper { height: auto; min-height: 0; }
    .top-bar { min-height: var(--topbar-height); padding: calc(6px + env(safe-area-inset-top)) 8px 6px; display: block; }
    .brand-logo { display: none; }
    .top-bar-left { position: static; display: grid; grid-template-columns: 160px minmax(60px,1fr) 58px 44px; gap: 6px; width: 100%; }
    /* Раньше .branch-pill { flex: 1 } делил всю ширину строки поровну —
       у короткой "Все" получался такой же огромный прямоугольник, как у
       длинного "Юго-Восток". Теперь каждая пилюля — по своему контенту
       (flex: 0 0 auto), а сама .branch-pills не тянется на всю строку. */
    /* overflow-x: auto САМ ПО СЕБЕ переводит overflow-y в auto тоже (это уже
       ловило нас в этой же сессии на .top-bar-left) — если контент хоть на
       доли пикселя выше контейнера, вылезает вертикальный скролл там, где
       нужен был только горизонтальный (или вообще никакой). overflow-y:
       hidden явно — и вертикального скролла нет в принципе. */
    .branch-pills { grid-column: 1 / -1; max-width: calc(100% - 50px); margin-right: 50px; height: 48px; padding: 2px; overflow-x: auto; overflow-y: hidden; }
    .branch-pill { flex: 0 0 auto; min-height: 44px; padding: 3px 10px; font-size: 10px; white-space: nowrap; }
    .top-bar-right { position: absolute; top: calc(6px + env(safe-area-inset-top)); right: 8px; height: 44px; }
    #theme-switch-label { min-height: 44px; min-width: 44px; justify-content: center; }
    .date-stepper { width: 160px; height: 44px; padding: 0; gap: 0; }
    #planning-date-trigger { flex: 1; font-size: 12px; padding: 0; min-height: 44px; }
    .date-stepper .icon-btn-xs { width: 44px; min-width: 44px; height: 44px; min-height: 44px; }
    .dataset-select { min-width: 0; width: 100%; max-width: none; height: 44px; min-height: 44px; font-size: 13px; padding: 4px; }
    .dataset-select:focus { font-size: 16px; }
    .mobile-only { display: inline-flex; align-items: center; justify-content: center; }
    #mobile-brigades-toggle { width: 58px; min-height: 44px; padding: 4px 8px; font-size: 11px; white-space: nowrap; }
    #floating-panel-toggle { width: 44px; min-height: 44px; padding: 4px; flex-shrink: 0; }
    .date-picker-popup { position: fixed; top: var(--topbar-height); left: 8px; max-width: calc(100vw - 16px); }

    .sidebar { position: fixed; left: 0; right: 0; bottom: 0; width: 100%; min-width: 0; height: var(--mobile-nav-height); padding: 2px 4px env(safe-area-inset-bottom); flex-direction: row; overflow-x: auto; overflow-y: hidden; border-top: 1px solid var(--border-color); border-right: 0; z-index: 910; }
    .sidebar-nav, .sidebar-footer { display: contents; }
    .header-actions { display: flex; justify-content: flex-end; margin: 6px 0 0; }
    .header-actions .nav-item { width: auto; min-width: 44px; height: 44px; padding: 0 12px; }
    .header-actions .nav-label { display: inline; }
    .engineers-panel-tab { display: none; }
    .corner-dock { left: 10px; bottom: calc(var(--gantt-footer-height, 38px) + 10px + env(safe-area-inset-bottom)); }
    .nav-item-action-last { margin-bottom: 0; margin-right: 8px; }
    .sidebar .nav-item { flex: 0 0 58px; width: 58px; height: 58px; gap: 3px; }
    .sidebar .nav-label { font-size: 10px; }
    .user-avatar { display: none; }
    .engineers-panel { display: none; }
    .engineers-panel.mobile-open { display: flex; position: fixed; top: var(--topbar-height); bottom: var(--mobile-nav-height); left: 0; width: 100%; min-width: 0; height: auto; padding-top: 0; scroll-padding-top: 0; z-index: 950; }
    .mobile-roster-close { align-self: flex-end; border: 0; background: transparent; color: var(--text-primary); min-height: 44px; padding: 8px 16px; flex-shrink: 0; }
    #mobile-brigades-backdrop { z-index: 940; }
    .engineers-list { min-height: 112px; }
    .engineer-row { min-height: 60px; }
    .map-section { --chrome-reserved: 0px; }
    .map-controls-clean { top: 8px; left: 8px; right: 8px; max-width: none; gap: 4px; }
    .map-section:has(.context-drawer:not(.hidden)) .map-controls-clean { max-width: none; }
    .map-controls-clean button { min-height: 44px; }
    .map-controls-clean .map-btn { min-height: 44px; }
    .map-controls-clean .map-btn:not(.map-btn-text) { min-width: 44px; }
    /* "Плотность" должна стоять справа от "минуса", а не съезжать под зум-
       столбик при переносе строки — оборачиваем "Все маршруты"+"По дорогам/
       Прямые" в первую строку и "Плотность" во вторую, обе строки складываем
       в столбик рядом с зум-кнопкой (см. .map-controls-stack/-row в HTML и
       их display:contents-сброс в styles.css для десктопа). */
    .map-controls-stack { display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 4px; }
    .map-controls-row { display: flex; flex-wrap: wrap; gap: 4px; }
    /* Зум-столбик растягивается по двум рядам управляющих кнопок. */
    .map-controls-clean { align-items: stretch; }
    .map-btn-group-zoom .map-btn { flex: 1; }
    /* Зум теперь вертикальный столбик (см. .map-btn-group-zoom в styles.css) —
       он у'же, чем раньше, поэтому подгонять "Плотность" под его ширину
       больше не нужно: пусть будет по своему контенту, только чуть шире
       паддинг, чтобы текст точно не обрезался/не переносился. */
    #layer-btn-heatmap { padding: 0 12px; white-space: nowrap; }
    .floating-panel { position: fixed; top: calc(var(--topbar-height) + 8px) !important; bottom: calc(var(--mobile-nav-height) + 8px); left: 8px !important; right: 8px !important; width: auto; height: auto; max-height: none; transform: none !important; }
    .context-drawer, .side-drawer { position: fixed; top: var(--topbar-height); bottom: var(--mobile-nav-height); left: 0; right: 0; width: 100%; max-width: 100%; }
    .modal-card, .an-modal { top: calc(env(safe-area-inset-top) + 8px) !important; left: 8px !important; right: 8px; bottom: calc(env(safe-area-inset-bottom) + 8px); width: auto; max-width: none; max-height: none; transform: none !important; }
    #events-modal { width: auto; }
    .modal-content, .an-body { min-height: 0; overflow: auto; padding: 12px; }
    .modal-header, .an-header { padding: 10px 12px; flex-shrink: 0; }
    .modal-actions { flex-wrap: wrap; }
    #events-modal .modal-tabs { padding: 0 8px; overflow: visible; flex-wrap: wrap; gap: 4px; }
    #events-modal .modal-tab { flex: 1 1 calc(50% - 4px); min-width: 0; min-height: 44px; white-space: normal; line-height: 1.2; }
    #event-pane-new-ticket .form-row,
    #event-pane-new-ticket .form-row:first-of-type,
    #event-pane-new-ticket .form-row:nth-of-type(2),
    #event-pane-new-ticket .form-row:nth-of-type(3) { display: grid; grid-template-columns: minmax(0, 1fr); gap: 0; }
    #event-pane-emergency .form-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); }
    #event-pane-emergency .form-group { width: auto !important; min-width: 0; }
    #event-pane-emergency .address-picker-input-wrap { grid-column: 1 / -1; }
    #event-pane-emergency .emg-map-actions { grid-column: 1 / -1; }
    #event-pane-new-ticket .form-group { width: auto !important; min-width: 0; }
    #event-pane-new-ticket .new-ticket-map-actions { display: grid; grid-template-columns: 1fr 1fr; align-items: center; gap: 8px; }
    #event-pane-new-ticket .new-ticket-map-actions .form-label { display: none; }
    #event-pane-new-ticket .modal-actions .btn { flex: 1 1 140px; }
    .modal-card input:not([type="checkbox"]):not([type="radio"]), .modal-card select, .modal-card textarea, .an-modal input:not([type="checkbox"]):not([type="radio"]), .an-modal select, .an-modal textarea, #engineer-search { font-size: 16px; min-height: 44px; max-width: 100%; }
    .search-input-sleek, .an-resource-navigation select { min-height: 44px; }
    .modal-card button, .side-drawer button, .context-drawer button, .an-modal button, .floating-panel button { min-height: 44px; }
    .icon-btn-close, .an-close { min-width: 44px; }
    .address-suggest-item { min-height: 44px; display: flex; align-items: center; }
    .address-picker-map { height: 160px; }
    .diff-table, .an-table { min-width: 560px; }
    .planning-card { min-width: 0; overflow-wrap: anywhere; }
    .planning-card > table { display: block; overflow-x: auto; }
    .planning-card pre { overflow: auto; max-width: 100%; }
    .planning-what-if-form { grid-template-columns: minmax(0, 1fr); }
    .planning-preview-banner { padding: 6px 8px; max-height: 25dvh; overflow-y: auto; }
    .planning-preview-info { flex-basis: 100%; }
    .planning-preview-controls { width: 100%; }
    .planning-preview-controls .btn { flex: 1 1 140px; min-height: 44px; }

    .gantt-header-strip { padding: 4px 8px; gap: 4px; }
    .gantt-strip-left { flex: 1; min-width: 150px; }
    .gantt-summary { display: none; }
    .gantt-collapse-button, .gantt-mode-btn { min-height: 44px; }
    .gantt-strip-right { margin-left: 0; }
    .gantt-legend-clean { flex-wrap: nowrap; overflow-x: auto; white-space: nowrap; padding: 4px 0; }
    .gantt-legend-clean .legend-item { flex-shrink: 0; }
    .gantt-section.collapsed .gantt-legend-clean, .gantt-section.collapsed .gantt-strip-right { display: none; }
    .gantt-scroll { display: block; overflow: auto; }
    .gantt-content { width: 1050px; min-height: 100%; }
    .gantt-lanes-wrap { flex: none; overflow: visible; }
    .gantt-ruler { position: sticky; top: 0; z-index: 5; flex-shrink: 0; }
    .gantt-lane { height: 36px; min-height: 36px; }
    .gantt-lane-label, .gantt-ruler-gutter { width: 120px; min-width: 120px; }
    .gantt-lane-label { position: sticky; left: 0; background: var(--bg-surface); z-index: 4; }
    .gantt-ruler-gutter { position: sticky; left: 0; background: var(--bg-surface-subtle); z-index: 4; }
    .gantt-resize-handle { display: none; }
    .sim-banner { position: fixed; top: var(--topbar-height); bottom: auto; left: 0; right: 0; width: 100%; flex-wrap: wrap; }
    .sim-banner button { min-height: 44px; }

    /* Конструктор на телефоне остаётся полноценной формой: панель действий
       переносится, а карточки читаются сверху вниз вместо сжатой строки. */
    #constructor-modal { max-height: none; height: calc(100dvh - env(safe-area-inset-top) - env(safe-area-inset-bottom) - 16px); }
    #constructor-modal .modal-header { gap: 8px; }
    #constructor-modal .constructor-toolbar { padding: 8px 12px !important; }
    #constructor-modal .constructor-toolbar > div:first-child {
        flex-wrap: wrap !important;
        overflow: visible !important;
        align-items: stretch !important;
    }
    #constructor-modal .constructor-toolbar > div:first-child > div:first-child {
        flex: 1 1 100%;
        justify-content: space-between;
    }
    #constructor-modal .constructor-toolbar > div:first-child > button {
        flex: 1 1 calc(50% - 8px);
        min-width: 0;
        white-space: normal !important;
        line-height: 1.2;
    }
    #constructor-modal .modal-tabs { padding: 0; overflow: visible; flex-wrap: wrap; gap: 4px; }
    #constructor-modal .modal-tab { flex: 1 1 calc(50% - 4px); min-width: 0; min-height: 44px; white-space: normal; line-height: 1.2; }
    #constructor-modal .modal-content { padding: 12px !important; }
    #constructor-modal .constructor-tab-pane > div:first-child {
        align-items: flex-start !important;
        flex-wrap: wrap;
        gap: 8px;
    }
    #constructor-modal .constructor-tab-pane > div:first-child > .btn { width: 100%; }
    #constructor-modal .c-item-card {
        align-items: stretch;
        gap: 10px;
        padding: 12px;
    }
    #constructor-modal .c-item-card > div:first-child {
        display: grid !important;
        grid-template-columns: max-content max-content minmax(0, 1fr);
        align-items: start;
        gap: 6px;
        min-width: 0;
    }
    #constructor-modal .c-item-card > div:first-child > div {
        grid-column: 1 / -1;
        grid-row: 1;
        min-width: 0;
        order: -1;
    }
    #constructor-modal .c-item-card > div:first-child > .c-badge {
        grid-row: 2;
        justify-self: start;
    }
    #constructor-modal .c-item-card > div:last-child {
        justify-content: flex-end;
        border-top: 1px solid var(--border-subtle);
        padding-top: 8px;
    }
    #constructor-modal .c-item-card > div:last-child .btn { min-width: 44px; }
    #constructor-modal .modal-footer {
        align-items: stretch !important;
        flex-direction: column;
        gap: 10px;
        padding: 10px 12px !important;
    }
    #constructor-modal .modal-footer > div:last-child { display: flex; width: 100%; }
    #constructor-modal .modal-footer > div:last-child .btn { flex: 1; }

    .an-section-head { flex-wrap: wrap; }
    .an-section-head > .an-link-btn { flex: 1 1 calc(50% - 7px); min-width: 0; min-height: 44px; white-space: normal; line-height: 1.2; }

    #op-modal .an-tabs { padding: 0 8px; flex-wrap: wrap; gap: 4px; }
    #op-modal .an-tab { flex: 1 1 calc(50% - 4px); min-width: 0; min-height: 44px; white-space: normal; line-height: 1.2; }

}

@media (max-width: 600px) {
    #constructor-modal .form-row > .form-group {
        flex: 1 1 100% !important;
        width: 100% !important;
        min-width: 0;
    }
}

@media (max-width: 359px) {
    :root { --topbar-height: calc(216px + env(safe-area-inset-top)); }
    .top-bar-left { grid-template-columns: 160px minmax(0,1fr); }
    #floating-panel-toggle { justify-self: end; }
}
