/*
 * Тренажёр продаж — дизайн-система.
 * Хвоя (тёмные панели, текст), кобальт (голос, засчитано, основные действия),
 * оранжевый (промахи, микрофон). Шрифт Geologica, табличные цифры.
 * Подключать после Google Fonts:
 *   <link rel="preconnect" href="https://fonts.googleapis.com">
 *   <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
 *   <link href="https://fonts.googleapis.com/css2?family=Geologica:wght@300;400;500;600;700&display=swap" rel="stylesheet">
 *   <link rel="stylesheet" href="/shared/theme.css">
 */

:root {
    /* Основа */
    --bg: #EEF1EC;
    --surface: #FBFCFA;
    --surface-2: #DDE4DE;      /* активный пункт меню, дорожки полос */
    --field: #FFFFFF;
    --ink: #12302A;            /* хвоя: текст и тёмные панели */
    --ink-2: #4A5F58;          /* вторичный текст */
    --ink-3: #9AA8A0;          /* третичный: голос клиента, пунктир */
    --line: #D3DAD4;
    --line-field: #C2CCC5;

    /* Кобальт: голос, засчитано, основные действия */
    --cobalt: #2C4BDB;
    --cobalt-text: #1B34A8;
    --cobalt-bg: #E1E7FF;
    --cobalt-soft: #F1F4FF;
    --cobalt-edge: #C9D3FA;

    /* Оранжевый: промахи, микрофон */
    --orange: #F08A24;
    --orange-text: #8A4205;
    --orange-bg: #FDE7D2;
    --orange-soft: #FFF4EA;
    --orange-edge: #F3CFA9;

    /* На тёмном */
    --dark: #12302A;
    --dark-2: #1E4A40;
    --dark-text: #E8EFEA;
    --dark-text-2: #9DB3AA;
    --dark-text-3: #B9CCC4;
    --dark-line: #2A5247;
    --dark-edge: #3D6458;
    --dark-voice: #8FA6FF;

    --font: 'Geologica', 'Geologica Fallback', system-ui, -apple-system, 'Segoe UI', sans-serif;
    --r-s: 8px;
    --r-m: 10px;
    --r-l: 16px;
    --r-xl: 24px;
    --gutter: 40px;
}

/* Фолбэк с метриками Geologica: пока шрифт грузится, текст занимает то же место.
 * Ширина подобрана замером текстов страниц (кириллица) отдельно по начертаниям:
 * у Arial нет Medium, поэтому 500 — отдельный face. Вертикаль Geologica: ascent 0.98, descent 0.27 em
 * (override = метрика / size-adjust). */
@font-face {
    font-family: 'Geologica Fallback';
    src: local('Arial'), local('ArialMT'), local('Helvetica Neue'), local('Helvetica');
    font-weight: 100 450;
    size-adjust: 107.2%; ascent-override: 91.4%; descent-override: 25.2%; line-gap-override: 0%;
}
@font-face {
    font-family: 'Geologica Fallback';
    src: local('Arial'), local('ArialMT'), local('Helvetica Neue'), local('Helvetica');
    font-weight: 451 550;
    size-adjust: 108.9%; ascent-override: 90%; descent-override: 24.8%; line-gap-override: 0%;
}
@font-face {
    font-family: 'Geologica Fallback';
    src: local('Arial Bold'), local('Arial-BoldMT'), local('Helvetica Neue Bold'), local('Helvetica Bold');
    font-weight: 551 650;
    size-adjust: 103%; ascent-override: 95.1%; descent-override: 26.2%; line-gap-override: 0%;
}
@font-face {
    font-family: 'Geologica Fallback';
    src: local('Arial Bold'), local('Arial-BoldMT'), local('Helvetica Neue Bold'), local('Helvetica Bold');
    font-weight: 651 900;
    size-adjust: 104.3%; ascent-override: 94%; descent-override: 25.9%; line-gap-override: 0%;
}

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
    margin: 0;
    background: var(--bg);
    color: var(--ink);
    font-family: var(--font);
    font-feature-settings: 'tnum' 1;
    font-size: 16px;
    line-height: 1.5;
    min-height: 100vh;
}

a { color: var(--cobalt); }
a:hover { color: var(--cobalt-text); }
button, input, select, textarea { font-family: inherit; font-feature-settings: inherit; }
button { cursor: pointer; }
button:disabled { cursor: not-allowed; }
img, svg { max-width: 100%; }

:focus-visible { outline: 3px solid var(--cobalt); outline-offset: 2px; }
.on-dark :focus-visible, .panel-dark :focus-visible { outline-color: var(--dark-voice); }

[hidden] { display: none !important; }

