﻿/* ── Бренд-шрифт Vinnytsia Sans ────────────────────────────────────────────
   Файли лежать у сховищі шрифтів (IFontStore) — там само, звідки їх бере
   StoryImageRenderer для сторіз і TicketImageRenderer для квитків. Віддає їх
   анонімний маршрут /ui-font/{file} (див. Program.cs): звичайний
   /downloads/font/ закритий роллю admin/designer, а шрифт потрібен ще й на
   сторінці входу та ролям finance/smm.

   У сховищі є лише Regular і Bold: 400–500 беруть Regular, 600–900 — Bold,
   тож напівжирний — це справжній начерк, а не синтетика браузера.
   Якщо колись покладете .woff2 у wwwroot/ui/fonts/ — додайте його ПЕРШИМ
   у src: він у 3–5 разів менший за .ttf.
   Поки шрифту немає — усе працює на Inter, нічого не ламається. */
@font-face {
    font-family: 'Vinnytsia Sans';
    src: url('/ui-font/VinnytsiaSans-Regular.ttf') format('truetype');
    font-weight: 400 500; font-style: normal; font-display: swap;
}
@font-face {
    font-family: 'Vinnytsia Sans';
    src: url('/ui-font/VinnytsiaSans-Bold.ttf') format('truetype');
    font-weight: 600 900; font-style: normal; font-display: swap;
}

/* ══════════════════════════════════════════════════════════════════════════
   UI-БАЗА «ОПОРА» · варіант A-Mono
   Трирівнева архітектура. Компоненти звертаються ТІЛЬКИ до ролей (рівень 2)
   і примітивів (рівень 3) — ніколи до сирого кольору.
   Деталі й обґрунтування: docs/ui-design-system.md, docs/ui-kit-preview.html
   ══════════════════════════════════════════════════════════════════════════ */

/* ── Рівень 1 · бренд-палітра ──────────────────────────────────────────────
   Дослівно Fundraising.Core/Services/TeamChipPalette.cs. Відповідає за СЕНС
   (чипи команд і зборів), не за тон інтерфейсу. --team-N-fg повторює
   TeamChipPalette.TextColorFor(). Не залежить від теми — колір команди
   мусить бути тим самим і в світлій, і в темній. */
:root {
    --team-1:  #d24f33; --team-1-fg:  #fff;     /* теракота                */
    --team-2:  #0a3247; --team-2-fg:  #fff;     /* темно-синій (навігація) */
    --team-3:  #5c99a1; --team-3-fg:  #0a3247;  /* приглушена бірюза       */
    --team-4:  #86795a; --team-4-fg:  #fff;     /* таупе                   */
    --team-5:  #fca182; --team-5-fg:  #0a3247;  /* персик                  */
    --team-6:  #a4c1bf; --team-6-fg:  #0a3247;  /* світла шавлія           */
    --team-7:  #5592f5; --team-7-fg:  #0a3247;  /* чорниця                 */
    --team-8:  #8d84f2; --team-8-fg:  #0a3247;  /* середній фіолет         */
    --team-9:  #343c94; --team-9-fg:  #fff;     /* синій пігмент           */
    --team-10: #7b9866; --team-10-fg: #0a3247;  /* мох                     */
    --team-11: #b7a694; --team-11-fg: #0a3247;  /* хакі                    */
    --team-12: #241c34; --team-12-fg: #fff;     /* темний фіолет           */
}

/* ── Рівень 3 · примітиви (спільні для тем) ─────────────────────────────── */
:root {
    /* Сітка 4px */
    --sp-1:4px; --sp-2:8px; --sp-3:12px; --sp-4:16px; --sp-5:20px;
    --sp-6:24px; --sp-8:32px; --sp-10:40px; --sp-12:48px;

    /* Типографічна шкала: 8 кроків */
    --fs-caption:11px; --fs-xs:12px; --fs-sm:13px; --fs-base:14px;
    --fs-title:16px; --fs-h2:20px; --fs-h1:26px; --fs-display:34px; --fs-hero:44px;

    --fw-normal:400; --fw-medium:500; --fw-semi:600; --fw-bold:700; --fw-black:800;
    --tr-tight:-.02em; --tr-caps:.05em;
    --lh-tight:1.15; --lh-snug:1.35; --lh-normal:1.55;

    /* Радіуси: 4 кроки */
    --r-sm:8px; --r-md:10px; --r-lg:14px; --r-full:999px;

    --dur-fast:120ms; --dur:180ms; --dur-slow:280ms;
    --ease:cubic-bezier(.2,.8,.2,1);

    /* Шрифт один — Vinnytsia Sans, як у генерації сторіз і квитків. Там
       StoryImageRenderer малює заголовки, суми й відсотки накресленням Bold,
       а підписи — Regular, і ніякого другого шрифту немає. Інтерфейс робить
       так само, тож картка в Telegram і адмінка звучать однаково.
       Окремі імена лишені як шов: якщо колись знадобиться дисплейний шрифт
       для заголовків, його достатньо підставити в --font-head. */
    --font-ui:'Vinnytsia Sans','Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
    --font-head:'Vinnytsia Sans','Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
    --font-num:'Vinnytsia Sans','Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
    --font-micro:'Vinnytsia Sans','Inter',system-ui,-apple-system,'Segoe UI',sans-serif;
}

/* ══ Рівень 2 · РОЛІ ═══════════════════════════════════════════════════════
   База чорна: нейтралі без підтону (R=G=B), від #FFFFFF до #000000.
   Дія у світлій темі — #141414, рівно те, що в шапці; у темній інвертується.

   ВАЖЛИВО: жодне ім'я, яке використовується в property-деклараціях, НЕ
   оголошується через var() на інше токен-ім'я. Перевірено вимірюванням:
   при такій подвійній індирекції (--grey3: var(--fg-muted)) зміна data-theme
   оновлює саму змінну, але залежний `color: var(--grey3)` лишається зі
   старим значенням — елемент візуально «не перемикається». Тому світла й
   темна тема дублюють значення літералами; синхронність тримає
   scratchpad-скрипт impl_6_noindirect.py, а не CSS-магія.
   ══════════════════════════════════════════════════════════════════════════ */
:root,
html[data-theme="light"] {
    color-scheme: light;

    /* Поверхні й текст */
    --bg-canvas:#F5F5F5; --bg-surface:#FFFFFF; --bg-raised:#FFFFFF; --bg-sunken:#EDEDED;
    --fg-strong:#0A0A0A; --fg-default:#171717; --fg-muted:#5C5C5C; --fg-subtle:#8A8A8A;
    --br-subtle:#EBEBEB; --br-default:#E0E0E0; --br-strong:#CFCFCF; --br-control:#949494;

    /* Дія */
    --ac:#141414; --ac-hover:#000000; --ac-fg:#FFFFFF; --ac-bg:#EDEDED; --ac-ring:#141414;

    /* Статуси — з бренд-палітри, доведені до AA */
    --pos:#4C6B39; --pos-bg:#EDF2E7;
    --warn:#7A6120; --warn-bg:#F7F2E4;
    --neg:#A93A20;  --neg-bg:#FBEDE9;
    --info:#356A73; --info-bg:#E9F2F3;

    /* Шапка й плитка головної метрики: власні ролі, бо не інвертуються */
    --bar-bg:#141414; --bar-fg:#FAFAFA;
    --hero-bg:#141414; --hero-fg:#C7C7C7; --hero-num:#FFFFFF;

    --overlay:rgba(0,0,0,.45);
    --tip-bg:#1F1F1F; --tip-fg:#F5F5F5;

    --sh-1:0 1px 2px rgba(0,0,0,.06);
    --sh-2:0 4px 12px rgba(0,0,0,.09), 0 1px 2px rgba(0,0,0,.05);
    --sh-3:0 16px 40px rgba(0,0,0,.18);

    /* Легасі-імена зі старої палітри — літералами, БЕЗ var()-індирекції
       (див. коментар до цього шару). Нового коду на них не пишемо. */
    --navy:#0A0A0A; --navy2:#171717;
    --grey0:#EDEDED; --grey1:#E0E0E0; --grey3:#5C5C5C;
    --bg:#F5F5F5; --surface:#FFFFFF;
    --invert:#141414; --on-invert:#FAFAFA;
    --amber:#141414; --green:#4C6B39; --red:#A93A20;

    /* Палітра MudBlazor — теж літералами. MudThemeProvider пише свої змінні
       в :root (специфічність 0,1,0), ці селектори — (0,1,1), тож перекривають
       без !important. Обидві теми, не лише темна. */
    --mud-palette-background:#F5F5F5;
    --mud-palette-background-gray:#EDEDED;
    --mud-palette-surface:#FFFFFF;
    --mud-palette-drawer-background:#FFFFFF;
    --mud-palette-drawer-text:#171717;
    --mud-palette-drawer-icon:#5C5C5C;
    --mud-palette-appbar-background:#141414;
    --mud-palette-appbar-text:#FAFAFA;
    --mud-palette-text-primary:#171717;
    --mud-palette-text-secondary:#5C5C5C;
    --mud-palette-text-disabled:#8A8A8A;
    --mud-palette-action-default:#5C5C5C;
    --mud-palette-action-disabled:#8A8A8A;
    --mud-palette-action-disabled-background:#EDEDED;
    --mud-palette-lines-default:#E0E0E0;
    --mud-palette-lines-inputs:#949494;
    --mud-palette-table-lines:#EBEBEB;
    --mud-palette-table-striped:#EDEDED;
    --mud-palette-table-hover:#EDEDED;
    --mud-palette-divider:#E0E0E0;
    --mud-palette-divider-light:#EBEBEB;
    /* Для кожного семантичного кольору MudBlazor читає чотири змінні:
       -text (підпис), -darken (фон на hover/active у filled-кнопок),
       -lighten і -hover (напівпрозорий шар для text/outlined-кнопок).
       Задаємо всі: інакше MudThemeProvider рахує їх сам і в темній темі
       «темніший» відтінок світлого primary виходить темним. */
    --mud-palette-primary:#141414;
    --mud-palette-primary-text:#FFFFFF;
    --mud-palette-primary-darken:#000000;
    --mud-palette-primary-lighten:#3A3A3A;
    --mud-palette-primary-hover:rgba(20,20,20,.08);
    --mud-palette-secondary:#171717;
    --mud-palette-secondary-text:#FFFFFF;
    --mud-palette-secondary-darken:#000000;
    --mud-palette-secondary-lighten:#3A3A3A;
    --mud-palette-secondary-hover:rgba(23,23,23,.08);
    --mud-palette-error:#A93A20;
    --mud-palette-error-text:#FFFFFF;
    --mud-palette-error-darken:#8A2F1A;
    --mud-palette-error-lighten:#C4462A;
    --mud-palette-error-hover:rgba(169,58,32,.08);
    --mud-palette-success:#4C6B39;
    --mud-palette-success-text:#FFFFFF;
    --mud-palette-success-darken:#3C552D;
    --mud-palette-success-lighten:#5E8247;
    --mud-palette-success-hover:rgba(76,107,57,.08);
    --mud-palette-warning:#7A6120;
    --mud-palette-warning-text:#FFFFFF;
    --mud-palette-warning-darken:#614D19;
    --mud-palette-warning-lighten:#967728;
    --mud-palette-warning-hover:rgba(122,97,32,.08);
    --mud-palette-info:#356A73;
    --mud-palette-info-text:#FFFFFF;
    --mud-palette-info-darken:#29545B;
    --mud-palette-info-lighten:#40808B;
    --mud-palette-info-hover:rgba(53,106,115,.08);
    --mud-palette-dark:#0A0A0A;
    --mud-palette-dark-text:#FFFFFF;
    --mud-palette-dark-darken:#000000;
    --mud-palette-dark-lighten:#2A2A2A;
    --mud-palette-dark-hover:rgba(10,10,10,.08);
}

html[data-theme="dark"] {
    color-scheme: dark;

    /* Поверхні й текст */
    --bg-canvas:#000000; --bg-surface:#121212; --bg-raised:#1C1C1C; --bg-sunken:#1E1E1E;
    --fg-strong:#FFFFFF; --fg-default:#E5E5E5; --fg-muted:#A8A8A8; --fg-subtle:#818181;
    --br-subtle:#1F1F1F; --br-default:#2A2A2A; --br-strong:#3D3D3D; --br-control:#6E6E6E;

    /* Дія */
    --ac:#FAFAFA; --ac-hover:#FFFFFF; --ac-fg:#0A0A0A; --ac-bg:#1F1F1F; --ac-ring:#FAFAFA;

    /* Статуси — з бренд-палітри, доведені до AA */
    --pos:#9FC084; --pos-bg:#182013;
    --warn:#D6B478; --warn-bg:#221C0E;
    --neg:#FCA182;  --neg-bg:#241512;
    --info:#8FB6C4; --info-bg:#131E22;

    /* Шапка й плитка головної метрики: власні ролі, бо не інвертуються */
    --bar-bg:#000000; --bar-fg:#FAFAFA;
    --hero-bg:#1A1A1A; --hero-fg:#C7C7C7; --hero-num:#FFFFFF;

    --overlay:rgba(0,0,0,.7);
    --tip-bg:#2A2A2A; --tip-fg:#F5F5F5;

    --sh-1:0 1px 2px rgba(0,0,0,.6);
    --sh-2:0 4px 14px rgba(0,0,0,.7);
    --sh-3:0 18px 44px rgba(0,0,0,.85);

    /* Легасі-імена зі старої палітри — літералами, БЕЗ var()-індирекції
       (див. коментар до цього шару). Нового коду на них не пишемо. */
    --navy:#FFFFFF; --navy2:#E5E5E5;
    --grey0:#1E1E1E; --grey1:#2A2A2A; --grey3:#A8A8A8;
    --bg:#000000; --surface:#121212;
    --invert:#000000; --on-invert:#FAFAFA;
    --amber:#FAFAFA; --green:#9FC084; --red:#FCA182;

    /* Палітра MudBlazor — теж літералами. MudThemeProvider пише свої змінні
       в :root (специфічність 0,1,0), ці селектори — (0,1,1), тож перекривають
       без !important. Обидві теми, не лише темна. */
    --mud-palette-background:#000000;
    --mud-palette-background-gray:#1E1E1E;
    --mud-palette-surface:#121212;
    --mud-palette-drawer-background:#121212;
    --mud-palette-drawer-text:#E5E5E5;
    --mud-palette-drawer-icon:#A8A8A8;
    --mud-palette-appbar-background:#000000;
    --mud-palette-appbar-text:#FAFAFA;
    --mud-palette-text-primary:#E5E5E5;
    --mud-palette-text-secondary:#A8A8A8;
    --mud-palette-text-disabled:#818181;
    --mud-palette-action-default:#A8A8A8;
    --mud-palette-action-disabled:#818181;
    --mud-palette-action-disabled-background:#1E1E1E;
    --mud-palette-lines-default:#2A2A2A;
    --mud-palette-lines-inputs:#6E6E6E;
    --mud-palette-table-lines:#1F1F1F;
    --mud-palette-table-striped:#1E1E1E;
    --mud-palette-table-hover:#1E1E1E;
    --mud-palette-divider:#2A2A2A;
    --mud-palette-divider-light:#1F1F1F;
    /* Кнопки в темній темі НЕ білі: суцільно-біла заливка на чорному полотні
       світиться сильніше за будь-який вміст сторінки. Беремо підняту поверхню
       з межею — так primary-кнопка лишається помітною, але в одному ряду
       з рештою кнопок. Наш власний --ac (#FAFAFA) це не зачіпає: він і далі
       фарбує прогрес-бари, фокус-ринг і активну вкладку. */
    --mud-palette-primary:#2E2E2E;
    --mud-palette-primary-text:#FFFFFF;
    --mud-palette-primary-darken:#3D3D3D;
    --mud-palette-primary-lighten:#3D3D3D;
    --mud-palette-primary-hover:rgba(255,255,255,.10);
    --mud-palette-secondary:#E5E5E5;
    --mud-palette-secondary-text:#0A0A0A;
    --mud-palette-secondary-darken:#FFFFFF;
    --mud-palette-secondary-lighten:#FFFFFF;
    --mud-palette-secondary-hover:rgba(229,229,229,.12);
    --mud-palette-error:#FCA182;
    --mud-palette-error-text:#241512;
    --mud-palette-error-darken:#FDB79E;
    --mud-palette-error-lighten:#FDB79E;
    --mud-palette-error-hover:rgba(252,161,130,.14);
    --mud-palette-success:#9FC084;
    --mud-palette-success-text:#182013;
    --mud-palette-success-darken:#B3D09B;
    --mud-palette-success-lighten:#B3D09B;
    --mud-palette-success-hover:rgba(159,192,132,.14);
    --mud-palette-warning:#D6B478;
    --mud-palette-warning-text:#221C0E;
    --mud-palette-warning-darken:#E2C692;
    --mud-palette-warning-lighten:#E2C692;
    --mud-palette-warning-hover:rgba(214,180,120,.14);
    --mud-palette-info:#8FB6C4;
    --mud-palette-info-text:#131E22;
    --mud-palette-info-darken:#A6C7D3;
    --mud-palette-info-lighten:#A6C7D3;
    --mud-palette-info-hover:rgba(143,182,196,.14);
    --mud-palette-dark:#FFFFFF;
    --mud-palette-dark-text:#0A0A0A;
    --mud-palette-dark-darken:#FFFFFF;
    --mud-palette-dark-lighten:#FFFFFF;
    --mud-palette-dark-hover:rgba(255,255,255,.12);
}

/* ── Поверхні, темні в обох темах ──────────────────────────────────────────
   Шапка, плитка головної метрики, картка входу, підкладка під фото. Білі
   напівпрозорі шари тут коректні незалежно від теми, тому ці токени спільні
   і НЕ перевизначаються в темній: інакше вони інвертувались би на поверхні,
   яка не інвертується. */
:root {
    --ondark-fg:#FAFAFA;
    --ondark-dim:rgba(255,255,255,.55);
    --ondark-tile:rgba(255,255,255,.07);
    --ondark-line:rgba(255,255,255,.14);
    --ondark-btn-bg:#FAFAFA;
    --ondark-btn-fg:#141414;

    /* Підкладка під зображення та бейджі поверх фото. Фото не залежить від
       теми, тож і ці кольори — ні. Світліші відтінки статусів, щоб читалися
       на темному скримі. */
    --photo-bg:#0D0D0D;
    --onphoto-scrim:rgba(0,0,0,.72);
    --onphoto-fg:#FFFFFF;
    --onphoto-pos:#8FD6A8;
    --onphoto-warn:#E8C065;
    --onphoto-neg:#F7AEA6;
    --onphoto-info:#8FBAF0;
    --onphoto-muted:rgba(255,255,255,.72);
}


html, body { font-family: var(--font-ui); }
body { background: var(--bg-canvas); color: var(--fg-default); }

/* ── Заголовки й числа ─────────────────────────────────────────────────────
   Накреслення Bold того самого Vinnytsia Sans — рівно як у StoryImageRenderer,
   де заголовки, суми й відсотки йдуть через Font(f, bold: true, …).
   Трекінг НЕ стискаємо: у рендері його немає, і на Vinnytsia мінусовий
   трекінг з'їдає просвіти в кириличних «ш», «щ», «ю». */
h1, h2, h3, h4, h5, h6,
.section-title, .detail-title, .cform-stitle, .ig-card-title, .ig-empty-title,
.team-rank-title, .cvp-overall-t, .ig-help > summary,
.mud-typography-h1, .mud-typography-h2, .mud-typography-h3,
.mud-typography-h4, .mud-typography-h5, .mud-typography-h6 {
    font-family: var(--font-head);
    font-weight: var(--fw-bold);
}
/* Жирний текст у прозі — те саме накреслення Bold. */
strong, b { font-weight: var(--fw-bold); }
/* Моноширинні вставки всередині жирного/заголовка лишаються моно. */
strong code, b code, h1 code, h2 code, h3 code, h4 code { font-family: ui-monospace, monospace; }

/* Числа — Bold, як суми на сторіз. Табличні цифри, щоб колонки вирівнювались. */
.period-big, .period-stat .v, .ig-kpi-val, .cvp-tile-v, .cvp-team-p,
.cvp-overall-p, .ds-value, .cs-value, .collected-val, .p-amount, .leader-sum {
    font-family: var(--font-num);
    font-weight: var(--fw-bold);
    font-variant-numeric: tabular-nums;
}

/* Таблиці: цифри моноширинні за шириною, щоб колонки сум вирівнювались. */
.mud-table-cell, .participants-table td, .ig-help-table td {
    font-variant-numeric: tabular-nums;
}

h1:focus { outline: none; }
.validation-message { color: var(--neg); }

/* ── Section headings ── */
.section-title { font-size: 22px; font-weight: 800; color: var(--navy); margin-bottom: 2px; }
.section-sub { font-size:15px; color: var(--grey3); margin-bottom: 22px; }

/* ── Campaign cards grid ── */
.campaign-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 16px; }
.campaign-card {
    background: var(--surface); border-radius: 14px; box-shadow: var(--sh-1);
    overflow: hidden; transition: transform .18s, box-shadow .18s; cursor: pointer; text-decoration: none;
}
.campaign-card:hover { transform: translateY(-3px); box-shadow: var(--sh-2); }
.campaign-preview {
    height: 130px; position: relative; overflow: hidden;
    background: var(--bg-sunken);
    display: flex; align-items: center; justify-content: center; font-size: 40px; color: var(--fg-muted);
}
.campaign-preview img { width: 100%; height: 100%; object-fit: cover; }
.campaign-status {
    position: absolute; top: 10px; right: 10px; font-size:12px; font-weight: 800;
    text-transform: uppercase; letter-spacing: .7px; padding: 5px 11px; border-radius: 20px;
    /* inline-flex + line-height:1 — інакше капси «висять» до верхнього краю:
       рядок успадковує line-height 1.55 від body і додає простір під літерами. */
    display: inline-flex; align-items: center; line-height: 1; white-space: nowrap;
    backdrop-filter: blur(3px);
}
.admins-role-label { display: block; font-size:14px; font-weight: 600; color: var(--grey3); margin-top: 4px; }
.admins-role-select { display: block; width: 100%; margin-top: 4px; padding: 8px 10px; border: 1px solid var(--br-control); border-radius: 8px; font-size:16px; background: var(--surface); }





.campaign-body { padding: 14px 16px; }
.campaign-id { font-size:12px; color: var(--fg-muted); font-weight: 700; text-transform: uppercase; letter-spacing: .5px; margin-bottom: 4px; }
.campaign-title { font-size:17px; font-weight: 700; color: var(--navy); margin-bottom: 4px; }
.campaign-desc { font-size:13px; color: var(--grey3); line-height: 1.5; margin-bottom: 12px; min-height: 32px; }
.campaign-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; }
.cs-item { background: var(--grey0); border-radius: 8px; padding: 8px 10px; }
.cs-label { font-size:12px; color: var(--grey3); font-weight: 600; }
.cs-value { font-size:17px; font-weight: 800; color: var(--navy); }

/* ── Promise block (per-campaign card) ── */
.promise-block { margin: 12px 0 10px; display: flex; flex-direction: column; gap: 4px; }
.promise-row { display: flex; justify-content: space-between; align-items: baseline; font-size:14px; }
.promise-label { color: var(--grey3); }
.promise-val { font-weight: 700; color: var(--navy); }
.promise-total { border-top: 1px dashed var(--grey1); padding-top: 5px; margin-top: 2px; }
.promise-total .promise-label, .promise-total .promise-val { font-weight: 800; font-size:15px; }

/* ── Coverage badge ── */
.coverage { font-size:13px; font-weight: 700; padding: 7px 10px; border-radius: 8px; margin-bottom: 10px; line-height: 1.35; }
.cov-ok { background: var(--bg-sunken); color: var(--fg-strong); border: 1px solid var(--br-default); }
/* Чорна плашка в обох темах: --hero-bg темний і у світлій, і в темній,
   тому текст лишається читабельним без інверсії. */
.cov-gap { background: var(--hero-bg); color: var(--ondark-fg); }
.cov-none { background: var(--grey0); color: var(--grey3); }

