:root{
    --primary:#64cce3;
    --primary-dark:#0f7a95;
    --accent-warm:#c98a2e;
    --bg-main:#fbfbf9;
    --border-light:#e6e6e2;
    --text-dark:#1d1d1d;
    --text-muted:#76726c;

    --teach-1:#2f9fb8;
    --teach-2:#7c6fe0;
    --teach-3:#3fb37f;
    --teach-4:#d69a33;
    --teach-5:#d9668c;
    --teach-6:#d9574f;
    --teach-7:#8bb33f;
    --teach-8:#9a5fd9;
    --teach-9:#b8763f;
    --teach-10:#5c6b8a;

    --status-planned-bg:#e3f6fa;
    --status-completed-bg:#e6f4ea;
    --status-sick-bg:#fce8e6;
    --status-skip-bg:#fef7e0;
    --status-moved-bg:#f1eefc;

    --status-planned-txt:#0f7a95;
    --status-completed-txt:#137333;
    --status-sick-txt:#c5221f;
    --status-skip-txt:#b06000;
    --status-moved-txt:#6a4fc4;
}

/* Тонкие полосы прокрутки без «кнопок»-стрелок — по умолчанию Windows/Chrome рисует их
   классическим широким виджетом со стрелками сверху/снизу, и в плотных колонках (кабинеты
   в расписании и т.п.) это выглядит грубо и отъедает место. Один раз стилизуем везде. */
*{scrollbar-width:thin;scrollbar-color:rgba(0,0,0,.2) transparent;}
*::-webkit-scrollbar{width:6px;height:6px;}
*::-webkit-scrollbar-track{background:transparent;}
*::-webkit-scrollbar-thumb{background:rgba(0,0,0,.2);border-radius:6px;}
*::-webkit-scrollbar-thumb:hover{background:rgba(0,0,0,.35);}
*::-webkit-scrollbar-button{display:none;width:0;height:0;}
*::-webkit-scrollbar-corner{background:transparent;}

body{
    margin:0;
    font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
    background:
        radial-gradient(circle at 15% 20%, rgba(100,204,227,.45), transparent 42%),
        radial-gradient(circle at 85% 15%, rgba(217,102,140,.30), transparent 40%),
        radial-gradient(circle at 78% 80%, rgba(124,111,224,.32), transparent 45%),
        radial-gradient(circle at 18% 85%, rgba(214,154,51,.28), transparent 42%),
        #ffffff;
    color:var(--text-dark);height:100vh;display:flex;flex-direction:column;overflow:hidden;box-sizing:border-box;
}

/* Шапка: лого слева и правый блок (выход/поддержка/пользователь) — обычным flex по краям,
   а меню между ними — абсолютным позиционированием строго по центру ВСЕЙ шапки. Так меню
   остаётся ровно посередине, даже если левый и правый блоки разной ширины (grid с 1fr-колонками
   вместо этого делил остаток пополам, а не центрировал — при разной ширине блоков сдвигало
   меню в сторону более узкого). overflow-x:auto на самом меню — на случай, если пунктам
   не хватит места на узком окне, вместо наезда на соседние блоки. */