.sr-only {
    position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

.muted { color: var(--ink-2); }
.num { font-feature-settings: 'tnum' 1; }

/* ---------- Шапка ---------- */

.app-header {
    min-height: 84px;
    display: flex; flex-wrap: wrap; align-items: center;
    gap: 12px 32px;
    padding: 20px var(--gutter);
    border-bottom: 1px solid var(--line);
    background: var(--bg);
}
.brand {
    display: flex; align-items: center; gap: 10px;
    color: var(--ink); text-decoration: none;
    font-weight: 600; font-size: 18px; white-space: nowrap;
}
.brand:hover { color: var(--ink); }
.brand svg { flex: 0 0 28px; }
.app-nav { display: flex; flex-wrap: wrap; gap: 2px; flex: 1 1 auto; min-width: 0; }
.app-nav a {
    padding: 10px 12px; border-radius: var(--r-m);
    color: var(--ink-2); text-decoration: none; font-size: 15px; white-space: nowrap;
}
.app-nav a:hover { color: var(--ink); background: rgba(221, 228, 222, .6); }
.app-nav a[aria-current="page"] { color: var(--ink); background: var(--surface-2); }
.app-user { display: flex; align-items: center; gap: 12px; font-size: 15px; }
.app-user .name { max-width: 220px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
@media (max-width: 1480px) { .app-header.is-admin .app-user .name { display: none; } }
.app-user .avatar {
    width: 40px; height: 40px; border-radius: 50%;
    background: var(--ink); color: var(--dark-text);
    display: flex; align-items: center; justify-content: center;
    font-size: 14px; font-weight: 600; flex: 0 0 40px;
}
.app-user .avatar.admin { background: var(--cobalt); color: #FFFFFF; }
.app-user .logout {
    min-height: 40px; padding: 0 12px; border-radius: var(--r-m);
    border: 1px solid var(--line); background: transparent; color: var(--ink-2); font-size: 14px;
}
.app-user .logout:hover { color: var(--ink); border-color: var(--line-field); }

/* ---------- Страница ---------- */

.page { max-width: 1360px; margin: 0 auto; padding: 32px var(--gutter) 56px; }
.page.narrow { max-width: 880px; }
.page-head {
    display: flex; flex-wrap: wrap; justify-content: space-between; align-items: flex-end;
    gap: 24px; margin-bottom: 32px;
}
.page-head > div:first-child { max-width: 720px; }
h1, .h1 { margin: 0 0 10px; font-size: 40px; line-height: 1.1; font-weight: 600; letter-spacing: -0.02em; }
h2, .h2 { margin: 0; font-size: 22px; line-height: 1.3; font-weight: 600; }
h3, .h3 { margin: 0; font-size: 18px; line-height: 1.35; font-weight: 600; }
.lead { margin: 0; font-size: 17px; line-height: 1.5; color: var(--ink-2); }
.hint { margin: 0; font-size: 14px; line-height: 1.5; color: var(--ink-2); }
.back-link { font-size: 15px; text-decoration: none; }

.split { display: flex; flex-wrap: wrap; gap: 32px; align-items: flex-start; }
.split > .main { flex: 999 1 600px; min-width: 0; }
.split > .side { flex: 1 1 380px; min-width: 0; }

.big-number { font-size: 96px; line-height: .85; font-weight: 300; letter-spacing: -0.04em; }

/* ---------- Поверхности ---------- */

.panel {
    background: var(--surface); border: 1px solid var(--line);
    border-radius: 20px; padding: 28px 32px;
}
.panel.tight { padding: 20px 24px; border-radius: var(--r-l); }
.panel-dark {
    background: var(--dark); color: var(--dark-text);
    border-radius: var(--r-xl); padding: 28px;
}
.panel-dark .muted, .panel-dark .hint { color: var(--dark-text-2); }
.panel-dark a { color: var(--dark-voice); }

/* Список строк с линиями вместо карточек */
.rows { display: flex; flex-direction: column; border-top: 1px solid var(--line); }
.row {
    display: flex; flex-wrap: wrap; align-items: center; gap: 12px 20px;
    width: 100%; min-height: 56px; padding: 12px 16px;
    border: 0; border-bottom: 1px solid var(--line);
    background: transparent; color: var(--ink); text-align: left; font-size: 16px;
}
button.row:hover, a.row:hover { background: var(--surface); }
.row.is-active, .row[aria-pressed="true"], .row[aria-selected="true"] { background: var(--surface); }
a.row { text-decoration: none; }

.dot { flex: 0 0 10px; width: 10px; height: 10px; border-radius: 50%; background: var(--ink-3); }
.dot.hit { background: var(--cobalt); }
.dot.miss { background: var(--orange); }

/* Полоса балла */
.meter { display: flex; height: 8px; border-radius: 4px; background: var(--surface-2); overflow: hidden; }
.meter > span { display: block; height: 100%; background: var(--cobalt); }
.meter.miss > span, .meter > span.miss { background: var(--orange); }

/* ---------- Кнопки ---------- */

.btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 8px;
    min-height: 48px; padding: 0 18px; border-radius: 12px;
    border: 1px solid var(--line); background: var(--surface); color: var(--ink);
    font-size: 15px; font-weight: 500; text-decoration: none; line-height: 1.2;
    transition: background-color .15s, border-color .15s, color .15s;
}
.btn:hover { border-color: var(--line-field); background: #FFFFFF; color: var(--ink); }
.btn:disabled, .btn[aria-disabled="true"] { opacity: .5; }
.btn-primary { border: 0; background: var(--ink); color: var(--dark-text); }
.btn-primary:hover { background: #1B4238; color: var(--dark-text); }
.btn-accent { border: 0; border-radius: 26px; background: var(--cobalt); color: #FFFFFF; min-height: 52px; padding: 0 22px; font-size: 16px; }
.btn-accent:hover { background: var(--cobalt-text); color: #FFFFFF; }
.btn-ghost { border-color: transparent; background: transparent; color: var(--ink-2); }
.btn-ghost:hover { background: var(--surface-2); border-color: transparent; color: var(--ink); }
.btn-dashed { border: 1px dashed var(--ink-3); background: transparent; min-height: 44px; font-size: 14px; font-weight: 400; }
.btn-warn { border-color: var(--orange-edge); background: var(--orange-soft); color: var(--orange-text); }
.btn-warn:hover { border-color: var(--orange); background: var(--orange-bg); color: var(--orange-text); }
.btn-sm { min-height: 40px; padding: 0 12px; font-size: 14px; border-radius: var(--r-m); }
.btn-pill { border-radius: 22px; }
.btn-on-dark { border: 1px solid var(--dark-edge); background: transparent; color: var(--dark-text); }
.btn-on-dark:hover { background: var(--dark-2); color: var(--dark-text); border-color: var(--dark-edge); }
.btn-light { border: 0; background: var(--dark-text); color: var(--ink); }
.btn-light:hover { background: #FFFFFF; color: var(--ink); }
.icon-btn {
    width: 40px; height: 40px; border-radius: var(--r-s); border: 0;
    background: transparent; color: var(--ink-2);
    display: inline-flex; align-items: center; justify-content: center; font-size: 18px;
}
.icon-btn:hover { background: var(--surface-2); color: var(--ink); }

/* Микрофон */
.mic {
    width: 72px; height: 72px; flex: 0 0 72px; border-radius: 50%; border: 0;
    background: var(--orange); display: flex; align-items: center; justify-content: center;
}

/* ---------- Поля ---------- */

.field { display: flex; flex-direction: column; gap: 8px; }
.field > label, .label { font-size: 14px; color: var(--ink-2); font-weight: 400; }
.input, .field input, .field select, .field textarea {
    width: 100%; min-height: 48px; padding: 0 14px;
    border-radius: var(--r-m); border: 1px solid var(--line-field);
    background: var(--field); color: var(--ink); font-size: 16px;
}
.field textarea, textarea.input { padding: 12px 14px; line-height: 1.5; resize: vertical; min-height: 88px; }
.input:focus, .field input:focus, .field select:focus, .field textarea:focus { border-color: var(--cobalt); outline: none; box-shadow: 0 0 0 3px var(--cobalt-bg); }
.input:focus-visible, .field input:focus-visible, .field select:focus-visible, .field textarea:focus-visible { outline: none; }

.switch { display: inline-flex; align-items: center; gap: 10px; font-size: 14px; color: var(--ink-2); cursor: pointer; }
.switch input { appearance: none; -webkit-appearance: none; width: 40px; height: 24px; border-radius: 12px; background: var(--line-field); position: relative; margin: 0; cursor: pointer; transition: background-color .15s; flex: 0 0 40px; }
.switch input::after { content: ''; position: absolute; top: 3px; left: 3px; width: 18px; height: 18px; border-radius: 50%; background: #FFFFFF; transition: transform .15s; }
.switch input:checked { background: var(--cobalt); }
.switch input:checked::after { transform: translateX(16px); }

/* ---------- Метки и сообщения ---------- */

.tag {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 4px 10px; border-radius: var(--r-s);
    font-size: 13px; font-weight: 500; line-height: 1.4; white-space: nowrap;
    background: var(--surface-2); color: var(--ink-2);
}
.tag.hit { background: var(--cobalt-bg); color: var(--cobalt-text); }
.tag.miss { background: var(--orange-bg); color: var(--orange-text); }
.tag.dark { background: var(--ink); color: var(--dark-text); }

.notice { margin: 0; padding: 12px 14px; border-radius: var(--r-m); font-size: 14px; line-height: 1.5; background: var(--surface-2); color: var(--ink); }
.notice.info { background: var(--cobalt-bg); color: var(--cobalt-text); }
.notice.warn { background: var(--orange-bg); color: var(--orange-text); }

/* Совместимость с showError/showSuccess из auth.js */
.error { margin: 8px 0; padding: 12px 14px; border-radius: var(--r-m); background: var(--orange-bg); color: var(--orange-text); font-size: 14px; line-height: 1.5; }
.success { margin: 8px 0; padding: 12px 14px; border-radius: var(--r-m); background: var(--cobalt-bg); color: var(--cobalt-text); font-size: 14px; line-height: 1.5; }

.empty {
    padding: 28px; border: 1px dashed var(--ink-3); border-radius: 14px;
    text-align: center; font-size: 15px; line-height: 1.5; color: var(--ink-2);
}


/* ---------- Таблицы ---------- */

.table-wrap { overflow-x: auto; border-top: 1px solid var(--line); }
table.data { width: 100%; border-collapse: collapse; font-size: 15px; }
table.data th, table.data td { text-align: left; padding: 14px 16px; border-bottom: 1px solid var(--line); vertical-align: middle; }
table.data th { font-size: 14px; font-weight: 400; color: var(--ink-2); white-space: nowrap; }
table.data tbody tr:hover { background: var(--surface); }
table.data td.num, table.data th.num { text-align: right; }

/* ---------- Диалог ---------- */

dialog.modal {
    border: 0; border-radius: 20px; padding: 28px; max-width: min(560px, calc(100vw - 32px));
    background: var(--surface); color: var(--ink);
}
dialog.modal::backdrop { background: rgba(18, 48, 42, .45); }

/* ---------- Адаптив ---------- */

@media (max-width: 900px) {
    :root { --gutter: 24px; }
    h1, .h1 { font-size: 32px; }
    .big-number { font-size: 72px; }
}
@media (max-width: 600px) {
    :root { --gutter: 16px; }
    .app-header { gap: 8px 16px; padding: 14px var(--gutter); min-height: 117px; }
    .app-header:not([data-active]):not(:has(.app-nav)) { min-height: 69px; }
    .app-nav { order: 3; flex: 1 1 100%; flex-wrap: nowrap; overflow-x: auto; margin: 0 calc(-1 * var(--gutter)); padding: 0 var(--gutter); scrollbar-width: none; }
    .app-nav::-webkit-scrollbar { display: none; }
    .app-user { margin-left: auto; }
    .app-user .name { display: none; }
    .page { padding-top: 24px; padding-bottom: 40px; }
    h1, .h1 { font-size: 28px; }
    .lead { font-size: 16px; }
    .panel { padding: 20px; }
    .panel-dark { padding: 20px; border-radius: 20px; }
    .big-number { font-size: 64px; }
}

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; scroll-behavior: auto !important; }
}

/* ---------- Таблица, которая на телефоне становится списком блоков ----------
 * <table class="data stack">; у каждой <td> — data-label="Подпись".
 * Ячейка с классом .cell-main идёт заголовком блока без подписи,
 * .cell-actions — кнопки внизу блока.
 */
@media (max-width: 640px) {
    table.data.stack thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
    table.data.stack, table.data.stack tbody { display: block; }
    table.data.stack tr { display: grid; grid-template-columns: auto 1fr; gap: 6px 16px; padding: 14px 0; border-bottom: 1px solid var(--line); }
    table.data.stack td { display: contents; }
    table.data.stack td::before { content: attr(data-label); color: var(--ink-2); font-size: 14px; }
    table.data.stack td > * { min-width: 0; }
    table.data.stack td.num { text-align: left; }
    table.data.stack td.cell-main, table.data.stack td.cell-actions { display: block; grid-column: 1 / -1; padding: 0; border: 0; }
    table.data.stack td.cell-main::before, table.data.stack td.cell-actions::before { content: none; }
    table.data.stack td.cell-actions { padding-top: 6px; }
    table.data.stack tbody tr:hover { background: transparent; }
}
@media (max-width: 640px) {
    table.data.stack td::before { font-weight: 400; }
}

/* ---------- Загрузка и появление ----------
 * .skeleton — плейсхолдер той же формы, что будущий контент (shimmer).
 *   Модификаторы: .sk-text (строка текста), .sk-title, .sk-num (крупная цифра),
 *   .sk-circle, .sk-pill, .sk-block (произвольный блок, высоту задаёт страница).
 *   На тёмной панели (.panel-dark или .on-dark) цвета переключаются сами.
 * .reveal — блок, который плавно проявляется, когда получает .is-in
 *   (через reveal() из shell.js).
 * .stagger — контейнер: прямые потомки появляются каскадом (--i ставит reveal()).
 * .swap-area — контейнер, у которого анимируется высота при смене состояния (swapView()).
 * .btn.is-busy — кнопка в состоянии загрузки (setBusy() из shell.js).
 */
:root {
    --sk-a: #DDE4DE;
    --sk-b: #E8ECE7;
    --ease-out: cubic-bezier(.22, .61, .36, 1);
    --reveal-ms: 300ms;
}
.panel-dark, .on-dark { --sk-a: #1E4A40; --sk-b: #2A5247; }

.skeleton {
    display: block; height: 16px; border-radius: 6px;
    background: linear-gradient(90deg, var(--sk-a) 0%, var(--sk-b) 40%, var(--sk-a) 80%) var(--sk-a);
    background-size: 240% 100%;
    animation: sk-shimmer 1.4s linear infinite;
    color: transparent; pointer-events: none; user-select: none;
}
.skeleton + .skeleton { margin-top: 10px; }
.sk-text { height: 14px; margin: 5px 0; }
.sk-title { height: 30px; border-radius: 8px; width: 60%; }
.sk-num { height: 80px; width: 120px; border-radius: 12px; }
.sk-circle { border-radius: 50%; }
.sk-pill { height: 36px; width: 96px; border-radius: 10px; display: inline-block; }
.sk-block { height: 120px; border-radius: 14px; }
.sk-row { display: flex; align-items: center; gap: 20px; min-height: 56px; padding: 12px 16px; border-bottom: 1px solid var(--line); }
.sk-row > .skeleton { margin: 0; }
.panel-dark .sk-row { border-bottom-color: var(--dark-line); }
@keyframes sk-shimmer { from { background-position: 100% 0; } to { background-position: -140% 0; } }
[aria-busy="true"] { cursor: progress; }

.reveal { opacity: 0; transform: translateY(4px); }
.reveal.is-in {
    opacity: 1; transform: none;
    transition: opacity var(--reveal-ms) var(--ease-out), transform var(--reveal-ms) var(--ease-out);
}
.stagger > * { opacity: 0; transform: translateY(4px); }
.stagger.is-in > * {
    opacity: 1; transform: none;
    transition: opacity var(--reveal-ms) var(--ease-out), transform var(--reveal-ms) var(--ease-out);
    transition-delay: calc(var(--i, 0) * 35ms);
}

.swap-area { transition: height 280ms var(--ease-out); overflow: hidden; }
.fade-in { animation: fade-in 260ms var(--ease-out) both; }
@keyframes fade-in { from { opacity: 0; transform: translateY(4px); } to { opacity: 1; transform: none; } }

dialog.modal[open] { animation: modal-in 220ms var(--ease-out); }
dialog.modal[open]::backdrop { animation: backdrop-in 220ms var(--ease-out); }
@keyframes modal-in { from { opacity: 0; transform: translateY(8px) scale(.98); } to { opacity: 1; transform: none; } }
@keyframes backdrop-in { from { opacity: 0; } to { opacity: 1; } }

/* Кнопка в состоянии загрузки: ширину фиксирует setBusy() */
.btn.is-busy, button.is-busy { cursor: progress; opacity: 1; }
.btn-spinner {
    width: 16px; height: 16px; flex: 0 0 16px; border-radius: 50%;
    border: 2px solid currentColor; border-right-color: transparent;
    animation: spin .7s linear infinite;
}
@keyframes spin { to { transform: rotate(360deg); } }

/* Шапка до загрузки пользователя: плейсхолдеры меню той же высоты */
.app-nav .skeleton { display: inline-block; height: 42.5px; width: 104px; margin: 0; border-radius: var(--r-m); }
.app-user .skeleton { margin: 0; }

@media (prefers-reduced-motion: reduce) {
    .skeleton { animation: none; background: var(--sk-a); }
    .reveal, .stagger > * { transform: none; }
    .reveal.is-in, .stagger.is-in > * { transition: none; }
    .swap-area { transition: none; }
    .btn-spinner { animation: none; border-right-color: currentColor; opacity: .6; }
    .fade-in, dialog.modal[open], dialog.modal[open]::backdrop { animation: none; }
}