/* ── Collected + progress bar ── */
.collected-block { margin-bottom: 10px; }
.collected-head { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 5px; }
.collected-label { font-size:13px; color: var(--grey3); font-weight: 600; text-transform: uppercase; letter-spacing: .4px; }
.collected-val { font-size:15px; font-weight: 800; color: var(--green); }
.progress-track { height: 9px; background: var(--grey1); border-radius: 6px; overflow: hidden; }
/* Градієнт, як було: від акценту до його світлішого/темнішого відтінку.
   color-mix прив'язує другий стоп до теми, тож у темній він не гасне. */
.progress-fill { height: 100%; border-radius: 6px; transition: width .4s;
                 background: linear-gradient(90deg, var(--ac), color-mix(in srgb, var(--ac) 45%, var(--bg-sunken))); }
.collected-pct { font-size:12px; color: var(--grey3); font-weight: 700; margin-top: 3px; text-align: right; }

/* ── Team leaders ── */
.leaders { display: flex; flex-direction: column; gap: 5px; margin-top: 4px; }
.leader { display: flex; align-items: center; gap: 8px; font-size:13px; padding: 5px 8px; border-radius: 7px; background: var(--grey0); }
.leader-cap { font-weight: 700; color: var(--grey3); white-space: nowrap; }
.leader-name { font-weight: 700; color: var(--navy); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; }
.leader-sum { font-weight: 800; color: var(--navy); white-space: nowrap; }
.leader-top { background: var(--warn-bg); }

/* ── Period summary cards (dark, premium) — 4 в ряд ── */
.period-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 18px; align-items: stretch; }
.period-card {
    position: relative; overflow: hidden;
    background: var(--hero-bg);
    color: var(--hero-fg); border-radius: 20px; padding: 24px 24px 22px;
    box-shadow: var(--sh-3);
    border: 1px solid var(--ondark-line);
}
/* м'який світловий акцент у кутку */
.period-card::after {
    content: ""; position: absolute; top: -45px; right: -45px;
    width: 150px; height: 150px; border-radius: 50%;
    background: radial-gradient(circle, rgba(255,255,255,.12), transparent 70%);
    pointer-events: none;
}
.period-head { display: flex; align-items: center; gap: 11px; margin-bottom: 4px; position: relative; }
.period-title2 { font-size:16px; font-weight: 800; text-transform: uppercase; letter-spacing: 1px; color: var(--hero-num); }
.period-range { font-size:14px; color: var(--ondark-dim); margin: 8px 0 18px; font-weight: 600; }
/* clamp, а не фіксовані 38px: сума за всі роки (45 072 772 ₴) при фіксованому
   розмірі переносилась на кілька рядків і розпирала плитку. */
.period-big { font-size: clamp(26px, 2.6vw, 46px); font-weight: 800; color: var(--hero-num);
              line-height: 1.05; letter-spacing: -.5px; white-space: nowrap; }
.period-big span { font-size:21px; opacity: .5; font-weight: 700; }
/* Підпис під сумою — звичайний дрібний текст, без капсів і розрядки:
   акцент має бути на числі, а не на поясненні до нього. */
.period-big-cap { font-size: 12px; color: var(--ondark-dim); margin-top: 5px; margin-bottom: 16px;
                  font-weight: 400; line-height: 1.4; }
/* ── Показники на плитці періоду (варіант B) ──────────────────────────────
   Рядками, число попереду у власній колонці: числа вишиковуються в один
   вертикальний стовпчик, тож око біжить по ньому, не перестрибуючи через
   підписи різної довжини. Вкладених коробок немає — саме вони раніше
   виштовхували сусідню плитку за контур картки. */
.period-stats { display: flex; flex-direction: column; }
.period-stat {
    display: grid; grid-template-columns: minmax(56px, auto) 1fr; align-items: baseline;
    gap: 12px; padding: 8px 0; border-top: 1px solid var(--ondark-line);
}
.period-stat:first-child { border-top: 0; padding-top: 4px; }
.period-stat .v {
    font-size: 21px; font-weight: 800; color: var(--hero-num);
    font-variant-numeric: tabular-nums; text-align: right; white-space: nowrap;
}
.period-stat .l { font-size: 13px; color: var(--ondark-dim); font-weight: 600; }



.chart-row { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.chart-block { min-width: 0; }
.chart-cap { font-size:13px; color: var(--grey3); font-weight: 600; text-transform: uppercase; letter-spacing: .4px; margin-bottom: 4px; }
.bar-chart { width: 100%; height: auto; display: block; }
@media (max-width: 640px) { .chart-row { grid-template-columns: 1fr; } }
.period-rows { display: flex; flex-direction: column; gap: 6px; }
.period-rows > div { display: flex; justify-content: space-between; align-items: baseline; font-size:15px; color: var(--grey3); }
.period-rows > div b { color: var(--navy); font-weight: 800; }
.period-collected { color: var(--green) !important; }
.period-bar-row { flex-direction: column !important; align-items: stretch !important; gap: 4px; margin-top: 4px; }
.period-pct { font-size:12px; color: var(--grey3); font-weight: 700; }

/* ── Filter bar (нативні select, працюють у Blazor-острові без MudBlazor-провайдерів) ── */
.filter-bar { display: flex; flex-wrap: wrap; gap: 14px; align-items: flex-end; }
.filter-bar label { display: flex; flex-direction: column; font-size:13px; color: var(--grey3); font-weight: 600; gap: 3px; }
.filter-bar select {
    font-size:16px; color: var(--navy); padding: 8px 10px; border: 1px solid var(--grey1);
    border-radius: 8px; background: var(--surface); min-width: 150px; cursor: pointer;
}
.filter-bar select:focus { outline: none; border-color: var(--amber); }
.filter-bar input[type=search], .filter-bar input[type=date] {
    font-size:16px; color: var(--navy); padding: 8px 10px; border: 1px solid var(--grey1);
    border-radius: 8px; background: var(--surface); min-width: 150px;
}
.filter-bar input:focus { outline: none; border-color: var(--amber); }
.filter-bar .chip-btn {
    font-size:14px; font-weight: 600; color: var(--navy); padding: 8px 12px; border: 1px solid var(--grey1);
    border-radius: 999px; background: var(--surface); cursor: pointer; align-self: flex-end;
}
.filter-bar .chip-btn:hover { border-color: var(--amber); background: var(--bg-sunken); }
.filter-count { font-size:14px; color: var(--grey3); align-self: center; padding-bottom: 9px; }

.user-name-link {
    color: var(--bar-fg); text-decoration: none; font-size:16px; margin-right: 16px;
    padding: 6px 10px; border-radius: 8px; border: 1px solid var(--ondark-line);
}
.user-name-link:hover { background: var(--ondark-tile); }

.withdrawn-row { margin-top: 6px; font-size:14px; color: var(--grey3); }

/* Інформаційний тултип на (ⓘ) — острів-сумісний (без MudPopover). */
.info-tip {
    position: relative; display: inline-flex; align-items: center; justify-content: center;
    width: 18px; height: 18px; margin-left: 6px; border-radius: 50%;
    border: 1px solid var(--grey1); color: var(--grey3); font-size:14px; font-weight: 700;
    cursor: help; user-select: none; vertical-align: middle;
}
.info-tip:hover, .info-tip:focus { border-color: var(--navy); color: var(--navy); outline: none; }
.info-tip .info-pop {
    position: absolute; top: calc(100% + 8px); left: 0; z-index: 50;
    width: 340px; max-width: 80vw; padding: 12px 14px; border-radius: 10px;
    background: var(--tip-bg); color: var(--tip-fg); font-size:14.5px; font-weight: 400; line-height: 1.5;
    box-shadow: var(--sh-2); opacity: 0; visibility: hidden;
    transform: translateY(-4px); transition: opacity .12s, transform .12s; text-align: left;
}
.info-tip:hover .info-pop, .info-tip:focus .info-pop { opacity: 1; visibility: visible; transform: translateY(0); }
.info-tip .info-pop b { color: var(--tip-fg); }
.info-tip .info-pop ol { margin: 0; padding-left: 16px; }
.info-tip .info-pop li { margin-bottom: 6px; }
.info-tip .info-pop li:last-child { margin-bottom: 0; }

/* ── Inline modal (без MudDialogProvider, який статичний у layout) ── */
.modal-backdrop { position: fixed; inset: 0; background: var(--overlay); z-index: 1400; }
.modal-card {
    position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%);
    background: var(--surface); border-radius: 14px; padding: 24px; width: min(420px, calc(100vw - 32px));
    max-height: calc(100vh - 32px); overflow-y: auto; z-index: 1401;
    box-shadow: var(--sh-3);
}
.modal-select-label { display: flex; flex-direction: column; font-size:14px; color: var(--grey3); gap: 4px; margin-top: 8px; }
.modal-select-label select {
    font-size:16px; color: var(--navy); padding: 9px 10px; border: 1px solid var(--grey1);
    border-radius: 8px; background: var(--surface); cursor: pointer;
}
.modal-select-label select:focus { outline: none; border-color: var(--amber); }

/* ── Quick-view (detail) modal ── */
.detail-overlay {
    position: fixed; inset: 0; background: var(--overlay); z-index: 1500;
    display: flex; align-items: center; justify-content: center; padding: 24px 16px; overflow-y: auto;
}
/* Без власного max-height і overflow: інакше поруч із зовнішньою смугою
   прокрутки підкладки з'являлась друга, внутрішня. Прокручує тільки
   .detail-overlay. */
.detail-modal { background: var(--surface); border-radius: 18px; width: 760px; max-width: 100%;
                box-shadow: var(--sh-3); }
.detail-header-img {
    height: 130px; border-radius: 18px 18px 0 0; position: relative;
    background: var(--bg-sunken);
    display: flex; align-items: center; justify-content: center; font-size: 46px; color: var(--fg-muted);
    cursor: pointer;
}
.detail-close {
    position: absolute; top: 14px; right: 14px; width: 34px; height: 34px; border-radius: 8px; border: none;
    background: var(--bg-surface); color: var(--fg-default); border: 1px solid var(--br-default); font-size:19px; cursor: pointer;
}
.detail-close:hover { background: var(--bg-sunken); }
.detail-body { padding: 20px 24px; }
.detail-title { font-size:22px; font-weight: 800; color: var(--navy); margin-bottom: 4px; }
/* Назва як посилання — клік відкриває повні деталі збору. */
.detail-title-link { color: var(--green); cursor: pointer; width: fit-content; transition: opacity .15s; }
.detail-title-link:hover { opacity: .75; }
.detail-meta { font-size:14px; color: var(--grey3); margin-bottom: 16px; display: flex; flex-wrap: wrap; gap: 14px; }

.detail-stats { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-bottom: 18px; }
.ds-card { background: var(--grey0); border-radius: 10px; padding: 12px 14px; }
.ds-label { font-size:12px; color: var(--grey3); font-weight: 700; text-transform: uppercase; margin-bottom: 4px; }
.ds-value { font-size:21px; font-weight: 800; color: var(--navy); }
.ds-sub { font-size:13px; color: var(--grey3); margin-top: 2px; }

/* ── Team ranking ── */
.team-rank-title { font-size:14px; font-weight: 800; text-transform: uppercase; letter-spacing: .5px; color: var(--navy); margin-bottom: 6px; }
.team-rank { display: flex; flex-direction: column; gap: 4px; }
.tr-row { display: grid; grid-template-columns: 24px 1fr auto auto; gap: 10px; align-items: center; background: var(--grey0); border-radius: 8px; padding: 7px 10px; font-size:14px; }
.tr-pos { font-weight: 800; color: var(--amber); text-align: center; }
.tr-name { font-weight: 700; color: var(--navy); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tr-goal { font-size:13px; color: var(--grey3); }
.tr-bal { font-weight: 800; color: var(--green); white-space: nowrap; }

/* ── Participants table (modal) ── */
.participants-table { width: 100%; border-collapse: collapse; font-size:14px; }
.participants-table th { text-align: left; padding: 8px 10px; background: var(--grey0); font-size:12px; font-weight: 700; text-transform: uppercase; letter-spacing: .5px; color: var(--grey3); }
.participants-table th:first-child { border-radius: 8px 0 0 8px; }
.participants-table th:last-child { border-radius: 0 8px 8px 0; }
.participants-table td { padding: 9px 10px; border-bottom: 1px solid var(--grey1); }
.participants-table tr:last-child td { border-bottom: none; }
.p-name { font-weight: 700; color: var(--navy); }
.p-amount { font-weight: 800; color: var(--navy); }
.p-mono { font-size:13px; color: var(--green); font-weight: 700; }
.p-badge { font-size:12px; padding: 3px 8px; border-radius: 20px; font-weight: 700; display: inline-block; }
.pb-team { background: var(--bg-sunken); color: var(--fg-strong); }
.pb-solo { background: var(--grey0); color: var(--grey3); }
.pb-done { background: var(--pos-bg); color: var(--pos); }
.pb-wait { background: var(--bg-sunken); color: var(--fg-muted); border: 1px solid var(--br-default); }
.pb-broken { background: var(--neg-bg); color: var(--neg); }

.detail-footer { padding: 14px 24px 18px; border-top: 1px solid var(--grey1); display: flex; gap: 10px; justify-content: space-between; align-items: center; flex-wrap: wrap; }
.df-left { font-size:13px; color: var(--grey3); }
.df-right { display: flex; gap: 8px; flex-wrap: wrap; }

/* ── Top navigation (вкладки: один рядок, групи через розділювач) ── */
.top-nav {
    position: sticky; top: 64px; z-index: 6;
    display: flex; align-items: center; flex-wrap: nowrap; gap: 2px;
    background: var(--surface); border-radius: 10px; padding: 4px; margin-bottom: 18px;
    box-shadow: var(--sh-1);
}
.top-nav .tn-item {
    display: flex; align-items: center; gap: 6px; padding: 6px 11px; border-radius: 7px; flex: 0 0 auto;
    text-decoration: none; color: var(--grey3); font-weight: 500; font-size:15px; line-height: 20px;
    white-space: nowrap; transition: background .15s, color .15s;
}
.top-nav .tn-item:hover { background: var(--grey0); color: var(--navy); }
/* Активна вкладка: не лише колір — ще й вага шрифту (WCAG 1.4.1). */
.top-nav .tn-item.active { background: var(--invert); color: var(--on-invert); font-weight: 700; }
.top-nav .tn-item:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 1px; }
.top-nav .tn-ico { font-size:19px; width: 1em; height: 1em; flex: 0 0 auto; }
/* Другорядні розділи (Instagram, дизайн) — лише іконка + tooltip. */
.top-nav .tn-item.tn-icon { padding: 6px 9px; }
.top-nav .tn-item.tn-icon .tn-txt { display: none; }
.top-nav .tn-sep { width: 1px; height: 20px; background: var(--grey1); margin: 0 5px; flex: 0 0 auto; }
.top-nav .tn-off { display: none !important; }

/* Переповнення: те, що не влізло в рядок, їде в меню «Ще N». */
.top-nav .tn-more { position: relative; margin-left: auto; flex: 0 0 auto; }
.top-nav .tn-more[hidden] { display: none; }
.tn-more-btn {
    display: flex; align-items: center; gap: 5px; padding: 5px 10px; border-radius: 7px; cursor: pointer;
    border: 1px solid var(--grey1); background: var(--surface); color: var(--navy);
    font-family: inherit; font-size:15px; font-weight: 500; line-height: 20px; white-space: nowrap;
}
.tn-more-btn:hover { border-color: var(--ac); background: var(--grey0); }
.tn-more-btn:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 1px; }
.tn-more-chev { font-size:13px; opacity: .6; }
.tn-more-menu {
    position: absolute; top: calc(100% + 6px); right: 0; min-width: 210px; z-index: 20;
    background: var(--surface); border: 1px solid var(--grey1); border-radius: 10px; padding: 5px;
    box-shadow: var(--sh-2);
}
.tn-more-menu[hidden] { display: none; }
.tn-more-menu .tn-item { padding: 8px 10px; }
.tn-more-menu .tn-item .tn-txt { display: inline; }

@media (max-width: 599px) {
    .top-nav { top: 56px; }
}

/* ── Brand wordmark (хедер) ── */
.brand-wordmark { display: flex; align-items: center; gap: 9px; text-decoration: none; }
.brand-wordmark .bw-mark {
    width: 26px; height: 26px; border-radius: 6px; background: var(--surface); flex: 0 0 auto;
    display: flex; align-items: center; justify-content: center; color: var(--bar-bg); font-weight: 900; font-size:18px;
}
.brand-wordmark .bw-text { color: var(--bar-fg); font-weight: 800; letter-spacing: 2px; font-size:18px; }
.brand-wordmark .bw-text b { font-weight: 800; opacity: .65; }

/* ── Login card (чорна плитка, біле лого, біла кнопка) ── */
.login-card {
    background: var(--hero-bg); border: 1px solid var(--br-strong); border-radius: 18px; padding: 44px 34px; width: min(360px, calc(100vw - 32px));
    text-align: center; box-shadow: var(--sh-3);
    display: flex; flex-direction: column; align-items: center; gap: 26px;
}
.login-logo { width: 160px; height: auto; display: block; }
/* Перемикач теми на сторінці входу: користувач може вибрати тему ще до
   авторизації, і вибір збережеться в cookie так само, як в адмінці. */
.login-theme {
    position: fixed; top: 16px; right: 16px; width: 40px; height: 40px;
    display: inline-flex; align-items: center; justify-content: center;
    border: 1px solid var(--br-default); background: var(--bg-surface);
    color: var(--fg-default); border-radius: 50%; cursor: pointer; font-size:19px;
    line-height: 1; padding: 0;
}
.login-theme:hover { background: var(--bg-sunken); border-color: var(--br-strong); }
.login-theme:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 2px; }
.login-theme .lt-dark { display: none; }
html[data-theme="dark"] .login-theme .lt-light { display: none; }
html[data-theme="dark"] .login-theme .lt-dark { display: inline; }
.login-btn {
    width: 100%; background: var(--ondark-btn-bg); color: var(--ondark-btn-fg); border: none; border-radius: 11px;
    padding: 14px 24px; font-size:17px; font-weight: 700; cursor: pointer; transition: opacity .15s;
}
.login-btn:hover { opacity: .85; }
.login-err { width: 100%; background: var(--ondark-tile); color: var(--ondark-fg); font-size:15px; padding: 10px 14px; border-radius: 8px; }

/* ── Перевірити дизайн ── */
.cd-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 720px) { .cd-grid { grid-template-columns: 1fr; } }
.cd-fonts { display: flex; flex-direction: column; gap: 6px; margin-top: 4px; }
.cd-font { display: flex; align-items: center; justify-content: space-between; background: var(--grey0); border-radius: 8px; padding: 4px 6px 4px 12px; font-size:15px; color: var(--navy); font-weight: 600; }
.cd-fontwarn { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--grey1); display: flex; flex-direction: column; gap: 4px; }
.cd-fontwarn-title { font-size:13px; font-weight: 700; text-transform: uppercase; letter-spacing: .4px; color: var(--grey3); margin-bottom: 2px; }
.cd-fontwarn .fw-ok { font-size:15px; color: var(--pos); font-weight: 600; }
.cd-fontwarn .fw-miss { font-size:15px; color: var(--warn); font-weight: 700; }
.cd-fontwarn .fw-note { font-size:14px; color: var(--grey3); margin-top: 4px; }

/* ── Campaign lifecycle status chip ── */
.cv-status { font-size:13px; font-weight: 800; text-transform: uppercase; letter-spacing: .5px;
             padding: 6px 13px; border-radius: 20px; white-space: nowrap;
             display: inline-flex; align-items: center; line-height: 1; }





/* Дії збору — в один рядок під назвою; за потреби горизонтальна прокрутка замість переносу. */
.cv-actions { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 2px; }
.cv-actions .mud-button-root { flex: 0 0 auto; white-space: nowrap; }

/* ── Export column picker ── */
.export-cols { display: grid; grid-template-columns: 1fr 1fr; gap: 6px 14px; }
.export-col { display: flex; align-items: center; gap: 8px; font-size:15px; color: var(--navy); cursor: pointer; }
.export-col input { width: 16px; height: 16px; cursor: pointer; }

.sortable { cursor: pointer; user-select: none; white-space: nowrap; }

/* ── Колір команди (читабельність таблиці учасників) ── */
.team-chip { display: inline-block; padding: 3px 10px; border-radius: 20px; color: var(--team-1-fg); font-size:14px; font-weight: 700; white-space: nowrap; }

/* Комірка з обрізанням довгого тексту в один рядок (напр. довге ім'я в таблиці учасників). */
.cell-ellipsis { display: inline-block; max-width: 200px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; vertical-align: middle; }

/* Компактніші відступи між колонками в усіх таблицях (щільно, але не впритул). */
.mud-table-root .mud-table-cell,
.mud-table-dense .mud-table-cell { padding-left: 8px !important; padding-right: 8px !important; }
.mud-table-root .mud-table-cell:first-child,
.mud-table-dense .mud-table-cell:first-child { padding-left: 12px !important; }
.mud-table-root .mud-table-cell:last-child,
.mud-table-dense .mud-table-cell:last-child { padding-right: 12px !important; }

/* ── Import modal ── */
.imp-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 8px 0; border-bottom: 1px solid var(--grey1); font-size:15px; color: var(--navy); font-weight: 600; }
.imp-warnings { margin-top: 8px; max-height: 160px; overflow-y: auto; font-size:14px; color: var(--warn); display: flex; flex-direction: column; gap: 3px; }

/* ── Pager у вікні швидкого перегляду ── */
.detail-pager { display: flex; align-items: center; justify-content: flex-end; gap: 12px; margin-top: 10px; font-size:14px; color: var(--grey3); }
.detail-pager button { border: 1px solid var(--grey1); background: var(--surface); border-radius: 7px; padding: 5px 10px; font-size:14px; font-weight: 700; color: var(--navy); cursor: pointer; }
.detail-pager button:disabled { opacity: .4; cursor: default; }
.detail-pager button:not(:disabled):hover { background: var(--grey0); }