header.topbar{background:#fff;border-bottom:1px solid var(--border-light);padding:0 20px;display:flex;align-items:center;justify-content:space-between;gap:16px;height:60px;flex-shrink:0;box-sizing:border-box;position:relative;}
.topbar-brand{display:flex;align-items:center;gap:10px;flex-shrink:0;min-width:0;}
/* Настоящий логотип центра (иконка "мозг в круге", вырезана из шапки resurs-krd.ru) —
   раньше тут был цветной квадрат с текстом "НР"; фон убран, у самой картинки уже прозрачный
   фон и линии в цвет --primary, поэтому на белой шапке она смотрится как на самом сайте */
.logo-box{width:36px;height:36px;object-fit:contain;flex-shrink:0;}
/* Два ряда: сверху — название организации-клиента (крупно, из Настроек → центр, см.
   syncSettingsGlobals в data.js), снизу — мелкая, но читаемая подпись самого продукта */
.topbar-brand-text{display:flex;flex-direction:column;justify-content:center;min-width:0;line-height:1.2;}
.brand-name{font-weight:800;font-size:15px;letter-spacing:-.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.brand-product{font-size:9px;font-weight:700;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;white-space:nowrap;}

.menu-list{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);list-style:none;padding:5px;margin:0;display:flex;flex-direction:row;align-items:center;justify-content:center;gap:3px;overflow-x:auto;max-width:calc(100% - 300px);height:44px;background:#f1f5f9;border-radius:14px;box-sizing:border-box;}
.menu-item{position:relative;z-index:1;display:flex;align-items:center;gap:8px;padding:0 16px;height:100%;border-radius:10px;font-size:13.5px;font-weight:700;color:#4a5568;cursor:pointer;transition:color .25s ease,background .2s ease;white-space:nowrap;flex-shrink:0;}
.menu-item.active{color:#fff!important;}
/* Плавно переезжающая подсветка под активным пунктом (позиция задаётся из navigation.js) */
.menu-indicator{position:absolute;left:0;top:5px;width:0;height:34px;border-radius:10px;background:var(--primary);box-shadow:0 4px 14px rgba(100,204,227,.45);transition:left .35s cubic-bezier(.4,0,.2,1),width .35s cubic-bezier(.4,0,.2,1),opacity .2s ease;z-index:0;pointer-events:none;}
.menu-item:hover:not(.active){background:#e2e8f0;color:var(--primary-dark);}

/* min-width:0 + overflow:hidden не дают длинной подписи о сохранении данных наезжать
   на меню и перекрывать клик по последним пунктам (например, "Отчеты") на узких окнах —
   вместо этого подпись обрезается многоточием, а иконки-действия никогда не сжимаются */
.topbar-right{display:flex;align-items:center;gap:14px;min-width:0;max-width:100%;overflow:hidden;}
.storage-note{font-size:11px;font-weight:700;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.topbar-actions{display:flex;align-items:center;gap:2px;border-left:1px solid var(--border-light);padding-left:12px;flex-shrink:0;}
.sidebar-link{background:none;border:none;font:inherit;font-size:17px;line-height:1;color:#64748b;padding:8px;border-radius:10px;cursor:pointer;}
.sidebar-link:hover{background:#f1f5f9;color:var(--primary-dark);}
.sidebar-link.danger:hover{background:#fef2f2;color:#b91c1c;}
.btn-support{display:flex;align-items:center;gap:5px;background:var(--status-planned-bg);color:var(--primary-dark);border:none;font:inherit;font-size:12px;font-weight:700;line-height:1;padding:8px 12px;border-radius:999px;cursor:pointer;white-space:nowrap;transition:all .2s;}
.btn-support:hover{background:var(--primary);color:#fff;}

.content-area{flex:1;display:flex;flex-direction:column;overflow:hidden;min-width:0;min-height:0;}
main{display:flex;flex-direction:column;flex:1;padding:15px;gap:15px;box-sizing:border-box;overflow:hidden;min-height:0;}

.crm-view{display:none!important;width:100%;height:100%;flex-direction:column;gap:15px;min-height:0;}
.crm-view.active-view{display:flex!important;}

#view-schedule{overflow-y:auto;}
.week-nav{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:14px;padding:8px 16px;background:#fff;border:1px solid var(--border-light);border-radius:14px;width:100%;box-sizing:border-box;flex-shrink:0;}
.week-nav-center{display:flex;align-items:center;gap:14px;justify-self:center;}
.week-nav-label{font-size:13px;font-weight:800;color:var(--text-dark);min-width:220px;text-align:center;}
.week-nav-btn{background:#f1f5f9;border:none;color:#475569;font-size:15px;font-weight:700;width:32px;height:32px;border-radius:999px;cursor:pointer;display:flex;align-items:center;justify-content:center;font-family:inherit;}
.week-nav-btn:hover{background:#e2e8f0;color:#0f172a;}
.week-nav-today{background:none;border:1.5px solid var(--border-light);color:#475569;font-size:11.5px;font-weight:700;padding:6px 14px;border-radius:999px;cursor:pointer;font-family:inherit;}
.week-nav-today:hover{background:#f1f5f9;color:var(--primary-dark);border-color:var(--primary-dark);}

.week-nav-left{display:flex;align-items:center;gap:8px;justify-self:start;min-width:0;}
.week-search{position:relative;width:100%;max-width:260px;flex:1;min-width:140px;}
.week-teacher-select{width:auto!important;max-width:220px;padding:7px 30px 7px 12px!important;font-size:12.5px!important;flex-shrink:0;}
.week-teacher-select.is-active{border-color:var(--primary);background-color:var(--status-planned-bg);}
.week-search-icon{position:absolute;left:11px;top:50%;transform:translateY(-50%);font-size:12px;pointer-events:none;z-index:1;}

/* Подсказка "педагог → цвет" — заполняет пустое место рядом с поиском/фильтром, помогает
   узнавать педагогов по цвету карточки, не читая имя на каждой (см. schedule.js teacherLegendHtml) */
/* Подсказка "цвет = педагог" раньше просто плавала прямо на градиентном фоне шапки расписания
   и почти терялась — теперь это отдельная карточка-пилюля с собственным фоном, чтобы взгляд
   сразу цеплялся за неё, а не искал среди разноцветного градиента */
.teacher-legend{display:flex;align-items:center;gap:11px;flex-wrap:wrap;min-width:0;background:#fff;padding:6px 13px;border-radius:999px;border:1px solid var(--border-light);box-shadow:0 2px 8px rgba(0,0,0,.08);}
.teacher-legend-chip{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:800;color:var(--text-dark);white-space:nowrap;}
.tl-dot{width:10px;height:10px;border-radius:50%;flex-shrink:0;box-shadow:0 0 0 1.5px rgba(255,255,255,.7);}
.tl-dot.teach-1{background:var(--teach-1);}
.tl-dot.teach-2{background:var(--teach-2);}
.tl-dot.teach-3{background:var(--teach-3);}
.tl-dot.teach-4{background:var(--teach-4);}
.tl-dot.teach-5{background:var(--teach-5);}
.tl-dot.teach-6{background:var(--teach-6);}
.tl-dot.teach-7{background:var(--teach-7);}
.tl-dot.teach-8{background:var(--teach-8);}
.tl-dot.teach-9{background:var(--teach-9);}
.tl-dot.teach-10{background:var(--teach-10);}

.table-search-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;}
.table-search-row .table-search{flex:1;min-width:140px;}
.table-sort-select{flex:none!important;width:160px!important;padding:10px 12px!important;font-size:12.5px!important;border-radius:999px!important;background:#f8fafc!important;border-color:#e6ebf0!important;}
.table-search{position:relative;flex-shrink:0;}
.table-search-icon{position:absolute;left:14px;top:50%;transform:translateY(-50%);font-size:13px;pointer-events:none;z-index:1;color:#94a3b8;transition:color .15s ease;}
.table-search-input{padding:10px 14px 10px 36px!important;font-size:13px!important;border-radius:999px!important;background:#f8fafc!important;border-color:#e6ebf0!important;box-shadow:0 1px 2px rgba(15,23,42,.03);transition:all .18s ease;}
.table-search-input:hover{border-color:#d7dee6!important;}
.table-search-input:focus{background:#fff!important;box-shadow:0 0 0 3px rgba(100,204,227,.2),0 2px 6px rgba(15,23,42,.06);}
.table-search:focus-within .table-search-icon{color:var(--primary-dark);}
.week-search-input{padding:8px 12px 8px 30px!important;font-size:12.5px!important;}
.week-nav-right{display:flex;align-items:center;gap:8px;justify-self:end;}
.week-nav-clear{background:#fef2f2;border:1.5px solid transparent;color:#b91c1c;font-size:11px;font-weight:700;padding:6px 12px;border-radius:999px;cursor:pointer;font-family:inherit;}
.week-nav-clear:hover{background:#fee2e2;}

.kanban-card.is-dimmed{opacity:.22;filter:grayscale(.4);}
.kanban-card.is-highlighted{outline:2px solid var(--primary);box-shadow:0 6px 18px rgba(100,204,227,.55);transform:scale(1.04);position:relative;z-index:5;}
.board-row{display:flex;width:100%;gap:10px;flex:1;min-height:0;}
.board-row .kanban-column{flex:1;min-width:0;}

.kanban-column{background:#fff;border-radius:14px;display:flex;flex-direction:column;padding:12px;box-sizing:border-box;border:1px solid var(--border-light);box-shadow:0 1px 3px rgba(0,0,0,.02);min-height:0;}
.column-header{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding-bottom:8px;border-bottom:1px solid #edf2f7;margin-bottom:10px;gap:6px;flex-shrink:0;}
.column-title{font-size:13px;font-weight:800;overflow-wrap:anywhere;justify-self:start;min-width:0;}
.column-date{font-size:11px;font-weight:800;color:#475569;white-space:nowrap;justify-self:center;}
.column-header .btn-add-inline{justify-self:end;}

.btn-add-inline{background:var(--primary)!important;color:#fff!important;border:none;padding:5px 12px!important;border-radius:999px!important;font-size:11px!important;font-weight:700!important;cursor:pointer;letter-spacing:.3px;transition:background .2s;font-family:inherit;}
.btn-add-inline:disabled{opacity:.45;cursor:not-allowed;}
.btn-add-inline:hover{background:var(--primary-dark)!important;}
.btn-mini{background:#f1f5f9;border:none;color:#475569;font-size:11px;font-weight:700;padding:4px 10px;border-radius:999px;cursor:pointer;font-family:inherit;}
.btn-mini:hover{background:#e2e8f0;color:#0f172a;}
.btn-mini.danger:hover{background:#fee2e2;color:#b91c1c;}

.rooms-grid{display:flex;flex:1;gap:6px;width:100%;min-height:0;overflow-x:auto;}
.room-track{flex:1 1 0;min-width:78px;background:#f8fafc;border-radius:10px;padding:5px;display:flex;flex-direction:column;gap:3px;min-height:0;overflow-y:auto;overflow-x:hidden;border:1px dashed #cbd5e1;}
.room-label{font-size:10px;font-weight:800;color:#64748b;text-align:center;background:#fff;border:1px solid var(--border-light);margin-bottom:2px;padding:2px 0;border-radius:6px;flex-shrink:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding-left:2px;padding-right:2px;}
/* Много кабинетов (настраивается 1–10): колонки кабинетов сужаются, карточки становятся компактнее.
   При 7+ кабинетах день всё равно может просить прокрутку вбок — полный день без прокрутки
   смотрят через "день крупным планом" (клик по названию дня). */
.rooms-mid .rooms-grid{gap:4px;}
.rooms-mid .room-track{min-width:56px;padding:4px;gap:4px;}
.rooms-mid .kanban-card .c-child{font-size:10px;}
.rooms-mid .kanban-card-teacher{font-size:8px;}
.rooms-many .rooms-grid{gap:3px;}
.rooms-many .room-track{min-width:46px;padding:3px;gap:3px;}

/* Адаптивная плотность (см. applyScheduleDensity в schedule.js): включается сама, когда
   занятия реально не помещаются в кабинет без внутренней прокрутки — независимо от того,
   сколько кабинетов и какой ширины экран. Две ступени: заметно компактнее, и предельно
   компактно (педагог убирается из карточки — остаётся в подсказке по наведению и в цвете). */
body.sched-dense .kanban-card{padding:2px 5px;}
body.sched-dense .kanban-card .c-time{font-size:9px;}
body.sched-dense .kanban-card .c-child{font-size:9.5px;}
body.sched-dense .kanban-card-teacher{font-size:7.5px;padding:0 3px;}
body.sched-dense .room-track{gap:2px;padding:4px;}
body.sched-dense .room-label{font-size:9px;padding:1px 0;margin-bottom:1px;}

/* Крайняя ступень — чуть плотнее предыдущей, но педагога не прячем: скрытая информация
   выглядит как поломка, когда карточка и так уже маленькая (по ней трудно навести мышью
   и словить крупную подсказку — лучше немного мельче текст, чем совсем без педагога). */
body.sched-ultra .kanban-card{padding:2px 4px;}
body.sched-ultra .kanban-card .c-time{font-size:8.5px;}
body.sched-ultra .kanban-card .c-child{font-size:9px;}
body.sched-ultra .kanban-card-teacher{font-size:7px;padding:0 3px;}
body.sched-ultra .room-track{gap:2px;padding:3px;}

/* Самая глубокая ступень — когда и "предельно плотного" не хватает (очень низкое окно
   браузера/масштаб): время и имя сводим в одну строку, как в компактных календарях —
   расшифровка остаётся в подсказке по наведению и по клику на занятие. */
body.sched-extreme .kanban-card{padding:1px 4px;gap:0;}
body.sched-extreme .c-line1{flex-direction:row!important;align-items:baseline;gap:4px;}
body.sched-extreme .kanban-card .c-time{font-size:8px;flex-shrink:0;}
body.sched-extreme .kanban-card .c-child{font-size:8.5px;flex:1;min-width:0;width:auto;}
body.sched-extreme .kanban-card-teacher{font-size:6.5px;padding:0 3px;}
body.sched-extreme .room-track{gap:1px;padding:2px;}
body.sched-extreme .room-label{font-size:8px;padding:0;margin-bottom:1px;}
.rooms-many .room-label{font-size:9px;padding:1px 0;}
.rooms-many .kanban-card{padding:2px 4px;}
.rooms-many .kanban-card .c-child{font-size:9.5px;}
.rooms-many .kanban-card-teacher{font-size:7px;padding:0 3px;}
.rooms-mid .day-focus-center{width:1100px;}
.rooms-many .day-focus-center{width:1320px;}
.rooms-many .day-focus-rooms{gap:8px;}
.rooms-many .day-focus-room-title{font-size:10px;letter-spacing:.02em;}
.room-free-badge{display:inline-block;margin-left:3px;padding:0 5px;border-radius:999px;background:var(--status-planned-bg);color:var(--primary-dark);font-weight:800;}
.room-free-badge.room-free-badge-zero{background:#fce8e6;color:#c5221f;}

/* Карточка занятия: время, имя ребенка, педагог — в три строки, как в исходной версии */
.kanban-card{
    position:relative;
    padding:3px 6px;
    border-radius:8px;
    display:flex;
    flex-direction:column;
    align-items:flex-start;
    gap:1px;
    box-shadow:0 1px 2px rgba(0,0,0,.03);
    box-sizing:border-box;
    flex-shrink:0;
    cursor:pointer;
    border-left:4px solid #cbd5e1;
    transition:transform .15s ease,box-shadow .15s ease;
    width:100%;
    min-width:0;
}
.kanban-card:hover{transform:translateY(-1px);box-shadow:0 6px 14px rgba(100,204,227,.25);}
/* Обёртка времени и имени: обычно колонкой (каждое на своей строке, как в исходной версии) —
   в самом плотном адаптивном режиме (.sched-extreme) переключается в строку, чтобы сэкономить
   ещё одну строку высоты на очень низких окнах браузера. */
.c-line1{display:flex;flex-direction:column;width:100%;min-width:0;gap:1px;}
.kanban-card .c-time{font-size:9.5px;font-weight:800;color:#475569;white-space:nowrap;}
/* Бейджи в правом верхнем углу карточки — перенос (сиреневый) и диагностика (бирюзовый):
   крупные, на цветной подложке, чтобы бросались в глаза даже в узкой колонке кабинета */
.c-badges{position:absolute;top:-3px;right:-2px;display:flex;gap:2px;z-index:1;}
.c-badge{width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:12px;line-height:1;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.18);}
.c-badge-move{background:#ede9fe;}
.c-badge-diag{background:#cffafe;}
.kanban-card .c-time{padding-right:2px;}
/* Диагностика в сетке: пунктирная бирюзовая рамка — чтобы отличать от обычных занятий */
.kanban-card.kanban-card-diag{border-style:dashed;border-width:1.5px;border-color:#0e9aa7!important;}
.rooms-many .c-badge{width:16px;height:16px;font-size:10px;border-width:1.5px;}
.rooms-many .c-badges{top:-5px;right:-4px;}
.client-lessons-diag{display:inline-block;margin-left:6px;font-size:10px;font-weight:800;color:#0e7490;background:#ecfeff;border:1px solid #a5f3fc;border-radius:999px;padding:0 6px;white-space:nowrap;}
.client-lessons-row-diag td{background:#f0fdff;}
.kanban-card .c-child{font-size:10.5px;font-weight:600;color:#0f172a;line-height:1.3;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.kanban-card .c-child .c-time{margin-right:1px;}
.kanban-card-teacher{font-size:8.5px;font-weight:700;color:#64748b;background:rgba(255,255,255,.7);padding:0 4px;border-radius:5px;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;border:1px solid rgba(0,0,0,.04);line-height:1.35;}
.kanban-card.teach-1 .kanban-card-teacher{color:var(--teach-1);}
.kanban-card.teach-2 .kanban-card-teacher{color:var(--teach-2);}
.kanban-card.teach-3 .kanban-card-teacher{color:var(--teach-3);}
.kanban-card.teach-4 .kanban-card-teacher{color:var(--teach-4);}
.kanban-card.teach-5 .kanban-card-teacher{color:var(--teach-5);}
.kanban-card.teach-6 .kanban-card-teacher{color:var(--teach-6);}
.kanban-card.teach-7 .kanban-card-teacher{color:var(--teach-7);}
.kanban-card.teach-8 .kanban-card-teacher{color:var(--teach-8);}
.kanban-card.teach-9 .kanban-card-teacher{color:var(--teach-9);}
.kanban-card.teach-10 .kanban-card-teacher{color:var(--teach-10);}

/* Цвет карточки (фон + левая рамка) — по педагогу, не по статусу (по просьбе администратора:
   так сразу видно, чьи занятия). Статус занятия — маленькая точка в углу (см. .c-status-dot) */
.kanban-card.teach-1{background:color-mix(in srgb, var(--teach-1) 14%, white);border-left-color:var(--teach-1);}
.kanban-card.teach-2{background:color-mix(in srgb, var(--teach-2) 14%, white);border-left-color:var(--teach-2);}
.kanban-card.teach-3{background:color-mix(in srgb, var(--teach-3) 14%, white);border-left-color:var(--teach-3);}
.kanban-card.teach-4{background:color-mix(in srgb, var(--teach-4) 14%, white);border-left-color:var(--teach-4);}
.kanban-card.teach-5{background:color-mix(in srgb, var(--teach-5) 14%, white);border-left-color:var(--teach-5);}
.kanban-card.teach-6{background:color-mix(in srgb, var(--teach-6) 14%, white);border-left-color:var(--teach-6);}
.kanban-card.teach-7{background:color-mix(in srgb, var(--teach-7) 14%, white);border-left-color:var(--teach-7);}
.kanban-card.teach-8{background:color-mix(in srgb, var(--teach-8) 14%, white);border-left-color:var(--teach-8);}
.kanban-card.teach-9{background:color-mix(in srgb, var(--teach-9) 14%, white);border-left-color:var(--teach-9);}
.kanban-card.teach-10{background:color-mix(in srgb, var(--teach-10) 14%, white);border-left-color:var(--teach-10);}

.c-status-dot{position:absolute;bottom:3px;right:3px;width:7px;height:7px;border-radius:50%;box-shadow:0 0 0 1.5px #fff;}
.c-status-dot.badge-planned{background:var(--status-planned-txt);}
.c-status-dot.badge-completed{background:var(--status-completed-txt);}
.c-status-dot.badge-cancelled-sick{background:var(--status-sick-txt);}
.c-status-dot.badge-cancelled-skip{background:var(--status-skip-txt);}
.c-status-dot.badge-moved{background:var(--status-moved-txt);}
.rooms-many .c-status-dot{width:6px;height:6px;bottom:2px;right:2px;}

.track-empty{font-size:9px;color:#94a3b8;text-align:center;padding:6px 2px;}

/* Экраны со списками */
/* Лиды и клиенты — три блока в один ряд задаёт раскладка виджетов (widgets.js) */

.split-container{display:flex;width:100%;flex:1;gap:12px;overflow:hidden;min-height:0;}
.left-block,.right-block{background:#fff;border-radius:14px;padding:16px;border:1px solid var(--border-light);display:flex;flex-direction:column;gap:10px;box-sizing:border-box;min-height:0;min-width:0;flex:1;}
.block-header{display:flex;justify-content:space-between;align-items:center;gap:10px;}
.block-title{font-size:14px;font-weight:800;color:var(--text-dark);}
.crm-table-container{flex:1;border:1px solid var(--border-light);border-radius:12px;overflow-y:auto;min-height:0;}
.crm-table{width:100%;border-collapse:collapse;font-size:12px;text-align:left;}
.crm-table th{background:#f8fafc;padding:7px 10px;font-weight:700;border-bottom:1px solid var(--border-light);position:sticky;top:0;color:#475569;z-index:1;}
.crm-table td{padding:6px 10px;border-bottom:1px solid #f1f5f9;vertical-align:middle;}
.crm-table tbody tr:hover{background:#f8fafc;}
.crm-table tbody tr.row-clickable{cursor:pointer;}
/* Превью длинного текста (например, заметки лида) в списке — одна строка, остальное по клику */
.crm-table .row-comment-preview{display:block;max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.empty-row td{color:#94a3b8;text-align:center;padding:18px;}
.row-actions{display:flex;gap:6px;justify-content:flex-end;}

/* Модальные окна */
.modal-overlay{backdrop-filter:blur(6px);background:rgba(15,23,42,.25);display:none;align-items:center;justify-content:center;position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:9999;padding:20px;box-sizing:border-box;}
#modal-client-doc,#modal-fin-cat-form{z-index:10000;}
.modal-overlay.open{display:flex;}
.modal{background:#fff;border-radius:16px;width:420px;max-width:100%;max-height:90vh;overflow-y:auto;padding:24px;box-shadow:0 20px 45px rgba(15,23,42,.18);position:relative;box-sizing:border-box;}
.modal.modal-wide{width:640px;}
.modal h3{font-size:17px;font-weight:800;color:#0f172a;margin:0 0 16px;border-bottom:2px solid #f1f5f9;padding-bottom:10px;}
.form-group{margin-bottom:12px;display:flex;flex-direction:column;gap:5px;position:relative;}
.form-group label{font-size:11px;font-weight:800;color:#475569;letter-spacing:.4px;}
.form-row{display:flex;gap:10px;}
.form-row .form-group{flex:1;}
.form-row-inline{display:flex;gap:8px;align-items:center;}
.form-hint{font-size:10.5px;color:#94a3b8;font-weight:600;}

.lesson-avail{padding:10px;background:#f8fafc;border-radius:10px;border:1px solid var(--border-light);max-height:130px;overflow-y:auto;}
.lesson-avail-summary{font-size:12px;font-weight:800;color:var(--primary-dark);margin-bottom:7px;}
.lesson-avail-summary b{font-size:14px;}
.lesson-avail-chips{display:flex;flex-wrap:wrap;gap:5px;min-height:26px;}
.lesson-avail-chip{font-size:10.5px;font-weight:800;padding:4px 9px;border-radius:999px;cursor:pointer;white-space:nowrap;transition:all .15s ease;}
.lesson-avail-chip.free{background:var(--status-planned-bg);color:var(--primary-dark);border:1px solid var(--primary);}
.lesson-avail-chip.free:hover{background:var(--primary);color:#fff;}
.lesson-avail-chip.busy{background:#eef1f4;color:#b3bac2;cursor:not-allowed;text-decoration:line-through;border:1px solid transparent;}
.lesson-avail-chip.teacher-busy{background:#fdf2f8;color:#be185d;text-decoration:none;border-color:#fbcfe8;}
.lesson-avail-chip.selected{background:var(--primary);color:#fff;box-shadow:0 0 0 2px rgba(100,204,227,.4);}

/* Карточка одного занятия в форме создания записи — можно добавить несколько (разные дни,
   время, кабинеты) за одно сохранение, см. lessonEntryHtml() в schedule.js. Два ровных
   подряда полей — принцип "айфон", как у payout-cat-row в форме выплаты: высота карточки
   не гуляет от того, сколько в ней полей */
.lesson-entry{border:1.5px solid var(--border-light);border-radius:10px;padding:10px;margin-bottom:8px;background:#f8fafc;}
.lesson-entry-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:7px;}
.lesson-entry-num{font-size:11px;font-weight:800;color:var(--primary-dark);text-transform:uppercase;letter-spacing:.3px;}
.lesson-entry-row-top,.lesson-entry-row-bottom{display:flex;gap:6px;}
.lesson-entry-row-top{margin-bottom:6px;}
.lesson-entry-tabs{margin-bottom:8px;}
.lesson-group-chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px;}
.lesson-group-chip{display:inline-flex;align-items:center;gap:5px;background:var(--status-planned-bg);color:var(--primary-dark);border:1px solid var(--primary);border-radius:999px;padding:4px 6px 4px 12px;font-size:12.5px;font-weight:700;}
.lesson-group-chip-remove{border:none;background:none;color:inherit;opacity:.6;cursor:pointer;font-size:13px;line-height:1;padding:2px 4px;}
.lesson-group-chip-remove:hover{opacity:1;}
.roster-row{display:flex;align-items:center;gap:10px;padding:10px 12px;border:1.5px solid var(--border-light);border-radius:10px;margin-bottom:6px;background:#f8fafc;cursor:pointer;transition:background .15s ease;}
.roster-row:hover{background:var(--status-planned-bg);}
.roster-row-name{flex:1;font-weight:700;color:#1e293b;}

/* ---- Мастер настройки (onboarding.js) ---- */
.onb-modal{padding:28px 32px;}
.onb-head-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px;}
.onb-head-row h3{font-size:16px;font-weight:800;color:#94a3b8;letter-spacing:.2px;margin:0;border:none;padding:0;}
.onb-close-x{border:none;background:#f1f5f9;color:#64748b;width:28px;height:28px;border-radius:50%;font-size:14px;cursor:pointer;transition:all .15s ease;line-height:1;}
.onb-close-x:hover{background:#e2e8f0;color:#1e293b;}

/* Полоска шагов — ровный ряд пилюль, пройденные и текущая закрашены, будущие — пустые */
.onb-progress-track{display:flex;gap:6px;margin-bottom:24px;}
.onb-progress-track.onb-progress-hidden{display:none;}
.onb-dot{flex:1;height:5px;border-radius:999px;background:#eef1f4;transition:background .2s ease;}
.onb-dot.is-done{background:var(--primary);opacity:.55;}
.onb-dot.is-active{background:var(--primary);}

.onb-body{min-height:260px;}
@keyframes onbFadeIn{from{opacity:0;transform:translateY(4px);}to{opacity:1;transform:translateY(0);}}
.onb-fade-in{animation:onbFadeIn .22s ease;}

/* Шапка содержательного шага: иконка в цветном кружке + номер шага + заголовок + подпись */
.onb-step-head{display:flex;align-items:center;gap:14px;margin-bottom:6px;}
.onb-step-icon{flex:none;width:44px;height:44px;border-radius:14px;background:var(--status-planned-bg);display:flex;align-items:center;justify-content:center;font-size:21px;}
.onb-step-eyebrow{display:block;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.5px;color:var(--primary);margin-bottom:2px;}
.onb-step-title{margin:0;font-size:19px;font-weight:800;color:#0f172a;}
.onb-step-sub{margin:10px 0 18px;font-size:13.5px;color:#64748b;line-height:1.5;}
.onb-preview{margin-top:10px;font-size:13px;color:#64748b;background:#f8fafc;border:1px solid var(--border-light);border-radius:10px;padding:10px 12px;}

/* Экраны-заглушки в начале/конце — крупная иконка в кружке по центру */
.onb-hero{text-align:center;margin-bottom:14px;}
.onb-hero-icon{display:inline-flex;align-items:center;justify-content:center;width:72px;height:72px;border-radius:50%;background:var(--status-planned-bg);font-size:34px;}
.onb-hero-icon-done{background:#dcfce7;}
.onb-hero-title{text-align:center;font-size:21px;font-weight:800;color:#0f172a;margin:0 0 10px;}
.onb-hero-sub{text-align:center;font-size:14px;color:#64748b;line-height:1.55;max-width:38ch;margin:0 auto;}

.onb-choice-row{display:flex;gap:14px;margin-top:24px;}
.onb-choice{flex:1;display:flex;flex-direction:column;align-items:flex-start;gap:5px;padding:20px 18px;border:1.5px solid var(--border-light);border-radius:14px;background:#f8fafc;cursor:pointer;text-align:left;transition:all .15s ease;}
.onb-choice:hover{border-color:var(--primary);background:var(--status-planned-bg);transform:translateY(-1px);box-shadow:0 6px 16px rgba(15,23,42,.06);}
.onb-choice-icon{font-size:22px;margin-bottom:2px;}
.onb-choice b{font-size:15px;color:#1e293b;}
.onb-choice span:not(.onb-choice-icon){font-size:12.5px;color:#64748b;}

.onb-cat{margin-bottom:18px;}
.onb-cat-title{font-weight:800;font-size:12.5px;color:var(--primary-dark);text-transform:uppercase;letter-spacing:.4px;margin-bottom:9px;}
.onb-vert-grid{display:flex;flex-wrap:wrap;gap:8px;}
.onb-vert{padding:9px 15px;border:1.5px solid var(--border-light);border-radius:999px;background:#f8fafc;font-size:13px;font-weight:600;cursor:pointer;transition:all .15s ease;}
.onb-vert:hover{border-color:var(--primary);transform:translateY(-1px);}
.onb-vert.active{background:var(--primary);color:#fff;border-color:var(--primary);box-shadow:0 4px 10px rgba(100,204,227,.35);}
.onb-staff-list{display:flex;flex-direction:column;gap:6px;}
.onb-staff-item{display:flex;align-items:center;gap:8px;padding:10px 12px;border:1.5px solid var(--border-light);border-radius:10px;background:#f8fafc;font-size:13.5px;transition:border-color .15s ease;}
.onb-staff-item:hover{border-color:var(--primary);}

.form-input{width:100%;box-sizing:border-box;padding:9px 12px;border:1.5px solid #cbd5e1;border-radius:10px;font-size:13.5px;background:#f8fafc;transition:all .2s ease;color:#1e293b;font-family:inherit;}
.form-input:focus{border-color:var(--primary);background:#fff;outline:none;box-shadow:0 0 0 3px rgba(100,204,227,.25);}
.form-input:disabled{background:#f1f5f9;color:#94a3b8;cursor:not-allowed;}
textarea.form-input{resize:vertical;min-height:64px;line-height:1.4;}

.client-list-empty{font-size:12.5px;color:#94a3b8;font-weight:600;padding:8px 2px;}
.task-side-list .client-list-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;flex:1;gap:6px;text-align:center;padding:30px 10px;}
.task-side-list .client-list-empty::before{content:'✅';font-size:26px;opacity:.5;}
.client-archive-box{background:#fff7ed;border:1px solid #fed7aa;border-radius:12px;padding:10px 12px;margin-bottom:12px;display:flex;flex-direction:column;gap:6px;}
.client-archive-box-title{font-size:12.5px;font-weight:800;color:#9a3412;}
.client-archive-controls{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end;}
.client-archive-controls .form-group{margin-bottom:0;}
.client-archive-btn{align-self:flex-end;margin-bottom:2px;background:#fed7aa!important;color:#7c2d12!important;white-space:nowrap;}
.client-archive-btn:hover{background:#fdba74!important;}
.client-archive-controls .form-group:first-child{flex:1 1 200px;}
.client-archive-controls .form-group:nth-child(2){flex:2 1 240px;}
/* Карточка клиента: доступ родителя в кабинет на телефоне (client/m/) */
.client-access-box{background:#ecfeff;border:1px solid #a5f3fc;border-radius:12px;padding:10px 12px;margin-bottom:12px;display:flex;flex-direction:column;gap:8px;}
.client-access-title{font-size:12.5px;font-weight:800;color:#0e7490;}
.client-access-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:13px;}
.client-access-row .grow{flex:1;min-width:160px;}
.client-access-code{background:#fff;border:1px dashed #0e7490;border-radius:10px;padding:8px 10px;font-size:13px;}
.client-access-code b{font-size:20px;letter-spacing:3px;color:#0e7490;}
.client-access-controls{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end;}
.client-access-controls .form-group{margin-bottom:0;flex:1 1 180px;}
.client-archive-comment{font-size:11.5px;font-weight:600;color:#7c5a00;margin-top:2px;}
/* Карточка клиента: остаток и баланс — только для чтения, пополнение через кассу */
.client-account{display:flex;align-items:stretch;gap:10px;margin-bottom:12px;padding:10px 12px;background:#f8fafc;border:1px solid var(--border-light);border-radius:12px;}
.client-account-item{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px;}
.client-account-label{font-size:10.5px;font-weight:800;color:#64748b;letter-spacing:.3px;text-transform:uppercase;}
.client-account-value{font-size:18px;font-weight:800;color:#1e293b;}
.client-account-value.is-ok{color:#16a34a;}
.client-account-value.is-debt{color:#dc2626;}
.client-account-sub{font-size:10.5px;color:#94a3b8;font-weight:600;}
.client-account-actions{display:flex;flex-direction:column;align-items:flex-end;justify-content:center;gap:4px;flex:0 0 auto;max-width:190px;text-align:right;}
.client-account-pay{background:var(--status-planned-bg)!important;color:var(--primary-dark)!important;}
.client-account-pay:hover{background:var(--primary)!important;color:#fff!important;}
.client-archive-banner{display:flex;align-items:center;justify-content:space-between;gap:10px;background:#fef3e2;border:1px solid #fde8c8;border-radius:10px;padding:10px 12px;margin-bottom:6px;}
.client-archive-banner-text{font-size:12.5px;color:#7c5a15;font-weight:600;}
.client-history-list{max-height:160px;overflow-y:auto;display:flex;flex-direction:column;gap:6px;margin-bottom:8px;}
.client-history-row{display:flex;align-items:flex-start;gap:10px;padding:8px 10px;background:#f8fafc;border-radius:10px;border:1px solid var(--border-light);border-left:3px solid transparent;}
.client-history-row.badge-planned{border-left-color:var(--primary);}
.client-history-row.badge-completed{border-left-color:#137333;}
.client-history-row.badge-cancelled-sick{border-left-color:#c5221f;}
.client-history-row.badge-cancelled-skip{border-left-color:#b06000;}
.client-history-row.badge-moved{border-left-color:#6a4fc4;}
.chr-date{font-size:11px;font-weight:800;color:var(--primary-dark);white-space:nowrap;flex-shrink:0;padding-top:1px;}
.chr-text{font-size:12.5px;color:#1e293b;flex:1;overflow-wrap:anywhere;}
.client-history-add{display:flex;gap:6px;align-items:center;flex-wrap:wrap;}
.client-history-add #history-date{flex:0 0 140px;}

.field-label-row{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:6px;}
.field-label-row label{margin:0;}
.client-lessons-filter{margin-bottom:10px;}
.client-lessons-check{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:#475569;cursor:pointer;}
.client-lessons-table-container{max-height:min(70vh,600px);}
.client-lessons-month-row td{background:#f1f5f9;font-weight:800;font-size:11.5px;color:var(--primary-dark);letter-spacing:.3px;padding:7px 12px;}
.client-lessons-status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;}
.client-lessons-status-dot.badge-planned{background:var(--status-planned-txt);}
.client-lessons-status-dot.badge-completed{background:var(--status-completed-txt);}
.client-lessons-status-dot.badge-cancelled-sick{background:var(--status-sick-txt);}
.client-lessons-status-dot.badge-cancelled-skip{background:var(--status-skip-txt);}
.client-lessons-status-dot.badge-moved{background:var(--status-moved-txt);}
.client-history-add #history-status{flex:0 0 150px;}
.client-history-add #history-text{flex:1;min-width:140px;}

.client-files-list{display:flex;flex-direction:column;gap:6px;margin-bottom:8px;}
.client-file-row{display:flex;align-items:center;gap:10px;padding:7px 10px;background:#f8fafc;border-radius:10px;border:1px solid var(--border-light);}
.client-file-link{flex:1;font-size:12.5px;font-weight:700;color:var(--primary-dark);text-decoration:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.client-file-link:hover{text-decoration:underline;}
.client-file-size{font-size:11px;color:#94a3b8;font-weight:700;white-space:nowrap;}

/* Кнопки-документы клиента (диагностика / план) и их окно-просмотрщик */
.client-doc-btn{width:100%;display:flex;align-items:center;gap:10px;padding:12px 14px;background:#f8fafc;border:1.5px solid var(--border-light);border-radius:12px;cursor:pointer;font-family:inherit;text-align:left;transition:all .15s ease;}
.client-doc-btn:hover{border-color:var(--primary);background:var(--status-planned-bg);}
.client-doc-btn.filled{border-color:var(--primary);background:var(--status-planned-bg);}
.client-doc-btn-icon{font-size:18px;flex-shrink:0;}
.client-doc-btn-text{font-size:12.5px;font-weight:700;color:#475569;}
.client-doc-btn.filled .client-doc-btn-text{color:var(--primary-dark);}

.client-doc-modal{padding:0;overflow:hidden;}
.client-doc-header{
    padding:24px 26px 20px;
    background:
        radial-gradient(circle at 12% -10%, rgba(255,255,255,.35), transparent 55%),
        radial-gradient(circle at 100% 120%, rgba(217,102,140,.55), transparent 60%),
        linear-gradient(120deg, var(--primary) 0%, #4fb9d6 45%, #7c6fe0 100%);
}
.client-doc-title{font-size:20px;font-weight:800;color:#fff;letter-spacing:-.02em;}
.client-doc-subtitle{font-size:13px;color:rgba(255,255,255,.85);font-weight:700;margin-top:3px;}
.client-doc-body{padding:22px 26px 26px;max-height:calc(90vh - 100px);overflow-y:auto;box-sizing:border-box;}
.client-doc-body .modal-buttons{margin-top:6px;}

.client-doc-file-box{margin-bottom:8px;}
.client-doc-image-preview{max-width:100%;max-height:280px;border-radius:12px;border:1px solid var(--border-light);display:block;}
.client-doc-pdf-preview{width:100%;height:320px;border-radius:12px;border:1px solid var(--border-light);}

/* Клик по имени ребенка — открывает карточку клиента */
.client-link{cursor:pointer;transition:color .15s ease;}
.client-link:hover{color:var(--primary-dark);}
#det-child.client-link,#det-teacher.client-link,#det-move-value.client-link{color:var(--primary-dark);text-decoration:underline;text-decoration-color:transparent;transition:text-decoration-color .15s ease;}
#det-child.client-link:hover,#det-teacher.client-link:hover,#det-move-value.client-link:hover{text-decoration-color:var(--primary-dark);}
.dfc-child.client-link:hover,.dfc-teacher .client-link:hover{color:var(--primary-dark);text-decoration:underline;}

.modal-buttons{display:flex;justify-content:flex-end;gap:10px;margin-top:18px;border-top:1px solid #f1f5f9;padding-top:14px;width:100%;flex-wrap:wrap;}
.modal-buttons .spacer{margin-right:auto;}
.btn-cancel{padding:9px 20px;background:#f1f5f9;color:#475569;border:none;border-radius:999px;font-weight:700;cursor:pointer;font-size:13px;font-family:inherit;transition:all .2s;}
.btn-cancel:hover{background:#e2e8f0;color:#1e293b;}
.btn-danger{padding:9px 20px;background:#fee2e2;color:#b91c1c;border:none;border-radius:999px;font-weight:700;cursor:pointer;font-size:13px;font-family:inherit;}
.btn-danger:hover{background:#fecaca;}
.btn-submit{padding:9px 20px;background:var(--primary);color:#fff;border:none;border-radius:999px;font-weight:700;cursor:pointer;font-size:13px;font-family:inherit;box-shadow:0 4px 12px rgba(100,204,227,.4);transition:all .2s;}
.btn-submit:hover{background:var(--primary-dark);}

select.form-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:34px;background-image:url("data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24' fill='none' stroke='%23475569' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;background-size:14px auto;}

/* Живой поиск по базе клиентов */
.search-results-dropdown{position:absolute;top:100%;left:0;width:100%;background:#fff;border:1.5px solid #cbd5e1;border-radius:12px;max-height:190px;overflow-y:auto;z-index:20;display:none;box-shadow:0 10px 22px rgba(0,0,0,.12);margin-top:4px;padding:4px 0;box-sizing:border-box;}
.search-results-dropdown.open{display:block;}
.search-item{padding:8px 12px;font-size:13px;color:#1e293b;cursor:pointer;border-radius:8px;margin:2px 5px;transition:background .15s ease;}
.search-item:hover,.search-item.active{background:#eaf7fa;color:var(--primary-dark);}
.search-item small{display:block;font-size:10.5px;color:#94a3b8;font-weight:600;}
.search-item.is-new{color:var(--accent-warm);font-weight:700;}

/* Виджеты */
.fin-widgets{display:flex;gap:12px;flex-wrap:wrap;}
.fin-card{flex:1;min-width:150px;background:#fff;border-radius:14px;padding:16px;display:flex;flex-direction:column;border:1px solid var(--border-light);}
.fin-card-label{font-size:11px;font-weight:700;color:var(--text-muted);}
.fin-card-value{font-size:20px;font-weight:700;margin-top:4px;}
/* Остаток по способу оплаты, которого больше нет в справочнике (удалили после того, как им
   провели операции) — не смешиваем с текущими способами, см. paymentMethodBalances в finance.js */
.fin-card-deleted{border-style:dashed;opacity:.75;}
.fin-card-deleted .fin-card-label small{font-weight:600;color:var(--text-muted);}
.badge-income{background:#dcfce7;color:#15803d;padding:2px 7px;border-radius:6px;font-weight:bold;white-space:nowrap;}
.badge-expense{background:#ffe4e6;color:#b91c1c;padding:2px 7px;border-radius:6px;font-weight:bold;white-space:nowrap;}
.badge-neutral{background:#f1f5f9;color:#475569;padding:2px 7px;border-radius:6px;font-weight:bold;white-space:nowrap;}
/* Просто цвет текста (без фона/пилюли, в отличие от badge-* выше) — для крупных цифр в
   карточках-показателях (остаток, доход, просрочено и т.п.), см. index.html. Вынесено в классы,
   а не оставлено как style="color:..." в разметке, чтобы перекрасить под другой бренд/тему
   можно было в одном месте, а не искать по всем страницам */
.stat-positive{color:#16a34a;}
.stat-negative{color:#dc2626;}
.stat-warn{color:#b06000;}
.stat-info{color:#7c6fe0;}

/* Период в финансах */
.fin-period-row{display:flex;align-items:center;justify-content:space-between;gap:12px;background:#fff;border:1px solid var(--border-light);border-radius:14px;padding:8px 16px;flex-shrink:0;}
.fin-period-pills{display:flex;gap:3px;background:#f1f5f9;padding:4px;border-radius:999px;}
.fin-period-pill{background:none;border:none;padding:7px 14px;border-radius:999px;font-size:12px;font-weight:700;color:#64748b;cursor:pointer;font-family:inherit;transition:all .15s ease;}
.fin-period-pill:hover{color:var(--primary-dark);}
.fin-period-pill.active{background:var(--primary);color:#fff;box-shadow:0 3px 10px rgba(100,204,227,.4);}
.fin-period-label{font-size:11.5px;font-weight:700;color:#94a3b8;white-space:nowrap;}
.fin-period-right{display:flex;align-items:center;gap:12px;}
.fin-period-profit{font-size:12.5px;font-weight:800;white-space:nowrap;padding:6px 13px;border-radius:999px;background:#f1f5f9;}
.fin-period-custom-range{display:none;align-items:center;gap:6px;}
.fin-period-custom-range.show{display:flex;}
.fin-period-custom-range .form-input{width:132px;padding:7px 10px;}
.fin-period-range-sep{color:#94a3b8;font-weight:700;}

/* Кнопка "Номенклатура" в строке периода — заметнее обычной btn-mini (залита цветом),
   но компактная, т.к. это редкое действие и не должно спорить за внимание с ежедневными задачами */
.btn-nomenclature{display:flex;align-items:center;gap:6px;background:#eafaff;border:1.5px solid var(--primary);color:var(--primary-dark);padding:8px 14px;border-radius:999px;font-size:12px;font-weight:800;cursor:pointer;font-family:inherit;transition:all .15s ease;white-space:nowrap;}
.btn-nomenclature:hover{background:var(--primary);color:#fff;}

/* Модули Приход/Расход — теперь друг под другом на всю ширину (не делят её пополам),
   чтобы таблице операций хватало места и описание не обрезалось до нечитаемого */

/* Должники — компактный блок справа, высота по содержимому, не тянется вслед за модулями */
/* Должники — размер и место задаёт раскладка виджетов */

/* Цветной акцент сверху карточки — сразу видно, где приход, а где расход, даже мельком */
.fin-module{border-top:4px solid transparent;}
.fin-module-income{border-top-color:#16a34a;}
.fin-module-expense{border-top-color:#dc2626;}
.fin-module-transfer{border-top-color:#7c6fe0;}

/* Модули "Приход" / "Расход" — итог за период прямо в шапке своего блока */
.fin-module-header{display:flex;align-items:center;gap:14px;flex-wrap:wrap;flex-shrink:0;}
.fin-module-title-row{display:flex;align-items:baseline;gap:10px;margin-right:auto;}
.fin-module-title{font-size:14px;font-weight:800;color:var(--text-dark);}
.fin-module-total{font-size:23px;font-weight:800;font-variant-numeric:tabular-nums;white-space:nowrap;}
.fin-module-header-income .fin-module-total{color:#16a34a;}
.fin-module-header-expense .fin-module-total{color:#dc2626;}

/* Кнопки действий модулей — одинаковая форма/вес, различаются только цветом (приход/расход) */
.btn-fin-action{color:#fff!important;border:none;padding:9px 18px!important;border-radius:999px!important;font-size:12.5px!important;font-weight:800!important;cursor:pointer;letter-spacing:.2px;transition:transform .15s ease,box-shadow .15s ease;font-family:inherit;flex-shrink:0;}
.btn-fin-action:hover{transform:translateY(-1px);}
.btn-fin-action-income{background:linear-gradient(135deg,#16a34a,#15803d)!important;box-shadow:0 4px 12px rgba(22,163,74,.32);}
.btn-fin-action-income:hover{box-shadow:0 6px 16px rgba(22,163,74,.42);}
.btn-fin-action-expense{background:linear-gradient(135deg,#ef4444,#dc2626)!important;box-shadow:0 4px 12px rgba(220,38,38,.28);}
.btn-fin-action-expense:hover{box-shadow:0 6px 16px rgba(220,38,38,.38);}
.btn-fin-action-transfer{background:linear-gradient(135deg,#8b7ef0,#7c6fe0)!important;box-shadow:0 4px 12px rgba(124,111,224,.28);}
.btn-fin-action-transfer:hover{box-shadow:0 6px 16px rgba(124,111,224,.38);}

/* Подсказка баланса выбранного клиента в форме кассовой операции */
.fin-client-balance-hint{font-size:11px;font-weight:700;color:var(--primary-dark);display:none;}

/* Разбивка суммы по нескольким способам оплаты (наличные + безналичные и т.д.) */
.split-rows{display:flex;flex-direction:column;gap:6px;}
.split-row{display:flex;gap:6px;align-items:center;}
.split-row .split-method{flex:1.3;}
.split-row .split-amount{flex:1;}
.split-row .split-remove{flex-shrink:0;}

/* Разбивка выплаты по статьям (НДФЛ/ПФР и т.д.) в форме выплаты зарплаты — 6 полей на строку не
   помещаются по-человечески (айфон-правило), поэтому каждая статья — это два ровных подряда:
   сверху "что/кому" (статья + контрагент), снизу "как/сколько" (способ + сумма + флаг + удалить) */
.payout-cat-row{flex-direction:column;align-items:stretch;}
.payout-cat-row-top{display:flex;gap:6px;margin-bottom:6px;}
.payout-cat-row-bottom{display:flex;gap:6px;align-items:center;}
.payout-cat-category{flex:1;min-width:120px;}
.payout-cat-cp-wrap{flex:1.4;position:relative;min-width:160px;}
.payout-cat-method{flex:1.3;min-width:150px;}
.payout-cat-amount{flex:0.7;min-width:90px;}
.payout-cat-salary-check{display:flex;align-items:center;justify-content:center;flex-shrink:0;width:32px;height:32px;border-radius:8px;background:#f8fafc;border:1.5px solid #cbd5e1;cursor:pointer;font-size:14px;transition:all .15s ease;}
.payout-cat-salary-check:has(input:checked){background:var(--status-planned-bg);border-color:var(--primary);}
.payout-cat-salary-check input{display:none;}
.split-add-btn{align-self:flex-start;margin-top:6px;}
.split-hint-fixable{cursor:pointer;text-decoration:underline dotted;}
.split-hint-fixable:hover{color:#b91c1c!important;}
.payout-total-input{font-size:16px;font-weight:600;color:#16a34a;}

/* Длинное описание операции обрезается многоточием, полный текст — во всплывающей подсказке браузера */
.fin-desc-cell{max-width:260px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fin-cat-icon{margin-right:5px;}

/* Окно "Услуги и расходы" — брендированная шапка с градиентом (как у просмотрщика
   документов клиента) плюс сводные цифры, чтобы окно не выглядело голым при открытии */
.fin-cat-modal{padding:0;overflow:hidden;}
.fin-cat-modal-header{
    padding:22px 26px 18px;
    background:
        radial-gradient(circle at 12% -10%, rgba(255,255,255,.35), transparent 55%),
        radial-gradient(circle at 100% 120%, rgba(217,102,140,.55), transparent 60%),
        linear-gradient(120deg, var(--primary) 0%, #4fb9d6 45%, #7c6fe0 100%);
}
.fin-cat-modal-title{font-size:20px;font-weight:800;color:#fff;letter-spacing:-.02em;}
.fin-cat-modal-subtitle{font-size:13px;color:rgba(255,255,255,.85);font-weight:700;margin-top:3px;}
.fin-cat-modal-stats{display:flex;gap:12px;margin-top:14px;flex-wrap:wrap;}
.fcm-stat{background:rgba(255,255,255,.16);border-radius:10px;padding:8px 14px;min-width:80px;}
.fcm-stat-value{font-size:17px;font-weight:800;color:#fff;line-height:1.1;}
.fcm-stat-label{font-size:10px;font-weight:700;color:rgba(255,255,255,.82);text-transform:uppercase;letter-spacing:.04em;margin-top:2px;}
.fin-cat-modal-body{padding:20px 26px 24px;max-height:calc(90vh - 132px);overflow-y:auto;box-sizing:border-box;display:flex;flex-direction:column;gap:14px;}
.fin-cat-modal-body .modal-buttons{margin-top:2px;}

/* Строки справочника */
.fin-cat-list{display:flex;flex-direction:column;gap:6px;overflow-y:auto;flex:1;min-height:0;}
.fin-cat-row{display:flex;align-items:center;gap:10px;padding:9px 10px;background:#f8fafc;border-radius:10px;border:1px solid var(--border-light);transition:all .15s ease;}
.fin-cat-row:hover{background:#f1f5f9;}
.fin-cat-row-editable{cursor:pointer;}
.fin-cat-row-editable:hover{background:var(--status-planned-bg);border-color:var(--primary);}
.fin-cat-row .fin-cat-icon{margin-right:0;font-size:17px;flex-shrink:0;}
.fin-cat-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px;}
.fin-cat-name{font-size:12.5px;font-weight:700;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fin-cat-usage{font-size:10px;font-weight:600;color:#94a3b8;}
.fin-cat-price{font-size:11.5px;color:#94a3b8;font-weight:700;white-space:nowrap;flex-shrink:0;}
.fin-cat-lock{font-size:11px;color:#94a3b8;flex-shrink:0;}
.fin-cat-kind-badge{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;background:#eef1f4;color:#64748b;font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;vertical-align:middle;}

/* Группы (папки) номенклатуры — заголовок-разделитель прямо в списке услуг/товаров */
.fin-cat-add-row{display:flex;gap:8px;flex-wrap:wrap;}
.fin-group-header{display:flex;align-items:center;gap:8px;padding:7px 10px;margin-top:4px;border-radius:8px;background:#eef1f4;cursor:pointer;transition:background .15s ease;}
.fin-group-header:first-child{margin-top:0;}
.fin-group-header:hover{background:#e4e9ee;}
.fin-group-header-none{cursor:default;}
.fin-group-header-none:hover{background:#eef1f4;}
.fin-group-icon{font-size:13px;flex-shrink:0;}
.fin-group-name{flex:1;font-size:11.5px;font-weight:800;color:#475569;text-transform:uppercase;letter-spacing:.02em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.fin-group-count{font-size:10.5px;font-weight:700;color:#94a3b8;flex-shrink:0;}
.fin-group-header [data-group-add-item]{flex-shrink:0;}
.fin-cat-add-trigger{width:100%;padding:9px 14px!important;font-size:12px!important;flex-shrink:0;}

/* Способы оплаты — компактные чипы в окне номенклатуры (их обычно мало) */
.fin-pm-row{display:flex;flex-wrap:wrap;gap:8px;}
.fin-pm-chip{display:flex;align-items:center;gap:7px;background:#f8fafc;border:1px solid var(--border-light);border-radius:999px;padding:7px 8px 7px 13px;font-size:12px;font-weight:700;color:#1e293b;cursor:pointer;transition:all .15s ease;}
.fin-pm-chip:hover{background:var(--status-planned-bg);border-color:var(--primary);}
.fin-pm-chip .btn-mini{padding:2px 8px;}
.fin-pm-empty{font-size:12px;color:#94a3b8;font-style:italic;}

.fin-debtors-total{font-size:12.5px;font-weight:800;color:#dc2626;white-space:nowrap;}
.fin-debtors-list{display:flex;flex-direction:column;gap:6px;overflow-y:auto;flex:1;min-height:0;}
.fin-debtor-row{display:flex;align-items:center;gap:10px;padding:8px 12px;background:#fef2f2;border:1px solid #fecaca;border-radius:10px;cursor:pointer;transition:background .15s ease;}
.fin-debtor-row:hover{background:#fee2e2;}
.fin-debtor-avatar{width:28px;height:28px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:800;color:#fff;}
.fda-1{background:var(--teach-1);} .fda-2{background:var(--teach-2);} .fda-3{background:var(--teach-3);} .fda-4{background:var(--teach-4);} .fda-5{background:var(--teach-5);}
.fda-6{background:var(--teach-6);} .fda-7{background:var(--teach-7);} .fda-8{background:var(--teach-8);} .fda-9{background:var(--teach-9);} .fda-10{background:var(--teach-10);}
.fin-debtor-name{flex:1;font-size:12.5px;font-weight:700;color:#1e293b;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* min-height держит место под подпись даже у должников без счётчика занятий (sub тогда
   пустой), чтобы строки списка не скакали между одной и двумя строками */
.fin-debtor-sub{font-size:10px;font-weight:600;color:#94a3b8;min-height:13px;}
.fin-debtor-amount{font-size:12.5px;font-weight:800;color:#b91c1c;white-space:nowrap;}
.fin-debtors-empty{font-size:12px;color:#94a3b8;font-style:italic;padding:10px 2px;}

/* Круглый аватар-инициалы педагога — берет тот же цвет, что уже назначен ему в карточке
   (кабинетные карточки занятий, здесь — зарплаты/сотрудники), для узнаваемости по всему приложению */
.avatar-circle{width:30px;height:30px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:11px;font-weight:800;color:#fff;}
.avatar-circle.avatar-lg{width:48px;height:48px;font-size:16px;}
.avatar-circle.teach-1{background:var(--teach-1);}
.avatar-circle.teach-2{background:var(--teach-2);}
.avatar-circle.teach-3{background:var(--teach-3);}
.avatar-circle.teach-4{background:var(--teach-4);}
.avatar-circle.teach-5{background:var(--teach-5);}
.avatar-circle.teach-6{background:var(--teach-6);}
.avatar-circle.teach-7{background:var(--teach-7);}
.avatar-circle.teach-8{background:var(--teach-8);}
.avatar-circle.teach-9{background:var(--teach-9);}
.avatar-circle.teach-10{background:var(--teach-10);}

/* Сотрудники — сетка карточек вместо таблицы */
/* Отступы внутри — чтобы при наведении карточка (она чуть приподнимается и получает тень) не обрезалась краем прокручиваемой области */
.emp-grid-container{flex:0 0 auto;max-height:44vh;overflow-y:auto;min-height:0;margin-top:2px;padding:4px 4px 6px;}
.emp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;}
.emp-card{background:#fff;border:1.5px solid var(--border-light);border-radius:14px;padding:16px;cursor:pointer;transition:all .15s ease;display:flex;flex-direction:column;gap:12px;}
.emp-card:hover{border-color:var(--primary);box-shadow:0 4px 14px rgba(100,204,227,.18);transform:translateY(-1px);}
/* Персонал на окладе — карточка с пунктирной рамкой, чтобы отличать от педагогов */
.emp-card.emp-card-staff{border-style:dashed;background:#fcfcfd;}
.emp-card-top{display:flex;align-items:center;gap:12px;min-width:0;}
.emp-card-id{min-width:0;}
.emp-card-name{font-size:14px;font-weight:800;color:var(--text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.emp-card-spec{font-size:11.5px;color:var(--primary-dark);font-weight:700;margin-top:1px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.emp-card-schedule{font-size:11px;color:#64748b;font-weight:600;}
.emp-card-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(50px,1fr));gap:8px 6px;border-top:1px solid var(--border-light);padding-top:10px;}
.emp-card-stat{display:flex;flex-direction:column;gap:1px;min-width:0;}
.emp-card-stat-value{font-size:13px;font-weight:800;color:#1e293b;white-space:nowrap;}
.emp-card-stat-label{font-size:9.5px;color:#94a3b8;font-weight:700;text-transform:uppercase;letter-spacing:.03em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}

/* Сводка по загруженности и выплатам — занимает место, которое иначе пустовало под сеткой
   карточек, и прижата к низу страницы (margin-top:auto забирает всё свободное место сверху) */
.emp-summary-block{flex:0 0 auto;display:flex;flex-direction:column;gap:8px;min-height:0;border-top:1px solid var(--border-light);margin-top:auto;padding-top:20px;}
.emp-summary-list{flex:0 0 auto;max-height:38vh;overflow-y:auto;min-height:0;display:flex;flex-direction:column;}
.emp-summary-row{display:flex;align-items:center;gap:12px;padding:9px 4px;border-bottom:1px solid var(--border-light);cursor:pointer;}
.emp-summary-row:last-child{border-bottom:none;}
.emp-summary-row:hover{background:#f8fafc;}
.emp-summary-name{flex:0 0 148px;min-width:0;font-size:12.5px;font-weight:700;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.emp-summary-meter{flex:1;min-width:0;}
.emp-summary-count{flex:0 0 60px;font-size:11.5px;color:#64748b;text-align:right;font-variant-numeric:tabular-nums;}
.emp-summary-due{flex:0 0 90px;font-size:12.5px;font-weight:800;color:#b06000;text-align:right;font-variant-numeric:tabular-nums;}
.emp-summary-due.emp-summary-due-zero{color:#94a3b8;font-weight:600;}

/* Зарплаты */
.sal-teacher-cell{display:flex;align-items:center;gap:10px;min-width:0;}
.sal-teacher-cell strong{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.sal-due-pill{padding:3px 9px;border-radius:999px;font-size:11px;font-weight:800;white-space:nowrap;}
.sal-due-pill.sal-due-pending{background:#fff3e0;color:#b06000;}
.sal-due-pill.sal-due-clear{background:#f1f5f9;color:#94a3b8;}
.sal-history-list{display:flex;flex-direction:column;gap:6px;overflow-y:auto;flex:1;min-height:0;}
.sal-history-row{display:flex;align-items:center;gap:10px;padding:8px 12px;background:#f8fafc;border:1px solid var(--border-light);border-radius:10px;cursor:pointer;transition:background .15s ease;}
.sal-history-row:hover{background:#f1f5f9;}
.sal-history-text{flex:1;min-width:0;}
.sal-history-name{font-size:12.5px;font-weight:700;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sal-history-sub{font-size:10px;color:#94a3b8;font-weight:600;}
.sal-history-right{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex-shrink:0;}
.sal-history-amount{font-size:12.5px;font-weight:800;color:#16a34a;white-space:nowrap;}
.sal-history-method{font-size:9.5px;font-weight:700;color:#94a3b8;white-space:nowrap;}

/* Зарплаты: выплачено по сотрудникам за месяц — заполняет нижнюю часть вкладки реальной сводкой */
.sal-month-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px;}
.sal-month-card{display:flex;align-items:center;gap:10px;background:#f8fafc;border:1px solid var(--border-light);border-radius:12px;padding:10px 12px;cursor:pointer;transition:background .15s ease;}
.sal-month-card:hover{background:#f1f5f9;}
.sal-month-text{flex:1;min-width:0;}
.sal-month-name{font-size:12.5px;font-weight:700;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.sal-month-sub{font-size:10.5px;color:#94a3b8;font-weight:600;}
.sal-month-amount{font-size:13px;font-weight:800;color:#16a34a;white-space:nowrap;}

/* Задачи — узкий список справа от календаря (карточки, не таблица — слишком мало места) */
.task-filters{display:flex;flex-direction:column;gap:7px;flex-shrink:0;}
.task-filters .form-input{font-size:12px!important;font-weight:600;padding:8px 30px 8px 12px!important;border-radius:10px!important;background:#f8fafc!important;border-color:#e6ebf0!important;color:#475569;transition:all .15s ease;}
.task-filters .form-input:hover{border-color:#cbd5e1!important;background:#fff!important;}
.task-check{width:17px;height:17px;cursor:pointer;accent-color:var(--primary);flex-shrink:0;}
.task-side-list{display:flex;flex-direction:column;gap:6px;overflow-y:auto;flex:1;min-height:0;}
.task-side-list.client-tasks-list{flex:none;max-height:190px;margin-bottom:8px;}
.task-side-row{display:flex;align-items:center;gap:8px;padding:8px 9px;background:#f8fafc;border:1px solid var(--border-light);border-left:3px solid transparent;border-radius:10px;cursor:pointer;transition:background .15s ease;}
.task-side-row:hover{background:#f1f5f9;}
.task-side-row.status-overdue{border-left-color:#dc2626;background:#fef2f2;}
.task-side-row.status-today{border-left-color:#f59e0b;background:#fffaf0;}
.task-side-row.status-upcoming{border-left-color:var(--primary);}
.task-side-row.status-done{border-left-color:#cbd5e1;opacity:.7;}
.task-side-text{flex:1;min-width:0;}
.task-repeat-mark{font-size:11px;color:#6d28d9;}
.task-side-title{font-size:12px;font-weight:700;color:#1e293b;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.task-side-title.is-done,.task-day-row-title.is-done{color:#94a3b8;text-decoration:line-through;font-weight:600;}
.task-side-sub{font-size:10px;color:#94a3b8;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.avatar-circle.task-avatar-none{background:#cbd5e1;font-size:14px;}
.task-priority-dot{width:9px;height:9px;border-radius:50%;flex-shrink:0;}
.task-priority-dot.priority-high{background:#dc2626;}
.task-priority-dot.priority-normal{background:var(--primary);}
.task-priority-dot.priority-low{background:#cbd5e1;}
.task-priority-pill{padding:3px 9px;border-radius:999px;font-size:10.5px;font-weight:800;white-space:nowrap;}
.task-priority-pill.priority-low{background:#f1f5f9;color:#64748b;}
.task-priority-pill.priority-normal{background:var(--status-planned-bg);color:var(--primary-dark);}
.task-priority-pill.priority-high{background:#ffe4e6;color:#b91c1c;}
.task-fin-pill{padding:3px 9px;border-radius:999px;font-size:10.5px;font-weight:800;white-space:nowrap;flex-shrink:0;}
.task-fin-pill.fin-income{background:#dcfce7;color:#15803d;}
.task-fin-pill.fin-expense{background:#ffe4e6;color:#b91c1c;}

/* Чекбокс "это запланированный платеж" */
/* Тип задачи (Задача/Выплата) — тот же "плашка на треке" переключатель, что был у Список/Календарь */
.task-type-toggle{display:flex;gap:4px;background:#f1f5f9;padding:4px;border-radius:12px;}
.task-type-btn{flex:1;background:none;border:none;padding:9px 14px;border-radius:9px;font-size:12.5px;font-weight:800;color:#64748b;cursor:pointer;font-family:inherit;transition:all .15s ease;}
.task-type-btn:hover{color:var(--primary-dark);}
.task-type-btn.active{background:#fff;color:var(--primary-dark);box-shadow:0 2px 8px rgba(0,0,0,.1);}

/* Задачи — календарь: цвет карточки = срочность (просрочено/сегодня/предстоит/выполнено),
   полоска слева = приоритет (высокий/обычный/низкий) — две независимые шкалы, не смешаны в один цвет */
.task-cal-nav{display:flex;align-items:center;gap:6px;}
.task-cal-legend{display:flex;flex-wrap:wrap;gap:14px;align-items:center;font-size:10.5px;font-weight:700;color:#64748b;flex-shrink:0;background:#f8fafc;border:1px solid var(--border-light);border-radius:10px;padding:8px 12px;}
.tcl-item{display:flex;align-items:center;gap:5px;}
.tcl-swatch{width:10px;height:10px;border-radius:3px;display:inline-block;}
.tcl-swatch.status-overdue{background:#dc2626;}
.tcl-swatch.status-today{background:#f59e0b;}
.tcl-swatch.status-upcoming{background:var(--primary);}
.tcl-swatch.status-done{background:#cbd5e1;}
.tcl-note{font-style:italic;color:#94a3b8;font-weight:600;}
.task-cal-dow-row{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;flex-shrink:0;}
.task-cal-dow{font-size:10px;font-weight:800;color:#94a3b8;text-align:center;text-transform:uppercase;letter-spacing:.03em;padding:2px 0;}
.task-cal-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-auto-rows:1fr;gap:6px;flex:1;min-height:0;}
.task-cal-cell{background:#f8fafc;border:1px solid var(--border-light);border-radius:10px;padding:6px;display:flex;flex-direction:column;gap:3px;cursor:pointer;transition:all .15s ease;min-height:0;overflow:hidden;box-shadow:0 1px 2px rgba(15,23,42,.03);}
.task-cal-cell:hover{background:#fff;box-shadow:0 6px 14px rgba(15,23,42,.1);transform:translateY(-1px);border-color:#dbe3ea;}
.task-cal-cell.is-today{background:#fff;border-color:var(--primary);box-shadow:0 0 0 1.5px var(--primary) inset,0 4px 10px rgba(100,204,227,.18);}
.task-cal-cell.is-other-month{opacity:.4;}
.task-cal-grid .task-cal-cell:nth-child(7n+6),
.task-cal-grid .task-cal-cell:nth-child(7n){background:#f2f4f8;}
.task-cal-grid .task-cal-cell:nth-child(7n+6):hover,
.task-cal-grid .task-cal-cell:nth-child(7n):hover{background:#fff;}
.task-cal-daynum{font-size:11px;font-weight:800;color:#475569;flex-shrink:0;width:20px;height:20px;line-height:20px;text-align:center;border-radius:50%;}
.task-cal-cell.is-today .task-cal-daynum{background:var(--primary);color:#fff;box-shadow:0 2px 6px rgba(100,204,227,.5);}
.task-cal-dots{display:flex;flex-direction:column;gap:2px;overflow:hidden;}
.task-cal-dot{font-size:9px;font-weight:700;padding:1px 5px 1px 6px;border-radius:5px;border-left:3px solid transparent;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.task-cal-dot.status-overdue{background:#ffe4e6;color:#b91c1c;}
.task-cal-dot.status-today{background:#fff3e0;color:#b06000;}
.task-cal-dot.status-upcoming{background:var(--status-planned-bg);color:var(--primary-dark);}
.task-cal-dot.status-done{background:#f1f5f9;color:#94a3b8;text-decoration:line-through;}
.task-cal-dot.priority-high{border-left-color:#dc2626;}
.task-cal-dot.priority-normal{border-left-color:var(--primary);}
.task-cal-dot.priority-low{border-left-color:#94a3b8;}
.task-cal-dot.is-projected{background:transparent;border:1px dashed #cbd5e1;border-left-width:1px;color:#94a3b8;font-weight:600;}
.task-cal-more{font-size:9px;color:#94a3b8;font-weight:700;}

/* Явки — статус дня сотрудника: свой цвет на карточку календаря, плашку в модалке и легенду */
.tcl-swatch.att-worked,.att-cal-cell.att-worked .att-cal-status{background:#dcfce7;color:#166534;}
.tcl-swatch.att-off,.att-cal-cell.att-off .att-cal-status{background:#f1f5f9;color:#94a3b8;}
.tcl-swatch.att-sick,.att-cal-cell.att-sick .att-cal-status{background:#fef3c7;color:#b45309;}
.tcl-swatch.att-vacation,.att-cal-cell.att-vacation .att-cal-status{background:#dbeafe;color:#1d4ed8;}
.tcl-swatch.att-absent,.att-cal-cell.att-absent .att-cal-status{background:#fee2e2;color:#b91c1c;}
.att-cal-status{font-size:9.5px;font-weight:800;padding:2px 6px;border-radius:6px;text-align:center;}
.att-cal-mark{position:absolute;top:4px;right:6px;font-size:10px;}
.att-cal-cell{position:relative;}
.att-day-chip.is-on[data-att-status="worked"],#att-day-statuses [data-att-status="worked"].is-on{background:#dcfce7;border-color:#16a34a;color:#166534;}
#att-day-statuses [data-att-status="off"].is-on{background:#f1f5f9;border-color:#94a3b8;color:#475569;}
#att-day-statuses [data-att-status="sick"].is-on{background:#fef3c7;border-color:#f59e0b;color:#b45309;}
#att-day-statuses [data-att-status="vacation"].is-on{background:#dbeafe;border-color:#3b82f6;color:#1d4ed8;}
#att-day-statuses [data-att-status="absent"].is-on{background:#fee2e2;border-color:#dc2626;color:#b91c1c;}
#att-range-statuses [data-att-status="worked"].is-on{background:#dcfce7;border-color:#16a34a;color:#166534;}
#att-range-statuses [data-att-status="off"].is-on{background:#f1f5f9;border-color:#94a3b8;color:#475569;}
#att-range-statuses [data-att-status="sick"].is-on{background:#fef3c7;border-color:#f59e0b;color:#b45309;}
#att-range-statuses [data-att-status="vacation"].is-on{background:#dbeafe;border-color:#3b82f6;color:#1d4ed8;}
#att-range-statuses [data-att-status="absent"].is-on{background:#fee2e2;border-color:#dc2626;color:#b91c1c;}

/* Переключатель режимов на вкладке "Задачи" — Задачи / Табель. Крупнее и на заметном фоне,
   чтобы новый человек сразу увидел, что здесь два режима, а не просто заголовок вкладки */
.tasks-mode-toggle{display:flex;gap:4px;background:#f1f5f9;padding:5px;border-radius:14px;}
.tasks-mode-toggle .fin-period-pill{padding:11px 22px;font-size:14.5px;font-weight:800;border-radius:10px;transition:background .18s ease,color .18s ease,box-shadow .18s ease;}
.tasks-mode-toggle .fin-period-pill.active{box-shadow:0 4px 12px rgba(100,204,227,.45);}

/* Плавное появление блока при переключении режима (тот же почерк, что viewBlockIn для вкладок) */
.tasks-mode-enter{animation:viewBlockIn .38s cubic-bezier(.2,.7,.2,1) both;}

/* Пресеты смены (1/1, 2/2, 3/3, 4/1, 5/2) в карточке сотрудника */
.emp-shift-presets{display:flex;gap:5px;margin-top:6px;}
.emp-shift-presets .btn-mini{padding:3px 9px;font-size:11px;}

/* Табель явок — CSS-грид сотрудник × числа месяца (не таблица): каждая ячейка — своя
   скруглённая карточка с тенью и наведением, тот же почерк, что у .task-cal-cell в календаре
   "Задач". Первая колонка (имя) и первая строка (числа) закреплены при прокрутке. Строки
   растягиваются на всю доступную высоту (grid-template-rows: ... 1fr), чтобы табель занимал
   весь экран, а не оставлял пустое место снизу при малом числе сотрудников. */
.att-tabel-toolbar{display:flex;align-items:center;gap:8px;}
.att-tabel-wrap{overflow:auto;flex:1;min-height:0;border:1px solid var(--border-light);border-radius:14px;background:#f4f6f8;padding:10px;}
.att-tabel-grid{display:grid;gap:5px;min-height:100%;}
.att-tabel-cell{display:flex;align-items:center;justify-content:center;border-radius:9px;transition:transform .12s ease,box-shadow .12s ease,filter .12s ease;}

.att-tabel-head{position:sticky;top:0;z-index:2;background:#eef1f4;color:#8a94a3;font-weight:800;font-size:10.5px;letter-spacing:.03em;padding:8px 2px;}
.att-tabel-head.att-tabel-name-col{left:0;z-index:4;justify-content:flex-start;}

.att-tabel-name-col{position:sticky;left:0;z-index:1;background:#fff;text-align:left;padding:7px 12px 7px 16px;width:100%;box-sizing:border-box;box-shadow:0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-1{box-shadow:inset 4px 0 0 var(--teach-1),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-2{box-shadow:inset 4px 0 0 var(--teach-2),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-3{box-shadow:inset 4px 0 0 var(--teach-3),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-4{box-shadow:inset 4px 0 0 var(--teach-4),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-5{box-shadow:inset 4px 0 0 var(--teach-5),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-6{box-shadow:inset 4px 0 0 var(--teach-6),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-7{box-shadow:inset 4px 0 0 var(--teach-7),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-8{box-shadow:inset 4px 0 0 var(--teach-8),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-9{box-shadow:inset 4px 0 0 var(--teach-9),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-col.teach-10{box-shadow:inset 4px 0 0 var(--teach-10),0 1px 2px rgba(15,23,42,.04);}
.att-tabel-name-cell{display:flex;align-items:center;gap:8px;width:100%;overflow:hidden;}
.att-tabel-name-cell .avatar-circle{width:26px;height:26px;font-size:9.5px;flex-shrink:0;}
.att-tabel-name-text{display:flex;flex-direction:column;overflow:hidden;min-width:0;}
.att-tabel-name-main{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:700;color:var(--text-dark);font-size:12px;}
.att-tabel-name-hours{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-weight:600;color:#94a3b8;font-size:9.5px;}

.att-tabel-daycell{cursor:pointer;font-weight:800;font-size:12px;color:#94a3b8;background:#fff;border:1px solid var(--border-light);box-shadow:0 1px 2px rgba(15,23,42,.03);user-select:none;touch-action:none;}
.att-tabel-daycell.att-tabel-cell-selecting{box-shadow:0 0 0 2px var(--accent-warm) inset;background:#fdf1de;z-index:2;position:relative;}
.att-tabel-daycell:hover{transform:translateY(-1px);box-shadow:0 5px 12px rgba(15,23,42,.12);border-color:#dbe3ea;z-index:1;position:relative;}
.att-tabel-daycell.att-worked{background:#dcfce7;color:#166534;border-color:#bbf0d2;}
.att-tabel-daycell.att-off{background:#f8fafc;color:#cbd5e1;}
.att-tabel-daycell.att-sick{background:#fef3c7;color:#b45309;border-color:#fbe3a8;}
.att-tabel-daycell.att-vacation{background:#dbeafe;color:#1d4ed8;border-color:#bfdbfe;}
.att-tabel-daycell.att-absent{background:#fee2e2;color:#b91c1c;border-color:#fbc9c9;}
.att-tabel-daycell.is-today{box-shadow:0 0 0 2px var(--primary) inset,0 4px 10px rgba(100,204,227,.18);border-color:var(--primary);}
.att-tabel-daycell.is-weekend:not(.att-worked):not(.att-sick):not(.att-vacation):not(.att-absent){background:#f1f4f7;}
.att-tabel-daycell.is-out-of-range{background:transparent;border-color:transparent;box-shadow:none;color:#e2e8f0;cursor:default;}
.att-tabel-warn{color:#b45309;}

.att-tabel-total-col{background:transparent;}
.att-tabel-total-col span{display:inline-flex;align-items:center;justify-content:center;min-width:28px;padding:4px 8px;border-radius:8px;background:var(--status-planned-bg);color:var(--primary-dark);font-weight:800;font-size:11.5px;}

/* Подсветка/приглушение по выбранному в фильтре педагогу — тот же приём, что в сетке расписания */
.att-tabel-row-dimmed{opacity:.28;filter:grayscale(.3);}
.att-tabel-row-highlighted{box-shadow:0 0 0 2px var(--primary) inset;}
.att-tabel-row-highlighted.att-tabel-name-col{background:var(--status-planned-bg);}

.att-tabel-name-col.row-flash{animation:att-row-flash 1.5s ease;}
@keyframes att-row-flash{0%,100%{background:#fff;}30%{background:var(--status-planned-bg);}}

/* Список задач на день (из календаря) */
.task-day-list{display:flex;flex-direction:column;gap:6px;max-height:340px;overflow-y:auto;margin-bottom:6px;}
.task-day-row{display:flex;align-items:center;gap:10px;padding:9px 11px;background:#f8fafc;border:1px solid var(--border-light);border-radius:10px;cursor:pointer;transition:background .15s ease;}
.task-day-row:hover{background:#f1f5f9;}
.task-day-row.is-projected{cursor:default;background:transparent;border-style:dashed;opacity:.75;}
.task-day-row.is-projected:hover{background:transparent;}
.task-day-row.is-projected .task-day-row-title{color:#94a3b8;}
.task-day-row-text{flex:1;min-width:0;}
.task-day-row-title{font-size:12.5px;font-weight:700;color:#1e293b;}
.task-day-row-sub{font-size:10.5px;color:#94a3b8;font-weight:600;}

/* Отчеты: всё на одном экране без скроллов, поэтому 12 карточек показателей — одна плотная
   полоса (уже и ниже, чем в остальных вкладках), а сводные цифры живут только здесь и не
   повторяются в блоках ниже — блоки под ними получают всю оставшуюся высоту */
.widget-rep .fin-widgets{gap:8px;flex-shrink:0;}
.widget-rep .fin-card{min-width:92px;padding:8px 10px;border-radius:12px;}
.widget-rep .fin-card-label{font-size:10.5px;}
.widget-rep .fin-card-value{font-size:15px;margin-top:2px;}
.widget-rep .block-title{font-size:13px;}
.widget-rep.left-block,.widget-rep.right-block{padding:12px 14px;gap:8px;}
.widget-rep .crm-table th,.widget-rep .crm-table td{padding:6px 9px;}
.widget-rep .rep-source-row{padding:5px 9px;}
.rep-money{white-space:nowrap;font-weight:800;}
.rep-money-in{color:#16a34a;}
.rep-money-out{color:#b06000;}
.rep-money-share{display:inline-block;margin-left:5px;font-size:10px;font-weight:700;color:#94a3b8;}
.rep-total-row td{background:#f8fafc;font-weight:800;border-top:2px solid var(--border-light);}

/* Отчеты: у каждого блока свой период — селект в виде маленького чипа в заголовке.
   «Как сверху» (пустое значение) — серый и ненавязчивый, свой период — подсвечен акцентом,
   чтобы с первого взгляда было видно, какие блоки живут отдельно от общего селектора */
.rep-period-select{appearance:none;-webkit-appearance:none;background:#f1f5f9 url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'><path d='M2 3.5l3 3 3-3' fill='none' stroke='%2364748b' stroke-width='1.5'/></svg>") no-repeat right 7px center;border:1.5px solid transparent;border-radius:999px;padding:3px 22px 3px 10px;font-size:11px;font-weight:700;color:#64748b;cursor:pointer;font-family:inherit;line-height:1.3;max-width:100%;}
.rep-period-select:hover{background-color:#e2e8f0;color:var(--primary-dark);}
.rep-period-select.is-override{background-color:var(--status-planned-bg);border-color:var(--primary);color:var(--primary-dark);}
.rep-period-fixed{font-size:11px;font-weight:700;color:#94a3b8;background:#f8fafc;border:1.5px dashed #cbd5e1;border-radius:999px;padding:3px 10px;white-space:nowrap;cursor:help;}
.widget-rep .fin-period-right{flex-direction:column;align-items:flex-end;gap:2px;}
.rep-period-scope{text-align:right;white-space:nowrap;}

/* Отчеты: загрузка кабинетов (доля занятых слотов от общего числа за период) */
.rep-meter-list{display:flex;flex-direction:column;gap:8px;flex-shrink:0;}
.rep-meter-row{display:grid;grid-template-columns:56px 1fr 38px;align-items:center;gap:8px;}
.rep-meter-label{font-size:11.5px;font-weight:700;color:#475569;}
.rep-meter-track{height:9px;background:#f1f5f9;border-radius:6px;overflow:hidden;}
.rep-meter-fill{height:100%;background:var(--primary);border-radius:0 4px 4px 0;min-width:3px;}
.rep-meter-value{font-size:11px;font-weight:800;color:var(--text-dark);text-align:right;font-variant-numeric:tabular-nums;}

/* Отчеты: источники лидов — ранжированный список, без графика */
.rep-source-list{display:flex;flex-direction:column;gap:6px;overflow-y:auto;flex:1;min-height:0;}
.rep-source-row{display:flex;justify-content:space-between;align-items:center;padding:7px 10px;background:#f8fafc;border-radius:8px;border:1px solid var(--border-light);}
.rep-source-name{font-size:12px;font-weight:700;color:#1e293b;}
.rep-source-count{font-size:12px;font-weight:800;color:var(--primary-dark);white-space:nowrap;}

/* ---- Виджеты: доска вкладки — сетка 6×8 клеток, блоки лежат прямоугольниками (см. js/widgets.js) ---- */
.widget-board{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));grid-template-rows:repeat(8,minmax(0,1fr));gap:12px;flex:1;min-height:0;min-width:0;position:relative;}
.widget{min-width:0;min-height:0;position:relative;display:flex;flex-direction:column;overflow:hidden;}
.widget.left-block{flex:none;}
.widget-cards{justify-content:center;gap:6px;}
.widget-cards .fin-widgets{flex-wrap:nowrap;}
.widget-cards .fin-card{min-width:0;padding:8px 10px;border-radius:12px;}
.widget-cards .fin-card-label{font-size:10.5px;}
.widget-cards .fin-card-value{font-size:16px;margin-top:1px;}
.widget-bare{justify-content:center;}
/* Внутренние списки и таблицы занимают всю высоту блока и прокручиваются внутри него */
.widget .emp-grid-container,.widget .emp-summary-list,.widget .crm-table-container,.widget .fin-cat-list,.widget .rep-source-list,.widget .rep-meter-list,.widget .fin-debtors-list,.widget .sal-history-list,.widget .sal-month-grid-wrap{flex:1 1 0;max-height:none;min-height:0;overflow-y:auto;}
/* Режим настройки: видна сетка, у блоков жёлтая полоска и уголок */
.widget-board.is-editing{padding-bottom:64px;background-image:linear-gradient(to right,rgba(245,158,11,.18) 1px,transparent 1px),linear-gradient(to bottom,rgba(245,158,11,.18) 1px,transparent 1px);background-origin:content-box;background-clip:content-box;background-size:calc((100% + 12px) / 6) calc((100% + 12px) / 8);border-radius:6px;}
.widget-board.is-editing .widget{outline:1.5px dashed #f59e0b;outline-offset:2px;border-radius:14px;}
.widget-toolbar{display:flex;align-items:center;gap:6px;padding:4px 8px;background:#fffbeb;border:1px solid #fde68a;border-radius:10px;font-size:11px;flex-shrink:0;cursor:grab;user-select:none;}
.widget-toolbar:active{cursor:grabbing;}
.widget-toolbar-grip{font-size:14px;color:#d97706;letter-spacing:-2px;}
.widget-toolbar-title{font-weight:800;color:#92400e;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.widget-toolbar-from{font-weight:600;color:#a16207;}
.widget-toolbar-size{font-weight:700;color:#a16207;background:#fff;border:1px solid #fde68a;border-radius:6px;padding:1px 6px;}
.widget-tb-btn{background:none;border:none;font:inherit;font-size:11px;font-weight:800;color:#92400e;padding:3px 7px;border-radius:6px;cursor:pointer;line-height:1;}
.widget-tb-btn:hover{background:#fef3c7;}
.widget-tb-btn.widget-tb-danger:hover{background:#fee2e2;color:#b91c1c;}
.widget-resize{position:absolute;right:2px;bottom:0;width:22px;height:22px;display:flex;align-items:flex-end;justify-content:flex-end;color:#d97706;font-size:16px;line-height:1;cursor:nwse-resize;user-select:none;z-index:2;}
.widget-resize:hover{color:#b45309;}
/* Перетаскивание: сам блок полупрозрачный, "призрак" показывает, куда он встанет */
.widget.is-dragging{opacity:.35;}
body.widget-dragging{cursor:grabbing;user-select:none;}
.widget-ghost{border:2px dashed #f59e0b;background:rgba(245,158,11,.12);border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:800;color:#b45309;pointer-events:none;z-index:3;}
.widget-ghost.is-blocked{border-color:#ef4444;background:rgba(239,68,68,.12);color:#b91c1c;}
/* Плавающая панель режима настройки — внизу по центру, яркая, чтобы её нельзя было не заметить */
.layout-edit-bar{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:900;display:flex;align-items:center;gap:8px;padding:8px 10px 8px 16px;background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;border-radius:999px;box-shadow:0 12px 32px rgba(180,83,9,.45),0 0 0 4px rgba(245,158,11,.25);animation:layoutBarIn .25s ease;max-width:calc(100vw - 32px);}
@keyframes layoutBarIn{from{transform:translate(-50%,20px);opacity:0;}to{transform:translate(-50%,0);opacity:1;}}
.layout-edit-title{font-size:13px;font-weight:800;white-space:nowrap;}
.layout-edit-hint{font-size:11px;font-weight:600;opacity:.9;white-space:nowrap;padding-right:6px;border-right:1px solid rgba(255,255,255,.4);}
.layout-btn{background:rgba(255,255,255,.18);border:1.5px solid rgba(255,255,255,.55);color:#fff;font:inherit;font-size:12px;font-weight:800;padding:7px 14px;border-radius:999px;cursor:pointer;white-space:nowrap;transition:background .15s ease;}
.layout-btn:hover{background:rgba(255,255,255,.32);}
.layout-btn-done{background:#fff;color:#b45309;border-color:#fff;font-size:13px;padding:8px 18px;}
.layout-btn-done:hover{background:#fff7ed;}
@media (max-width:1500px){.layout-edit-hint{display:none;}}
#btn-layout-edit.is-active{background:#fef3c7;color:#b45309;}
/* Окно "Добавить блок" */
.widget-add-list{display:flex;flex-direction:column;gap:10px;max-height:60vh;overflow-y:auto;margin:10px 0;}
.widget-add-group{display:flex;flex-direction:column;gap:6px;}
.widget-add-chips{display:flex;flex-wrap:wrap;gap:6px;}
.widget-edit-label{font-size:11px;font-weight:800;color:#64748b;letter-spacing:.3px;text-transform:uppercase;}
.widget-edit-note{font-size:11px;color:#94a3b8;font-weight:600;}
.widget-add-chip{background:#f8fafc;border:1.5px solid var(--border-light);border-radius:999px;padding:6px 12px;font:inherit;font-size:12px;font-weight:700;color:#1e293b;cursor:pointer;text-align:left;}
.widget-add-chip:hover{border-color:var(--primary);background:var(--status-planned-bg);}

/* Настройки: карточки-кнопки резервной копии и обслуживания */
.set-actions-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:10px;}
.set-action-card{display:flex;align-items:center;gap:12px;background:#f8fafc;border:1.5px solid var(--border-light);border-radius:12px;padding:12px 14px;cursor:pointer;font-family:inherit;text-align:left;transition:all .15s ease;}
.set-action-card:hover{border-color:var(--primary);background:var(--status-planned-bg);}
.set-action-card.set-action-danger:hover{border-color:#ef4444;background:#fef2f2;}
.set-action-icon{font-size:19px;flex-shrink:0;width:36px;height:36px;display:flex;align-items:center;justify-content:center;background:#fff;border-radius:10px;border:1px solid var(--border-light);}
.set-action-text{display:flex;flex-direction:column;gap:1px;min-width:0;}
.set-action-title{font-size:12.5px;font-weight:800;color:#1e293b;}
.set-action-sub{font-size:10.5px;color:#94a3b8;font-weight:600;}

/* Настройки: сетка компактных карточек, при нехватке места — прокрутка всей вкладки.
   align-items:start — каждая карточка своей естественной высоты, а не растянута до
   самой высокой в строке (иначе соседи "Пользователей и прав" раздувались бы вхолостую). */
#view-settings{gap:12px;}
#view-settings{overflow-y:auto;padding-right:4px;}
/* Копия базы — раньше была отдельной большой карточкой в сетке настроек ("Данные и
   обслуживание"), теперь просто тонкая панель сверху страницы: экспорт/импорт нужны только
   для переезда на другую систему или переноса данных при подключении к нам, отдельного модуля
   это не заслуживает. Тестовые данные/полный сброс убраны из видимых настроек совсем. */
.set-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#fff;border:1px solid var(--border-light);border-radius:12px;padding:10px 14px;flex-shrink:0;}
.set-toolbar-label{font-size:11px;font-weight:700;color:var(--text-muted);white-space:nowrap;}
.set-toolbar-sep{width:1px;height:20px;background:var(--border-light);flex-shrink:0;}
/* padding-right отдельно — под стрелочку select.form-input (см. её правило: иконка на
   right:12px, без места под неё стрелка наезжает на текст) */
.set-toolbar #set-backup-days{width:auto;padding:4px 30px 4px 10px;font-size:12px;background-position:right 8px center;}
.set-toolbar #set-last-backup{margin-left:2px;}
.set-toolbar .storage-note{margin-left:auto;}
.deny-data-manage #data-manage-toolbar{display:none!important;}
.set-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;flex:0 0 auto;align-items:start;}
.set-card-wide{grid-column:span 2;}
.set-header-actions{display:flex;align-items:center;gap:6px;flex-shrink:0;}
.set-header-actions-wrap{flex-wrap:wrap;}
.set-users-grid{display:grid;grid-template-columns:1fr;gap:12px;flex:1;min-height:0;}
.set-users-col{display:flex;flex-direction:column;gap:6px;min-width:0;min-height:0;}
.set-users-security{margin-top:auto;}
/* Роли: сводка в карточке и бейдж у пользователя */
.set-roles-summary{display:flex;flex-direction:column;gap:4px;}
.set-role-row{display:flex;align-items:center;gap:8px;padding:5px 8px;background:#f8fafc;border:1px solid var(--border-light);border-radius:8px;font-size:11px;}
.set-role-scope{flex:1;min-width:0;color:#64748b;font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.set-role-users{color:#94a3b8;font-weight:700;white-space:nowrap;}
.set-role-pill{display:inline-block;padding:1px 7px;border-radius:999px;background:#eef2ff;color:#4338ca;font-size:10px;font-weight:800;white-space:nowrap;vertical-align:middle;}
.set-role-pill-owner{background:#fef3c7;color:#b45309;}
/* Рабочие дни — чипы Пн…Вс */
.set-day-chips{display:flex;gap:4px;flex-wrap:wrap;}
.set-day-chip{flex:1;min-width:30px;padding:5px 0;border-radius:8px;border:1.5px solid var(--border-light);background:#f8fafc;color:#94a3b8;font-size:11px;font-weight:800;cursor:pointer;font-family:inherit;transition:all .15s ease;}
.set-day-chip.is-on{background:var(--status-planned-bg);border-color:var(--primary);color:var(--primary-dark);}
.set-day-chip:hover{border-color:var(--primary);}
/* Справочник: пункты-чипы в редакторе */
.set-chip-list{display:flex;flex-wrap:wrap;gap:6px;max-height:220px;overflow-y:auto;padding:2px 0;}
.set-chip{display:inline-flex;align-items:center;gap:4px;padding:4px 6px 4px 10px;border-radius:999px;background:#f1f5f9;border:1px solid var(--border-light);font-size:12px;font-weight:700;color:#1e293b;}
.set-chip-x{background:none;border:none;color:#94a3b8;cursor:pointer;font-size:11px;padding:0 4px;line-height:1;font-family:inherit;border-radius:50%;}
.set-chip-x:hover{color:#b91c1c;background:#fee2e2;}
.set-inline-input-grow .form-input{flex:1;width:auto;}
/* Замок на карточке настроек, если у роли нет права */
.set-lock-badge{font-size:10px;font-weight:700;color:#94a3b8;white-space:nowrap;margin-left:auto;}
.set-card.is-locked .set-fields,.set-card.is-locked .fin-cat-list,.set-card.is-locked .set-actions-grid,.set-card.is-locked .set-users-grid,.set-card.is-locked .set-day-chips{opacity:.5;pointer-events:none;}
.set-card.is-locked .block-header .btn-add-inline,.set-card.is-locked .block-header .btn-mini,.set-card.is-locked .block-header .set-autosave{display:none;}
.set-audit.is-locked .crm-table-container{display:none;}
/* Таблица ролей и прав */
.roles-modal{max-width:920px;}
.roles-modal-head{display:flex;align-items:center;justify-content:space-between;gap:10px;}
.roles-modal-head h3{margin:0;}
.roles-table-wrap{max-height:60vh;margin-top:8px;}
.roles-table th,.roles-table td{padding:6px 10px;vertical-align:middle;}
.roles-table .roles-perm-col{width:46%;font-size:12px;font-weight:700;color:#1e293b;}
.roles-perm-hint{font-size:10.5px;color:#94a3b8;font-weight:600;margin-top:1px;}
.roles-role-col{text-align:center;position:relative;}
.roles-role-name{display:block;font-size:12px;font-weight:800;color:#1e293b;}
.roles-role-name-editable{cursor:pointer;text-decoration:underline dotted #94a3b8;}
.roles-role-users{display:block;font-size:10px;color:#94a3b8;font-weight:600;}
.roles-role-lock{font-size:11px;}
.roles-role-del{position:absolute;top:4px;right:4px;padding:1px 6px;}
.roles-group-row td{background:#f8fafc;font-size:10.5px;font-weight:800;color:#64748b;letter-spacing:.4px;text-transform:uppercase;padding:5px 10px;}
.roles-restriction-row .roles-perm-col{color:#b45309;}
.roles-cell{text-align:center;}
.roles-check{display:inline-flex;cursor:pointer;}
.roles-check input{position:absolute;opacity:0;width:0;height:0;margin:0;}
.roles-check-box{width:18px;height:18px;border-radius:5px;border:1.5px solid #cbd5e1;background:#fff;display:inline-flex;align-items:center;justify-content:center;transition:all .15s ease;}
.roles-check input:checked+.roles-check-box{background:var(--primary);border-color:var(--primary);}
.roles-check input:checked+.roles-check-box::after{content:'';width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);margin-top:-2px;}
.roles-check.is-disabled{cursor:default;opacity:.55;}
.roles-check input:focus-visible+.roles-check-box{box-shadow:0 0 0 3px rgba(100,204,227,.35);}
/* Напоминание о лиде */
.srp-item.srp-lead{border-color:#e9d5ff;border-left-color:#8b5cf6;}
.srp-item.srp-lead:hover{background:#faf5ff;}

/* ---- Права: скрываем кнопки действий, на которые у роли нет разрешения (классы на body) ---- */
.deny-schedule-edit #view-schedule .btn-add-inline,.deny-schedule-edit #day-focus-overlay .btn-add-inline,.deny-schedule-edit #det-delete,.deny-schedule-edit #det-move,.deny-schedule-edit #det-edit,.deny-schedule-edit #det-save,.deny-schedule-edit #det-status-select,.deny-schedule-edit #det-status-group{display:none!important;}
.deny-clients-edit #btn-add-client,.deny-clients-edit #btn-add-lead,.deny-clients-edit #client-save,.deny-clients-edit #client-delete,.deny-clients-edit #lead-save,.deny-clients-edit #lead-delete,.deny-clients-edit [data-lead-convert],.deny-clients-edit [data-lead-delete],.deny-clients-edit #client-archive-box,.deny-clients-edit #client-access-box,.deny-clients-edit #history-add-btn,.deny-clients-edit #client-file-add-btn,.deny-clients-edit #client-task-add-btn{display:none!important;}
.deny-clients-docs #btn-open-diag-doc,.deny-clients-docs #btn-open-plan-doc{display:none!important;}
.deny-finance-edit #btn-accept-payment,.deny-finance-edit #btn-add-finance-expense,.deny-finance-edit #btn-fin-categories,.deny-finance-edit [data-fin-delete]{display:none!important;}
.deny-finance-expenses .fin-module-expense,.deny-finance-expenses .fin-module-transfer,.deny-finance-expenses #fin-period-profit{display:none!important;}
.deny-salary-pay [data-pay],.deny-salary-pay #btn-pay-all,.deny-salary-pay [data-payout-cancel]{display:none!important;}
.deny-salary-view #emp-rate-group,.deny-salary-view #emp-pay-stats,.deny-salary-view .emp-card-stat-rate,.deny-salary-view #emp-summary-block,.deny-salary-view #emp-stat-rate-card{display:none!important;}
.deny-attendance-edit #tasks-mode-attendance-btn,.deny-attendance-edit #emp-open-attendance{display:none!important;}
.deny-employees-edit #btn-add-employee,.deny-employees-edit #emp-save,.deny-employees-edit #emp-delete,.deny-employees-edit #emp-file-add-btn{display:none!important;}
.set-card{padding:12px 14px;gap:8px;}
.set-card .block-title{font-size:13px;white-space:nowrap;}
.set-card .form-hint{line-height:1.35;}
.set-autosave{font-size:10px;font-weight:700;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.set-fields{display:flex;flex-direction:column;gap:7px;flex:1;min-height:0;overflow-y:auto;}
/* ПРАВИЛО СЕТКИ КАРТОЧЕК (не менять точечно под одну карточку!): все разворачиваемые карточки
   (.widget) в сетке настроек — ОДНОЙ фиксированной высоты, не "до X", а РОВНО X. Только так все
   карточки в строке выравниваются по нижнему краю независимо от объёма контента — иначе при
   любом max-height каждая карточка обрежется на своей высоте, и край останется рваным.
   Кому контента мало — честно немного пустого места внизу (это нормально и предсказуемо).
   Кому контента много — прокрутка внутри + кнопка ⛶ (см. widget-expand-trigger в app.js), которая
   физически переносит карточку в оверлей (openListFocus в clients.js) — там это правило уже не
   действует, карточка получает всю высоту оверлея. */
.set-grid .widget.set-card{height:340px;overflow:hidden;}
.set-section-label{font-size:10.5px;font-weight:700;color:#94a3b8;text-transform:uppercase;letter-spacing:.4px;border-top:1px solid #eef1f6;padding-top:10px;margin-top:2px;}
.set-fields .form-row{gap:8px;}
.set-fields .form-group{margin-bottom:0;gap:3px;}
.set-fields .form-group label{font-size:10.5px;letter-spacing:.2px;}
.set-fields .form-input{padding:7px 10px;font-size:12.5px;border-radius:9px;}
.set-fields select.form-input{padding-right:30px;background-position:right 10px center;}
.set-inline-input{display:flex;align-items:center;gap:8px;}
.set-inline-input .form-input{width:84px;}
.set-inline-unit{font-size:12px;color:#64748b;font-weight:700;}
#set-validity-by-size .set-inline-input{margin-bottom:6px;}
#set-validity-by-size .set-inline-input:last-child{margin-bottom:0;}
.set-validity-size-label{font-size:12px;color:#475569;font-weight:600;min-width:110px;}
.set-toggle-row{display:flex;align-items:stretch;gap:6px;}
.set-toggle-row .set-toggle{flex:1;min-width:0;}
.set-fields .set-toggle-select{width:104px;flex-shrink:0;align-self:center;padding:6px 26px 6px 8px;font-size:11.5px;}
/* Переключатель "вкл/выкл" — вместо галочки, чтобы состояние читалось с первого взгляда */
.set-toggle{position:relative;display:flex;align-items:flex-start;gap:10px;padding:8px 10px;background:#f8fafc;border:1px solid var(--border-light);border-radius:10px;cursor:pointer;transition:background .15s ease;}
.set-toggle:hover{background:#f1f5f9;}
.set-toggle input{position:absolute;opacity:0;width:0;height:0;margin:0;}
.set-toggle-track{position:relative;flex-shrink:0;width:34px;height:20px;border-radius:999px;background:#cbd5e1;transition:background .15s ease;margin-top:1px;}
.set-toggle-thumb{position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 2px rgba(0,0,0,.2);transition:left .15s ease;}
.set-toggle input:checked+.set-toggle-track{background:var(--primary);}
.set-toggle input:checked+.set-toggle-track .set-toggle-thumb{left:16px;}
.set-toggle input:focus-visible+.set-toggle-track{box-shadow:0 0 0 3px rgba(100,204,227,.35);}
.set-toggle-text{display:flex;flex-direction:column;gap:1px;min-width:0;}
.set-toggle-title{font-size:12px;font-weight:800;color:#1e293b;}
.set-toggle-sub{font-size:10.5px;color:#94a3b8;font-weight:600;line-height:1.3;}
.set-room-note{font-weight:600;color:#64748b;}
.set-room-hidden{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:6px;background:#f1f5f9;color:#94a3b8;font-size:9px;font-weight:800;text-transform:uppercase;letter-spacing:.03em;vertical-align:middle;}
.fin-cat-row-inactive{opacity:.55;}
.set-card .fin-cat-list{flex:1;min-height:0;max-height:200px;}
.set-card .fin-cat-row{padding:6px 10px;gap:8px;}
.set-actions-column{grid-template-columns:1fr 1fr;gap:6px;}
.set-actions-column .set-action-card{padding:7px 10px;gap:10px;border-radius:10px;}
.set-actions-column .set-action-icon{width:30px;height:30px;font-size:16px;border-radius:8px;}
.set-actions-column .set-action-title{font-size:11.5px;line-height:1.25;}
.set-actions-column .set-action-sub{font-size:10px;}
.set-audit{min-height:280px;}
/* На ноутбучных экранах (1366×768) пояснения под переключателями и кнопками прячем в
   всплывающую подсказку — иначе карточкам не остаётся места */
@media (max-width: 1500px) {
    .set-grid{gap:9px;}
    .set-card{padding:10px 12px;gap:6px;}
    .set-toggle{padding:6px 10px;align-items:center;}
    .set-toggle-sub,.set-actions-column .set-action-sub{display:none;}
    .set-actions-column .set-action-card{padding:5px 10px;}
    .set-actions-column .set-action-icon{width:26px;height:26px;font-size:14px;}
    .set-fields{gap:5px;}
}

/* Легенда */
.crm-legend-container{display:flex;justify-content:center;align-items:center;gap:16px;padding:10px 20px;background:#fff;border:1px solid var(--border-light);border-radius:14px;width:100%;box-sizing:border-box;flex-wrap:wrap;}
.legend-item{display:flex;align-items:center;gap:6px;font-size:11px;font-weight:700;color:#475569;}
/* Кружок, а не квадрат — соответствует виду точки статуса на самой карточке (см. .c-status-dot):
   цвет карточки теперь по педагогу, статус — только эта маленькая точка */
.legend-color{width:10px;height:10px;border-radius:50%;}
.legend-color.l-planned{background:var(--status-planned-txt);}
.legend-color.l-completed{background:var(--status-completed-txt);}
.legend-color.l-sick{background:var(--status-sick-txt);}
.legend-color.l-skip{background:var(--status-skip-txt);}
.legend-color.l-moved{background:var(--status-moved-txt);}

/* День крупным планом */
.column-title-clickable{cursor:pointer;transition:color .15s ease;}
.column-title-clickable:hover{color:var(--primary-dark);}

.day-focus-overlay{display:none;position:fixed;inset:0;background:rgba(10,32,38,.6);backdrop-filter:blur(4px);z-index:9500;align-items:center;justify-content:center;gap:24px;padding:40px;box-sizing:border-box;}
.day-focus-overlay.open{display:flex;}

.day-focus-side{flex:0 0 200px;align-self:center;height:66%;background:linear-gradient(160deg,#ffffff 0%,#f2fbfd 100%);border-radius:20px;filter:blur(2.5px);opacity:.5;transform:scale(.9);cursor:pointer;overflow:hidden;transition:filter .2s ease,opacity .2s ease,transform .2s ease;padding:20px;box-sizing:border-box;text-align:center;box-shadow:0 20px 50px rgba(0,0,0,.25);}
.day-focus-side:hover{filter:blur(1px);opacity:.85;transform:scale(.94);}
.day-focus-side-day{font-size:15px;font-weight:800;margin-top:8px;}
.day-focus-side-date{font-size:12px;color:#64748b;font-weight:700;margin-top:4px;}
.day-focus-side-count{display:inline-block;font-size:11px;font-weight:700;color:var(--primary-dark);background:var(--status-planned-bg);padding:4px 10px;border-radius:999px;margin-top:14px;}

/* Список крупным планом (лиды/клиенты/архив/контрагенты) — блок целиком переезжает сюда,
   так что внутри работает всё то же самое: поиск, кнопки, клики по строкам. */
.widget-expand-trigger{cursor:pointer;display:flex;align-items:center;gap:6px;}
.widget-expand-icon{font-size:13px;opacity:.45;transition:opacity .15s ease;}
.widget-expand-trigger:hover .widget-expand-icon{opacity:1;color:var(--primary-dark);}
.list-focus-overlay{position:fixed;inset:0;background:rgba(10,32,38,.6);backdrop-filter:blur(4px);z-index:9500;display:flex;align-items:center;justify-content:center;padding:32px;box-sizing:border-box;}
.list-focus-card{position:relative;width:100%;max-width:1100px;height:100%;max-height:860px;background:var(--bg-main);border-radius:20px;box-shadow:0 30px 80px rgba(0,0,0,.4);box-sizing:border-box;overflow:hidden;display:flex;animation:popIn .2s ease;}
@keyframes popIn{from{opacity:0;transform:scale(.96);}to{opacity:1;transform:scale(1);}}
.list-focus-close{position:absolute;top:14px;right:14px;z-index:2;background:#fff;border:1px solid var(--border-light);width:34px;height:34px;border-radius:50%;font-size:15px;cursor:pointer;box-shadow:0 4px 12px rgba(0,0,0,.12);}
.list-focus-close:hover{background:#fef2f2;color:#b91c1c;}
.list-focus-body{flex:1;min-width:0;padding:22px;box-sizing:border-box;display:flex;}
.list-focus-body .widget{width:100%;height:100%;}
.list-focus-body .crm-table-container{flex:1 1 0;max-height:none;}
.list-focus-body .set-card .fin-cat-list{max-height:none;}
.list-focus-body .block-title{font-size:16px;}

.day-focus-center{flex:0 0 auto;width:920px;max-width:100%;height:92%;background:#fff;border-radius:24px;box-shadow:0 30px 80px rgba(0,0,0,.4);overflow:hidden;box-sizing:border-box;transform:scale(.88);opacity:0;transition:transform .25s ease,opacity .25s ease;display:flex;flex-direction:column;}
.regular-focus-center{width:1400px;max-width:94vw;padding:18px;}
.regular-focus-center .regular-card{flex:1;height:100%;box-shadow:none;border:none;padding:0;}
.day-focus-overlay.open .day-focus-center{transform:scale(1);opacity:1;}
.day-focus-header{
    display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-shrink:0;
    padding:14px 22px;
    background:
        radial-gradient(circle at 12% -10%, rgba(255,255,255,.35), transparent 55%),
        radial-gradient(circle at 100% 120%, rgba(217,102,140,.55), transparent 60%),
        linear-gradient(120deg, var(--primary) 0%, #4fb9d6 45%, #7c6fe0 100%);
}
.day-focus-title{font-size:18px;font-weight:800;color:#fff;letter-spacing:-.02em;}
.day-focus-date{font-size:12px;color:rgba(255,255,255,.85);font-weight:700;margin-top:1px;text-transform:capitalize;}
.day-focus-header .btn-add-inline{background:#fff!important;color:var(--primary-dark)!important;flex-shrink:0;}
.day-focus-header .btn-add-inline:hover{background:#eaf7fa!important;}
.day-focus-body{padding:12px 20px 16px;overflow-y:auto;flex:1;min-height:0;}
.day-focus-stats{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px;}
.day-focus-body .teacher-legend{margin-bottom:14px;}
.dfs-chip{background:#f8fafc;border:1px solid var(--border-light);border-radius:999px;padding:4px 11px;font-size:11px;font-weight:700;color:#64748b;}
.dfs-chip b{color:var(--text-dark);font-size:12.5px;margin-right:3px;}
.dfs-chip.dfs-completed{background:var(--status-completed-bg);border-color:transparent;color:var(--status-completed-txt);}
.dfs-chip.dfs-completed b{color:var(--status-completed-txt);}
.dfs-chip.dfs-planned{background:var(--status-planned-bg);border-color:transparent;color:var(--status-planned-txt);}
.dfs-chip.dfs-planned b{color:var(--status-planned-txt);}
.dfs-chip.dfs-other{background:#fef7e0;border-color:transparent;color:#b06000;}
.dfs-chip.dfs-other b{color:#b06000;}
.day-focus-rooms{display:flex;gap:14px;align-items:flex-start;}
.day-focus-room-col{flex:1;min-width:0;display:flex;flex-direction:column;}
.day-focus-room-title{display:flex;align-items:center;justify-content:center;gap:8px;font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.06em;color:#94a3b8;padding:0 4px 6px;text-align:center;}
.dfr-room-count{background:#f1f5f9;color:#64748b;font-size:10.5px;font-weight:800;padding:1px 7px;border-radius:999px;}
.day-focus-room-cards{display:flex;flex-direction:column;gap:4px;}
.dfc-card{position:relative;background:#f8fafc;border:1px solid var(--border-light);border-left:3px solid transparent;border-radius:8px;padding:3px 7px;cursor:pointer;transition:background .15s ease,transform .15s ease;}
.dfc-card:hover{transform:translateY(-1px);}
.dfc-card.dfc-card-diag{border-style:dashed;border-color:#0e9aa7!important;}
/* min-height держит место под пометки даже у обычных занятий (dfc-marks тогда пустой),
   чтобы карточки в одном ряду не были то выше, то ниже */
.dfc-marks{display:inline-flex;gap:4px;min-height:13px;}
.dfc-mark{font-size:9px;font-weight:800;padding:1px 5px;border-radius:999px;white-space:nowrap;}
.dfc-mark-move{background:#ede9fe;color:#6d28d9;}
.dfc-mark-diag{background:#cffafe;color:#0e7490;}
.dfc-time{font-size:10px;font-weight:800;color:#475569;display:flex;align-items:center;justify-content:space-between;gap:6px;line-height:1.3;}
.dfc-child{font-size:11px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3;}
.dfc-teacher{display:flex;align-items:center;gap:4px;font-size:9.5px;color:#64748b;line-height:1.3;white-space:nowrap;overflow:hidden;}
.dfc-teacher .client-link{overflow:hidden;text-overflow:ellipsis;}
.dfr-dot{width:6px;height:6px;border-radius:50%;flex-shrink:0;}

/* Цвет карточки — по педагогу, не по статусу (см. .kanban-card в основной сетке для того же
   изменения). Статус занятия — точка в верхнем правом углу, см. .dfc-status-dot */
.dfc-card.teach-1{background:color-mix(in srgb, var(--teach-1) 14%, white);border-left-color:var(--teach-1);}
.dfc-card.teach-2{background:color-mix(in srgb, var(--teach-2) 14%, white);border-left-color:var(--teach-2);}
.dfc-card.teach-3{background:color-mix(in srgb, var(--teach-3) 14%, white);border-left-color:var(--teach-3);}
.dfc-card.teach-4{background:color-mix(in srgb, var(--teach-4) 14%, white);border-left-color:var(--teach-4);}
.dfc-card.teach-5{background:color-mix(in srgb, var(--teach-5) 14%, white);border-left-color:var(--teach-5);}
.dfc-card.teach-6{background:color-mix(in srgb, var(--teach-6) 14%, white);border-left-color:var(--teach-6);}
.dfc-card.teach-7{background:color-mix(in srgb, var(--teach-7) 14%, white);border-left-color:var(--teach-7);}
.dfc-card.teach-8{background:color-mix(in srgb, var(--teach-8) 14%, white);border-left-color:var(--teach-8);}
.dfc-card.teach-9{background:color-mix(in srgb, var(--teach-9) 14%, white);border-left-color:var(--teach-9);}
.dfc-card.teach-10{background:color-mix(in srgb, var(--teach-10) 14%, white);border-left-color:var(--teach-10);}

.dfc-status-dot{position:absolute;top:5px;right:5px;width:7px;height:7px;border-radius:50%;box-shadow:0 0 0 1.5px #fff;}
.dfc-status-dot.badge-planned{background:var(--status-planned-txt);}
.dfc-status-dot.badge-completed{background:var(--status-completed-txt);}
.dfc-status-dot.badge-cancelled-sick{background:var(--status-sick-txt);}
.dfc-status-dot.badge-cancelled-skip{background:var(--status-skip-txt);}
.dfc-status-dot.badge-moved{background:var(--status-moved-txt);}
.dfc-free{border:1.5px solid var(--primary);border-radius:8px;padding:3px 8px;cursor:pointer;text-align:center;transition:all .15s ease;background:var(--status-planned-bg);}
.dfc-free:hover{background:var(--primary);box-shadow:0 4px 14px rgba(100,204,227,.4);transform:translateY(-1px);}
.dfc-free-range{display:inline;font-size:10.5px;font-weight:800;color:var(--primary-dark);}
.dfc-free:hover .dfc-free-range{color:#fff;}
.dfc-free-label{display:inline;font-size:9.5px;font-weight:800;color:var(--primary-dark);margin-left:5px;text-transform:uppercase;letter-spacing:.03em;}
.dfc-free:hover .dfc-free-label{color:#fff;}

/* Тултип */
.crm-tooltip{position:fixed;display:none;background:#1d1d1d;color:#fff;padding:10px 14px;border-radius:12px;font-size:11px;z-index:99999;pointer-events:none;flex-direction:column;gap:4px;min-width:200px;box-shadow:0 10px 25px rgba(0,0,0,.2);}
.crm-tooltip.show{display:flex;}
.crm-tooltip .t-title{font-weight:800;font-size:12px;border-bottom:1px solid rgba(255,255,255,.15);padding-bottom:4px;margin-bottom:2px;}
.crm-tooltip .t-row{display:flex;justify-content:space-between;gap:10px;}
.crm-tooltip .t-label{color:#94a3b8;}
.crm-tooltip .t-value{font-weight:600;color:#f8fafc;}

/* Уведомление */
#crm-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%) translateY(20px);background:#1d1d1d;color:#fff;padding:11px 18px;border-radius:999px;font-size:13px;font-weight:600;z-index:100000;opacity:0;pointer-events:none;transition:all .25s ease;}
#crm-toast.show{opacity:1;transform:translateX(-50%) translateY(0);}

/* Напоминания — встроены прямо в сетку расписания, видны всегда, пока открыта эта вкладка (один
   и тот же DOM-узел переезжает между двумя местами в зависимости от периода показа, см.
   schedule.js applyReminderPanelPlacement): "Неделя" — справа от нижнего ряда дней (3:1,
   .embedded); "3 дня" — четвёртой колонкой той же ширины, что и дни (.embedded-col, там нет
   нижнего ряда — все дни уже в одном ряду). Пробовали ещё колокольчик со всплывающим окном —
   оказалось лишним усложнением, убрали: панель проще всегда держать на виду. */
.reminders-dropdown{background:#fffaf0;border-radius:16px;border:3px solid #f59e0b;box-sizing:border-box;overflow:hidden;display:flex;flex-direction:column;min-height:0;}
.reminders-dropdown.embedded{flex:1 1 0;min-width:0;box-shadow:0 10px 28px rgba(217,119,6,.32);}
.reminders-dropdown.embedded-col{flex:1;min-width:0;box-shadow:0 1px 3px rgba(0,0,0,.02);}

/* Встроенная панель уведомлений — справа от нижнего ряда дней в расписании (режим "Неделя").
   В режиме "3 дня" нижнего ряда дней нет (все 3 дня уже в верхнем, см. buildBoard) — весь этот
   ряд прячем целиком (display:none выставляется в JS, см. applyReminderPanelPlacement) */
.board-row-bottom-wrap{display:flex;gap:16px;flex:1;min-height:0;}
.board-row-bottom-wrap #row-bottom{flex:3 1 0;width:auto;min-width:0;}
#schedule-divider{flex-shrink:0;width:2px;align-self:stretch;background:linear-gradient(180deg,transparent,#d97706 20%,#d97706 80%,transparent);opacity:.35;}

/* Переключатель периода показа сетки расписания — личное предпочтение браузера/устройства,
   см. schedule.js effectiveScheduleView */
.schedule-toggle-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex-shrink:0;}
.schedule-toggle-row .teacher-legend{margin-left:auto;}
.schedule-toggle-row .fin-period-pill[disabled]{opacity:.4;cursor:not-allowed;}
.kanban-column.is-today .column-header{background:linear-gradient(135deg,#fff7ed,#fffaf0);}
.kanban-column.is-today .column-title{color:#b45309;}
.kanban-column.is-today{border-color:#f59e0b;box-shadow:0 0 0 2px rgba(245,158,11,.25);}
.srp-header{flex-shrink:0;background:linear-gradient(135deg,#f59e0b,#d97706);color:#fff;font-size:13px;font-weight:800;padding:12px 14px;letter-spacing:.2px;display:flex;align-items:baseline;gap:7px;}
.srp-header-sub{font-size:10.5px;font-weight:700;color:rgba(255,255,255,.85);text-transform:uppercase;letter-spacing:.04em;}
.srp-list{display:flex;flex-direction:column;gap:8px;overflow-y:auto;flex:1;min-height:0;padding:12px;background:#fffaf0;}
.srp-empty{font-size:12px;color:#b45309;font-style:italic;padding:8px 2px;}
.srp-item{position:relative;background:#fff;border:1px solid #fde8c8;border-left:4px solid #f59e0b;border-radius:10px;padding:9px 24px 9px 11px;cursor:pointer;transition:background .15s ease;box-shadow:0 1px 3px rgba(0,0,0,.05);}
.srp-item:hover{background:#fff6e6;}
.srp-item.srp-payment{border-left-color:#b06000;}
.srp-item.srp-system{border-color:#dbeafe;border-left-color:#3b82f6;}
.srp-item.srp-system:hover{background:#eff6ff;}
.srp-item-title{font-size:12px;font-weight:800;color:#1e293b;}
.srp-item-text{font-size:11.5px;color:#64748b;margin-top:2px;line-height:1.35;}
.srp-item-close{position:absolute;top:7px;right:6px;background:none;border:none;color:#94a3b8;font-size:12px;cursor:pointer;padding:3px 5px;line-height:1;border-radius:6px;}
.srp-item-close:hover{color:#475569;background:#e2e8f0;}

/* Бейдж "важное уведомление" на пункте меню — крупный, с заметным выделением, слева от
   названия вкладки, виден на всех вкладках, кроме самого расписания (там и так видна вся панель) */
.menu-reminder-badge{display:none;align-items:center;gap:5px;padding:6px 13px;border-radius:999px;background:#ef4444;color:#fff;font-size:14px;font-weight:800;line-height:1;white-space:nowrap;box-shadow:0 0 0 0 rgba(239,68,68,.55),0 2px 6px rgba(239,68,68,.35);border:2px solid #fff;animation:menuBadgePulse 1.8s ease-in-out infinite;margin-right:8px;cursor:pointer;}
@keyframes menuBadgePulse{0%{box-shadow:0 0 0 0 rgba(239,68,68,.55),0 2px 6px rgba(239,68,68,.35);}70%{box-shadow:0 0 0 9px rgba(239,68,68,0),0 2px 6px rgba(239,68,68,.35);}100%{box-shadow:0 0 0 0 rgba(239,68,68,0),0 2px 6px rgba(239,68,68,.35);}}
@media (prefers-reduced-motion: reduce){.menu-reminder-badge{animation:none;}}

.info-box{background:#f8fafc;padding:12px;border-radius:12px;border:1px solid #e2e8f0;}
.info-box .box-title{font-size:10px;font-weight:800;color:#64748b;margin-bottom:8px;letter-spacing:.5px;}
.info-line{display:flex;justify-content:space-between;gap:10px;font-size:12.5px;padding:3px 0;}
.info-line span{color:#475569;}
.info-line strong{color:#0f172a;text-align:right;}

/* Авторизация */
.auth-overlay{position:fixed;top:0;left:0;width:100%;height:100%;background:#151b1d;display:flex;justify-content:center;align-items:center;z-index:9999999;}
.auth-card{background:#1f2a2d;padding:40px;border-radius:18px;box-shadow:0 8px 32px rgba(0,0,0,.5);width:100%;max-width:380px;text-align:center;border:1px solid #2e3f43;box-sizing:border-box;}
.auth-card h2{color:#fff;margin:0 0 10px;font-size:24px;}
.auth-card p{color:#8fc2cf;margin-bottom:22px;font-size:14px;}
.auth-org-locked{display:inline-block;margin:-10px auto 22px;padding:6px 14px;background:rgba(100,204,227,.12);border:1px solid rgba(100,204,227,.35);border-radius:999px;color:#8fc2cf;font-size:12.5px;font-weight:600;}
.auth-org-locked b{color:#fff;font-weight:800;}
.auth-group{text-align:left;margin-bottom:16px;}
.auth-group label{display:block;color:#cbd5e1;margin-bottom:6px;font-size:13px;}
.auth-input{width:100%;padding:12px;background:#10171a;border:1px solid #334145;border-radius:10px;color:#fff;font-size:15px;box-sizing:border-box;font-family:inherit;}
.auth-input:focus{border-color:var(--primary);outline:none;}
.auth-btn{width:100%;padding:12px;background:var(--primary);color:#fff;border:none;border-radius:999px;font-size:15px;font-weight:bold;cursor:pointer;margin-top:8px;font-family:inherit;}
.auth-btn:hover{background:var(--primary-dark);}
.auth-btn-ghost{width:100%;padding:12px;background:transparent;color:#8fc2cf;border:1px solid #334145;border-radius:999px;font-size:14px;cursor:pointer;margin-top:10px;font-family:inherit;}
.auth-btn-ghost:hover{border-color:#8fc2cf;}
.auth-error{color:#ef4444;font-size:13px;margin-top:14px;display:none;}
.auth-error.show{display:block;}
.auth-pass-wrap{position:relative;}
.auth-pass-wrap .auth-input{padding-right:40px;}
.auth-pass-eye{position:absolute;right:10px;top:50%;transform:translateY(-50%);border:0;background:none;font-size:16px;cursor:pointer;opacity:.6;padding:6px;}
.auth-pass-eye:hover{opacity:1;}

/* ================= АДАПТАЦИЯ ПОД УЗКИЕ ЭКРАНЫ (от 1366px) =================
   Интерфейс рассчитан на десктоп/ноутбук в диапазоне 1366×768 – 2560×1440.
   Большая часть верстки и так резиновая (flex/grid с fr и % ), поэтому здесь только
   подтягиваем отступы/минимальные ширины у самых плотных экранов, чтобы на 1366px
   ничего не наезжало и не приходилось лишний раз скроллить по горизонтали.
   Главное исключение — сетка "день × кабинет" в расписании: 4 кабинета в колонке —
   это жесткое требование по количеству данных, а не верстки, так что при малой ширине
   карточки занятий внутри кабинета могут просить прокрутку вбок — это штатный запасной
   вариант (rooms-grid всегда умеет скроллиться), а не поломка.*/
@media (max-width: 1500px) {
    main{padding:11px;gap:11px;}
    .menu-list{gap:1px;}
    .menu-item{padding:0 11px;font-size:12.5px;gap:6px;}
    .topbar-brand{gap:7px;}
    .brand-name{font-size:14px;}
    .brand-product{font-size:8px;}

    .board-row{gap:7px;}
    .board-row-bottom-wrap{gap:11px;}
    .kanban-column{padding:9px;}
    .rooms-grid{gap:4px;}
    .room-track{min-width:60px;padding:4px;}

    .split-container{gap:9px;}
    .left-block,.right-block{padding:12px;}

    .crm-table th,.crm-table td{padding:7px 9px;}

    .emp-grid{grid-template-columns:repeat(auto-fill,minmax(195px,1fr));}
}

/* Дальше — экраны ýже 1366px "как есть" (Windows-масштабирование 125%/150% на ноутбуках
   с физическим разрешением 1366×768 даёт именно такую эффективную ширину: ~1093px и ~910px).
   Сжимаем колонки кабинетов по ширине ЭКРАНА, а не только по их количеству (rooms-mid/many
   выше реагируют на количество кабинетов и не помогают, если кабинетов всего 3-4, но окно узкое). */
@media (max-width: 1200px) {
    .room-track{min-width:56px;padding:4px;gap:4px;}
    .rooms-grid{gap:4px;}
    .kanban-card .c-child{font-size:10px;}
    .kanban-card-teacher{font-size:8px;}
    .menu-item{padding:0 8px;font-size:12px;gap:4px;}
    .week-nav-label{min-width:170px;font-size:12px;}
}
@media (max-width: 980px) {
    .room-track{min-width:44px;padding:3px;gap:3px;}
    .rooms-grid{gap:3px;}
    .room-label{font-size:9px;}
    .menu-item{padding:0 6px;font-size:11.5px;}
    .topbar-brand-text{display:none;}
}

/* Ноутбучные экраны часто ниже 768px по факту, доступному странице: у браузера своя шапка
   (вкладки, адресная строка, иногда панель закладок) — она "съедает" часть высоты ещё до того,
   как до страницы вообще что-то дойдёт. Windows-масштабирование тут ни при чём, играет именно
   высота окна браузера. День в расписании и так резиновый (rooms-grid скроллится), но чем
   меньше высоты отъедают шапка/подвал страницы, тем больше занятий видно без прокрутки внутри
   кабинета — а прокрутка там мелкая и малозаметная, ей неудобно пользоваться. */
@media (max-height: 720px) {
    header.topbar{height:50px;}
    main{padding:8px;gap:8px;}
    .week-nav{padding:5px 12px;}
    .column-header{margin-bottom:5px;padding-bottom:5px;}
    .kanban-column{padding:8px;}
    .room-label{padding:1px 0;margin-bottom:1px;}
    .crm-legend-container{padding:5px 14px;gap:10px;}
    .legend-item{font-size:10px;}
}
@media (max-height: 640px) {
    header.topbar{height:44px;}
    .logo-box{width:30px;height:30px;}
    .crm-legend-container{display:none;}
}


/* ---- Постоянное расписание: блоки педагогов в общей стилистике (белые карточки, мягкие статусные цвета) ---- */
.regular-toolbar{display:flex;align-items:center;gap:14px;padding:8px 16px;background:#fff;border:1px solid var(--border-light);border-radius:14px;flex-shrink:0;flex-wrap:wrap;}
.regular-chips{display:flex;gap:6px;flex-wrap:wrap;flex:1;min-width:0;}
.rg-chip{display:inline-flex;align-items:center;gap:6px;background:#f1f5f9;border:1.5px solid transparent;border-radius:999px;padding:6px 12px;font:inherit;font-size:11.5px;font-weight:700;color:#475569;cursor:pointer;transition:all .15s ease;}
.rg-chip:hover{background:#e2e8f0;color:var(--primary-dark);}
.rg-chip.is-on{background:var(--primary);border-color:var(--primary);color:#fff;box-shadow:0 4px 12px rgba(100,204,227,.35);}
.rg-chip-dot{width:8px;height:8px;border-radius:50%;background:#cbd5e1;flex-shrink:0;}
.rg-chip.is-on .rg-chip-dot{box-shadow:0 0 0 2px rgba(255,255,255,.7);}
.rg-chip-dot.teach-1{background:var(--teach-1);}.rg-chip-dot.teach-2{background:var(--teach-2);}.rg-chip-dot.teach-3{background:var(--teach-3);}.rg-chip-dot.teach-4{background:var(--teach-4);}.rg-chip-dot.teach-5{background:var(--teach-5);}
.rg-chip-dot.teach-6{background:var(--teach-6);}.rg-chip-dot.teach-7{background:var(--teach-7);}.rg-chip-dot.teach-8{background:var(--teach-8);}.rg-chip-dot.teach-9{background:var(--teach-9);}.rg-chip-dot.teach-10{background:var(--teach-10);}
.regular-legend{display:flex;gap:6px;flex-wrap:wrap;align-items:center;}
.rg-legend{font-size:11px;font-weight:800;padding:4px 11px;border-radius:8px;border:1px solid transparent;}
.regular-toolbar-right{display:flex;align-items:center;gap:10px;margin-left:auto;}
.regular-board{display:grid;gap:12px;flex:1;min-height:0;grid-auto-rows:minmax(440px,1fr);overflow-y:auto;}
.regular-cols-1{grid-template-columns:1fr;}
.regular-cols-2{grid-template-columns:repeat(2,minmax(0,1fr));}
.regular-cols-3{grid-template-columns:repeat(3,minmax(0,1fr));}
/* Карточка педагога — как .left-block */
.regular-card{background:#fff;border:1px solid var(--border-light);border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:8px;min-height:0;min-width:0;box-shadow:0 1px 3px rgba(0,0,0,.02);}
.regular-card-placeholder{visibility:hidden;}
.regular-card-head{display:flex;align-items:center;gap:10px;}
.regular-card-title{flex:1;min-width:0;}
.regular-card-name{font-size:14px;font-weight:800;color:var(--text-dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;cursor:pointer;transition:color .15s ease;}
.regular-card-name:hover{color:var(--primary-dark);}
.regular-card-spec{font-size:10.5px;color:#94a3b8;font-weight:600;}
.regular-card-stats{font-size:11px;font-weight:700;color:#64748b;white-space:nowrap;background:#f8fafc;border:1px solid var(--border-light);border-radius:999px;padding:4px 10px;}
.rg-free-count{color:var(--status-completed-txt);}
/* Сетка: тонкие линии, скруглённая рамка, шапка как у таблиц */
.regular-table-wrap{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;border:1px solid var(--border-light);border-radius:12px;background:#f8fafc;display:flex;}
.regular-table{width:100%;height:100%;border-collapse:separate;border-spacing:0;table-layout:fixed;font-size:var(--rg-font,11px);}
.regular-table th,.regular-table td{padding:0 3px;text-align:center;height:auto;line-height:1.1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;border-right:2px solid #fff;border-bottom:2px solid #fff;}
.regular-table th:last-child,.regular-table td:last-child{border-right:none;}
.regular-table thead th{background:#f8fafc;color:#475569;font-weight:800;height:1px;padding:3px 2px;border-bottom:1px solid var(--border-light);}
.rg-day-editable{cursor:pointer;transition:background .15s ease;}
.rg-day-editable:hover{background:#eef2f5;}
.rg-day-name{font-size:calc(var(--rg-font,11px) + 0.5px);letter-spacing:.3px;text-transform:uppercase;color:#64748b;}
.rg-room{display:block;margin:2px auto 0;background:#fff;border:1px solid var(--border-light);border-radius:999px;font:inherit;font-size:calc(var(--rg-font,11px) - 1.5px);font-weight:700;color:var(--primary-dark);padding:1px 7px;cursor:default;}
.rg-room-editable{cursor:pointer;}
.rg-room-editable:hover{border-color:var(--primary);background:var(--status-planned-bg);}
.rg-time-col{width:26px;background:#f8fafc;color:#94a3b8;font-weight:800;font-size:calc(var(--rg-font,11px) - 1px);}
.rg-cell{cursor:pointer;transition:filter .1s ease,box-shadow .1s ease;}
.rg-cell:hover{filter:brightness(.94);outline:2px solid var(--primary);outline-offset:-2px;}
/* Состояния клеток — те же мягкие тона, что у статусов занятий */
.rg-off{background:repeating-linear-gradient(135deg,#d6dae0 0 5px,#c8cdd4 5px 10px);color:#94a3b8;}
.rg-free{background:#4ade80;color:#064e3b;font-weight:800;font-size:calc(var(--rg-font,11px) - 1px);letter-spacing:.3px;text-transform:uppercase;}
.rg-tiny .rg-free{font-size:0;}
.rg-tiny .rg-lunch{font-size:calc(var(--rg-font,11px) - 1px);}
.rg-lunch{background:#f59e0b;color:#fff;font-weight:800;}
.rg-client{background:#fff;color:#0f172a;font-weight:800;box-shadow:inset 5px 0 0 #64748b,inset 0 0 0 1px #e2e8f0;}
.rg-client.teach-1{box-shadow:inset 5px 0 0 var(--teach-1),inset 0 0 0 1px #e2e8f0;}.rg-client.teach-2{box-shadow:inset 5px 0 0 var(--teach-2),inset 0 0 0 1px #e2e8f0;}.rg-client.teach-3{box-shadow:inset 5px 0 0 var(--teach-3),inset 0 0 0 1px #e2e8f0;}.rg-client.teach-4{box-shadow:inset 5px 0 0 var(--teach-4),inset 0 0 0 1px #e2e8f0;}.rg-client.teach-5{box-shadow:inset 5px 0 0 var(--teach-5),inset 0 0 0 1px #e2e8f0;}
.rg-client.teach-6{box-shadow:inset 5px 0 0 var(--teach-6),inset 0 0 0 1px #e2e8f0;}.rg-client.teach-7{box-shadow:inset 5px 0 0 var(--teach-7),inset 0 0 0 1px #e2e8f0;}.rg-client.teach-8{box-shadow:inset 5px 0 0 var(--teach-8),inset 0 0 0 1px #e2e8f0;}.rg-client.teach-9{box-shadow:inset 5px 0 0 var(--teach-9),inset 0 0 0 1px #e2e8f0;}.rg-client.teach-10{box-shadow:inset 5px 0 0 var(--teach-10),inset 0 0 0 1px #e2e8f0;}
.rg-client-archived{background:#eef2f6!important;color:#94a3b8!important;text-decoration:line-through;font-weight:600!important;box-shadow:inset 5px 0 0 #cbd5e1!important;}
.rg-temp{background:#fb923c;color:#fff;font-weight:800;}
.rg-legend.rg-client{box-shadow:inset 4px 0 0 var(--primary),inset 0 0 0 1px #e2e8f0;}
.rg-legend.rg-off{color:#64748b;}
.rg-legend.rg-free{color:var(--status-completed-txt);}
/* Заметки под блоком — как обычное поле формы */
/* Строка заметок под сеткой: наведение — всплывашка с текстом, клик — окно редактирования */
.regular-notes-bar{flex:0 0 auto;display:flex;align-items:center;gap:8px;min-height:30px;padding:5px 10px;border-radius:10px;background:#fffbeb;border:1px solid #fde68a;cursor:pointer;transition:background .15s ease,border-color .15s ease;}
.regular-notes-bar:hover{background:#fef3c7;border-color:#fcd34d;}
.regular-notes-bar.is-empty{background:#f8fafc;border:1.5px dashed var(--border-light);}
.regular-notes-bar.is-empty:hover{border-color:var(--primary);background:var(--status-planned-bg);}
.regular-notes-icon{font-size:13px;flex-shrink:0;}
.regular-notes-text{flex:1;min-width:0;font-size:11.5px;font-weight:700;color:#7c5a00;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.regular-notes-bar.is-empty .regular-notes-text{color:#94a3b8;font-weight:600;}
.regular-notes-count{flex-shrink:0;background:#f59e0b;color:#fff;font-size:10px;font-weight:800;border-radius:999px;padding:1px 7px;}
.t-note-line{font-size:12px;color:#1e293b;line-height:1.4;margin-top:3px;}
.c-badge-regular{background:#fef3c7;}
.client-regular-line{font-size:11.5px;font-weight:700;color:#b45309;background:#fffbeb;border:1px solid #fde68a;border-radius:8px;padding:6px 10px;margin:-6px 0 12px;}
@media (max-width:1500px){
    .regular-table{font-size:9.5px;}
    .regular-table th,.regular-table td{height:19px;}
    .regular-card{padding:10px 12px;gap:6px;}
}

/* ---- Всплывающие карточки напоминаний (на вкладках кроме расписания), правый верхний угол под шапкой ---- */
#reminder-popups{position:fixed;top:72px;right:16px;z-index:9000;display:flex;flex-direction:column;gap:8px;width:300px;max-width:calc(100vw - 32px);pointer-events:none;}
.rpop{position:relative;pointer-events:auto;background:#fff;border:1px solid #fde8c8;border-left:4px solid #f59e0b;border-radius:12px;padding:10px 28px 12px 12px;box-shadow:0 10px 30px rgba(0,0,0,.14);cursor:pointer;opacity:0;transform:translateX(24px);transition:opacity .25s ease,transform .25s ease;overflow:hidden;}
.rpop.is-in{opacity:1;transform:none;}
.rpop:hover{background:#fffaf0;}
.rpop.rpop-payment{border-left-color:#b06000;}
.rpop.rpop-system{border-color:#dbeafe;border-left-color:#3b82f6;}
.rpop.rpop-lead{border-color:#e9d5ff;border-left-color:#8b5cf6;}
.rpop-title{font-size:12.5px;font-weight:800;color:#1e293b;}
.rpop-text{font-size:11.5px;color:#64748b;margin-top:3px;line-height:1.35;}
.rpop-close{position:absolute;top:6px;right:6px;background:none;border:none;color:#94a3b8;font-size:12px;cursor:pointer;padding:3px 5px;border-radius:6px;line-height:1;}
.rpop-close:hover{background:#f1f5f9;color:#0f172a;}
/* Полоска внизу карточки тает за 10 секунд — видно, сколько она ещё провисит */
.rpop-bar{position:absolute;left:0;bottom:0;height:3px;background:rgba(245,158,11,.5);width:100%;transform-origin:left;animation:rpopBar 10s linear forwards;}
.rpop-system .rpop-bar{background:rgba(59,130,246,.45);}
.rpop-lead .rpop-bar{background:rgba(139,92,246,.45);}
@keyframes rpopBar{from{transform:scaleX(1);}to{transform:scaleX(0);}}
@media (prefers-reduced-motion: reduce){.rpop-bar{animation:none;}}

/* ---- Появление вкладки: блоки собираются друг за другом (класс view-enter ставится на ~1 с при переключении) ---- */
@keyframes viewBlockIn{from{opacity:0;transform:translateY(14px) scale(.985);}to{opacity:1;transform:none;}}
.crm-view.view-enter > :not(.widget-board):not(.board-row):not(.board-row-bottom-wrap):not(.regular-board),
.crm-view.view-enter .widget-board > .widget,
.crm-view.view-enter .kanban-column,
.crm-view.view-enter .reminders-dropdown.embedded,
.crm-view.view-enter .regular-card{animation:viewBlockIn .42s cubic-bezier(.2,.7,.2,1) both;}
.crm-view.view-enter > :nth-child(2){animation-delay:.05s;}
.crm-view.view-enter > :nth-child(3){animation-delay:.1s;}
.crm-view.view-enter > :nth-child(4){animation-delay:.15s;}
.crm-view.view-enter .widget-board > .widget:nth-child(1),.crm-view.view-enter .kanban-column:nth-child(1),.crm-view.view-enter .regular-card:nth-child(1){animation-delay:.03s;}
.crm-view.view-enter .widget-board > .widget:nth-child(2),.crm-view.view-enter .kanban-column:nth-child(2),.crm-view.view-enter .regular-card:nth-child(2){animation-delay:.08s;}
.crm-view.view-enter .widget-board > .widget:nth-child(3),.crm-view.view-enter .kanban-column:nth-child(3),.crm-view.view-enter .regular-card:nth-child(3){animation-delay:.13s;}
.crm-view.view-enter .widget-board > .widget:nth-child(4),.crm-view.view-enter .kanban-column:nth-child(4),.crm-view.view-enter .regular-card:nth-child(4){animation-delay:.18s;}
.crm-view.view-enter .widget-board > .widget:nth-child(5),.crm-view.view-enter .regular-card:nth-child(5){animation-delay:.23s;}
.crm-view.view-enter .widget-board > .widget:nth-child(6),.crm-view.view-enter .regular-card:nth-child(6){animation-delay:.28s;}
.crm-view.view-enter .widget-board > .widget:nth-child(7){animation-delay:.33s;}
.crm-view.view-enter .widget-board > .widget:nth-child(8){animation-delay:.38s;}
.crm-view.view-enter .widget-board > .widget:nth-child(n+9){animation-delay:.43s;}
.crm-view.view-enter #row-bottom .kanban-column:nth-child(1){animation-delay:.23s;}
.crm-view.view-enter #row-bottom .kanban-column:nth-child(2){animation-delay:.28s;}
.crm-view.view-enter #row-bottom .kanban-column:nth-child(3){animation-delay:.33s;}
.crm-view.view-enter .reminders-dropdown.embedded{animation-delay:.38s;}
@media (prefers-reduced-motion: reduce){
    .crm-view.view-enter > *,.crm-view.view-enter .widget,.crm-view.view-enter .kanban-column,.crm-view.view-enter .reminders-dropdown.embedded,.crm-view.view-enter .regular-card{animation:none;}
    .menu-indicator{transition:none;}
}
/* Настройки: карточки сетки тоже собираются по очереди */
.crm-view.view-enter > .set-grid{animation:none;}
.crm-view.view-enter .set-grid > .set-card{animation:viewBlockIn .42s cubic-bezier(.2,.7,.2,1) both;}
.crm-view.view-enter .set-grid > .set-card:nth-child(2){animation-delay:.05s;}
.crm-view.view-enter .set-grid > .set-card:nth-child(3){animation-delay:.1s;}
.crm-view.view-enter .set-grid > .set-card:nth-child(4){animation-delay:.15s;}
.crm-view.view-enter .set-grid > .set-card:nth-child(5){animation-delay:.2s;}
.crm-view.view-enter .set-grid > .set-card:nth-child(6){animation-delay:.25s;}
.crm-view.view-enter .set-grid > .set-card:nth-child(7){animation-delay:.3s;}
.crm-view.view-enter .set-grid > .set-card:nth-child(n+8){animation-delay:.35s;}
.crm-view.view-enter > .set-audit{animation-delay:.4s;}

/* ---- Текущий пользователь в шапке ---- */
.topbar-user{display:flex;align-items:center;gap:8px;min-width:0;padding:4px 10px 4px 4px;border-radius:999px;background:#f8fafc;border:1px solid var(--border-light);cursor:default;}
.topbar-user-avatar{width:28px;height:28px;font-size:10.5px;}
.topbar-user-text{display:flex;flex-direction:column;min-width:0;line-height:1.15;}
.topbar-user-name{font-size:12px;font-weight:800;color:var(--text-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px;}
.topbar-user-role{font-size:10px;font-weight:700;color:#94a3b8;white-space:nowrap;}
@media (max-width:1500px){.topbar-user-text{display:none;}.topbar-user{padding:3px;}}

/* Абонементы клиента в карточке (account.js): действующие зелёные, использованные серые, сгоревшие красные */
.client-packages{margin:-6px 0 12px;padding:8px 12px;background:#fff;border:1px solid var(--border-light);border-radius:12px;display:flex;flex-direction:column;gap:4px;}
.client-packages-title{font-size:10.5px;font-weight:800;color:#64748b;letter-spacing:.3px;text-transform:uppercase;margin-bottom:2px;}
.client-package{display:grid;grid-template-columns:70px 1fr auto auto;gap:10px;align-items:center;font-size:12px;padding:4px 8px;border-radius:8px;background:#f8fafc;}
.client-package.is-active{background:#f0fdf4;}
.client-package.is-burned{background:#fef2f2;}
.client-package.is-used{color:#94a3b8;}
.client-package-date{font-weight:700;color:#475569;}
.client-package-name{font-weight:600;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}
.client-package.is-used .client-package-name{color:#94a3b8;}
.client-package-till{font-size:11px;color:#64748b;font-weight:600;white-space:nowrap;}
.client-package-status{font-weight:800;white-space:nowrap;}
.client-package.is-active .client-package-status{color:#16a34a;}
.client-package.is-burned .client-package-status{color:#dc2626;}
.fin-discount-hint{font-size:11px;color:#b45309;font-weight:600;margin-top:4px;min-height:14px;}
.fin-mark{display:inline-block;margin-left:4px;padding:1px 6px;border-radius:999px;background:#fef3c7;color:#b45309;font-size:10px;font-weight:800;vertical-align:middle;}
.fin-mark.is-expired{background:#fee2e2;color:#dc2626;}

/* Контрагенты: виджет на вкладке Контакты, карточка, пометки в кассе */
.deny-clients-edit #btn-add-counterparty,.deny-clients-edit #cp-save,.deny-clients-edit #cp-delete,.deny-clients-edit #cp-file-add-btn,.deny-clients-edit #cp-plan-btn{display:none!important;}
.deny-finance-edit #cp-pay-btn{display:none!important;}
.deny-finance-view .cp-summary,.deny-finance-view #cp-ops-list{display:none!important;}
.cp-summary{margin-top:4px;}
.cp-summary .client-account-actions{max-width:220px;gap:6px;}
.cp-ops-list{max-height:180px;overflow-y:auto;display:flex;flex-direction:column;gap:4px;}
.cp-op-row{display:grid;grid-template-columns:80px 1fr auto 100px;gap:10px;align-items:center;padding:6px 10px;border-radius:8px;background:#f8fafc;font-size:12px;}
.cp-op-row:hover{background:#eef2ff;}
.cp-op-date{font-weight:700;color:#475569;white-space:nowrap;}
.cp-op-cat{font-weight:600;color:#1e293b;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
/* min-height держит вторую строку даже у операций без описания (small тогда пустой), чтобы
   строки списка не скакали между одной и двумя строками */
.cp-op-cat small{display:block;color:#94a3b8;font-weight:500;overflow:hidden;text-overflow:ellipsis;min-height:13px;}
.cp-op-method{font-size:11px;color:#64748b;white-space:nowrap;}
.cp-op-amount{font-weight:800;text-align:right;white-space:nowrap;}
.cp-op-amount.is-income{color:#16a34a;}
.cp-op-amount.is-expense{color:#dc2626;}
.fin-cp-mark{color:#64748b;font-weight:600;}
.rep-source-row-muted .rep-source-name,.rep-source-row-muted .rep-source-count{color:#94a3b8;}
.cp-docs-block{margin-bottom:12px;}
.cp-docs-add{display:flex;gap:6px;align-items:center;}
.cp-docs-add .form-input{width:150px;padding:4px 8px;font-size:12px;}
.cp-file-row{display:grid;grid-template-columns:130px 1fr auto auto;gap:8px;align-items:center;}
.cp-file-kind{font-size:11px;font-weight:800;color:#475569;white-space:nowrap;}
.cp-file-row .client-file-link{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cp-contact-rows{display:flex;flex-direction:column;gap:6px;}
.cp-contact-row{display:grid;grid-template-columns:1.2fr 1fr 1fr auto;gap:6px;align-items:center;}
.cp-contact-row .form-input{padding:6px 10px;font-size:12.5px;}
.deny-clients-edit #cp-contact-add-btn,.deny-clients-edit .cp-contact-remove{display:none!important;}