/* ── Campaign form (створення/редагування) — секційна, повітряна ── */
.cform { max-width: 800px; }
.cform-lead { font-size:15.5px; color: var(--grey3); margin: -2px 0 22px; }
.cform-section { background: var(--surface); border: 1px solid var(--grey1); border-radius: 16px; padding: 24px 26px; margin-bottom: 20px; }
.cform-shead { display: flex; align-items: center; gap: 12px; }
.cform-sico { width: 38px; height: 38px; flex: none; border-radius: 11px; background: var(--grey0); display: flex; align-items: center; justify-content: center; font-size:21px; }
.cform-stitle { font-size:18px; font-weight: 800; color: var(--navy); }
.cform-ssub { font-size:14.5px; color: var(--grey3); line-height: 1.55; margin: 10px 0 18px; }
.cform-row { display: grid; grid-template-columns: 1fr 1fr; gap: 8px 16px; }
@media (max-width: 640px) { .cform-row { grid-template-columns: 1fr; } }
.cform-flabel { font-size:14px; font-weight: 700; color: var(--grey3); text-transform: uppercase; letter-spacing: .5px; margin: 0 0 8px; display: block; }
.cform-select { display: block; width: 100%; padding: 12px 13px; border: 1px solid var(--br-control); border-radius: 8px; font-size:16px; background: var(--surface); color: var(--navy); cursor: pointer; }
.cform-select:hover { border-color: var(--fg-subtle); }
.cform-select:focus { outline: none; border-color: var(--navy); box-shadow: 0 0 0 1px var(--navy); }
.cform-upload { border: 1.5px dashed var(--br-control); border-radius: 12px; padding: 14px 16px; background: var(--grey0); display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.cform-upload-info { font-size:14.5px; color: var(--grey3); }
.cform-upload-info.ok { color: var(--pos); font-weight: 700; }
.cform-preview { height: 70px; border-radius: 8px; object-fit: cover; border: 1px solid var(--grey1); }
.cform-tags { background: var(--grey0); border-radius: 10px; padding: 12px 14px; font-size:14.5px; color: var(--grey3); line-height: 1.9; margin-bottom: 18px; }
.cform-tags code { background: var(--surface); border: 1px solid var(--grey1); border-radius: 5px; padding: 1px 6px; font-size:14px; color: var(--navy); }
.cform-attach { display: flex; align-items: center; justify-content: space-between; gap: 10px; background: var(--grey0); border: 1px solid var(--grey1); border-radius: 10px; padding: 9px 8px 9px 13px; margin-bottom: 8px; font-size:16px; }
.cform-actions { display: flex; align-items: center; gap: 16px; margin-top: 4px; }

/* ══ Instagram insights ══════════════════════════════════════════════════════
   Єдине місце в адмінці, де кольори несуть сенс: СММ має за пів секунди бачити,
   який допис «зайшов», а який ні. Решта палітри лишається монохромною. */
/* --warn і --info більше не перевизначаємо: вони вже є глобально з тим самим
   іменем, а `--warn: var(--warn)` — самопосилання, тобто недійсне значення. */
.ig { --ok: var(--pos); --bad: var(--neg); }

/* ── Шапка акаунта ── */
.ig-hero {
    background: var(--hero-bg); border: 1px solid var(--ondark-line);
    border-radius: 18px; padding: 22px 24px; color: var(--hero-fg); margin-bottom: 18px;
    display: flex; align-items: center; gap: 20px; flex-wrap: wrap;
}
.ig-avatar { width: 72px; height: 72px; border-radius: 50%; object-fit: cover; border: 2px solid var(--ondark-line); flex-shrink: 0; }
.ig-avatar-fallback { display: flex; align-items: center; justify-content: center; background: var(--ondark-tile); font-size: 30px; }
.ig-hero-main { flex: 1; min-width: 190px; }
.ig-handle { font-size: 21px; font-weight: 800; letter-spacing: -.3px; }
.ig-handle a { color: var(--hero-num); text-decoration: none; }
.ig-handle a:hover { text-decoration: underline; }
.ig-hero-name { font-size:15px; color: var(--ondark-dim); margin-top: 2px; }
.ig-hero-stats { display: flex; gap: 22px; flex-wrap: wrap; margin-top: 12px; }
.ig-hero-stat .n { font-size:22px; font-weight: 800; line-height: 1; }
.ig-hero-stat .c { font-size:13px; color: var(--ondark-dim); font-weight: 600; margin-top: 4px; text-transform: uppercase; letter-spacing: .5px; }
.ig-hero-side { display: flex; flex-direction: column; align-items: flex-end; gap: 8px; }
.ig-sync { font-size:13.5px; color: var(--ondark-dim); text-align: right; }
.ig-btn {
    border: 1px solid var(--ondark-line); background: var(--ondark-tile); color: var(--ondark-fg);
    border-radius: 9px; padding: 8px 14px; font-size:15px; font-weight: 700; cursor: pointer;
    display: inline-flex; align-items: center; gap: 7px; transition: background .15s, border-color .15s;
}
.ig-btn:hover:not(:disabled) { background: var(--ondark-line); border-color: var(--ondark-fg); }
.ig-btn:disabled { opacity: .5; cursor: default; }

/* ── Перемикач періоду ── */
.ig-periods { display: flex; gap: 6px; background: var(--grey1); padding: 4px; border-radius: 11px; }
.ig-period {
    border: none; background: transparent; color: var(--grey3); font-size:15px; font-weight: 700;
    padding: 7px 15px; border-radius: 8px; cursor: pointer; transition: background .15s, color .15s;
}
.ig-period:hover { color: var(--navy); }
.ig-period.on { background: var(--surface); color: var(--navy); box-shadow: var(--sh-1); }

/* ── Плитки показників ── */
.ig-kpis { display: grid; grid-template-columns: repeat(auto-fit, minmax(168px, 1fr)); gap: 12px; margin-bottom: 20px; }
.ig-kpi { background: var(--surface); border: 1px solid var(--grey1); border-radius: 14px; padding: 14px 16px; }
.ig-kpi-cap { font-size:13px; color: var(--grey3); font-weight: 700; text-transform: uppercase; letter-spacing: .4px; display: flex; align-items: center; gap: 6px; }
.ig-kpi-val { font-size: 26px; font-weight: 800; color: var(--navy); line-height: 1.15; margin-top: 8px; letter-spacing: -.5px; }
.ig-delta { font-size:14px; font-weight: 700; margin-top: 5px; display: inline-flex; align-items: center; gap: 4px; }
.ig-delta.up { color: var(--ok); }
.ig-delta.down { color: var(--bad); }
.ig-delta.flat { color: var(--grey3); }

/* ── Картки-блоки ── */
.ig-card { background: var(--surface); border: 1px solid var(--grey1); border-radius: 16px; padding: 18px 20px; margin-bottom: 18px; }
.ig-card-title { font-size:17px; font-weight: 800; color: var(--navy); margin-bottom: 2px; }
.ig-card-sub { font-size:14px; color: var(--grey3); margin-bottom: 14px; }
.ig-two { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
@media (max-width: 860px) { .ig-two { grid-template-columns: 1fr; } }

/* ── Поради ── */
.ig-tips { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 12px; margin-bottom: 18px; }
.ig-tip { background: var(--surface); border: 1px solid var(--grey1); border-left: 3px solid var(--navy); border-radius: 12px; padding: 13px 15px; }
.ig-tip-head { font-size:15.5px; font-weight: 800; color: var(--navy); display: flex; gap: 8px; align-items: flex-start; }
.ig-tip-body { font-size:14.5px; color: var(--grey3); line-height: 1.55; margin-top: 6px; }

/* ── Панель фільтрів дописів ── */
.ig-toolbar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 14px; }
.ig-toolbar input[type=search], .ig-toolbar select {
    font-size:15.5px; color: var(--navy); padding: 8px 11px; border: 1px solid var(--grey1);
    border-radius: 9px; background: var(--surface);
}
.ig-toolbar input[type=search]:focus, .ig-toolbar select:focus { outline: none; border-color: var(--navy); }
.ig-view-toggle { display: flex; border: 1px solid var(--grey1); border-radius: 9px; overflow: hidden; }
.ig-view-toggle button { border: none; background: var(--surface); padding: 8px 13px; font-size:15px; font-weight: 700; color: var(--grey3); cursor: pointer; }
.ig-view-toggle button.on { background: var(--invert); color: var(--bar-fg); }

/* ── Сітка дописів ── */
.ig-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(228px, 1fr)); gap: 16px; }
.ig-post {
    background: var(--surface); border: 1px solid var(--grey1); border-radius: 14px; overflow: hidden;
    cursor: pointer; transition: transform .16s, box-shadow .16s; display: flex; flex-direction: column;
}
.ig-post:hover { transform: translateY(-3px); box-shadow: var(--sh-2); }
.ig-thumb { position: relative; aspect-ratio: 1; background: var(--grey0); }
.ig-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ig-thumb-empty { display: flex; align-items: center; justify-content: center; height: 100%; font-size: 34px; opacity: .25; }
.ig-type {
    position: absolute; top: 8px; left: 8px; background: var(--onphoto-scrim); color: var(--onphoto-fg); backdrop-filter: blur(3px);
    font-size:12.5px; font-weight: 700; padding: 4px 8px; border-radius: 7px; letter-spacing: .3px;
}
.ig-badge {
    position: absolute; top: 8px; right: 8px; font-size:12.5px; font-weight: 800;
    padding: 4px 8px; border-radius: 7px; color: var(--onphoto-fg);
}
.ig-badge.star { background: var(--onphoto-scrim); color: var(--onphoto-pos); box-shadow: inset 0 0 0 1px var(--onphoto-pos); }
/* «Добре» — той самий зелений, але світліший: ТОП мусить лишатися помітнішим за просто добрий допис. */
.ig-badge.good { background: var(--onphoto-scrim); color: var(--onphoto-pos); }
.ig-badge.normal { background: var(--onphoto-scrim); color: var(--onphoto-muted); }
.ig-badge.wide { background: var(--onphoto-scrim); color: var(--onphoto-warn); }
.ig-badge.narrow { background: var(--onphoto-scrim); color: var(--onphoto-info); }
.ig-badge.retention { background: var(--onphoto-scrim); color: var(--onphoto-warn); }
.ig-badge.weak { background: var(--onphoto-scrim); color: var(--onphoto-neg); }
.ig-badge.unknown { background: var(--onphoto-scrim); color: var(--onphoto-muted); }
.ig-post-body { padding: 12px 13px 13px; display: flex; flex-direction: column; flex: 1; }
.ig-post-date { font-size:12.5px; color: var(--grey3); font-weight: 700; text-transform: uppercase; letter-spacing: .4px; }
.ig-post-cap {
    font-size:14.5px; color: var(--navy); font-weight: 600; line-height: 1.45; margin: 5px 0 10px;
    display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; min-height: 36px;
}
.ig-metrics { display: grid; grid-template-columns: repeat(4, 1fr); gap: 6px; margin-top: auto; }
.ig-metric { background: var(--grey0); border-radius: 8px; padding: 7px 4px; text-align: center; }
.ig-metric .n { font-size:15px; font-weight: 800; color: var(--navy); line-height: 1; }
.ig-metric .c { font-size:15px; margin-top: 3px; opacity: .55; }
.ig-er { margin-top: 9px; }
.ig-er-head { display: flex; justify-content: space-between; font-size:12.5px; color: var(--grey3); font-weight: 700; margin-bottom: 4px; }
.ig-er-track { height: 5px; background: var(--grey1); border-radius: 4px; overflow: hidden; }
.ig-er-fill { height: 100%; border-radius: 4px; transition: width .35s;
              background: linear-gradient(90deg, var(--ac), color-mix(in srgb, var(--ac) 45%, var(--bg-sunken))); }
.ig-er-fill.up { background: var(--ok); }
.ig-er-fill.down { background: var(--bad); }

/* ── Порівняльні смуги (формати, аудиторія, години) ── */
.ig-bars { display: flex; flex-direction: column; gap: 9px; }
.ig-bar-row { display: grid; grid-template-columns: 118px 1fr 76px; gap: 10px; align-items: center; font-size:14.5px; }
.ig-bar-label { color: var(--navy); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ig-bar-track { height: 9px; background: var(--grey0); border-radius: 5px; overflow: hidden; }
.ig-bar-fill { height: 100%; border-radius: 5px; transition: width .35s;
               background: linear-gradient(90deg, var(--ac), color-mix(in srgb, var(--ac) 45%, var(--bg-sunken))); }
.ig-bar-val { text-align: right; font-weight: 800; color: var(--navy); }
.ig-bar-sub { color: var(--grey3); font-weight: 600; }

/* ── Модалка допису ── */
.ig-modal { background: var(--surface); border-radius: 18px; width: 860px; max-width: 100%; max-height: calc(100vh - 40px); overflow-y: auto; box-shadow: var(--sh-3); }
.ig-modal-top { display: grid; grid-template-columns: 300px 1fr; gap: 0; }
@media (max-width: 760px) { .ig-modal-top { grid-template-columns: 1fr; } }
.ig-modal-img { position: relative; overflow: hidden; background: var(--photo-bg); display: flex; align-items: center; justify-content: center; }
/* Підкладка: те саме зображення, розмите й трохи збільшене — scale прибирає світлу кайму,
   яку блюр дає по краях. */
.ig-modal-img-blur {
    position: absolute; inset: 0;
    background-size: cover; background-position: center;
    filter: blur(24px) brightness(.7) saturate(1.15);
    transform: scale(1.2);
}
/* contain, а не cover: СММ має бачити креатив цілком, без обрізаних країв. */
.ig-modal-img img {
    position: relative; width: 100%; height: auto; max-height: 420px;
    object-fit: contain; display: block;
}
.ig-modal-side { padding: 20px 22px; }
.ig-modal-caption { font-size:15px; color: var(--navy); line-height: 1.6; white-space: pre-wrap; max-height: 150px; overflow-y: auto; background: var(--grey0); border-radius: 10px; padding: 11px 13px; margin-bottom: 14px; }
.ig-modal-metrics { display: grid; grid-template-columns: repeat(3, 1fr); gap: 9px; }
.ig-mm { background: var(--grey0); border-radius: 10px; padding: 10px 12px; }
.ig-mm .c { font-size:12px; color: var(--grey3); font-weight: 700; text-transform: uppercase; letter-spacing: .3px; }
.ig-mm .n { font-size:19px; font-weight: 800; color: var(--navy); margin-top: 3px; }
.ig-advice { border-radius: 12px; padding: 13px 15px; margin: 16px 0 0; font-size:15px; line-height: 1.55; border: 1px solid var(--grey1); background: var(--grey0); color: var(--navy); }
.ig-advice.star, .ig-advice.good { border-color: color-mix(in srgb, var(--pos) 45%, transparent); background: var(--pos-bg); }
.ig-advice.wide { border-color: color-mix(in srgb, var(--warn) 45%, transparent); background: var(--warn-bg); }
.ig-advice.narrow { border-color: color-mix(in srgb, var(--info) 45%, transparent); background: var(--info-bg); }
.ig-advice.retention { border-color: color-mix(in srgb, var(--warn) 45%, transparent); background: var(--warn-bg); }
.ig-advice.weak { border-color: color-mix(in srgb, var(--neg) 45%, transparent); background: var(--neg-bg); }
.ig-advice b { display: block; margin-bottom: 4px; }

/* ── Порожні стани ── */
.ig-empty { background: var(--surface); border: 1px dashed var(--grey1); border-radius: 16px; padding: 42px 28px; text-align: center; }
.ig-empty-emoji { font-size: 44px; }
.ig-empty-title { font-size:20px; font-weight: 800; color: var(--navy); margin: 12px 0 6px; }
.ig-empty-text { font-size:15.5px; color: var(--grey3); line-height: 1.6; max-width: 520px; margin: 0 auto 18px; }

.blazor-error-boundary { background: var(--neg-bg); padding: 1rem; color: var(--neg); border: 1px solid var(--neg); }
.blazor-error-boundary::after { content: "Сталася помилка."; }

/* ── Публічні юридичні тексти (політика приватності) ── */
.legal { max-width: 780px; margin: 0 auto 40px; background: var(--surface); border: 1px solid var(--grey1); border-radius: 16px; padding: 30px 34px; }
.legal h2 { font-size:18px; font-weight: 800; color: var(--navy); margin: 26px 0 8px; }
.legal p, .legal li { font-size:16px; color: var(--fg-default); line-height: 1.65; }
.legal ul, .legal ol { padding-left: 22px; margin: 8px 0; }
.legal li { margin-bottom: 6px; }
.legal a { color: var(--navy); text-decoration: underline; }

/* ── Діагностика підключення Instagram (лише адмін) ── */
.ig-diag { background: var(--surface); border: 1px solid var(--grey1); border-radius: 12px; margin-bottom: 18px; }
.ig-diag > summary { cursor: pointer; padding: 11px 16px; font-size:14.5px; font-weight: 700; color: var(--grey3); }
.ig-diag > summary:hover { color: var(--navy); }
.ig-diag-body { padding: 4px 16px 16px; font-size:14.5px; line-height: 1.9; color: var(--navy); }
.ig-diag-body code { background: var(--grey0); border: 1px solid var(--grey1); border-radius: 5px; padding: 1px 6px; font-size:14px; }
.ig-diag-result { margin-top: 12px; padding: 10px 13px; border-radius: 9px; font-size:14.5px; line-height: 1.55; word-break: break-word; }
.ig-diag-result.ok { background: var(--pos-bg); border: 1px solid color-mix(in srgb, var(--pos) 45%, transparent); }
.ig-diag-result.bad { background: var(--neg-bg); border: 1px solid color-mix(in srgb, var(--neg) 45%, transparent); }

/* Посилання-завантаження (шрифти, SVG-шаблони) */
/* Кнопка завантаження готового файлу в модалці. Своя, а не MudLink: той малюється кольором
   primary, який у нас майже зливається з темним тлом картки. */
.dl-btn {
    display: inline-flex; align-items: center; gap: 8px; padding: 9px 16px; border-radius: 10px;
    background: var(--navy); color: var(--surface); font-size: 15px; font-weight: 600; text-decoration: none;
}
.dl-btn:hover { opacity: .85; color: var(--surface); }

/* Вибір кольору аркуша подяки: піпетка + зразок обраного. */
.th-color { width: 44px; height: 34px; padding: 0; border: 1px solid var(--grey1); border-radius: 8px; background: none; cursor: pointer; }
.th-swatch { width: 34px; height: 34px; border-radius: 8px; border: 1px solid var(--grey1); display: inline-block; flex: none; }

.cd-font-dl { display: inline-block; text-decoration: none; font-size:15px; font-weight: 700; color: var(--grey3); padding: 4px 8px; border-radius: 7px; }
.cd-font-dl:hover { color: var(--navy); background: var(--grey1); }

/* ── Довідка «як це рахується» (низ сторінки Instagram) ── */
.ig-help { background: var(--surface); border: 1px solid var(--grey1); border-radius: 16px; margin: 26px 0 10px; }
.ig-help > summary { cursor: pointer; padding: 15px 20px; font-size:16px; font-weight: 800; color: var(--navy); }
.ig-help > summary:hover { color: var(--fg-strong); }
.ig-help-body { padding: 2px 20px 22px; }
.ig-help-title { font-size:13px; font-weight: 800; text-transform: uppercase; letter-spacing: .5px; color: var(--grey3); margin: 20px 0 8px; }
.ig-help-table { width: 100%; border-collapse: collapse; }
.ig-help-table td { padding: 9px 10px; font-size:14.5px; line-height: 1.6; color: var(--fg-default); border-top: 1px solid var(--grey1); vertical-align: top; }
.ig-help-table tr:first-child td { border-top: none; }
.ig-help-table td:first-child { width: 190px; font-weight: 700; color: var(--navy); white-space: nowrap; }
@media (max-width: 700px) { .ig-help-table td:first-child { width: auto; white-space: normal; } }
.ig-help-table code { background: var(--grey0); border: 1px solid var(--grey1); border-radius: 5px; padding: 2px 7px; font-size:14px; }
.ig-help-note { background: var(--grey0); border-radius: 10px; padding: 11px 14px; font-size:14.5px; line-height: 1.6; color: var(--fg-default); margin-top: 14px; }

/* ── Перемикачі формату контенту (дописи / Reels / Stories) ── */
.ig-types { display: flex; gap: 6px; flex-wrap: wrap; }
.ig-type-chip {
    display: inline-flex; align-items: center; gap: 6px;
    border: 1px solid var(--grey1); background: var(--surface); color: var(--grey3);
    border-radius: 9px; padding: 7px 11px; font-size:15px; font-weight: 700; cursor: pointer;
    transition: border-color .15s, background .15s, color .15s; opacity: .6;
}
.ig-type-chip:hover { border-color: var(--fg-subtle); color: var(--navy); }
.ig-type-chip.on { background: var(--invert); border-color: var(--navy); color: var(--bar-fg); opacity: 1; }
.ig-type-chip .n { font-size:13px; font-weight: 800; background: var(--grey0); color: var(--navy); border-radius: 20px; padding: 1px 7px; }
.ig-type-chip.on .n { background: var(--ondark-tile); color: var(--bar-fg); }
/* Крапка статусу (варіант B): колір статусу лишається видимим і на світлому чипі, і на темному
   (вибраному) — не покладаємось лише на колір тексту/фону. Колір задається на сторінці. */
.ig-type-chip .dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; }

/* Підсекція всередині картки (заголовок одразу після блоку смуг) — інакше групи зливаються в суцільну
   стіну рядків і незрозуміло, де закінчується одна шкала й починається інша. */
.ig-bars + .ig-card-title { margin-top: 26px; padding-top: 20px; border-top: 1px solid var(--grey1); }
.ig-bars { gap: 11px; }
.ig-bar-val .ig-bar-sub { margin-left: 6px; }

/* ── Вкладка «Прогрес» збору: команди + прев'ю сторіз ── */
.cvp { display: grid; grid-template-columns: minmax(0, 1fr) 320px; gap: 26px; align-items: start; }
@media (max-width: 1100px) { .cvp { grid-template-columns: 1fr; } }
.cvp-main { min-width: 0; }

.cvp-tiles { display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 12px; margin-bottom: 18px; }
.cvp-tile { background: var(--grey0); border: 1px solid var(--grey1); border-radius: 12px; padding: 13px 15px; }
.cvp-tile-v { display: block; font-size: 22px; font-weight: 800; color: var(--navy); line-height: 1.15; }
.cvp-tile-l { display: block; font-size:13.5px; font-weight: 600; color: var(--grey3); margin-top: 3px; }

.cvp-overall { background: var(--surface); border: 1px solid var(--grey1); border-radius: 12px; padding: 15px 17px; margin-bottom: 18px; }
.cvp-overall-t { font-size:15px; font-weight: 700; color: var(--navy); }
.cvp-overall-p { font-size:22px; font-weight: 800; color: var(--navy); }

.cvp-row { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.cvp-sub { font-size:14px; color: var(--grey3); margin-top: 7px; }
.cvp-sub b { color: var(--navy); }

.cvp-bar { height: 12px; border-radius: 20px; background: var(--grey1); overflow: hidden; margin-top: 9px; }
.cvp-bar-fill { height: 100%; border-radius: 20px; transition: width .25s; }
/* Теракота → персик: рівно той градієнт, що був, тільки тепер із
   бренд-палітри (--team-1 = #d24f33, --team-5 = #fca182). */
.cvp-bar-fill.is-accent { background: linear-gradient(90deg, var(--team-1), var(--team-5)); }
.cvp-bar-fill.is-done { background: linear-gradient(90deg, var(--team-10), color-mix(in srgb, var(--team-10) 55%, #fff)); }

.cvp-teams { display: flex; flex-direction: column; gap: 10px; }
.cvp-team { border: 1px solid var(--grey1); border-radius: 12px; padding: 12px 15px 13px; background: var(--surface); }
.cvp-team-p { font-size:19px; font-weight: 800; color: var(--navy); white-space: nowrap; }
.cvp-team-p.is-done { color: var(--pos); }

.cvp-check { flex-direction: row !important; align-items: center; gap: 7px !important; font-size:14px !important; color: var(--navy) !important; }
.filter-bar input[type=number] {
    border: 1px solid var(--br-control); border-radius: 8px; padding: 7px 9px; font-size:15px; width: 92px; background: var(--surface);
}

.cvp-story { border: 1px solid var(--grey1); border-radius: 14px; padding: 15px; background: var(--grey0); }
.cvp-story-head { display: flex; align-items: baseline; justify-content: space-between; gap: 8px; margin-bottom: 11px; }
.cvp-story-head > span:first-child { font-size:15px; font-weight: 800; color: var(--navy); }
.cvp-phone { border-radius: 14px; overflow: hidden; background: var(--photo-bg); box-shadow: var(--sh-2); }
.cvp-phone img { display: block; width: 100%; height: auto; }

/* Дії під прев'ю сторіз — завжди в один ряд (колонка вузька, тож не переносимо). */
.cvp-actions { display: flex; gap: 8px; flex-wrap: nowrap; }
.cvp-actions .mud-button-root { white-space: nowrap; }

/* Теги менторів для історії. */
.cvp-tags { margin-top: 14px; padding-top: 12px; border-top: 1px solid var(--grey1); }
.cvp-tags-t { font-size:14px; font-weight: 700; color: var(--navy); }
/* Росте під кількість менторів — без фіксованої висоти й без скролу всередині. */
.cvp-tags-box {
    width: 100%; box-sizing: border-box; margin-top: 6px;
    font-family: monospace; font-size:14px; line-height: 1.6;
    white-space: pre-wrap; overflow-wrap: anywhere;
    border: 1px solid var(--grey1); border-radius: 8px; padding: 8px; background: var(--surface); color: var(--navy);
}
.cvp-tags-box.is-empty { color: var(--grey3); font-family: inherit; }

/* ════════════════════════════════════════════════════════════════════════
   Мобільна адаптація (телефони). Крок 1: шапка, навігація, відступи, тап-таргети.
   Таблиці→картки на окремих сторінках — окремими правилами нижче/у сторінках.
   ════════════════════════════════════════════════════════════════════════ */
@media (max-width: 599px) {
    /* Шапка: ховаємо довгі підписи (ім'я користувача, «Вийти») — лишаємо іконки/⚙,
       щоб верхній бар не переповнювався на вузькому екрані. */
    .appbar-name, .appbar-txt { display: none; }
    .user-name-link { padding: 6px 8px; }

    /* Контент — на всю ширину, менше полів. */
    .mud-main-content .mud-container { padding-left: 12px; padding-right: 12px; }
    .mud-main-content .mud-container.py-6 { padding-top: 18px; padding-bottom: 18px; }

    /* Навігація: компактніше зверху, більші тап-таргети (зручно пальцем). */
    .top-nav { margin-bottom: 12px; }
    .top-nav .tn-item { padding: 9px 12px; }
    .tn-more-btn { padding: 8px 11px; }

    /* Заголовки трохи менші, щоб не тиснули. */
    .section-title { font-size:21px; }

    /* Модалки — майже на всю ширину (вже адаптивні, підстраховка відступів). */
    .modal-card { padding: 18px; border-radius: 16px; }

    /* Ряди дій (шапка збору, прев'ю) вже скролять по горизонталі — лишаємо. */

    /* «Розгорнута» плитка збору (модалка деталей) — аркуш знизу на всю ширину. */
    .detail-overlay { padding: 0; align-items: flex-end; }
    .detail-modal { width: 100%; max-width: 100%; max-height: 92vh; border-radius: 18px 18px 0 0; }
    .detail-body { padding: 16px 14px; }
    .detail-stats { grid-template-columns: 1fr 1fr; }

    /* Кастомні таблиці (учасники, у модалці й на сторінках) → картки: заголовок ховаємо,
       кожен рядок стає карткою, а підпис колонки бере значення з data-label на комірці. */
    .participants-table { font-size:15px; }
    .participants-table thead { display: none; }
    .participants-table tr { display: block; background: var(--surface); border: 1px solid var(--grey1);
                             border-radius: 10px; margin-bottom: 8px; overflow: hidden; }
    .participants-table td { display: flex; justify-content: space-between; gap: 12px; align-items: baseline;
                             text-align: right; padding: 8px 12px; border-bottom: 1px solid var(--grey1); }
    .participants-table tr td:last-child { border-bottom: none; }
    .participants-table td::before { content: attr(data-label); color: var(--grey3); font-weight: 600;
                                     text-align: left; flex: 0 0 auto; }
    .participants-table td:not([data-label])::before { content: ""; }
}


/* Іконкові кнопки: у MudBlazor hover-фон рахується від кольору тексту,
   на темній темі виходить ледь помітним. */
.mud-icon-button:hover { background-color: var(--bg-sunken); }


/* ── Primary як КОЛІР ТЕКСТУ ───────────────────────────────────────────────
   MudBlazor бере колір посилань, активної вкладки, її підкреслення й підпису
   сфокусованого поля з одного токена --mud-palette-primary. Але цей же токен
   служить ФОНОМ filled-кнопок, а в темній темі ми задали його темним (#2E2E2E),
   щоб кнопка лишалась темною з білим текстом. Через це «🧾 рахунок»,
   «📄 квитанція», «⬇️ Шаблон» і назва активної вкладки («Зняття», «Статус»)
   виходили чорними на чорному.

   Ці місця переводимо на --ac — «колір дії» самого застосунку. У світлій темі
   --ac це той самий #141414, що й --mud-palette-primary, тож світла тема не
   змінюється зовсім; у темній --ac це #FAFAFA. Самі кнопки НЕ чіпаємо:
   там темний фон під білим текстом доречний.

   !important потрібен, бо у MudBlazor .mud-primary-text теж із !important.
   Цей файл підключений ПІСЛЯ MudBlazor.min.css, тож за рівної специфічності
   виграє він. */
.mud-primary-text { color: var(--ac) !important; }

/* Вкладки. Селектор із .mud-tabs — специфічніший за .mud-tab.mud-tab-active
   у MudBlazor. Для підкреслення специфічність рівна варіантам
   .mud-tabs-tabbar-* (кольорова смуга вкладок); якщо колись зʼявиться
   <MudTabs Color="..."> — цей рядок треба буде обмежити. */
.mud-tabs .mud-tab.mud-tab-active { color: var(--ac); }
.mud-tabs .mud-tab-slider { background: var(--ac); }

/* Підпис поля під фокусом — той самий токен, та сама проблема. */
.mud-input:focus-within ~ label.mud-input-label { color: var(--ac); }


/* ══ Документи витрат (вкладка «Витрати») ═════════════════════════════════
   Хребет — зняття: на кожне обовʼязково мають бути документи, тож стан
   видно кольором лівої межі рядка й текстом статусу. Статус рахують ЛИШЕ
   обовʼязкові слоти: дріб по всіх підсвічував жовтим витрати, де бракувало
   опціонального договору, і кольору перестали вірити. */

.xd-recon { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-3);
            margin-bottom: var(--sp-4); }
@media (max-width: 760px) { .xd-recon { grid-template-columns: 1fr; } }
.xd-recon > div { background: var(--bg-sunken); border-radius: var(--r-md); padding: 12px 15px; }
.xd-recon .k { font-size: 11.5px; font-weight: 700; letter-spacing: var(--tr-caps);
               text-transform: uppercase; color: var(--fg-muted); }
.xd-recon .v { font-family: var(--font-num); font-size: 22px; font-weight: 800;
               color: var(--fg-strong); font-variant-numeric: tabular-nums; line-height: 1.2; }
.xd-recon .s { font-size: 11.5px; color: var(--fg-muted); margin-top: 2px; }
.xd-recon .bad { background: var(--neg-bg); }
.xd-recon .bad .k, .xd-recon .bad .v { color: var(--neg); }

.xd-ftabs { display: flex; gap: 4px; background: var(--bg-sunken); padding: 3px;
            border-radius: var(--r-full); font-size: 12px; font-weight: 700; flex-wrap: wrap; }
.xd-ftabs span { padding: 6px 13px; border-radius: var(--r-full); color: var(--fg-muted);
                 cursor: pointer; }
.xd-ftabs span.on { background: var(--bg-surface); color: var(--fg-strong); box-shadow: var(--sh-1); }
.xd-ftabs span.alarm { color: var(--neg); }
.xd-ftabs span.alarm.on { color: var(--neg); }

.xd-spine { display: grid; gap: 7px; }
.xd-row { border: 1px solid var(--br-default); border-left: 3px solid var(--br-strong);
          border-radius: var(--r-md); background: var(--bg-surface); }
.xd-row.ok { border-left-color: var(--pos); }
.xd-row.need { border-left-color: var(--warn); }
.xd-row.none { border-left-color: var(--neg); background: var(--neg-bg); }
.xd-h { display: flex; align-items: center; gap: 12px; padding: 11px 13px; cursor: pointer; }
.xd-h .caret { color: var(--fg-subtle); width: 12px; font-size: 11px; flex: 0 0 auto; }
.xd-h .date { font-size: 12px; color: var(--fg-muted); width: 62px; flex: 0 0 auto; }
.xd-h .sum { font-family: var(--font-num); font-weight: 800; width: 112px; text-align: right;
             flex: 0 0 auto; color: var(--fg-strong); font-variant-numeric: tabular-nums; }
.xd-h .what { flex: 1; min-width: 0; font-size: 13.5px; color: var(--fg-default); }
.xd-h .what .sub { font-size: 11.5px; color: var(--fg-muted); }
.xd-note { font-size: 11.5px; color: var(--fg-muted); white-space: nowrap; flex: 0 0 auto; }
.xd-st { font-size: 12px; font-weight: 700; padding: 4px 10px; border-radius: var(--r-full);
         white-space: nowrap; flex: 0 0 auto; }
.xd-st.ok { background: var(--pos-bg); color: var(--pos); }
.xd-st.need { background: var(--warn-bg); color: var(--warn); }
.xd-st.none { background: var(--neg); color: var(--ac-fg); }
.xd-b { padding: 0 13px 13px 30px; border-top: 1px solid var(--br-subtle); }
.xd-empty { font-size: 13px; color: var(--fg-muted); padding: 11px 0 2px; }
.xd-addlbl { font-size: 11.5px; font-weight: 700; letter-spacing: var(--tr-caps);
             text-transform: uppercase; color: var(--fg-muted); }

.xd-pkts { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px;
           margin-top: 12px; }
@media (max-width: 1000px) { .xd-pkts { grid-template-columns: 1fr; } }
.xd-pkt { border: 1px solid var(--br-default); border-radius: var(--r-md); padding: 11px; }
.xd-pkt-h { display: flex; align-items: center; gap: 8px; margin-bottom: 6px; }
.xd-pkt-h .t { font-size: 12px; font-weight: 700; letter-spacing: var(--tr-caps);
               text-transform: uppercase; color: var(--fg-muted); }
.xd-grp { font-size: 10px; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
          color: var(--fg-muted); margin: 8px 0 4px; }

.xd-slot-box { margin-bottom: 4px; }
.xd-slot { display: flex; align-items: center; gap: 8px; font-size: 13px; padding: 6px 9px;
           border-radius: var(--r-sm); background: var(--bg-sunken); }

/* Форма посилання розкривається під слотом: у самому рядку для неї немає місця,
   а модалка заради одного поля — забагато. */
.xd-link { display: flex; align-items: center; gap: 6px; padding: 7px 9px 3px 32px; }
.xd-link input { flex: 1; min-width: 0; font: inherit; font-size: 12.5px; padding: 7px 9px;
                 color: var(--fg-strong); background: var(--bg-surface);
                 border: 1px solid var(--br-control); border-radius: var(--r-sm); }
.xd-link input:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 1px; }
/* «завантажити» і «посилання» — рівноцінні способи, тож колір однаковий
   (правило кольору тут однаково програвало .xd-act за порядком у файлі).
   Розділяє їх крапка, інакше дві дії зливаються в одну фразу. */
.xd-act-alt::before { content: "·"; color: var(--fg-subtle); margin-right: 6px; }
.xd-slot .nm { flex: 1; min-width: 0; }
.xd-slot .nm .why { display: block; font-size: 11.5px; color: var(--fg-muted); }
.xd-slot.miss { background: var(--neg-bg); border: 1px solid var(--neg); }
.xd-slot.miss .nm { color: var(--neg); font-weight: 700; }
.xd-slot.opt { background: transparent; border: 1px dashed var(--br-default); color: var(--fg-muted); }
.xd-slot.skip { background: transparent; border: 1px solid var(--br-default); color: var(--fg-muted); }
.xd-slot.skip .nm { text-decoration: line-through; }
.xd-slot.link { background: var(--info-bg); }
.xd-slot.link .nm, .xd-slot.link .nm .why { color: var(--info); }
.xd-cb { width: 14px; height: 14px; accent-color: var(--ac); flex: 0 0 auto; cursor: pointer; }
.xd-cb-sp { width: 14px; flex: 0 0 auto; }
.xd-tag { font-size: 9px; font-weight: 800; letter-spacing: .06em; text-transform: uppercase;
          padding: 2px 5px; border-radius: var(--r-sm); flex: 0 0 auto; }
.xd-tag.req { background: var(--ac); color: var(--ac-fg); }
.xd-tag.opt { border: 1px solid var(--br-control); color: var(--fg-muted); }
.xd-files { display: flex; gap: 6px; flex-wrap: wrap; justify-content: flex-end; }
.xd-file { display: inline-flex; align-items: center; gap: 4px; font-size: 11.5px;
           background: var(--bg-surface); border: 1px solid var(--br-default);
           border-radius: var(--r-full); padding: 2px 8px; }
.xd-file a { color: var(--fg-strong); text-decoration: none; }
.xd-file .x { color: var(--fg-muted); cursor: pointer; font-size: 11px; }
.xd-act { font-size: 11.5px; font-weight: 700; color: var(--ac); white-space: nowrap;
          cursor: pointer; text-decoration: none; }

.xd-chip { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 700;
           padding: 3px 8px; border-radius: var(--r-full); background: var(--bg-sunken);
           color: var(--fg-muted); white-space: nowrap; }
.xd-chip.pos { background: var(--pos-bg); color: var(--pos); }
.xd-chip.warn { background: var(--warn-bg); color: var(--warn); }
.xd-chip.info { background: var(--info-bg); color: var(--info); }

/* Обʼєднані транзакції: з чого склалась сума рядка. */
.xd-parts { display: flex; flex-wrap: wrap; gap: 7px; margin-top: 11px; }
.xd-part { display: inline-flex; align-items: baseline; gap: 7px; font-size: 12px;
           background: var(--bg-sunken); border-radius: var(--r-full); padding: 4px 11px; }
.xd-part b { font-family: var(--font-num); color: var(--fg-strong); }
.xd-part span { color: var(--fg-muted); }
.xd-part .c { max-width: 260px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.xd-attach { margin: 8px 0; border: 1px solid var(--br-default); border-radius: var(--r-md);
             padding: 9px 11px; }
.xd-attach-h { display: flex; align-items: center; gap: 8px; font-size: 11.5px; font-weight: 700;
               letter-spacing: var(--tr-caps); text-transform: uppercase; color: var(--fg-muted);
               margin-bottom: 7px; }
.xd-attach-h .xd-act { margin-left: auto; }
.xd-cand { display: flex; align-items: center; gap: 9px; font-size: 13px; padding: 6px 8px;
           border-radius: var(--r-sm); cursor: pointer; }
.xd-cand:hover { background: var(--bg-sunken); }
.xd-cand b { font-family: var(--font-num); color: var(--fg-strong); white-space: nowrap; }
.xd-cand .d { font-size: 12px; color: var(--fg-muted); white-space: nowrap; }
.xd-cand .c { flex: 1; min-width: 0; color: var(--fg-muted); overflow: hidden;
              text-overflow: ellipsis; white-space: nowrap; }

.xd-shared-block { margin-top: 22px; padding-top: 16px; border-top: 2px solid var(--br-strong); }
.xd-sh-h { font-family: var(--font-head); font-size: 16px; font-weight: 800; color: var(--fg-strong); }
.xd-sh-s { font-size: 12.5px; color: var(--fg-muted); margin: 3px 0 12px; line-height: 1.5; }
.xd-sh { display: flex; align-items: center; gap: 12px; padding: 9px 12px;
         border: 1px solid var(--br-default); border-radius: var(--r-md); margin-bottom: 6px; }
.xd-sh .nm { flex: 1; min-width: 0; font-size: 13.5px; font-weight: 700; color: var(--fg-strong); }
.xd-sh .nm .s { display: block; font-size: 11.5px; font-weight: 400; color: var(--fg-muted); }
.xd-sh .nm .s a { color: var(--ac); }

/* Хід оновлення виписки: крутилка плюс назва етапу. Без тексту незрозуміло,
   чи процес живий, — а він триває хвилини. */
.wd-progress { display: flex; align-items: center; gap: 12px; padding: 11px 14px;
               background: var(--bg-sunken); border-radius: var(--r-md); }
.wd-progress-t { font-size: 13.5px; font-weight: 700; color: var(--fg-strong); }
.wd-progress-s { font-size: 12px; color: var(--fg-muted); margin-top: 2px; }

/* ── Ширина сторінки ──────────────────────────────────────────────────────
   MudContainer.Large давав 1280px і по боках лишалось вільне поле, через яке
   плитки зборів тиснули текст у два рядки. Ширину тримаємо тут, а не в
   компоненті: так її видно в одному місці разом з рештою розкладки. */
.mud-main-content .mud-container {
    max-width: 1460px;
    margin-inline: auto;
    padding-left: 20px;
    padding-right: 20px;
}
@media (max-width: 599px) {
    .mud-main-content .mud-container { padding-left: 12px; padding-right: 12px; }
}

/* ── Кольори статусів збору ────────────────────────────────────────────────
   Яскраві й напівпрозорі, щоб плашка «лежала» на обкладинці, а не забивала її.
   Колір тексту не однаковий: на світлому фоні (зелений, янтарний) — темний,
   на темному (сірий, червоний) — білий. Інакше напівпрозорість з'їдає
   контраст. Кольори однакові в обох темах: плашка лежить на зображенні,
   а зображення від теми не залежить. */
.status-active,   .cv-open      { background: rgba(39,174,122,.88);  color: #021A0F; }
.status-reg-closed, .cv-regclosed { background: rgba(240,185,40,.88); color: #2B2100; }
.status-closed,   .cv-closed    { background: rgba(20,20,20,.62);    color: #F0F0F0; }
.status-draft,    .cv-draft     { background: rgba(195,48,31,.92);   color: #FFFFFF; }


/* ── Фільтри-перемикачі (сторінки «Збори» та «Instagram») ─────────────────
   Спільний клас замість .ig-type-chip, який належав Instagram і приїхав на
   «Збори» лише тому, що спільного чипа не існувало.
   Логіка: типово не вибрано нічого — усі чипи сірі, показано все. Клік
   робить чип чорним і звужує перелік до вибраного; кліків може бути кілька.
   Повторний клік знімає вибір; коли знято все — знову показано все. */
.status-filters { display: flex; gap: 6px; flex-wrap: wrap; }
.status-filter {
    display: inline-flex; align-items: center; gap: 7px;
    border: 1px solid var(--br-default); background: var(--bg-sunken); color: var(--fg-default);
    border-radius: 9px; padding: 7px 11px; font-size:15px; font-weight: 700; line-height: 1;
    cursor: pointer; transition: background .15s, border-color .15s, color .15s;
}
.status-filter:hover { border-color: var(--br-control); }
.status-filter:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 2px; }
.status-filter .dot { width: 8px; height: 8px; border-radius: 50%; flex: 0 0 auto; }
.status-filter .n {
    font-size:13px; font-weight: 800; background: var(--bg-surface); color: var(--fg-strong);
    border-radius: 20px; padding: 2px 7px; min-width: 20px; text-align: center;
}
/* Вибраний статус — чорна плашка (в темній темі теж чорна: --hero-bg).
   Нічого не вибрано = показуємо все; вибір звужує перелік до вибраного. */
.status-filter.is-active {
    /* Межа обов'язкова: у темній темі чорна плашка на чорному полотні
       інакше не відчитується як окремий елемент. */
    background: var(--hero-bg); border-color: var(--br-strong); color: var(--ondark-fg);
}
.status-filter.is-active .n { background: rgba(255,255,255,.16); color: var(--ondark-fg); }
.status-filter.is-active .dot { box-shadow: 0 0 0 1px rgba(255,255,255,.35); }

/* Крапки статусів (кольори ті самі, що на плашках плиток). */
.status-filter.sf-open .dot { background: #27AE7A; }
.status-filter.sf-draft .dot { background: #C3301F; }
.status-filter.sf-registration_closed .dot { background: #F0B928; }
.status-filter.sf-closed .dot { background: #9CA3AF; }


/* ── Цифри ────────────────────────────────────────────────────────────────
   Суми й кількості — накресленням Bold і табличними цифрами, щоб колонки
   вирівнювались по вертикалі. Праворуч вирівняні комірки в наших таблицях
   завжди числові — на них і орієнтуємось. */
.mud-table-cell[style*="text-align:right"],
.mud-table-cell[style*="text-align: right"],
.participants-table td.p-amount,
.ig-help-table td:last-child {
    font-weight: var(--fw-bold);
    font-variant-numeric: tabular-nums;
}


/* ── Рядок «Зібрано» на картці збору ──────────────────────────────────────
   Значення не переносимо ніколи: воно і є те, заради чого дивляться картку.
   Якщо місця бракує — скорочується підпис, а не сума. */
.collected-head { gap: 10px; }
.collected-label { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.collected-val { white-space: nowrap; flex: 0 0 auto; }





/* ── Сторінка «Партнери» в темній темі ────────────────────────────────────
   Статуси там задані світлими плашками під світлу тему. На чорному вони
   перетягували увагу на себе, а назви подій (темно-синій, темно-зелений)
   майже зливалися з фоном. Тон кожного статусу зберігаємо, міняємо лише
   світлоту: фон стає глибоким, текст — світлим відтінком того самого тону. */
html[data-theme="dark"] .ps-warm     { background:#2A1E10; color:#E2B473; }
html[data-theme="dark"] .ps-cold     { background:#14202B; color:#93B8D6; }
html[data-theme="dark"] .is-planned  { background:#1B1E24; color:#A8B3C4; }
html[data-theme="dark"] .is-active   { background:#141B2E; color:#93B0F0; }
html[data-theme="dark"] .is-done     { background:#12241A; color:#86C79E; }
html[data-theme="dark"] .is-report   { background:#1E1630; color:#B69BF0; }
html[data-theme="dark"] .is-progress { background:#241C0D; color:#DCB067; }
html[data-theme="dark"] .is-refused  { background:#281414; color:#E89A9A; }
html[data-theme="dark"] .it-onetime  { background:#1F1F22; color:#B4B4BC; }
html[data-theme="dark"] .it-ongoing  { background:#141A2E; color:#9DB2EE; }
html[data-theme="dark"] .p-tag       { background:#1E1E1E; color:#E5E5E5; }
html[data-theme="dark"] .p-link      { color:#93B0F0; }

/* Назви подій: ті самі тони, але світлі — інакше на чорному не читаються. */
html[data-theme="dark"] .evtx-planned  { color:#A8B3C4; }
html[data-theme="dark"] .evtx-active   { color:#93B0F0; }
html[data-theme="dark"] .evtx-done     { color:#86C79E; }
html[data-theme="dark"] .evtx-report   { color:#B69BF0; }
html[data-theme="dark"] .evtx-progress { color:#DCB067; }
html[data-theme="dark"] .evtx-refused  { color:#E89A9A; }

/* Інлайн-селект статусу: у темній темі бракувало межі, плашка «висіла». */
html[data-theme="dark"] .ist-select { border-color: var(--br-strong); }


/* ── Дії у вікні швидкого перегляду ───────────────────────────────────────
   Один рядок: CSV · оновити банки · оновити головну · детальніше. Якщо не
   вміщається — горизонтальна прокрутка, а не перенесення: так порядок дій
   лишається сталим і кнопка «Детальніше» завжди крайня. */
.detail-footer .df-right { flex-wrap: nowrap; overflow-x: auto; padding-bottom: 2px; }
.detail-footer .df-right .mud-button-root { flex: 0 0 auto; white-space: nowrap; }
@media (max-width: 599px) {
    .detail-footer { flex-direction: column; align-items: stretch; }
}

/* ── Текстові поля ростуть під вміст ──────────────────────────────────────
   field-sizing прибирає внутрішню прокрутку: поле стає рівно такої висоти,
   якої треба тексту. Для браузерів без нього лишається resize:vertical,
   тобто гірший, але робочий варіант — руками. */
textarea,
.mud-input-slot textarea,
.cvp-tags-box {
    field-sizing: content;
    overflow-y: hidden;
    resize: vertical;
}
/* rows= лишається як початкова висота; далі поле росте саме. */

.events-row { cursor: pointer; }


/* Межа у primary-кнопки темної теми: без неї #2E2E2E на #121212 читається
   як пляма, а не як кнопка. */
html[data-theme="dark"] .mud-button-filled-primary { box-shadow: inset 0 0 0 1px var(--br-strong); }


/* ── Плитки зборів на світлій темі ─────────────────────────────────────────
   Біла картка (#FFFFFF) на полотні #F5F5F5 різниться лише на 10 одиниць
   яскравості, тож базової тіні в 1px не видно і плитки зливаються з фоном.
   Даємо на крок більшу тінь у спокої і виразнішу на hover.
   У темній темі навмисно лишаємо як є: там картка відділяється власною
   світлотою (#121212 на #000000), а більша тінь на чорному лише замулює
   край, нічого не додаючи. */
html:not([data-theme="dark"]) .campaign-card {
    box-shadow: 0 2px 4px rgba(0,0,0,.05), 0 8px 20px rgba(0,0,0,.09);
}
html:not([data-theme="dark"]) .campaign-card:hover {
    box-shadow: 0 4px 8px rgba(0,0,0,.07), 0 14px 32px rgba(0,0,0,.15);
}


/* ══ Обписування (сторінка «Команди») ══════════════════════════════════════
   Два потоки на одній сторінці: менторів кличемо вести команду (дошка за
   статусом — їх небагато, важливо бачити, скільки команд узагалі доступно),
   тиловиків — долучитись до команди (акордеон по менторах).
   ══════════════════════════════════════════════════════════════════════════ */
.ob-bar { display:flex; gap:18px; align-items:flex-end; flex-wrap:wrap;
          background:var(--bg-surface); border:1px solid var(--br-default);
          border-radius:var(--r-lg); padding:14px 16px; }
.ob-field { display:flex; flex-direction:column; gap:5px; }
.ob-field > span { font-size:13px; font-weight:700; letter-spacing:.05em;
                   text-transform:uppercase; color:var(--fg-muted); }
.ob-field select { font:inherit; font-size:15px; color:var(--fg-strong); background:var(--bg-surface);
                   border:1px solid var(--br-control); border-radius:var(--r-md);
                   padding:0 10px; min-height:38px; min-width:240px; cursor:pointer; }
.ob-progress { flex:1 1 220px; min-width:200px; }
.ob-progress-head { display:flex; justify-content:space-between; font-size:13px; color:var(--fg-muted);
                    font-weight:700; text-transform:uppercase; letter-spacing:.05em; margin-bottom:5px; }
.ob-progress-v { color:var(--fg-strong); font-variant-numeric:tabular-nums; }
.ob-tabn { font-size:12px; font-weight:800; background:var(--bg-sunken); color:var(--fg-strong);
           border-radius:var(--r-full); padding:1px 8px; margin-left:7px; }
.ptab-active .ob-tabn { background:rgba(255,255,255,.18); color:var(--on-invert); }

/* ── Контакти й статуси ── */
.ob-link { color:var(--fg-strong); font-weight:700; font-size:14px; text-decoration:none;
           border-bottom:1px solid var(--br-control); margin-right:9px; }
.ob-link:hover { border-color:var(--fg-strong); }
/* --fg-subtle на 14px дає ~3.4:1 — для тексту замало, тому --fg-muted. */
.ob-none { color:var(--fg-muted); font-size:14px; margin-right:9px; }
.ob { display:inline-flex; align-items:center; gap:6px; font-size:13px; font-weight:700;
      padding:3px 9px; border-radius:var(--r-full); white-space:nowrap; }
.ob::before { content:""; width:6px; height:6px; border-radius:50%; background:currentColor; }
.ob-neutral { background:var(--bg-sunken); color:var(--fg-muted); box-shadow:inset 0 0 0 1px var(--br-default); }
.ob-info { background:var(--info-bg); color:var(--info); box-shadow:inset 0 0 0 1px var(--info); }
.ob-pos { background:var(--pos-bg); color:var(--pos); box-shadow:inset 0 0 0 1px var(--pos); }
.ob-neg { background:var(--neg-bg); color:var(--neg); box-shadow:inset 0 0 0 1px var(--neg); }
.ob-dup, .ob-wr { font-size:12px; font-weight:700; color:var(--warn); background:var(--warn-bg);
          border-radius:var(--r-full); padding:2px 8px; margin-left:7px; white-space:nowrap; }
.ob-pick { font:inherit; font-size:14px; font-weight:600; padding:5px 9px; cursor:pointer;
           border:1px solid var(--br-control); background:var(--bg-surface); color:var(--fg-default);
           border-radius:var(--r-md); }
.ob-pick.is-on { background:var(--hero-bg); border-color:var(--hero-bg); color:var(--ondark-fg); }

/* ── Акордеон по менторах (тиловики) ── */
.ob-acc { background:var(--bg-surface); border:1px solid var(--br-default);
          border-radius:var(--r-lg); margin-bottom:10px; overflow:hidden; }
.ob-acc > summary { display:flex; align-items:center; gap:12px; cursor:pointer;
                    padding:13px 16px; list-style:none; }
.ob-acc > summary::-webkit-details-marker { display:none; }
.ob-acc > summary:hover { background:var(--bg-sunken); }
.ob-acc[open] > summary { border-bottom:1px solid var(--br-default); }
.ob-acc-name { font-size:16px; font-weight:700; color:var(--fg-strong); }
.ob-acc-teams { font-size:14px; color:var(--fg-muted); }
.ob-acc-count { margin-left:auto; font-size:15px; font-weight:700; color:var(--fg-strong);
                font-variant-numeric:tabular-nums; }
.ob-acc .participants-table { margin:0; }
.ob-acc .participants-table th { background:var(--bg-sunken); }

/* ── Дошка за статусом (ментори) ── */
.ob-board { display:grid; grid-template-columns:repeat(4, minmax(0,1fr)); gap:12px; }
.ob-col { background:var(--bg-sunken); border:1px solid var(--br-default);
          border-radius:var(--r-lg); padding:10px; min-width:0; }
.ob-col-head { display:flex; justify-content:space-between; align-items:center;
               font-size:13px; font-weight:700; text-transform:uppercase; letter-spacing:.05em;
               color:var(--fg-muted); margin-bottom:9px; }
.ob-col-n { color:var(--fg-strong); font-variant-numeric:tabular-nums; }
.ob-card { background:var(--bg-surface); border:1px solid var(--br-default);
           border-radius:var(--r-md); padding:10px 11px; margin-bottom:8px; }
.ob-card-n { font-size:15px; font-weight:700; color:var(--fg-strong); }
/* Відступ від імені: рядок із назвами команд, який раніше їх розділяв, прибрано. */
.ob-card-c { font-size:13px; color:var(--fg-muted); margin-top:3px; }
.ob-card-by { font-size:12px; color:var(--fg-muted); margin-top:4px; }
.ob-card-f { display:flex; align-items:center; justify-content:space-between; gap:8px;
             margin-top:9px; flex-wrap:wrap; }
.ob-col-empty { font-size:14px; color:var(--fg-muted); padding:8px 2px; }
@media (max-width: 1100px) { .ob-board { grid-template-columns:repeat(2, minmax(0,1fr)); } }
@media (max-width: 599px)  { .ob-board { grid-template-columns:1fr; } }


/* ── Форма довідника «Команда Опори» ───────────────────────────────────────
   Ширша за типову модалку: полів багато, і у дві колонки вони читаються
   як одна картка людини, а не як довгий стовпчик. */
/* box-sizing обов'язковий: .modal-card має padding 24px, і без нього
   фактична ширина стає 860+48, тож на вузькому екрані форма вилазить. */
.ot-form { box-sizing: border-box; width: min(880px, calc(100vw - 32px)); max-width: none; }

/* Вибір людини, яка вже є в системі */
.ot-pick { background: var(--bg-sunken); border: 1px solid var(--br-default);
           border-radius: var(--r-md); padding: 12px 14px; margin-bottom: 16px; }
.ot-pick-label { display: flex; flex-direction: column; gap: 5px;
                 font-size: 13px; font-weight: 700; color: var(--fg-muted);
                 text-transform: uppercase; letter-spacing: .05em; }
.ot-pick-label input { font: inherit; font-size: 15px; text-transform: none; letter-spacing: normal;
                       font-weight: 400; color: var(--fg-strong); background: var(--bg-surface);
                       border: 1px solid var(--br-control); border-radius: var(--r-md);
                       padding: 0 11px; min-height: 38px; }
.ot-pick-note { font-size: 13px; color: var(--fg-muted); margin-top: 8px; }
.ot-linked { background: var(--info-bg); color: var(--info); border-radius: var(--r-md);
             padding: 8px 12px; margin: 0 0 14px; }
.ot-pick-list { display: flex; flex-direction: column; gap: 4px; margin-top: 9px;
                max-height: 240px; overflow-y: auto; }
.ot-cand { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; text-align: left;
           font: inherit; cursor: pointer; padding: 8px 11px; border-radius: var(--r-sm);
           border: 1px solid var(--br-default); background: var(--bg-surface); color: var(--fg-default); }
.ot-cand:hover:not(:disabled) { border-color: var(--br-control); background: var(--bg-sunken); }
.ot-cand:disabled { opacity: .55; cursor: not-allowed; }
.ot-cand-n { font-size: 15px; font-weight: 700; color: var(--fg-strong); }
.ot-cand-c { font-size: 13px; color: var(--fg-muted); }
.ot-cand-in { margin-left: auto; font-size: 12px; font-weight: 700;
              color: var(--warn); background: var(--warn-bg); border-radius: var(--r-full); padding: 2px 8px; }



/* ── Вибір гостей події за іменем ──────────────────────────────────────────
   Той самий підбір «людини з системи», що й у довіднику команди, але з
   накопиченням вибору: гостей шукають по одному, а видають пачкою. */
.gp-pick { background: var(--bg-sunken); border: 1px solid var(--br-default);
           border-radius: var(--r-md); padding: 12px 14px; }
.gp-label { display: flex; flex-direction: column; gap: 5px;
            font-size: 13px; font-weight: 700; color: var(--fg-muted);
            text-transform: uppercase; letter-spacing: .05em; }
.gp-label input { font: inherit; font-size: 15px; text-transform: none; letter-spacing: normal;
                  font-weight: 400; color: var(--fg-strong); background: var(--bg-surface);
                  border: 1px solid var(--br-control); border-radius: var(--r-md);
                  padding: 0 11px; min-height: 38px; }
.gp-note { font-size: 13px; color: var(--fg-muted); margin-top: 8px; }
.gp-list { display: flex; flex-direction: column; gap: 4px; margin-top: 9px;
           max-height: 300px; overflow-y: auto; }
.gp-item { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; text-align: left;
           font: inherit; cursor: pointer; padding: 8px 11px; border-radius: var(--r-sm);
           border: 1px solid var(--br-default); background: var(--bg-surface); color: var(--fg-default); }
.gp-item:hover:not(:disabled) { border-color: var(--br-control); background: var(--bg-sunken); }
.gp-item:disabled { opacity: .55; cursor: not-allowed; }
.gp-item.gp-on { border-color: var(--pos); box-shadow: inset 3px 0 0 var(--pos); }
.gp-name { font-size: 15px; font-weight: 700; color: var(--fg-strong); }
.gp-meta { font-size: 13px; color: var(--fg-muted); }
.gp-tag { margin-left: auto; font-size: 12px; font-weight: 700;
          border-radius: var(--r-full); padding: 2px 8px; }
.gp-tag-warn { color: var(--warn); background: var(--warn-bg); }
.gp-tag-on { color: var(--pos); background: var(--pos-bg); }

/* Обрані — чипами, щоб було видно вибір, зібраний із кількох пошуків */
.gp-chosen { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 12px; }
.gp-chip { font: inherit; font-size: 13px; font-weight: 600; cursor: pointer;
           display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px;
           border-radius: var(--r-full); border: 1px solid var(--br-control);
           background: var(--bg-surface); color: var(--fg-strong); }
.gp-chip:hover { background: var(--bg-sunken); }
.gp-chip-x { font-size: 15px; line-height: 1; color: var(--fg-muted); }


/* ── Перетягування карток на дошці менторів ────────────────────────────────
   Колонка і є статус, тож окремої випадайки на картці не треба. */
.ob-board .ob-card { cursor: grab; }
.ob-board .ob-card:active { cursor: grabbing; }
.ob-board .ob-card:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 2px; }
.ob-board .ob-card.is-dragging { opacity: .45; }
/* Колонка під курсором підсвічується — інакше не зрозуміло, куди саме впаде картка. */
.ob-col.is-drop { border-color: var(--ac); box-shadow: inset 0 0 0 1px var(--ac); }
.ob-grip { color: var(--fg-subtle); font-size: 15px; line-height: 1; cursor: grab; user-select: none; }


/* Другорядний підпис поруч з основним текстом (назва команди, відділення пошти).
   Власний клас, а не .p-type зі стилів сторінки «Партнери»: ті живуть в inline-<style>
   і існують, лише поки відкрита та сторінка, тож відступ деінде просто зникав. */
.sub-inline { color: var(--fg-muted); font-size: 13px; margin-left: 8px; }

/* ── Перемикач розділів на сторінці «Команди» ──────────────────────────────
   Дві рівні секції на всю ширину: так видно, що це перемикач, а не дві кнопки. */
.ob-tabs { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.ob-tab {
    display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 2px 12px;
    text-align: left; font: inherit; cursor: pointer; padding: 13px 16px;
    border: 1px solid var(--br-default); background: var(--bg-surface); color: var(--fg-default);
    border-radius: var(--r-lg); transition: background .15s, border-color .15s;
}
.ob-tab:hover { background: var(--bg-sunken); border-color: var(--br-control); }
.ob-tab:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 2px; }
.ob-tab.is-on { background: var(--hero-bg); border-color: var(--hero-bg); color: var(--ondark-fg); }
.ob-tab-t { font-size: 17px; font-weight: 700; }
.ob-tab-s { grid-column: 1; font-size: 13px; opacity: .7; }
.ob-tab-n { grid-row: 1 / span 2; font-size: 22px; font-weight: 800; font-variant-numeric: tabular-nums; }
@media (max-width: 599px) { .ob-tabs { grid-template-columns: 1fr; } }

/* ── Статус тиловика: колір просто на перемикачі ───────────────────────────
   Окрема колонка зі значком дублювала те саме, тож її прибрано, а перемикач
   тепер сам показує стан кольором. */
.ob-pick { border-radius: var(--r-md); font-weight: 700; }
/* Кожен стан — свій відтінок, включно з «ще не писали»: без нього порожній перемикач
   читався як «нічого не вибрано», хоча це теж повноцінний стан. */
.ob-pick.st-none     { background: var(--bg-sunken); color: var(--fg-muted); border-color: var(--br-control); }
.ob-pick.st-written  { background: var(--warn-bg); color: var(--warn); border-color: var(--warn); }
.ob-pick.st-agreed   { background: var(--pos-bg);  color: var(--pos);  border-color: var(--pos); }
.ob-pick.st-declined { background: var(--neg-bg);  color: var(--neg);  border-color: var(--neg); }
/* Список, що розкривається, малює браузер від фону самого select, тож без цих правил
   він успадковував колір поточного статусу. Даємо кожній опції власний відтінок —
   ті самі, що й у поля. Chrome, Edge і Firefox їх шанують; Safari на macOS малює
   список системно й кольори ігнорує — там лишиться звичайний перелік. */
.ob-pick option { font-weight: 600; }
.ob-pick option.op-none     { background: var(--bg-sunken); color: var(--fg-muted); }
.ob-pick option.op-written  { background: var(--warn-bg); color: var(--warn); }
.ob-pick option.op-agreed   { background: var(--pos-bg);  color: var(--pos); }
.ob-pick option.op-declined { background: var(--neg-bg);  color: var(--neg); }

/* Уже бере участь у зборі цього проєкту: статус проставлено автоматично, щоб
   таку людину не запросили вдруге. */
.ob-onc { display: inline-block; margin-left: 8px; padding: 1px 7px; border-radius: 999px;
          background: var(--pos-bg); color: var(--pos); font-size: 11px; font-weight: 700;
          white-space: nowrap; vertical-align: middle; }

/* ── Рядок фільтрів на вкладці тиловиків ───────────────────────────────────
   Пошук займає всю вільну ширину, галочка притиснута до його нижнього краю. */
.ob-filters { display: flex; align-items: flex-end; gap: 16px; flex-wrap: wrap; }
.ob-search { flex: 1 1 320px; display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.ob-search > span { font-size: 13px; font-weight: 700; letter-spacing: .05em;
                    text-transform: uppercase; color: var(--fg-muted); }
.ob-search > input { font: inherit; font-size: 15px; width: 100%; padding: 9px 12px;
                     color: var(--fg-strong); background: var(--bg-surface);
                     border: 1px solid var(--br-control); border-radius: var(--r-md); }
.ob-search > input:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 1px; }
.ob-check { display: flex; align-items: center; gap: 8px; font-size: 14px;
            color: var(--fg-default); white-space: nowrap; padding-bottom: 10px; cursor: pointer; }

/* Збір із відкритою реєстрацією, на якому людина вже є. Назва буває довша за плитку
   ментора, тож обрізаємо саме назву — префікс «зараз:» має лишитись читабельним. */
.ob-now { display: inline-flex; max-width: 100%; margin-left: 7px; padding: 2px 8px; gap: 4px;
          border-radius: var(--r-full); background: var(--info-bg); color: var(--info);
          font-size: 12px; font-weight: 700; white-space: nowrap; vertical-align: middle; }
/* min-width:0 обовʼязково: flex-елемент інакше не стискається вужче за свій текст,
   і трикрапка не спрацьовує саме там, де вона потрібна — на вузькій плитці. */
.ob-now-t { min-width: 0; max-width: 24ch; overflow: hidden; text-overflow: ellipsis; }

/* ── Перетягування груп на вкладці тиловиків ───────────────────────────────
   Тягнути можна лише за ручку в заголовку, щоб клік і далі згортав групу. */
.ob-acc > summary { user-select: none; }
.ob-acc.is-drop { border-color: var(--ac); box-shadow: inset 0 0 0 1px var(--ac); }
.ob-acc .ob-grip { cursor: grab; }
.ob-acc > summary:active .ob-grip { cursor: grabbing; }

/* Копія, з якої браузер знімає привид перетягування: висить за межами екрана,
   тож її саму ніхто не бачить — видно лише знімок. */
.ob-ghost { position: fixed; top: -10000px; left: 0; margin: 0; pointer-events: none;
            background: var(--bg-surface); box-shadow: none; opacity: 1; }

/* Статус ментора в заголовку його групи: крапка кольору + коротке слово.
   Сама лише крапка не читається тим, хто не розрізняє червоне й зелене,
   тож підпис обовʼязковий. */
.ob-mst { display: inline-flex; align-items: center; gap: 6px; padding: 2px 10px;
          border-radius: var(--r-full); font-size: 12px; font-weight: 700; white-space: nowrap; }
.ob-mst::before { content: ""; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.ob-mst.st-written  { background: var(--warn-bg); color: var(--warn); }
.ob-mst.st-agreed   { background: var(--pos-bg);  color: var(--pos); }
.ob-mst.st-declined { background: var(--neg-bg);  color: var(--neg); }

/* ── Аватарки й профіль ────────────────────────────────────────────────────
   Кружок фіксованого розміру: розмір задає компонент інлайном, бо той самий
   аватар потрібен і 22px у рядку, і 88px на сторінці профілю. */
.pav { display: inline-block; border-radius: 50%; object-fit: cover; flex: none;
       vertical-align: middle; box-shadow: 0 0 0 1px var(--br-default); }
.pav-ini { display: inline-flex; align-items: center; justify-content: center;
           font-weight: 800; letter-spacing: .02em; user-select: none; }

.prof-card { background: var(--bg-surface); border: 1px solid var(--br-default);
             border-radius: var(--r-lg); padding: 20px; max-width: 560px; }
.prof-head { display: flex; align-items: center; gap: 16px; margin-bottom: 18px; }
.prof-name { font-family: var(--font-head); font-size: 22px; font-weight: 700; color: var(--fg-strong); }
.prof-id { font-size: 13px; color: var(--fg-muted); margin-top: 2px; }

/* Відповідальний на плиточці збору — один лаконічний рядок під назвою. */
.campaign-owner { display: flex; align-items: center; gap: 7px; margin: 2px 0 10px;
                  font-size: 13px; font-weight: 600; color: var(--fg-muted); min-width: 0; }
.campaign-owner > span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* Відповідальний у шапці збору: аватарка + вибір. */
.cv-owner { display: inline-flex; align-items: center; gap: 8px; margin-left: 4px; }
.cv-owner-name { font-size: 14px; font-weight: 600; color: var(--fg-default); }
.cv-owner-pick { font: inherit; font-size: 14px; font-weight: 600; padding: 4px 8px; cursor: pointer;
                 color: var(--fg-strong); background: var(--bg-surface);
                 border: 1px solid var(--br-control); border-radius: var(--r-md); }
.cv-owner-pick:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 1px; }
.cv-owner-pick option { background: var(--bg-surface); color: var(--fg-default); }

/* Імʼя в шапці адмінки поруч з аватаркою. */
.user-name-link { display: inline-flex; align-items: center; gap: 7px; }

/* Файли одного рядка документів БФ: кожен окремо, з власним хрестиком —
   інакше не зрозуміти, який саме видаляєш. */
.bf-file { display: flex; align-items: center; gap: 4px; max-width: 320px; }
.bf-file a { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font-size: 13px; }
.bf-count { font-size: 12px; color: var(--fg-muted); margin-top: 2px; }

/* ══════════════════════════════════════════════════════════════════════════
   Контроль зборів: чеклист, таймлайн етапів, зведення (сторінка /checklist
   і вкладка «Статус» збору). Кольори — рівно ролі статусів, без власних.
   ══════════════════════════════════════════════════════════════════════════ */
.ck-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 12px; }
.ck-level { font-size: 13px; font-weight: 800; padding: 3px 10px; border-radius: var(--r-full); }
.ck-steps { font-size: 13px; color: var(--fg-muted); }

.ck-ok    { background: var(--pos-bg);  color: var(--pos); }
.ck-warn  { background: var(--warn-bg); color: var(--warn); }
.ck-neg   { background: var(--neg-bg);  color: var(--neg); }
.ck-info  { background: var(--info-bg); color: var(--info); }

.ck-alert { display: flex; gap: 10px; align-items: flex-start; padding: 10px 12px;
            border-radius: var(--r-md); font-size: 14px; margin-bottom: 8px; }
.ck-action { font-size: 13px; opacity: .85; margin-top: 2px; }

/* Таймлайн: вертикальна лінія малюється фоном самого рядка, тож етапи можна
   додавати й прибирати, не рахуючи висоту вручну. */
.ck-timeline { margin: 18px 0 8px; padding-left: 4px; }
.ck-step { position: relative; display: flex; gap: 12px; padding: 0 0 16px 0; }
.ck-step::before { content: ""; position: absolute; left: 6px; top: 16px; bottom: 0;
                   width: 2px; background: var(--br-default); }
.ck-step:last-child::before { display: none; }
.ck-dot { flex: 0 0 auto; width: 14px; height: 14px; margin-top: 3px; border-radius: 50%;
          background: var(--bg-surface); border: 2px solid var(--br-strong); }
.ck-st-done  .ck-dot { background: var(--pos);  border-color: var(--pos); }
.ck-st-now   .ck-dot { background: var(--warn); border-color: var(--warn); }
.ck-st-block .ck-dot { background: var(--neg);  border-color: var(--neg); }
.ck-st-skip  .ck-dot { background: var(--bg-sunken); border-color: var(--br-strong); }
.ck-st-wait  .ck-dot { border-style: dashed; }

.ck-step-body { min-width: 0; }
.ck-step-title { font-size: 14px; font-weight: 700; color: var(--fg-default);
                 display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.ck-st-wait .ck-step-title, .ck-st-skip .ck-step-title { color: var(--fg-subtle); font-weight: 600; }
.ck-step-meta { font-size: 12px; color: var(--fg-muted); margin-top: 1px; }
.ck-step-note { font-size: 13px; color: var(--fg-muted); margin-top: 2px; }

.ck-chip { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: .3px;
           padding: 1px 7px; border-radius: var(--r-full);
           background: var(--bg-sunken); color: var(--fg-muted); }
.ck-warn-chip { background: var(--warn-bg); color: var(--warn); }
.ck-neg-chip  { background: var(--neg-bg);  color: var(--neg); }

.ck-form { margin-top: 16px; padding: 14px; border: 1px solid var(--br-default);
           border-radius: var(--r-lg); background: var(--bg-surface); }
.ck-form-title { font-size: 13px; font-weight: 800; text-transform: uppercase;
                 letter-spacing: .4px; color: var(--fg-muted); margin-bottom: 10px; }
.ck-form-row { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }
.ck-form-row > .cform-select { flex: 1; min-width: 180px; }

.ck-history { margin-top: 16px; }
.ck-hist-row { display: flex; align-items: flex-start; justify-content: space-between; gap: 8px;
               font-size: 13px; padding: 7px 0; border-bottom: 1px solid var(--br-subtle); }

/* ── Сторінка «Контроль зборів» ── */
/* Секція на людину: контроль — це розмова з конкретним відповідальним, тож збори згруповані
   навколо людей. Картка з рамкою, а не просто заголовок: інакше на довгому списку не видно,
   де закінчуються збори однієї людини й починаються збори іншої. */
.ck-owner { border: 1px solid var(--br-default); border-radius: var(--r-lg);
            background: var(--bg-surface); padding: 4px 16px 8px; margin-bottom: 18px; }
.ck-owner-head { display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
                 padding: 12px 0 10px; border-bottom: 1px solid var(--br-subtle); }
.ck-owner-id { min-width: 0; }
.ck-owner-name { font-size: 17px; font-weight: 800; color: var(--fg-strong); }
.ck-owner-sub { font-size: 13px; color: var(--fg-muted); }
.ck-owner-tags { display: flex; gap: 6px; flex-wrap: wrap; margin-left: auto; }
.ck-owner .ck-row:last-child { border-bottom: none; padding-bottom: 4px; }

.ck-row { padding: 14px 0; border-bottom: 1px solid var(--br-subtle); }
.ck-row-head { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-bottom: 8px; }
.ck-row-title { font-size: 16px; font-weight: 800; color: var(--fg-strong);
                text-decoration: none; }
.ck-row-title:hover { text-decoration: underline; }
.ck-row-owner { display: inline-flex; align-items: center; gap: 6px; font-size: 13px;
                color: var(--fg-muted); margin-left: auto; }
.ck-bar-line { display: flex; align-items: center; gap: 10px; margin-bottom: 8px; }
.ck-bar-label { font-size: 13px; color: var(--fg-muted); min-width: 62px; }
.ck-bar { position: relative; flex: 1; height: 8px; border-radius: var(--r-full);
          background: var(--bg-sunken); overflow: hidden; }
.ck-bar-fill { position: absolute; inset: 0 auto 0 0; border-radius: var(--r-full); }
.ck-bar-fill.ok { background: var(--pos); }
.ck-bar-fill.warn { background: var(--warn); }
.ck-bar-fill.neg { background: var(--neg); }
.ck-bar-mark { position: absolute; top: -3px; bottom: -3px; width: 2px; background: var(--fg-muted); }
.ck-bar-val { font-size: 13px; font-weight: 700; min-width: 96px; text-align: right; }
.ck-empty { padding: 24px 0; color: var(--fg-muted); font-size: 14px; }

/* Плитка збору, по якому давно не було дій: рядок із причиною всередині картки. Саму плитку не
   обводимо — кольорового рядка досить, а рамки по всій сітці зборів рябіли б. */
.campaign-alert { font-size: 13px; font-weight: 700; line-height: 1.35; padding: 6px 8px;
                  border-radius: var(--r-sm); margin-bottom: 8px; }
.campaign-alert.card-alert-warn { background: var(--warn-bg); color: var(--warn); }
.campaign-alert.card-alert-neg  { background: var(--neg-bg);  color: var(--neg); }


/* ══ Черга зборів ══════════════════════════════════════════════════════════
   Дошка за критичністю. Перетягування має три сенси, і вони не конфліктують:
   по горизонталі — термін, по вертикалі — пріоритет, у док — до майбутнього збору. */

/* Підсумки в шапці — темні плитки, як на дашборді. */
.kpis { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.kpi { background: var(--hero-bg); color: var(--ondark-fg); border-radius: var(--r-lg); padding: 12px 14px; }
.kpi-l { font-size: 11.5px; font-weight: 700; letter-spacing: .04em; text-transform: uppercase;
         color: var(--ondark-dim); }
.kpi-v { font-family: var(--font-num); font-size: 25px; font-weight: 800; color: var(--hero-num);
         font-variant-numeric: tabular-nums; line-height: 1.15; margin-top: 2px; }
.kpi-s { font-size: 11.5px; color: var(--ondark-dim); }
@media (max-width: 900px) { .kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

.q-fld { display: flex; flex-direction: column; gap: 5px; }
.q-fld > span { font-size: 11.5px; font-weight: 700; letter-spacing: var(--tr-caps);
                text-transform: uppercase; color: var(--fg-muted); }
.q-fld select { font: inherit; font-size: 14px; padding: 9px 11px; color: var(--fg-strong);
                background: var(--bg-surface); border: 1px solid var(--br-control);
                border-radius: var(--r-md); }
.q-fld select option { background: var(--bg-surface); color: var(--fg-default); }
.q-fld input, .q-fld textarea { font: inherit; font-size: 14px; padding: 9px 11px;
                                color: var(--fg-strong); background: var(--bg-surface);
                                border: 1px solid var(--br-control); border-radius: var(--r-md);
                                width: 100%; box-sizing: border-box; }
.q-fld textarea { resize: vertical; line-height: 1.45; }
.q-fld input:focus-visible, .q-fld textarea:focus-visible, .q-fld select:focus-visible {
    outline: 2px solid var(--ac-ring); outline-offset: 1px; }

/* ── Форма запиту черги ── */
.q-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 13px; }
.q-form-wide { grid-column: 1 / -1; }
@media (max-width: 620px) { .q-form { grid-template-columns: 1fr; } }
.q-form-hint { font-size: 11.5px; color: var(--fg-muted); }
.q-form-hint a { color: var(--ac); font-weight: 700; margin-left: 4px; }

/* Ширша модалка, ніж типова .modal-card: форма у дві колонки. */
.q-addm { width: min(680px, calc(100vw - 32px)); max-width: none; }

.q-tagpick { display: flex; flex-wrap: wrap; gap: 7px; align-items: center; }
.q-tag { font-size: 12px; font-weight: 700; padding: 5px 10px; border-radius: 999px;
         border: 1px solid var(--br-control); color: var(--fg-muted);
         background: var(--bg-surface); cursor: pointer; user-select: none; }
.q-tag:hover { border-color: var(--ac); }
.q-tag:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 2px; }
.q-tag.is-on { background: var(--ac); border-color: var(--ac); color: var(--ac-fg); }

.q-board { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 11px; }
.q-col { background: var(--bg-sunken); border: 1px solid var(--br-default); border-radius: var(--r-lg);
         padding: 10px; min-width: 0; min-height: 120px; }
.q-col.is-drop { border-color: var(--ac); box-shadow: inset 0 0 0 1px var(--ac); }
.q-col-head { display: flex; justify-content: space-between; align-items: center; gap: 8px;
              font-size: 12.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em;
              color: var(--fg-muted); margin-bottom: 9px; }
.q-col-n { font-family: var(--font-num); color: var(--fg-strong); white-space: nowrap; }
.q-col-money { font-size: 12px; color: var(--fg-muted); font-weight: 700; }
.q-col-empty { font-size: 13px; color: var(--fg-subtle); padding: 6px 2px; }

.q-card { background: var(--bg-surface); border: 1px solid var(--br-default); border-radius: var(--r-md);
          padding: 9px 10px; margin-bottom: 8px; cursor: grab; }
.q-card:active { cursor: grabbing; }
.q-card:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 2px; }
.q-card.is-dragging { opacity: .45; }
.q-card.is-picked { border-color: var(--ac); box-shadow: inset 0 0 0 1px var(--ac); }
.q-card-top { display: flex; align-items: flex-start; gap: 8px; }
/* Заголовок картки — потреба. Обрізаємо двома рядками: перелік на сім позицій
   інакше розтягує картку на пів колонки. */
.q-card-t { flex: 1; min-width: 0; font-family: var(--font-head); font-size: 13.5px; font-weight: 700;
            color: var(--fg-strong); line-height: 1.25; cursor: pointer;
            display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.q-card-pr { font-family: var(--font-num); font-size: 12px; font-weight: 800; color: var(--fg-subtle);
             font-variant-numeric: tabular-nums; }
/* Другий рядок — кому. Назва частини коротка, тож один рядок із трикрапкою. */
.q-card-u { font-size: 12px; color: var(--fg-muted); margin-top: 2px; line-height: 1.4; cursor: pointer;
            white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.q-card-bot { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 7px; }
.q-card-sum { font-family: var(--font-num); font-size: 14px; font-weight: 800; color: var(--fg-strong);
              font-variant-numeric: tabular-nums; }
.q-nosum { font-family: var(--font-ui); font-size: 12px; font-weight: 600; color: var(--fg-subtle); }
.q-card-meta { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 6px; }

.q-chip { display: inline-flex; align-items: center; gap: 5px; font-size: 11px; font-weight: 700;
          padding: 2px 8px; border-radius: var(--r-full); white-space: nowrap; max-width: 100%;
          overflow: hidden; text-overflow: ellipsis; }
.q-chip.plain { background: var(--bg-sunken); color: var(--fg-muted); font-weight: 600; }
.q-chip.mute { background: var(--bg-sunken); color: var(--fg-muted); }
.q-chip.warn { background: var(--warn-bg); color: var(--warn); }
.q-chip.info { background: var(--info-bg); color: var(--info); }
.q-chip.tag { background: var(--ac-bg); color: var(--fg-strong); }
.q-chip.pos { background: var(--pos-bg); color: var(--pos); }

.q-pick { display: flex; align-items: center; gap: 6px; margin-top: 8px; padding-top: 7px;
          border-top: 1px solid var(--br-default); font-size: 12px; color: var(--fg-muted);
          font-weight: 600; cursor: pointer; }

/* Док: накопичений вибір. Знизу, а не збоку — збоку панель зʼїдала б ширину дошки,
   і колонки з довгими назвами підрозділів ставали б по 150px. */
.q-dock { position: sticky; bottom: 0; z-index: 5; margin-top: 12px; background: var(--hero-bg);
          color: var(--ondark-fg); border-radius: var(--r-lg); padding: 12px 15px;
          display: flex; align-items: center; gap: 14px; flex-wrap: wrap;
          box-shadow: 0 -6px 24px rgba(0,0,0,.25); }
.q-dock.is-drop { box-shadow: inset 0 0 0 2px var(--ondark-fg); }
.q-dock-n { font-family: var(--font-num); font-size: 20px; font-weight: 800; }
.q-dock-c { font-size: 12.5px; color: var(--ondark-dim); }
.q-dock-sp { margin-left: auto; display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.q-pill { display: inline-flex; align-items: center; gap: 6px; font-size: 12px; font-weight: 700;
          background: var(--ondark-tile); color: var(--ondark-fg); border-radius: var(--r-full);
          padding: 4px 10px; }
.q-pill .x { opacity: .6; cursor: pointer; }

/* Лист конструктора — над дошкою, а не замість неї: складаючи збір, треба бачити,
   з чого складаєш. */
/* z-index вище за .modal-backdrop (1400), інакше затемнення лягає ПОВЕРХ віконечка
   і весь екран стає чорним разом із ним. Те саме значення, що в .modal-card. */
.q-sheet { position: fixed; left: 50%; transform: translateX(-50%); bottom: 0; z-index: 1401;
           width: min(920px, 96vw); max-height: 88vh; overflow: auto;
           background: var(--bg-surface); border: 1px solid var(--br-strong); border-bottom: 0;
           border-radius: var(--r-lg) var(--r-lg) 0 0; padding: 16px 18px 20px;
           box-shadow: 0 -12px 40px rgba(0,0,0,.35); }
.q-sheet-h { display: flex; align-items: flex-start; gap: 12px; margin-bottom: 14px; }
.q-sheet-t { font-family: var(--font-head); font-size: 20px; font-weight: 800; color: var(--fg-strong); }
.q-sheet-s { font-size: 12.5px; color: var(--fg-muted); margin-top: 2px; line-height: 1.5; }
.q-sheet-x { margin-left: auto; font-size: 20px; color: var(--fg-subtle); cursor: pointer; }
.q-sheet-body { display: grid; grid-template-columns: 1fr 320px; gap: 18px; align-items: start; }
@media (max-width: 800px) { .q-sheet-body { grid-template-columns: 1fr; } }

.q-bitem { display: flex; align-items: center; gap: 10px; padding: 8px 0;
           border-top: 1px solid var(--br-default); font-size: 13.5px; color: var(--fg-default); }
.q-bitem:first-of-type { border-top: 0; }
.q-bitem > span:first-child { flex: 1; min-width: 0; }
.q-bitem-u { color: var(--fg-muted); font-weight: 400; }
.q-bitem .s { font-family: var(--font-num); font-weight: 700; color: var(--fg-strong); white-space: nowrap; }
.q-bitem .x { color: var(--fg-subtle); cursor: pointer; }
.q-btot { display: flex; justify-content: space-between; align-items: baseline; margin-top: 12px;
          padding-top: 11px; border-top: 2px solid var(--br-strong); }
.q-btot .k { font-size: 12.5px; font-weight: 700; text-transform: uppercase;
             letter-spacing: var(--tr-caps); color: var(--fg-muted); }
.q-btot .v { font-family: var(--font-num); font-size: 25px; font-weight: 800; color: var(--fg-strong); }
.q-warn { background: var(--warn-bg); color: var(--warn); border-radius: var(--r-md); padding: 9px 11px;
          font-size: 12.5px; font-weight: 600; line-height: 1.5; margin-top: 9px; }

/* Картка запиту */
.q-det { max-width: 720px; padding: 0; overflow: hidden; }
.q-det-h { background: var(--hero-bg); color: var(--ondark-fg); padding: 15px 17px; }
.q-det-u { font-family: var(--font-head); font-size: 20px; font-weight: 800; }
.q-det-m { font-size: 12.5px; color: var(--ondark-dim); margin-top: 3px; display: flex; gap: 8px;
           flex-wrap: wrap; }
.q-det-b { padding: 15px 17px 18px; }
.q-row { display: grid; grid-template-columns: 150px 1fr; gap: 6px 14px; padding: 8px 0;
         border-top: 1px solid var(--br-default); font-size: 13.5px; }
.q-row:first-of-type { border-top: 0; }
.q-row .k { color: var(--fg-muted); font-size: 12.5px; }
.q-row .v { color: var(--fg-default); line-height: 1.55; white-space: pre-line; }

.q-same { margin-top: 14px; background: var(--warn-bg); border-radius: var(--r-md); padding: 11px 12px; }
.q-same-h { font-size: 12.5px; font-weight: 800; color: var(--warn); text-transform: uppercase;
            letter-spacing: .04em; }
.q-same-hint { font-weight: 600; text-transform: none; letter-spacing: 0; opacity: .85; margin-left: 6px; }
.q-same-i { display: flex; align-items: center; gap: 9px; padding: 6px 0; font-size: 13px;
            color: var(--fg-default); cursor: pointer; }
.q-same-i .s { margin-left: auto; font-family: var(--font-num); font-weight: 700; }

.q-cm { border-top: 1px solid var(--br-default); margin-top: 14px; padding-top: 13px; }
.q-cmi { display: grid; grid-template-columns: 30px 1fr; gap: 10px; margin-bottom: 11px; }
.q-cmi .who { font-size: 13px; font-weight: 700; color: var(--fg-strong); }
.q-cmi .when { font-size: 11.5px; color: var(--fg-subtle); font-weight: 600; }
.q-cmi .txt { font-size: 13.5px; color: var(--fg-default); line-height: 1.55; margin-top: 2px; }

@media (max-width: 1100px) { .q-board { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 599px) { .q-board { grid-template-columns: 1fr; } }

/* Блок очищення в модалці імпорту — відділений, бо дії руйнівні. */
.q-clear { margin-top: 18px; padding-top: 15px; border-top: 2px solid var(--br-strong); }
.q-clear-h { font-family: var(--font-head); font-size: 15px; font-weight: 800; color: var(--neg); }

/* ══════════════════════════════════════════════════════════════════════════
   ДОШКА ЗАДАЧ · простори, дошка, беклог, календар, гант
   Префікси: tb- (сторінка й дошка), bl- (беклог), cal- (календар),
   gt- (гант), tc- (картка задачі), pl- (налаштування простору).
   ══════════════════════════════════════════════════════════════════════════ */

.tb-head { display: flex; align-items: flex-start; gap: 16px; flex-wrap: wrap; }
.tb-head-sub { margin-bottom: 14px; max-width: 720px; }
.tb-head-act { margin-left: auto; display: flex; gap: 8px; flex-wrap: wrap; }

/* ── Перемикач просторів ── */
.tb-spaces { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.tb-space { display: inline-flex; align-items: center; gap: 8px; font: inherit; font-size: 14px;
            padding: 7px 12px 7px 7px; border-radius: var(--r-full); cursor: pointer;
            background: var(--bg-surface); border: 1px solid var(--br-default); color: var(--fg-default); }
.tb-space:hover { border-color: var(--br-strong); }
.tb-space.is-on { border-color: var(--ac); box-shadow: inset 0 0 0 1px var(--ac); font-weight: 700; }
.tb-space-k { display: inline-flex; align-items: center; justify-content: center; min-width: 34px; height: 22px;
              padding: 0 7px; border-radius: var(--r-full); font-family: var(--font-num); font-size: 11.5px;
              font-weight: 800; letter-spacing: .03em; background: var(--slot, var(--ac-bg));
              color: var(--slot-fg, var(--fg-strong)); }
.tb-space-n { white-space: nowrap; }
.tb-space-c { font-family: var(--font-num); font-size: 12px; font-weight: 800; color: var(--fg-muted); }
.tb-space-add { padding: 7px 13px; color: var(--fg-muted); border-style: dashed; }

/* ── Перемикач подань ── */
.tb-views { display: flex; gap: 4px; flex-wrap: wrap; margin-bottom: 14px;
            border-bottom: 1px solid var(--br-default); }
.tb-view { display: inline-flex; align-items: center; gap: 6px; font: inherit; font-size: 14px;
           padding: 8px 13px; border: 0; background: transparent; color: var(--fg-muted);
           cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.tb-view:hover { color: var(--fg-default); }
.tb-view.is-on { color: var(--fg-strong); font-weight: 700; border-bottom-color: var(--ac); }

.tb-toggle { display: inline-flex; align-items: center; gap: 7px; font-size: 13.5px;
             color: var(--fg-muted); cursor: pointer; white-space: nowrap; }
.tb-toggle input { accent-color: var(--ac); width: 16px; height: 16px; }

/* ── Дошка ── */
.tb-board { display: grid; grid-template-columns: repeat(var(--cols, 4), minmax(210px, 1fr));
            gap: 11px; align-items: start; overflow-x: auto; padding-bottom: 6px; }
.tb-col { background: var(--bg-sunken); border: 1px solid var(--br-default); border-radius: var(--r-lg);
          padding: 9px 9px 12px; min-height: 120px; }
.tb-col.is-drop { border-color: var(--ac); box-shadow: inset 0 0 0 1px var(--ac); }
.tb-col-head { display: flex; align-items: center; gap: 7px; padding: 2px 3px 9px;
               font-size: 12.5px; font-weight: 700; color: var(--fg-muted); }
.tb-col-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--fg-subtle); flex: none; }
.tb-col-dot.k-todo { background: var(--fg-subtle); }
.tb-col-dot.k-progress { background: var(--info); }
.tb-col-dot.k-blocked { background: var(--neg); }
.tb-col-dot.k-done { background: var(--pos); }
.tb-col-name { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
               color: var(--fg-strong); }
.tb-col-n { font-family: var(--font-num); font-size: 12px; color: var(--fg-muted); }
.tb-col-n.is-over { color: var(--neg); font-weight: 800; }
.tb-col-add { border: 0; background: transparent; color: var(--fg-subtle); font-size: 17px; line-height: 1;
              cursor: pointer; padding: 0 3px; }
.tb-col-add:hover { color: var(--fg-strong); }
.tb-col-body { display: flex; flex-direction: column; gap: 7px; }

.tb-card { background: var(--bg-surface); border: 1px solid var(--br-default); border-radius: var(--r-md);
           padding: 9px 10px; cursor: grab; }
.tb-card:active { cursor: grabbing; }
.tb-card:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 2px; }
.tb-card.is-dragging { opacity: .45; }
.tb-card.is-late { border-left: 3px solid var(--neg); padding-left: 8px; }
.tb-card-top { display: flex; align-items: center; gap: 7px; margin-bottom: 4px; }
.tb-card-id { font-family: var(--font-num); font-size: 11px; font-weight: 800; letter-spacing: .04em;
              color: var(--fg-subtle); white-space: nowrap; }
.tb-card-sprint { margin-left: auto; font-size: 10.5px; font-weight: 700; color: var(--info);
                  background: var(--info-bg); border-radius: var(--r-full); padding: 1px 7px;
                  max-width: 110px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tb-card-sprint.tb-card-backlog { color: var(--fg-subtle); background: var(--bg-sunken); }
.tb-card-title { font-size: 13.5px; font-weight: 600; color: var(--fg-strong); line-height: 1.4;
                 word-break: break-word; }
.tb-card-bot { display: flex; align-items: center; gap: 8px; margin-top: 8px; }
.tb-card-who { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--fg-muted);
               min-width: 0; overflow: hidden; }
.tb-card-who > span:last-child { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tb-card-nobody { color: var(--fg-subtle); font-style: italic; }
.tb-card-ghost { display: inline-flex; align-items: center; justify-content: center; width: 20px; height: 20px;
                 border-radius: 50%; border: 1px dashed var(--br-control); font-size: 11px; flex: none; }
.tb-card-meta { margin-left: auto; display: flex; align-items: center; gap: 7px; font-size: 11px;
                color: var(--fg-muted); white-space: nowrap; }

.tb-due { font-family: var(--font-num); font-size: 11.5px; font-weight: 700; color: var(--fg-muted);
          background: var(--bg-sunken); border-radius: var(--r-sm); padding: 1px 6px; }
.tb-due.is-late { background: var(--neg-bg); color: var(--neg); }
.tb-due.is-done { background: var(--pos-bg); color: var(--pos); }
.tb-due-none { color: var(--fg-subtle); background: transparent; }

.tb-new { width: min(620px, calc(100vw - 32px)); }
.tb-new-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; }
@media (max-width: 560px) { .tb-new-grid { grid-template-columns: 1fr; } }

/* ── Беклог ── */
.pl-backlog { display: flex; flex-direction: column; gap: 10px; }
.bl-sec { border: 1px solid var(--br-default); border-radius: var(--r-lg); background: var(--bg-surface);
          overflow: hidden; }
.bl-sec.is-drop { border-color: var(--ac); box-shadow: inset 0 0 0 1px var(--ac); }
.bl-sec-h { display: flex; align-items: center; gap: 9px; padding: 9px 12px; background: var(--bg-sunken);
            flex-wrap: wrap; }
.bl-sec-fold { border: 0; background: transparent; color: var(--fg-muted); cursor: pointer;
               font-size: 13px; padding: 0 2px; }
.bl-sec-t { font-family: var(--font-head); font-size: 15px; font-weight: 800; color: var(--fg-strong); }
.bl-sec-d { font-family: var(--font-num); font-size: 12px; color: var(--fg-muted); }
.bl-sec-n { font-size: 12px; color: var(--fg-muted); }
.bl-sec-goal { font-size: 12px; color: var(--fg-subtle); font-style: italic; max-width: 40%;
               overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.bl-sec-h .tb-col-add { margin-left: auto; }
.bl-rows { display: flex; flex-direction: column; }
.bl-row { display: flex; align-items: center; gap: 10px; padding: 8px 12px; cursor: pointer;
          border-top: 1px solid var(--br-subtle); }
.bl-row:hover { background: var(--bg-sunken); }
.bl-row.is-dragging { opacity: .45; }
.bl-row.is-done .bl-row-t { color: var(--fg-subtle); text-decoration: line-through; }
.bl-row-grip { color: var(--fg-subtle); cursor: grab; font-size: 13px; }
.bl-row-t { flex: 1; min-width: 0; font-size: 14px; color: var(--fg-default); overflow: hidden;
            text-overflow: ellipsis; white-space: nowrap; }
.bl-row-col { font-size: 11.5px; color: var(--fg-muted); background: var(--bg-sunken);
              border-radius: var(--r-full); padding: 2px 9px; white-space: nowrap; }
.bl-row-who { display: inline-flex; width: 22px; justify-content: center; }
.bl-foot { margin-top: 4px; }
@media (max-width: 700px) { .bl-row-col { display: none; } }

/* ── Календар ── */
.cal-head { display: flex; align-items: center; gap: 10px; margin-bottom: 10px; flex-wrap: wrap; }
.cal-nav { border: 1px solid var(--br-default); background: var(--bg-surface); color: var(--fg-default);
           width: 30px; height: 30px; border-radius: var(--r-sm); cursor: pointer; font-size: 16px; line-height: 1; }
.cal-nav:hover { border-color: var(--ac); }
.cal-title { font-family: var(--font-head); font-size: 17px; font-weight: 800; color: var(--fg-strong);
             min-width: 160px; }
.cal-today { border: 1px solid var(--br-default); background: var(--bg-surface); color: var(--fg-muted);
             border-radius: var(--r-full); padding: 4px 11px; font: inherit; font-size: 12.5px; cursor: pointer; }
.cal-legend { margin-left: auto; display: flex; gap: 14px; font-size: 12px; color: var(--fg-muted); }
.cal-legend span { display: inline-flex; align-items: center; gap: 5px; }
.cal-key { width: 16px; height: 8px; border-radius: var(--r-full); flex: none; background: var(--team-7); }
.cal-key.k-late { background: var(--neg); }
.cal-key.k-done { background: var(--fg-subtle); opacity: .5; }

/* Сітка місяця. Тижні — окремі рядки, бо смуга задачі живе В МЕЖАХ тижня: перенести її
   через край рядка нікуди, тож довга задача ріжеться на відрізки по тижнях. */
.cal-dows { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
            border: 1px solid var(--br-default); border-bottom: 0;
            border-radius: var(--r-lg) var(--r-lg) 0 0; overflow: hidden; background: var(--bg-sunken); }
.cal-dow { padding: 6px 8px; font-size: 11.5px; font-weight: 700; text-transform: uppercase;
           letter-spacing: var(--tr-caps); color: var(--fg-muted); text-align: center; }
.cal-weeks { border: 1px solid var(--br-default); border-radius: 0 0 var(--r-lg) var(--r-lg);
             overflow: hidden; background: var(--br-default); display: flex; flex-direction: column; gap: 1px; }

.cal-week { position: relative; }
.cal-week-days { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 1px;
                 background: var(--br-default); }
.cal-day { background: var(--bg-surface); padding: 4px 5px 6px;
           /* Висота = шапка з числом + доріжки смуг цього тижня. */
           min-height: calc(34px + var(--lanes, 0) * 22px); }
.cal-day.is-out { background: var(--bg-sunken); }
.cal-day.is-out .cal-day-n { color: var(--fg-subtle); }
.cal-day.is-today { box-shadow: inset 0 0 0 2px var(--ac); }
.cal-day.is-drop { background: var(--ac-bg); }
.cal-day-h { display: flex; align-items: center; }
.cal-day-n { font-family: var(--font-num); font-size: 12.5px; font-weight: 700; color: var(--fg-muted); }
.cal-day-add { margin-left: auto; border: 0; background: transparent; color: transparent; cursor: pointer;
               font-size: 15px; line-height: 1; padding: 0 2px; }
.cal-day:hover .cal-day-add { color: var(--fg-subtle); }
.cal-day-add:hover { color: var(--fg-strong); }

/* Шар смуг. pointer-events вимкнено на контейнері, щоб клітинки під ним лишались
   приймачами перетягування; самим смугам events повертаємо. */
.cal-week-lanes { position: absolute; left: 0; right: 0; top: 28px; pointer-events: none;
                  display: flex; flex-direction: column; gap: 2px; padding: 0 1px; }
.cal-lane { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); gap: 1px; height: 20px; }
.cal-bar { pointer-events: auto; display: flex; align-items: center; gap: 5px; min-width: 0;
           margin: 0 2px; padding: 0 7px; height: 20px; cursor: grab; font-size: 11.5px; font-weight: 600;
           color: #fff; background: var(--slot, var(--team-7)); overflow: hidden; }
.cal-bar:active { cursor: grabbing; }
.cal-bar.s-start { border-radius: var(--r-full) 0 0 var(--r-full); margin-left: 3px; }
.cal-bar.s-end { border-radius: 0 var(--r-full) var(--r-full) 0; margin-right: 3px; }
.cal-bar.s-start.s-end { border-radius: var(--r-full); }
.cal-bar.is-dragging { opacity: .45; }
.cal-bar.is-late { outline: 2px solid var(--neg); outline-offset: -2px; }
.cal-bar.is-done { opacity: .45; }
.cal-bar.is-done .cal-bar-t { text-decoration: line-through; }
.cal-bar-id { font-family: var(--font-num); font-size: 10px; font-weight: 800; opacity: .8; flex: none; }
.cal-bar-t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
             text-shadow: 0 1px 2px rgba(0,0,0,.3); }
.cal-undated { margin-top: 12px; border: 1px dashed var(--br-default); border-radius: var(--r-lg);
               padding: 10px 12px; }
.cal-undated-t { font-size: 12.5px; font-weight: 700; color: var(--fg-muted); margin-bottom: 7px; }
.cal-undated-t span { font-weight: 400; color: var(--fg-subtle); }
.cal-undated-list { display: flex; gap: 6px; flex-wrap: wrap; }
.cal-chip { display: inline-flex; align-items: center; gap: 5px; font-size: 12px; cursor: grab;
            background: var(--bg-sunken); border-radius: var(--r-full); padding: 3px 10px; color: var(--fg-default); }
@media (max-width: 700px) { .cal-bar-t { font-size: 10.5px; } .cal-bar-id { display: none; } }

/* ── Гант ── */
.gt-toolbar { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; margin-bottom: 10px; }
.gt-tool { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; color: var(--fg-muted); }
.gt-tool select { font: inherit; font-size: 13px; padding: 5px 9px; border: 1px solid var(--br-control);
                  border-radius: var(--r-sm); background: var(--bg-surface); color: var(--fg-default); }
.gt-hint { margin-left: auto; font-size: 12px; color: var(--fg-subtle); }
.gt-scroll { overflow-x: auto; border: 1px solid var(--br-default); border-radius: var(--r-lg);
             background: var(--bg-surface); }
.gt-inner { min-width: calc(var(--labelw) + var(--days) * var(--dayw)); }

.gt-head { display: flex; background: var(--bg-sunken); border-bottom: 1px solid var(--br-default); }
.gt-head-label { width: var(--labelw); flex: none; padding: 6px 10px; font-size: 11.5px; font-weight: 700;
                 text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-muted);
                 border-right: 1px solid var(--br-default); display: flex; align-items: flex-end; }
.gt-head-scale { flex: 1; min-width: 0; }
.gt-months { display: flex; }
.gt-month { flex: none; font-size: 11.5px; font-weight: 700; color: var(--fg-muted); padding: 4px 6px;
            border-left: 1px solid var(--br-default); overflow: hidden; white-space: nowrap; }
.gt-days { display: flex; }
.gt-day { width: var(--dayw); flex: none; font-family: var(--font-num); font-size: 10px; text-align: center;
          color: var(--fg-subtle); padding: 2px 0 4px; }
.gt-day.is-today { background: var(--ac); color: var(--ac-fg); font-weight: 800; }

.gt-sprints { display: flex; border-bottom: 1px solid var(--br-default); background: var(--bg-surface); }
.gt-sprints-scale { flex: 1; min-width: 0; position: relative; height: 22px; }
.gt-sprint { position: absolute; top: 3px; height: 16px; border-radius: var(--r-full);
             background: var(--bg-sunken); border: 1px solid var(--br-default); font-size: 10.5px;
             font-weight: 700; color: var(--fg-muted); padding: 0 7px; line-height: 14px;
             overflow: hidden; white-space: nowrap; }
.gt-sprint.is-active { background: var(--ac-bg); border-color: var(--ac); color: var(--fg-strong); }

.gt-body { display: flex; }
.gt-labels { width: var(--labelw); flex: none; border-right: 1px solid var(--br-default); }
.gt-label { height: var(--rowh); display: flex; align-items: center; gap: 7px; padding: 0 10px;
            font-size: 12.5px; color: var(--fg-default); cursor: pointer; overflow: hidden; }
.gt-label:hover { background: var(--bg-sunken); }
.gt-label.is-done { color: var(--fg-subtle); }
.gt-label.is-done .gt-label-t { text-decoration: line-through; }
.gt-label-t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.gt-label-group { background: var(--bg-sunken); font-weight: 800; color: var(--fg-strong); cursor: default; }
.gt-label-group:hover { background: var(--bg-sunken); }
.gt-label-n { margin-left: auto; font-family: var(--font-num); font-size: 11.5px; color: var(--fg-muted); }
.gt-plan { cursor: grab; font-size: 12px; flex: none; }

.gt-chart { flex: 1; min-width: 0; position: relative; }
.gt-bg { position: absolute; inset: 0; display: flex; pointer-events: none; }
.gt-bg-col { width: var(--dayw); flex: none; border-right: 1px solid var(--br-subtle); }
.gt-bg-col.is-today { background: var(--ac-bg); box-shadow: inset 1px 0 0 var(--ac); }
.gt-arrows { position: absolute; left: 0; top: 0; pointer-events: none; z-index: 2; overflow: visible; }
.gt-arrow { fill: none; stroke: var(--fg-subtle); stroke-width: 1.4; }
.gt-arrow.is-bad { stroke: var(--neg); stroke-dasharray: 4 3; }
.gt-arrow-h { fill: var(--fg-subtle); }
.gt-arrow-h.is-bad { fill: var(--neg); }

.gt-row { height: var(--rowh); position: relative; }
.gt-row-group { background: var(--bg-sunken); }
.gt-bar { position: absolute; top: 5px; height: calc(var(--rowh) - 10px); border-radius: var(--r-full);
          background: var(--slot, var(--ac)); color: #fff; display: flex; align-items: center;
          padding: 0 9px; font-size: 11px; font-weight: 700; cursor: grab; z-index: 1;
          box-shadow: var(--sh-1); min-width: 14px; }
.gt-bar:active { cursor: grabbing; }
.gt-bar.is-dragging { opacity: .45; }
.gt-bar.is-late { outline: 2px solid var(--neg); outline-offset: 1px; }
.gt-bar.is-done { opacity: .5; }
.gt-bar-t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
            text-shadow: 0 1px 2px rgba(0,0,0,.35); pointer-events: none; }
.gt-handle { position: absolute; top: 0; width: 9px; height: 100%; cursor: ew-resize; }
.gt-handle-l { left: 0; border-radius: var(--r-full) 0 0 var(--r-full); }
.gt-handle-r { right: 0; border-radius: 0 var(--r-full) var(--r-full) 0; }
.gt-handle:hover { background: rgba(255,255,255,.35); }
/* Приймачі дня малюються ЛИШЕ під час перетягування: інакше сама смуга їх перекриває
   і drop не спрацьовує. */
.gt-drop { position: absolute; inset: 0; display: flex; z-index: 4; }
.gt-drop-cell { width: var(--dayw); flex: none; }
.gt-drop-cell:hover { background: var(--ac-bg); box-shadow: inset 0 0 0 1px var(--ac); }

/* ── Картка задачі ── */
.tc { width: min(1040px, calc(100vw - 32px)); padding: 0; overflow: hidden; }
.tc-h { background: var(--hero-bg); color: var(--ondark-fg); padding: 13px 17px 15px; }
.tc-h-top { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.tc-key { font-family: var(--font-num); font-size: 12.5px; font-weight: 800; letter-spacing: .05em;
          color: var(--ondark-dim); }
.tc-h .q-sheet-x { margin-left: auto; color: var(--ondark-dim); }
.tc-title { font-family: var(--font-head); font-size: 21px; font-weight: 800; margin-top: 7px;
            cursor: text; color: #fff; word-break: break-word; }
.tc-title-edit { display: flex; gap: 8px; align-items: center; margin-top: 7px; flex-wrap: wrap; }
.tc-title-edit .pl-inp { flex: 1; min-width: 220px; font-size: 17px; }

.tc-body { display: grid; grid-template-columns: 1fr 320px; gap: 0; max-height: calc(100vh - 190px); }
.tc-main { padding: 16px 18px 20px; overflow-y: auto; }
.tc-side { padding: 16px 18px 20px; border-left: 1px solid var(--br-default); background: var(--bg-sunken);
           overflow-y: auto; }
@media (max-width: 860px) {
    .tc-body { grid-template-columns: 1fr; max-height: calc(100vh - 150px); overflow-y: auto; }
    .tc-side { border-left: 0; border-top: 1px solid var(--br-default); }
}

.tc-desc { font-size: 14.5px; line-height: 1.6; color: var(--fg-default); white-space: pre-wrap;
           word-break: break-word; cursor: text; border: 1px solid transparent; border-radius: var(--r-md);
           padding: 8px 10px; margin: -8px -10px; }
.tc-desc:hover { border-color: var(--br-default); }
.tc-desc.is-empty { color: var(--fg-subtle); font-style: italic; }

.tc-files { display: flex; flex-direction: column; gap: 5px; }
.tc-file { display: flex; align-items: center; gap: 9px; font-size: 13.5px; }
.tc-file a { display: flex; align-items: center; gap: 7px; min-width: 0; color: var(--fg-default);
             text-decoration: none; }
.tc-file a:hover .tc-file-n { text-decoration: underline; }
.tc-file-n { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tc-file-s { margin-left: auto; font-family: var(--font-num); font-size: 11.5px; color: var(--fg-subtle);
             white-space: nowrap; }

.tc-comments { display: flex; flex-direction: column; gap: 12px; }
.tc-comment { display: grid; grid-template-columns: 28px 1fr; gap: 10px; }
.tc-comment-h { display: flex; align-items: center; gap: 8px; font-size: 12px; color: var(--fg-subtle); }
.tc-comment-h b { font-size: 13px; color: var(--fg-strong); }
.tc-comment-t { font-size: 14px; color: var(--fg-default); line-height: 1.55; white-space: pre-wrap;
                word-break: break-word; margin-top: 2px; }
.tc-new-comment { display: flex; gap: 8px; align-items: flex-end; margin-top: 12px; }
.tc-new-comment > :first-child { flex: 1; }

.tc-dates { display: grid; grid-template-columns: 1fr 1fr; gap: 10px; }
.tc-hint { font-size: 11.5px; color: var(--fg-subtle); line-height: 1.45; }

.tc-links { display: flex; flex-direction: column; gap: 4px; }
.tc-link-g { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: var(--tr-caps);
             color: var(--fg-subtle); margin-top: 7px; }
.tc-link { display: flex; align-items: center; gap: 7px; font-size: 13px; }
.tc-link-go { display: flex; align-items: center; gap: 6px; min-width: 0; cursor: pointer;
              color: var(--fg-default); }
.tc-link-go:hover .tc-link-t { text-decoration: underline; }
.tc-link-go.is-done .tc-link-t { color: var(--fg-subtle); text-decoration: line-through; }
.tc-link-t { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tc-link-add { display: flex; gap: 6px; }
.tc-link-add .pl-inp { flex: 1; min-width: 0; }
.tc-link-res { margin-top: 5px; display: flex; flex-direction: column; gap: 2px;
               border: 1px solid var(--br-default); border-radius: var(--r-md); padding: 4px;
               background: var(--bg-surface); }
.tc-link-cand { text-align: left; border: 0; background: transparent; font: inherit; font-size: 12.5px;
                color: var(--fg-default); cursor: pointer; padding: 4px 6px; border-radius: var(--r-sm);
                overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tc-link-cand:hover { background: var(--ac-bg); }

.tc-meta { font-size: 11.5px; color: var(--fg-subtle); line-height: 1.6; }

/* ── Налаштування простору ── */
.pl-settings { width: min(760px, calc(100vw - 32px)); }
.pl-set-h { display: flex; align-items: center; gap: 10px; margin-bottom: 12px; }
.pl-set-h .q-sheet-x { margin-left: auto; }
.pl-hint { font-size: 12.5px; color: var(--fg-muted); line-height: 1.55; margin-bottom: 12px; }
.pl-rows { display: flex; flex-direction: column; gap: 6px; }
.pl-row { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: var(--r-md);
          background: var(--bg-sunken); }
.pl-row-ord { display: flex; flex-direction: column; gap: 1px; }
.pl-row-ord button { border: 0; background: transparent; color: var(--fg-muted); cursor: pointer;
                     font-size: 10px; line-height: 1; padding: 1px 3px; }
.pl-row-ord button:disabled { color: var(--br-default); cursor: default; }
.pl-row-n { font-family: var(--font-num); font-size: 12px; color: var(--fg-muted); min-width: 22px;
            text-align: right; }
.pl-row-x { border: 0; background: transparent; color: var(--fg-subtle); cursor: pointer; font-size: 13px;
            padding: 2px 4px; }
.pl-row-x:hover { color: var(--neg); }
.pl-row-x:disabled { opacity: .3; cursor: default; }
.pl-inp { font: inherit; font-size: 13.5px; padding: 7px 10px; border: 1px solid var(--br-control);
          border-radius: var(--r-sm); background: var(--bg-surface); color: var(--fg-default);
          flex: 1; min-width: 0; }
.pl-inp:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 1px; }
.pl-inp-sm { flex: none; width: 150px; }
.pl-inp-xs { flex: none; width: 62px; }
.pl-add { display: flex; gap: 8px; align-items: center; margin-top: 10px; flex-wrap: wrap; }
.pl-danger { border: 1px solid var(--neg); border-radius: var(--r-md); padding: 11px 13px;
             background: var(--neg-bg); font-size: 13px; color: var(--fg-default); }
.pl-danger .pl-hint { margin: 6px 0 0; }
.pl-colors { display: flex; gap: 6px; flex-wrap: wrap; }
.pl-color { width: 26px; height: 26px; border-radius: 50%; border: 2px solid transparent; cursor: pointer; }
.pl-color.is-on { border-color: var(--fg-strong); box-shadow: 0 0 0 2px var(--bg-surface) inset; }
.pl-sprint-main { flex: 1; min-width: 0; }
.pl-sprint-n { font-size: 14px; font-weight: 700; color: var(--fg-strong); }
.pl-sprint-d { font-size: 11.5px; color: var(--fg-muted); }
.pl-sprint-act { display: flex; gap: 2px; }
.pl-sprint-act button { border: 0; background: transparent; color: var(--fg-muted); cursor: pointer;
                        font-size: 13px; padding: 3px 5px; border-radius: var(--r-sm); }
.pl-sprint-act button:hover { background: var(--bg-surface); color: var(--fg-strong); }
.pl-sprint-form { border-top: 1px solid var(--br-default); padding-top: 12px; }
.pl-row-sprint { align-items: flex-start; }

/* Вузький екран: дошка їде вбік замість того, щоб чавити колонки в нечитабельні смужки. */
@media (max-width: 900px) {
    .tb-board { grid-auto-flow: column; grid-auto-columns: 250px; grid-template-columns: none; }
}

/* ── Вибір людини з пошуком ──────────────────────────────────────────────── */
/* Власна випадайка замість MudSelect: той тягне MudPopoverProvider, якого на
   інтерактивних сторінках адмінки немає (див. ui-design-system + памʼять проєкту). */
.pp { position: relative; }
.pp-btn { display: flex; align-items: center; gap: 7px; width: 100%; font: inherit; font-size: 14px;
          padding: 6px 10px; border: 1px solid var(--br-control); border-radius: var(--r-sm);
          background: var(--bg-surface); color: var(--fg-default); cursor: pointer; text-align: left; }
.pp-btn:hover { border-color: var(--ac); }
.pp-btn-n { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-btn-empty { color: var(--fg-subtle); }
.pp-chev { color: var(--fg-subtle); font-size: 11px; }
.pp-scrim { position: fixed; inset: 0; z-index: 1500; }
/* Меню лишається В ПОТОЦІ (relative, не absolute) і розсуває вміст. Це навмисно:
   пікер живе всередині .modal-card і .tc-side, у яких overflow-y:auto — плаваючий
   список там просто обрізався б краєм прокрутки. z-index потрібен, щоб меню було
   ПОВЕРХ підкладки, яка ловить клік «повз». */
.pp-menu { position: relative; z-index: 1501; margin-top: 4px;
           background: var(--bg-surface); border: 1px solid var(--br-default); border-radius: var(--r-md);
           box-shadow: var(--sh-2); padding: 6px; }
.pp-search { width: 100%; box-sizing: border-box; font: inherit; font-size: 13.5px; padding: 7px 10px;
             border: 1px solid var(--br-control); border-radius: var(--r-sm);
             background: var(--bg-canvas); color: var(--fg-default); margin-bottom: 5px; }
.pp-search:focus-visible { outline: 2px solid var(--ac-ring); outline-offset: 1px; }
.pp-list { max-height: 260px; overflow-y: auto; display: flex; flex-direction: column; gap: 1px; }
.pp-item { display: flex; align-items: center; gap: 8px; width: 100%; font: inherit; font-size: 13.5px;
           padding: 5px 7px; border: 0; border-radius: var(--r-sm); background: transparent;
           color: var(--fg-default); cursor: pointer; text-align: left; }
.pp-item:hover { background: var(--ac-bg); }
.pp-item.is-on { background: var(--ac-bg); font-weight: 700; }
.pp-item > span:nth-child(2) { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pp-badge { color: var(--pos); font-size: 16px; line-height: 1; }
.pp-group { font-size: 10.5px; font-weight: 800; text-transform: uppercase; letter-spacing: var(--tr-caps);
            color: var(--fg-subtle); padding: 8px 7px 3px; border-top: 1px solid var(--br-subtle); margin-top: 3px; }
.pp-empty { font-size: 13px; color: var(--fg-subtle); padding: 8px 7px; }

/* ── Редактор коментаря ──────────────────────────────────────────────────── */
.rte { border: 1px solid var(--br-control); border-radius: var(--r-md); background: var(--bg-surface);
       overflow: hidden; }
.rte:focus-within { border-color: var(--ac); box-shadow: inset 0 0 0 1px var(--ac); }
.rte-tools { display: flex; align-items: center; gap: 2px; flex-wrap: wrap; padding: 5px 6px;
             border-bottom: 1px solid var(--br-subtle); background: var(--bg-sunken); }
.rte-tools button, .rte-btn { display: inline-flex; align-items: center; justify-content: center;
                              min-width: 28px; height: 26px; padding: 0 7px; border: 0;
                              border-radius: var(--r-sm); background: transparent; color: var(--fg-muted);
                              cursor: pointer; font: inherit; font-size: 13px; line-height: 1; }
.rte-tools button:hover, .rte-btn:hover { background: var(--bg-surface); color: var(--fg-strong); }
.rte-tools button:disabled { opacity: .4; cursor: default; }
.rte-sep { width: 1px; height: 16px; background: var(--br-default); margin: 0 4px; }
.rte-up { display: inline-flex; }
.rte-hint { margin-left: auto; font-size: 11px; color: var(--fg-subtle); }
.rte-body { min-height: 84px; max-height: 320px; overflow-y: auto; padding: 9px 11px;
            font-size: 14px; line-height: 1.55; color: var(--fg-default); outline: none; }
.rte-body:empty::before { content: attr(data-placeholder); color: var(--fg-subtle); }
.rte-body img { max-width: 100%; border-radius: var(--r-sm); display: block; margin: 6px 0; }
.rte-body h3 { font-size: 16px; font-weight: 800; margin: 10px 0 4px; }
.rte-body h4 { font-size: 14.5px; font-weight: 700; margin: 9px 0 4px; }
.rte-body ul, .rte-body ol { margin: 5px 0; padding-left: 22px; }
.rte-body p { margin: 4px 0; }
.rte-body a { color: var(--info); }

/* Той самий вигляд у збереженому коментарі — інакше «як писав» і «як вийшло» розходяться. */
.tc-comment-t h3 { font-size: 16px; font-weight: 800; margin: 10px 0 4px; color: var(--fg-strong); }
.tc-comment-t h4 { font-size: 14.5px; font-weight: 700; margin: 9px 0 4px; color: var(--fg-strong); }
.tc-comment-t ul, .tc-comment-t ol { margin: 5px 0; padding-left: 22px; }
.tc-comment-t p { margin: 4px 0; }
.tc-comment-t a { color: var(--info); word-break: break-all; }
.tc-comment-t img { max-width: 100%; border-radius: var(--r-sm); display: block; margin: 7px 0;
                    border: 1px solid var(--br-default); }
.tc-comment-t blockquote { margin: 6px 0; padding-left: 10px; border-left: 3px solid var(--br-default);
                           color: var(--fg-muted); }
.tc-comment-t code { font-family: ui-monospace, monospace; font-size: 12.5px;
                     background: var(--bg-sunken); border-radius: 4px; padding: 1px 4px; }

/* ── Звʼязані задачі: помітніше ──────────────────────────────────────────── */
.tc-links { gap: 5px; }
.tc-link-g { display: flex; align-items: center; gap: 6px; font-size: 11px; font-weight: 800;
             text-transform: uppercase; letter-spacing: var(--tr-caps); color: var(--fg-muted);
             margin-top: 10px; }
.tc-link-arrow { font-size: 13px; line-height: 1; }
.tc-link-g.r-predecessor { color: var(--warn); }
.tc-link-g.r-successor { color: var(--info); }
.tc-link { display: flex; align-items: center; gap: 6px; font-size: 13px; padding: 6px 8px;
           border: 1px solid var(--br-default); border-radius: var(--r-md); background: var(--bg-surface);
           border-left-width: 3px; }
.tc-link.r-predecessor { border-left-color: var(--warn); }
.tc-link.r-successor { border-left-color: var(--info); }
.tc-link.r-related { border-left-color: var(--br-strong); }
.tc-link.is-done { opacity: .65; }
.tc-link:hover { border-color: var(--ac); border-left-color: var(--ac); }
.tc-link-go { display: flex; align-items: center; gap: 7px; flex: 1; min-width: 0; border: 0;
              background: transparent; font: inherit; font-size: 13px; color: var(--fg-default);
              cursor: pointer; text-align: left; padding: 0; }
.tc-link-key { font-family: var(--font-num); font-size: 10.5px; font-weight: 800; letter-spacing: .04em;
               color: var(--fg-strong); background: var(--bg-sunken); border-radius: var(--r-sm);
               padding: 2px 6px; flex: none; }
.tc-link-t { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
             font-weight: 600; }
.tc-link.is-done .tc-link-t { text-decoration: line-through; color: var(--fg-muted); }
.tc-link-go:hover .tc-link-t { text-decoration: underline; }
.tc-link-side { display: flex; align-items: center; gap: 5px; flex: none; }

/* ── Ширша картка задачі: дата дедлайну більше не ріжеться ───────────────── */
.tc { width: min(1180px, calc(100vw - 32px)); }

/* Висоту розкладає flex, а не порахований відступ під шапку: будь-яке число тут
   застаріває, щойно в шапці зʼявиться ще один чип і вона перенесеться на два рядки. */
.tc { display: flex; flex-direction: column; max-height: calc(100vh - 32px); }
.tc-h { flex: none; }
.tc-body { grid-template-columns: 1fr 380px; flex: 1 1 auto; max-height: none; overflow: hidden; }

/* min-height:0 — саме те, без чого картка не прокручувалась. Грід-елемент за
   замовчуванням не стискається менше за свій вміст (min-height:auto), тож рядок
   перевищував контейнер, вміст вилазив, а .tc{overflow:hidden} його обрізав —
   і власний overflow-y колонок ніколи не вмикався. */
.tc-main, .tc-side { min-height: 0; }
.tc-dates { grid-template-columns: 1fr 1fr; gap: 8px; }
/* Поле дати за замовчуванням має власну «природну» ширину й вилазить із колонки —
   саме через це праворуч зʼявлявся горизонтальний обрізок і зайвий скрол. */
.tc-side input[type="date"], .tc-side select, .tc-side .pp-btn {
    width: 100%; min-width: 0; box-sizing: border-box;
}
.tc-side .q-fld { min-width: 0; }
@media (max-width: 960px) {
    /* Вузький екран — колонки стають одна під одною, тож прокручується вся середина
       разом, а не кожна половина окремо. */
    .tc-body { grid-template-columns: 1fr; overflow-y: auto; }
    .tc-main, .tc-side { overflow: visible; }
}

/* ── Гант: назви днів у великому масштабі ────────────────────────────────── */
.gt-day { display: flex; flex-direction: column; align-items: center; justify-content: flex-end;
          line-height: 1.15; }
.gt-dow { font-size: 9.5px; text-transform: uppercase; letter-spacing: .03em; opacity: .75; }
.gt-daynum { font-weight: 700; }

/* ── Налаштування: рядок-кандидат у команду ──────────────────────────────── */
.pl-row-pick { width: 100%; border: 0; font: inherit; text-align: left; cursor: pointer; }
.pl-row-pick:hover { background: var(--ac-bg); }
.pl-row-add { font-size: 16px; color: var(--fg-subtle); line-height: 1; padding: 0 4px; }
.pl-row-pick:hover .pl-row-add { color: var(--fg-strong); }

/* ── Згадка людини в коментарі ───────────────────────────────────────────── */
/* Список під редактором, а не біля курсора: редактор живе в модалці з
   overflow-y:auto, де плаваючий список обрізало б її краєм. */
.rte-mentions { border-top: 1px solid var(--br-subtle); background: var(--bg-sunken);
                padding: 5px; display: flex; flex-direction: column; gap: 1px;
                max-height: 200px; overflow-y: auto; }
.rte-mentions .pp-item { background: transparent; }
.rte-mentions .pp-item:hover { background: var(--bg-surface); }

.mention { display: inline-block; font-weight: 700; color: var(--info);
           background: var(--info-bg); border-radius: var(--r-full); padding: 0 7px;
           line-height: 1.4; white-space: nowrap; }
.rte-body .mention { cursor: default; }

/* ── Пріоритет і прострочення ────────────────────────────────────────────── */
/* Червона КАРТКА — тільки зірваний дедлайн: це вже проблема, і вона має кричати.
   Високий пріоритет — лише червоний тег: це план, а не аварія. Якщо фарбувати
   картку й за пріоритетом, дошка з десятком «важливих» задач стає суцільно
   червоною і сигнал про справді прострочене тоне. */
.tb-card.is-late { border-color: var(--neg); background: var(--neg-bg); }
.tb-card.is-late .tb-card-title { color: var(--neg); }
.q-chip.neg { background: var(--neg-bg); color: var(--neg); }

/* ── Чипи на картці дошки: пріоритет і збір ──────────────────────────────── */
/* Обидва — одним рядком праворуч від номера, однаковим оформленням: це «ярлики
   задачі», і розводити їх у різні візуальні мови немає причини. */
.tb-card-tags { margin-left: auto; display: flex; align-items: center; gap: 4px; min-width: 0; }
.tb-card-tag { font-size: 10.5px; font-weight: 700; color: var(--info); background: var(--info-bg);
               border-radius: var(--r-full); padding: 1px 7px; max-width: 110px;
               overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tb-card-tag.is-prio { color: var(--neg); background: var(--neg-bg); flex: none; }
/* На вже червоній (простроченій) картці блідий чип зливається з фоном — інвертуємо. */
.tb-card.is-late .tb-card-tag.is-prio { background: var(--neg); color: var(--neg-bg); }

/* ── Файли задачі ────────────────────────────────────────────────────────── */
.tc-files { display: flex; flex-direction: column; gap: 7px; }
.tc-file { display: flex; align-items: center; gap: 11px; padding: 8px 10px;
           border: 1px solid var(--br-default); border-radius: var(--r-md);
           background: var(--bg-surface); }
.tc-file:hover { border-color: var(--ac); }

/* Мініатюра: у списку вкладень «розкадровка.png» не каже нічого, а сама картинка — каже все. */
.tc-file-pic { display: flex; align-items: center; justify-content: center; flex: none;
               width: 46px; height: 46px; border-radius: var(--r-sm); overflow: hidden;
               background: var(--bg-sunken); text-decoration: none; }
.tc-file-pic img { width: 100%; height: 100%; object-fit: cover; display: block; }
.tc-file-ic { font-size: 21px; line-height: 1; }

.tc-file-b { flex: 1; min-width: 0; }
.tc-file-n { display: block; font-size: 13.5px; font-weight: 600; color: var(--fg-default);
             text-decoration: none; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.tc-file-n:hover { text-decoration: underline; }
.tc-file-m { font-size: 11.5px; color: var(--fg-subtle); margin-top: 2px; }

.tc-file-act { display: flex; align-items: center; gap: 2px; flex: none; }
.tc-file-dl { display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px;
              border-radius: var(--r-sm); color: var(--fg-muted); text-decoration: none; font-size: 15px; }
.tc-file-dl:hover { background: var(--ac-bg); color: var(--fg-strong); }

.tc-files-empty { font-size: 13px; color: var(--fg-subtle); line-height: 1.5;
                  border: 1px dashed var(--br-default); border-radius: var(--r-md); padding: 12px 13px; }

/* ── Дні розсилки нагадувань ─────────────────────────────────────────────── */
.pl-days { display: flex; gap: 6px; flex-wrap: wrap; }
.pl-day { display: inline-flex; align-items: center; justify-content: center; min-width: 44px;
          padding: 6px 10px; border: 1px solid var(--br-default); border-radius: var(--r-full);
          background: var(--bg-surface); color: var(--fg-muted); font-size: 13px; cursor: pointer;
          user-select: none; }
.pl-day input { position: absolute; opacity: 0; width: 0; height: 0; }
.pl-day.is-on { border-color: var(--ac); background: var(--ac-bg); color: var(--fg-strong); font-weight: 700; }

/* ── Зустрічі ────────────────────────────────────────────────────────────── */
/* Панель над календарем: перемикання тижнів, підпис діапазону, фільтр простору. */
.mt-bar { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-bottom: 12px; }
.mt-nav { display: inline-flex; border: 1px solid var(--br-default); border-radius: var(--r-md);
          overflow: hidden; background: var(--bg-surface); }
.mt-nav button { font: inherit; border: 0; background: transparent; color: var(--fg-muted);
                 cursor: pointer; padding: 5px 11px; font-size: 16px; line-height: 1.2; }
.mt-nav button:hover { background: var(--ac-bg); color: var(--fg-strong); }
.mt-nav-now { font-size: 12.5px !important; font-weight: 700; border-left: 1px solid var(--br-subtle) !important;
              border-right: 1px solid var(--br-subtle) !important; }
.mt-range { font-family: var(--font-head); font-size: 16px; font-weight: 700; color: var(--fg-strong); }
.mt-space { margin-left: auto; min-width: 190px; }

/* Тумблер шару зайнятості. Вимкнений — календар «голий»: лише наші зустрічі. */
.mt-toggle { display: inline-flex; align-items: center; gap: 6px; font-size: 13px;
             color: var(--fg-muted); cursor: pointer; user-select: none; }
.mt-toggle input { margin: 0; cursor: pointer; }

.mt-busy-bar { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-bottom: 10px; }
.mt-busy-bar .mt-pick { font-size: 12px; padding: 2px 8px; }
/* Обраний, але календар не читається. Не ховаємо й не прибираємо з вибору: «порожньо» і
   «не бачимо» — різні речі, і людина має розуміти, що тло за нею нічого не означає. */
.mt-busy-bar .mt-pick.is-blind { border-style: dashed; opacity: .7; }
/* Кольорова крапка = колір смуг цієї людини в сітці. Чип водночас і вибір, і легенда. */
.mt-pick-dot { width: 8px; height: 8px; border-radius: var(--r-full); flex: none;
               background: var(--slot, var(--fg-subtle)); }

/* ── Тижнева сітка ───────────────────────────────────────────────────────── */
/* Ширина колонки з годинами винесена змінною: шапка і тіло мають бути вирівняні,
   а два числа в різних місцях рано чи пізно розійдуться. */
.gc { --gc-gutter: 56px; --gc-hour: 46px; --gc-hours: 16;
      border: 1px solid var(--br-default); border-radius: var(--r-lg);
      background: var(--bg-surface); overflow: hidden; user-select: none; }

.gc-head { display: grid; grid-template-columns: var(--gc-gutter) repeat(7, 1fr);
           border-bottom: 1px solid var(--br-default); background: var(--bg-sunken); }
.gc-hcell { display: flex; align-items: baseline; justify-content: center; gap: 6px;
            padding: 7px 4px; border-left: 1px solid var(--br-subtle); }
.gc-hdow { font-size: 11.5px; font-weight: 700; color: var(--fg-subtle); text-transform: uppercase; }
.gc-hnum { font-family: var(--font-num); font-size: 17px; font-weight: 800; color: var(--fg-default); }
.gc-hmon { font-size: 11px; color: var(--fg-subtle); }
/* Вихідні — червоною назвою дня, а не колонкою: субота й неділя робочі так само, як усе інше,
   просто про них варто памʼятати, ставлячи зустріч. */
.gc-hcell.is-weekend .gc-hdow { color: var(--neg); }

/* «Сьогодні» — рамка по боках, а не заливка. Залита колонка ховала й сітку годин, і блоки;
   inset-тінь малює межу, не зсуваючи жодної колонки. */
.gc-hcell.is-today { box-shadow: inset 2px 0 0 var(--ac), inset -2px 0 0 var(--ac); }
.gc-hcell.is-today .gc-hnum { color: var(--ac); }
.gc-hcell.is-today .gc-hdow { color: var(--ac); }

/* Висота сітки фіксована й рахується з кількості годин: блоки всередині позиціонуються
   у відсотках, тож колонці потрібна конкретна висота, а не «за вмістом». */
.gc-body { display: grid; grid-template-columns: var(--gc-gutter) repeat(7, 1fr);
           height: calc(var(--gc-hours) * var(--gc-hour)); overflow: hidden; }

.gc-hours { display: flex; flex-direction: column; background: var(--bg-sunken); }
.gc-hour { flex: 1; position: relative; }
.gc-hour span { position: absolute; top: -7px; right: 7px; font-family: var(--font-num);
                font-size: 11px; color: var(--fg-subtle); }
.gc-hour:first-child span { top: 2px; }

/* Лінії годин і півгодин малює ФОН колонки, а не рамки комірок. Рамки з'їдали висоту:
   кожен піксель віднімався від місця, доступного коміркам, тож межі розʼїжджалися з
   блоками, які позиціонуються у відсотках. З фоном і ті, й ті лежать на одній сітці. */
.gc-col { position: relative; display: flex; flex-direction: column;
          border-left: 1px solid var(--br-subtle);
          background-image: linear-gradient(to bottom, var(--br-default) 1px, transparent 1px),
                            linear-gradient(to bottom, var(--br-subtle) 1px, transparent 1px);
          background-size: 100% calc(100% / var(--gc-hours)),
                           100% calc(100% / (var(--gc-hours) * 2)); }
.gc-col.is-today { box-shadow: inset 2px 0 0 var(--ac), inset -2px 0 0 var(--ac); }

/* Комірки — чиста зона протягування, без власного вигляду: крок дрібніший за лінії сітки. */
.gc-slot { flex: 1; cursor: cell; }

/* Поки щось тягнуть, блоки не перехоплюють мишу — інакше зустріч під курсором ковтала б
   події, і розтягування йшло б ривками через кілька слотів. */
.gc-body.is-picking .gc-ev,
.gc-body.is-picking .gc-now { pointer-events: none; }
/* Підсвітки при наведенні немає навмисно: півгодинна пляма під курсором зливалась із
   сусідньою зустріччю, і здавалося, що там уже щось стоїть. Виділення зʼявляється лише
   тоді, коли кнопку миші натиснули — тобто коли людина справді щось обирає. */

/* Чужа зайнятість — ПІД зустрічами: це тло, по якому шукають вільне вікно.
   Колір у кожного свій (--slot із фірмової палітри --team-N) і підпис усередині: однакові
   сірі смуги не казали, чий це блокер, а накладені напівпрозорі змішувались у брудний
   відтінок. Тому ж вони розкладені по доріжках, а не одна поверх одної.
   Прозорість робить color-mix, а не opacity: opacity погасила б і підпис теж.
   pointer-events прибрані, щоб шар не заважав протягувати новий блок. */
.gc-busy { position: absolute; z-index: 1; pointer-events: none; overflow: hidden;
           box-sizing: border-box; padding: 1px 3px;
           background: color-mix(in srgb, var(--slot, var(--fg-subtle)) 18%, transparent);
           border-left: 2px solid color-mix(in srgb, var(--slot, var(--fg-subtle)) 70%, transparent); }
.gc-busy-w { font-size: 9.5px; font-weight: 700; line-height: 1.2; white-space: nowrap;
             color: color-mix(in srgb, var(--slot, var(--fg-subtle)) 60%, var(--fg-default)); }

.gc-now { position: absolute; left: 0; right: 0; height: 2px; background: var(--neg); z-index: 3;
          pointer-events: none; }
.gc-now::before { content: ''; position: absolute; left: -3px; top: -3px; width: 8px; height: 8px;
                  border-radius: var(--r-full); background: var(--neg); }

/* Колір блоків — інформаційний (бірюзовий), а не акцентний: акцент у цій темі майже чорний,
   а його фон збігається з --bg-sunken, тож блоки зливалися б і з сіткою, і з колонкою «сьогодні».
   box-sizing тут обов'язковий: ширина задається у відсотках доріжки, а padding і смужка
   ліворуч інакше додаються ЗВЕРХУ — блок вилазить у сусідній день. */
.gc-ev { position: absolute; z-index: 2; overflow: hidden; cursor: pointer; box-sizing: border-box;
         padding: 2px 6px; border-radius: var(--r-sm);
         border-left: 3px solid var(--info); background: var(--info-bg);
         font-size: 12px; line-height: 1.3; }
.gc-ev:hover { filter: brightness(.97); }
.gc-ev.is-resizing { z-index: 5; box-shadow: 0 0 0 2px var(--info); }

/* Ручки по краях блока: тягнеш верх — рухається початок, низ — кінець. Видимі лише при
   наведенні, щоб не рябіти на кожному блоці. */
/* 5px, не більше: піврічний блок заввишки 23px, і дві товсті ручки не лишили б місця,
   куди клікнути, щоб просто відкрити зустріч. */
.gc-grip { position: absolute; left: 0; right: 0; height: 5px; cursor: ns-resize; z-index: 6; }
.gc-grip.is-top { top: 0; }
.gc-grip.is-bot { bottom: 0; }
.gc-ev:hover .gc-grip::before, .gc-ev.is-resizing .gc-grip::before {
    content: ''; position: absolute; left: 50%; transform: translateX(-50%);
    width: 26px; height: 3px; border-radius: var(--r-full); background: var(--info); }
.gc-ev:hover .gc-grip.is-top::before, .gc-ev.is-resizing .gc-grip.is-top::before { top: 1px; }
.gc-ev:hover .gc-grip.is-bot::before, .gc-ev.is-resizing .gc-grip.is-bot::before { bottom: 1px; }
.gc-ev-t { font-family: var(--font-num); font-weight: 700; color: var(--info); margin-right: 5px; }
.gc-ev-n { color: var(--fg-strong); font-weight: 600; }
.gc-ev.is-cancelled { opacity: .55; border-left-color: var(--fg-subtle); background: var(--bg-sunken); }
.gc-ev.is-cancelled .gc-ev-n { text-decoration: line-through; }
/* Зустріч, чиї запрошення не пішли, — не те саме, що звичайна: її треба відкрити й полагодити. */
.gc-ev.is-broken { border-left-color: var(--neg); background: var(--neg-bg); }
.gc-ev.is-broken .gc-ev-t { color: var(--neg); }

/* Копіювати посилання — з самого блока, без відкривання картки. Зʼявляється при наведенні,
   щоб не рябіти на кожній зустрічі, і не перехоплює мишу під час протягування (див. is-picking). */
.gc-ev-copy { position: absolute; top: 1px; right: 2px; z-index: 7; display: none;
              border: 0; background: transparent; cursor: pointer; font-size: 11px;
              line-height: 1; padding: 2px; border-radius: var(--r-sm); }
.gc-ev:hover .gc-ev-copy { display: block; }
.gc-ev-copy:hover { background: var(--bg-surface); }
.gc-body.is-picking .gc-ev-copy { display: none; }

/* Поле «місце або посилання»: поруч із ним — копіювати й відкрити. */
.mt-link { display: flex; align-items: center; gap: 6px; }
.mt-link input { flex: 1; min-width: 0; }
.mt-link button, .mt-link a { font: inherit; font-size: 12px; white-space: nowrap; flex: none;
                              border: 1px solid var(--br-default); border-radius: var(--r-sm);
                              background: var(--bg-surface); color: var(--fg-muted);
                              cursor: pointer; padding: 4px 8px; text-decoration: none; }
.mt-link button:hover, .mt-link a:hover { border-color: var(--ac); color: var(--fg-strong); }

/* Блок, який зараз обводять мишею. */
.gc-ghost { position: absolute; left: 2px; right: 2px; z-index: 4; pointer-events: none; box-sizing: border-box;
            border: 2px dashed var(--info); border-radius: var(--r-sm);
            background: var(--info-bg); display: flex; align-items: center; justify-content: center; }
.gc-ghost span { font-family: var(--font-num); font-size: 11.5px; font-weight: 700; color: var(--info); }

/* ── Підключений Google-календар у профілі ───────────────────────────────── */
.prof-gcal { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 13px; }
.prof-gcal-on { font-size: 11.5px; font-weight: 700; color: var(--pos); background: var(--pos-bg);
                border-radius: var(--r-full); padding: 2px 9px; }
.prof-gcal-on.is-broken { color: var(--neg); background: var(--neg-bg); }

/* Підтвердження зміни часу — смужка внизу календаря, а не модалка: зміна вже видно на
   блоці, лишилось відповісти, чи надсилати її запрошеним. */
.gc-confirm { display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
              padding: 9px 12px; border-top: 1px solid var(--br-default); background: var(--bg-sunken); }
.gc-confirm-t { font-weight: 700; color: var(--fg-strong); font-size: 13.5px; }
.gc-confirm-w { font-family: var(--font-num); font-size: 13px; color: var(--info); font-weight: 700; }
.gc-confirm button { font: inherit; font-size: 12.5px; font-weight: 700; cursor: pointer;
                     border: 1px solid var(--br-default); border-radius: var(--r-md);
                     background: var(--bg-surface); color: var(--fg-muted); padding: 4px 11px; }
.gc-confirm button:hover { border-color: var(--br-strong); color: var(--fg-strong); }
.gc-confirm button.is-go { margin-left: auto; border-color: var(--ac); background: var(--ac); color: var(--ac-fg); }
.gc-confirm button.is-go:hover { background: var(--ac-hover); color: var(--ac-fg); }

/* ── Пікер часу на 24 години ─────────────────────────────────────────────── */
.t24 { display: inline-flex; align-items: center; gap: 4px; }
.t24 select { width: auto; min-width: 62px; font-family: var(--font-num); }
.t24-sep { font-family: var(--font-num); font-weight: 800; color: var(--fg-subtle); }

/* Дії над збереженою зустріччю — усередині форми, бо картки-списку більше немає. */
.mt-form-act { display: flex; align-items: center; gap: 14px; font-size: 12.5px;
               padding-top: 12px; border-top: 1px solid var(--br-subtle); }
.mt-form-act button, .mt-form-act a { font: inherit; font-size: 12.5px; border: 0; padding: 0;
                                      background: transparent; color: var(--fg-muted);
                                      cursor: pointer; text-decoration: underline; }
.mt-form-act button:hover, .mt-form-act a:hover { color: var(--fg-strong); }
.mt-form-act .is-danger { color: var(--neg); }

.mt-wide { grid-column: 1 / -1; }

.mt-form { width: min(760px, calc(100vw - 32px)); }

/* Вибір запрошених */
.mt-picks { display: flex; gap: 6px; flex-wrap: wrap; }
.mt-pick { display: inline-flex; align-items: center; gap: 7px; font: inherit; font-size: 13px;
           padding: 5px 11px 5px 6px; border: 1px solid var(--br-default); border-radius: var(--r-full);
           background: var(--bg-surface); color: var(--fg-default); cursor: pointer; }
.mt-pick:hover { border-color: var(--br-strong); }
.mt-pick.is-on { border-color: var(--ac); background: var(--ac-bg); font-weight: 700; }
.mt-pick.is-off { opacity: .5; cursor: not-allowed; }
.mt-pick-no { font-size: 10.5px; color: var(--neg); }
.mt-pick .x { color: var(--fg-subtle); cursor: pointer; padding-left: 3px; }
.mt-pick .x:hover { color: var(--neg); }
.mt-extra { display: flex; gap: 8px; align-items: center; }

/* Смуга зайнятості на робочому дні */
.mt-busy { border: 1px solid var(--br-default); border-radius: var(--r-md); padding: 8px 10px;
           background: var(--bg-surface); }
.mt-busy-scale { display: flex; margin-left: 130px; font-family: var(--font-num); font-size: 10px;
                 color: var(--fg-subtle); }
.mt-busy-scale span { flex: 1; }
.mt-busy-row { display: flex; align-items: center; gap: 8px; margin-top: 5px; }
.mt-busy-who { width: 122px; flex: none; font-size: 12.5px; color: var(--fg-default);
               overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mt-busy-track { position: relative; flex: 1; height: 20px; border-radius: var(--r-sm);
                 background: var(--bg-sunken); overflow: hidden; }
.mt-busy-block { position: absolute; top: 0; height: 100%; background: var(--fg-subtle); opacity: .55; }
/* Обраний час — рамкою поверх чужих блоків: саме перетин і треба побачити. */
.mt-busy-pick { position: absolute; top: 0; height: 100%; border: 2px solid var(--ac);
                border-radius: var(--r-sm); background: rgba(0,0,0,.04); }
.mt-busy-err { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
               font-size: 11px; color: var(--neg); background: var(--neg-bg); }

.mt-free { display: flex; align-items: center; gap: 6px; flex-wrap: wrap; margin-top: 10px;
           font-size: 12.5px; color: var(--fg-muted); }
.mt-free-slot { font: inherit; font-family: var(--font-num); font-size: 12.5px; font-weight: 700;
                border: 1px solid var(--pos); color: var(--pos); background: var(--pos-bg);
                border-radius: var(--r-full); padding: 3px 11px; cursor: pointer; }
.mt-free-slot:hover { background: var(--pos); color: var(--pos-bg); }

@media (max-width: 700px) {
    .mt-busy-scale { margin-left: 0; }
    .mt-busy-who { width: 84px; }
}
