/* ═══════════════════════════════════════════════════════════════════════
   ИГРАЙ — ЕДИНЫЙ ЯЗЫК УПРАВЛЕНИЯ «ПУЛЬТ» (2026-07-27)
   Один набор токенов и состояний для кнопок, чипов, сегментов и превью.
   Раньше каждый экран изобретал свои размеры и рамки — отсюда «разрозненно».

   Проверено по чек-листу UI/UX:
   · тап-таргеты ≥44px (были сегменты по 30px — промахи пальцем)
   · иконочные кнопки имеют aria-label/title
   · состояния idle/active/disabled различимы не только цветом
   · шаг отступов кратен 4, радиусы из одной шкалы
   · анимации 120–250мс, только transform/opacity
   ═══════════════════════════════════════════════════════════════════════ */
:root {
    --ctl-h: 44px;          /* основной тап-таргет */
    --ctl-h-sm: 36px;       /* второстепенные действия */
    --ctl-r: 10px;          /* радиус */
    --ctl-cut: 8px;         /* срез угла — HUD-язык */
    --ctl-bd: var(--glass-border, rgba(255, 255, 255, 0.12));
    --ctl-bg: rgba(255, 255, 255, 0.035);
    --ctl-bg-hot: rgba(240, 160, 60, 0.14);
    --ctl-amber: var(--ds-amber, #f0a03c);
    --ctl-cyan: var(--ds-chiral, #5FB4C9);
    --ctl-danger: #e0725a;
}

/* ─── базовая кнопка пульта ─── */
.ui-btn {
    display: inline-flex; align-items: center; justify-content: center; gap: 7px;
    min-height: var(--ctl-h); padding: 0 14px;
    background: var(--ctl-bg); border: 1px solid var(--ctl-bd);
    border-radius: var(--ctl-r);
    color: var(--text-secondary);
    font-family: inherit; font-size: 12px; letter-spacing: 1.4px; text-transform: uppercase;
    cursor: pointer;
    transition: background 0.15s, border-color 0.15s, color 0.15s, transform 0.12s;
}
.ui-btn:active { transform: scale(0.97); background: rgba(255, 255, 255, 0.08); color: var(--text-primary); }
.ui-btn[disabled] { opacity: 0.4; pointer-events: none; }
.ui-btn--primary {
    color: #06080f; font-weight: 700;
    background: linear-gradient(180deg, #f5b45f, var(--ctl-amber));
    border-color: rgba(240, 160, 60, 0.8);
    box-shadow: 0 0 20px rgba(240, 160, 60, 0.25);
}
.ui-btn--danger { color: var(--ctl-danger); border-color: rgba(224, 114, 90, 0.45); background: rgba(224, 114, 90, 0.07); }
.ui-btn--cut { border-radius: 0; clip-path: polygon(var(--ctl-cut) 0, 100% 0, 100% calc(100% - var(--ctl-cut)), calc(100% - var(--ctl-cut)) 100%, 0 100%, 0 var(--ctl-cut)); }

/* ─── сегментированный переключатель ─── */
.ui-seg {
    display: flex; border: 1px solid var(--ctl-bd);
    border-radius: var(--ctl-r); overflow: hidden;
}
.ui-seg > button {
    flex: 1; min-width: 0; min-height: var(--ctl-h-sm);
    display: flex; align-items: center; justify-content: center;
    background: transparent; border: none; border-right: 1px solid var(--ctl-bd);
    color: var(--text-muted); font-family: inherit; font-size: 14px; cursor: pointer;
    transition: background 0.15s, color 0.15s;
}
.ui-seg > button:last-child { border-right: none; }
.ui-seg > button.sel { background: var(--ctl-bg-hot); color: var(--ctl-amber); box-shadow: inset 0 -2px 0 var(--ctl-amber); }
.ui-seg > button:active { background: rgba(255, 255, 255, 0.08); }

/* ═══ применение к существующим экранам (без переписывания разметки) ═══ */
/* сегменты меню раунда: были 30px — ниже нормы попадания пальцем */
/* кнопки действий раунда — единый рост */
.fs-overlay .mp-btn-ghost, .fs-overlay .mp-start { min-height: var(--ctl-h); }

/* ─── ПРЕВЬЮ-ТАЙМЕР НА ДАШБОРДЕ ───
   Компактный «экран предпросмотра»: показывает суть, тап — полный режим. */
.dash-day-card .round-pixel-dash {
    position: relative;
    padding: 10px 10px 8px;
    border: 1px solid rgba(95, 180, 201, 0.28);
    border-radius: 12px;
    background: rgba(95, 180, 201, 0.04);
    cursor: pointer;
}
/* уголки-скобки — знак «это экран» */
.dash-day-card .round-pixel-dash::before,
.dash-day-card .round-pixel-dash::after {
    content: ''; position: absolute; width: 12px; height: 12px;
    border: 1px solid var(--ctl-cyan); opacity: 0.5; pointer-events: none;
}
.dash-day-card .round-pixel-dash::before { left: 5px; top: 5px; border-right: none; border-bottom: none; }
.dash-day-card .round-pixel-dash::after { right: 5px; bottom: 5px; border-left: none; border-top: none; }
/* визуал ужимаем — это предпросмотр, а не рабочая область */
.dash-day-card .rp-stage { min-height: 0 !important; max-width: 190px; margin: 0 auto; }
.dash-day-card .round-pixel-dash.skin-terminal .rp-stage { min-height: 0 !important; }
.dash-day-card .rp-time { font-size: 34px; }
.dash-day-card .rp-task { font-size: 11px; }
.dash-day-card .rp-date { display: none; }
/* управление прячем — оно в полном режиме; на дашборде только «открыть» */
.dash-day-card .rp-actions, .dash-day-card .rp-skins { display: none; }
.dash-day-card .round-pixel-dash::after { content: ''; }
.dash-preview-hint {
    display: block; margin-top: 6px; text-align: center;
    font-size: 9px; letter-spacing: 1.2px; text-transform: uppercase;
    color: var(--ctl-cyan); opacity: 0.7;
}

/* ═══════════ ТАЙМЕР-ГЕЙДЖ И ПРИБОРНЫЕ ПОКАЗАТЕЛИ (30.07) ═══════════
   Референс: тёмная «приборная панель» — толстая дуга-герой, под ней плотные
   строки показателей с цветным ребром, распределение с легендой и график. */
.fs-gauge, .rp-gauge {
    position: absolute; inset: 0; width: 100%; height: 100%;
    transform: rotate(135deg);   /* разрыв дуги — снизу */
    overflow: visible;
}
.fs-gauge circle, .rp-gauge circle { fill: none; stroke-linecap: round; stroke-width: 13; }
.fs-gauge-track, .rp-gauge-track { stroke: rgba(255, 255, 255, 0.07); }
.fs-gauge-fill, .rp-gauge-fill {
    stroke: var(--ctl-amber);
    filter: drop-shadow(0 0 9px rgba(240, 160, 60, 0.55));
    transition: stroke-dashoffset 0.4s linear, stroke 0.3s;
}
.fs-zone.over .fs-gauge-fill { stroke: #f5b45f; filter: drop-shadow(0 0 14px rgba(245, 180, 95, 0.7)); }

/* панель управления: подписи над сегментами, кнопкам — вся ширина */
.fs-panel-head { display: flex; align-items: center; gap: 8px; }
.fs-panel-head .fs-panel-lbl { flex: 1; }
.fs-panel .fs-panel-lbl {
    flex: none; display: block;
    font-size: 8.5px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--text-muted);
}

/* легенда распределения */
.fs-legend { display: flex; flex-wrap: wrap; gap: 5px 14px; margin-bottom: 10px; }
.fs-lg { display: inline-flex; align-items: center; gap: 5px; font-size: 10.5px; color: var(--text-muted); }
.fs-lg i { width: 8px; height: 8px; border-radius: 2px; flex: none; }
.fs-lg b { color: var(--text-secondary); font-weight: 600; }

/* график раундов по дням */
.fs-chart {
    padding: 12px; border-radius: var(--ctl-r);
    background: rgba(255, 255, 255, 0.025);
}
.fs-chart-head {
    display: flex; align-items: baseline; justify-content: space-between;
    font-size: 10px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--text-muted);
    margin-bottom: 10px;
}
.fs-chart-head b { color: var(--text-secondary); font-size: 11px; }
.fs-bars { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; align-items: end; }
.fs-bar { display: flex; flex-direction: column; align-items: center; gap: 4px; }
.fs-bar-n { font-size: 9px; color: var(--text-muted); font-variant-numeric: tabular-nums; min-height: 11px; }
.fs-bar-col { width: 100%; height: 56px; display: flex; align-items: flex-end; }
.fs-bar-col > i {
    width: 100%; border-radius: 4px 4px 2px 2px;
    /* прошлые дни — тихий циан; золото зарезервировано за «сегодня/сейчас» */
    background: linear-gradient(180deg, rgba(95, 180, 201, 0.75), rgba(95, 180, 201, 0.18));
    transition: height 0.35s ease;
}
.fs-bar.now .fs-bar-col > i { background: linear-gradient(180deg, #f5d16f, var(--ctl-amber)); box-shadow: 0 0 10px rgba(240, 160, 60, 0.4); }
.fs-bar-wd { font-size: 9px; letter-spacing: 0.5px; text-transform: uppercase; color: var(--text-muted); }
.fs-bar.now .fs-bar-wd { color: var(--ctl-amber); font-weight: 700; }

/* ═══════════ УГЛОВОЙ ЯЗЫК УПРАВЛЕНИЯ (30.07, референс cyber-pomodoro) ═══════════
   Срезанные углы, тонкий контур внутренней тенью (следует за clip-path),
   яркая CTA с тёмным текстом. Ничего лишнего — форма несёт смысл. */

/* переключатель вида/фона: минимальный — глифы без коробок.
   Визуально мелкие, но тап-зона 44px за счёт отступов (норма попадания). */
.fs-iconrow { display: flex; align-items: center; gap: 2px; }
.fs-ib {
    position: relative;
    flex: 1 1 0; min-width: 32px; height: 40px;
    display: flex; align-items: center; justify-content: center;
    background: none; border: none; box-shadow: none; clip-path: none;
    color: var(--text-muted); opacity: 0.55;
    font-family: inherit; font-size: 15px; line-height: 1;
    cursor: pointer;
    transition: color 0.15s, opacity 0.15s;
}
.fs-ib:active { opacity: 1; }
.fs-ib.sel { color: var(--ctl-amber); opacity: 1; }
/* активный помечен тонкой чертой — состояние не только цветом */
.fs-ib.sel::after {
    content: ''; position: absolute; bottom: 6px; left: 50%;
    width: 14px; height: 2px; margin-left: -7px;
    background: var(--ctl-amber);
    box-shadow: 0 0 8px rgba(240, 160, 60, 0.7);
}
.fs-ib-wide { flex: 0 0 auto; min-width: 40px; opacity: 0.7; }

.fs-panel {
    border: none; box-shadow: none; background: none; clip-path: none;
    padding: 4px 2px 0;
    gap: 2px;
    border-top: 1px solid rgba(255, 255, 255, 0.06);
    margin-top: 14px;
}
.fs-panel .fs-panel-lbl { margin-top: 6px; opacity: 0.7; }
.fs-panel-head { justify-content: space-between; }

/* кнопки раунда: срез угла + тонкий контур; CTA — заливка и тёмный текст */
.fs-overlay .mp-btn-ghost {
    background: rgba(255, 255, 255, 0.025);
    border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.13);
    clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
    color: var(--text-secondary);
}
.fs-overlay .mp-btn-danger {
    color: var(--ctl-danger);
    box-shadow: inset 0 0 0 1px rgba(224, 114, 90, 0.45);
    background: rgba(224, 114, 90, 0.05);
}
.fs-overlay .mp-start {
    background: var(--ctl-amber);
    color: #06080f; font-weight: 700; letter-spacing: 2px;
    border: none;
    clip-path: polygon(0 0, calc(100% - 16px) 0, 100% 16px, 100% 100%, 16px 100%, 0 calc(100% - 16px));
    box-shadow: 0 0 26px rgba(240, 160, 60, 0.28);
}
.fs-overlay .mp-start:active { background: #f5b45f; }

/* показатели: только цифра, подпись и дельта — без рамок и толстых рёбер */
.fs-stats-grid {
    position: relative;
    display: grid; grid-template-columns: 1fr 1fr;
    margin-bottom: 14px;
}
.fs-stat {
    display: flex; flex-direction: column; gap: 3px;
    padding: 2px 12px 10px 0;
    position: relative;
}
.fs-stat + .fs-stat { padding-left: 14px; box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.07); }
.fs-stat-num {
    font-size: 30px; font-weight: 600; line-height: 1;
    color: var(--text-primary); font-variant-numeric: tabular-nums;
}
.fs-stat-lbl {
    font-size: 9px; letter-spacing: 1.4px; text-transform: uppercase;
    color: var(--text-muted);
}
.fs-stat-sub { font-size: 10px; color: var(--text-muted); letter-spacing: 0.2px; }
.fs-stat-sub.up { color: #7DCB8E; }
.fs-stat-sub.down { color: var(--ctl-danger); }
/* тонкая светящаяся линия под блоком — как в референсе под карточкой */
.fs-stats-grid::after {
    content: ''; position: absolute; left: 0; right: 0;
    margin-top: 2px; height: 1px;
    background: linear-gradient(90deg, rgba(95, 180, 201, 0.7), transparent 70%);
    opacity: 0.45;
}

/* ═══════════ СКИН «ЗАГРУЗКА МИССИИ» (30.07) ═══════════
   Референс: терминальная загрузка — инвертированная плашка, полоса заполнения
   с курсором и диагностические строки, проявляющиеся по ходу раунда.
   Живёт поверх выбранной атмосферы (звёзды/поток/закат — как фон загрузки). */
.rp-mission {
    position: absolute; inset: 0;
    display: flex; flex-direction: column; align-items: center;
    padding: 4px 2px;
    font-family: inherit;
}
.rpm-plate {
    align-self: center;
    padding: 4px 10px;
    background: none; color: var(--text-muted);
    font-size: 9px; font-weight: 400; letter-spacing: 2.6px; text-transform: uppercase;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 6px 100%, 0 calc(100% - 6px));
}
/* акцент на имени задачи, а не на служебной плашке */
.rpm-name {
    margin-top: 7px; max-width: 94%;
    font-size: 13px; font-weight: 600; letter-spacing: 0.4px;
    color: #eaf2f5; text-align: center; text-shadow: 0 0 14px rgba(234, 242, 245, 0.25);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.rpm-bottom { margin-top: auto; width: 100%; display: flex; flex-direction: column; gap: 5px; }
.rpm-status {
    display: flex; align-items: baseline; justify-content: space-between;
    font-size: 9.5px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--text-muted);
}
.rpm-status b { color: var(--ctl-amber); font-variant-numeric: tabular-nums; font-size: 11px; }
.rpm-bar {
    position: relative; height: 16px;
    background: rgba(255, 255, 255, 0.05);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
}
.rpm-bar > i {
    display: block; height: 100%; width: 0;
    background: var(--ctl-amber);
    box-shadow: 0 0 14px rgba(240, 160, 60, 0.5);
    transition: width 0.4s linear;
}
.rpm-cursor {
    position: absolute; right: -6px; top: -1px;
    width: 3px; height: calc(100% + 2px);
    background: var(--ctl-amber);
    animation: rpmBlink 1s steps(2, start) infinite;
}
@keyframes rpmBlink { 0%, 100% { opacity: 1; } 50% { opacity: 0; } }
.rpm-diag { display: flex; flex-direction: column; align-items: flex-end; gap: 1px; }
.rpm-diag > span {
    font-size: 9px; letter-spacing: 1px; text-transform: uppercase;
    color: var(--text-muted); opacity: 0.25;
    transition: opacity 0.3s, color 0.3s;
}
.rpm-diag > span.on { opacity: 0.8; }
.rpm-diag > span.final.on { color: var(--ctl-amber); opacity: 1; text-shadow: 0 0 10px rgba(240, 160, 60, 0.5); }
@media (prefers-reduced-motion: reduce) { .rpm-cursor { animation: none; } }

/* ═══════════ МИНУТНЫЙ ДИСК ВЫБОРА ДЛИТЕЛЬНОСТИ (30.07) ═══════════
   Полный круг = 60 минут (не 12 часов, как в «отбое»): раунд на 50 минут
   занимает почти весь круг и читается, а не жмётся в узкий сектор. */
.fs-dial-wrap { display: flex; flex-direction: column; align-items: center; gap: 8px; margin: 4px 0 12px; }
.fs-dial {
    position: relative;
    width: min(240px, 62vw); aspect-ratio: 1;
    touch-action: none;                       /* палец крутит диск, а не страницу */
    cursor: grab;
}
.fs-dial.off { opacity: 0.35; pointer-events: none; }
.fs-dial svg { width: 100%; height: 100%; display: block; transform: rotate(-90deg); }
.fs-dial circle { fill: none; stroke-linecap: round; stroke-width: 16; }
.fsd-track { stroke: rgba(255, 255, 255, 0.06); }
.fsd-fill {
    stroke: var(--ctl-amber);
    filter: drop-shadow(0 0 10px rgba(240, 160, 60, 0.45));
    transition: stroke-dashoffset 0.15s linear;
}
.fsd-tick { stroke: rgba(255, 255, 255, 0.22); stroke-width: 1.5; }
.fsd-tick.major { stroke: rgba(255, 255, 255, 0.5); stroke-width: 2; }
.fsd-num {
    fill: var(--text-muted); font-size: 11px; font-family: inherit;
    text-anchor: middle; transform-box: fill-box; transform-origin: center;
    transform: rotate(90deg);                 /* компенсируем поворот svg */
}
.fsd-handle {
    position: absolute; width: 30px; height: 30px; margin: -15px 0 0 -15px;
    border-radius: 50%;
    background: var(--ctl-amber);
    box-shadow: 0 0 0 4px rgba(6, 8, 15, 0.9), 0 0 18px rgba(240, 160, 60, 0.6);
    pointer-events: none;
    transition: left 0.15s ease, top 0.15s ease;
}
.fsd-center {
    position: absolute; inset: 0;
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px;
    pointer-events: none;
}
.fsd-center b {
    font-size: 46px; font-weight: 600; line-height: 1;
    color: var(--text-primary); font-variant-numeric: tabular-nums;
}
.fsd-center span { font-size: 9.5px; letter-spacing: 1.6px; text-transform: uppercase; color: var(--text-muted); }
/* «сейчас → конец» — сразу видно, куда упрётся раунд */
.fsd-range {
    display: flex; align-items: center; gap: 10px;
    font-size: 13px; font-variant-numeric: tabular-nums; color: var(--text-secondary);
}
.fsd-range i { font-style: normal; color: var(--text-muted); }
.fsd-range .fsd-to { color: var(--ctl-amber); font-weight: 600; }
@media (prefers-reduced-motion: reduce) { .fsd-handle, .fsd-fill { transition: none; } }

/* ═══════════ СПИСОК-С-ПОИСКОМ: одна строка ищет и создаёт (30.07) ═══════════
   Было: жирные пилюли с эмодзи + отдельное поле «впиши свою». Стало: строка
   поиска сверху, под ней плоские строки; если совпадений нет — первой идёт
   строка «создать». Тип показывает глиф слева, а не эмодзи. */
.fs-search {
    display: flex; align-items: center; gap: 8px;
    padding: 0 10px; height: 40px; margin-bottom: 6px;
    background: rgba(255, 255, 255, 0.04);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
}
.fs-search > span { color: var(--text-muted); font-size: 14px; flex: none; }
.fs-search input {
    flex: 1; min-width: 0; height: 100%;
    background: none; border: none; outline: none;
    color: var(--text-primary); font-family: inherit; font-size: 13px;
}
.fs-search input::placeholder { color: var(--text-muted); opacity: 0.8; }

.fs-rows { display: flex; flex-direction: column; max-height: 268px; overflow-y: auto; }
.fs-rows-empty { padding: 10px 2px; font-size: 12px; color: var(--text-muted); }
.fs-row {
    display: flex; align-items: center; gap: 10px;
    width: 100%; min-height: 42px; padding: 6px 8px;
    background: none; border: none;
    border-bottom: 1px solid rgba(255, 255, 255, 0.045);
    color: var(--text-secondary); font-family: inherit; font-size: 13px;
    text-align: left; cursor: pointer;
    transition: color 0.12s, background 0.12s;
}
.fs-row:last-child { border-bottom: none; }
.fs-row:active { background: rgba(255, 255, 255, 0.05); }
.fs-row-g { flex: none; width: 16px; text-align: center; font-size: 12px; color: var(--text-muted); }
.fs-row-t { flex: 1; min-width: 0; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fs-row-c { flex: none; color: var(--ctl-amber); font-size: 12px; }
.fs-row.sel { color: var(--text-primary); }
.fs-row.sel .fs-row-g { color: var(--ctl-amber); }
.fs-row-new { color: var(--ctl-amber); }
.fs-row-new .fs-row-g { color: var(--ctl-amber); }

/* ═══════════ НАСТРОЙКА ВИДА — одна кнопка + всплывающее окно ═══════════ */
.fs-cfg-btn {
    position: absolute; right: 0; top: -2px;
    width: 34px; height: 34px;
    display: flex; align-items: center; justify-content: center;
    background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 6px 100%, 0 calc(100% - 6px));
    color: var(--text-muted); font-size: 14px; cursor: pointer;
}
.fs-cfg-btn:active, .fs-cfg-btn.open { color: var(--ctl-amber); box-shadow: inset 0 0 0 1px var(--ctl-amber); }
.fs-cfg-wrap { position: relative; min-height: 34px; margin-top: 12px; display: flex; align-items: center; }
.fs-cfg-left { height: 34px; min-width: 44px; opacity: 0.7; }
.fs-pop {
    position: absolute; right: 0; top: 40px; z-index: 5;
    width: min(280px, 88vw); padding: 12px;
    background: rgba(10, 14, 21, 0.97);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12), 0 12px 32px rgba(0, 0, 0, 0.6);
    clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 12px 100%, 0 calc(100% - 12px));
    display: flex; flex-direction: column; gap: 4px;
}
.fs-pop[hidden] { display: none; }

/* ═══════ статистика: график и разбивка (30.07) ═══════ */
.fs-bars { position: relative; }
.fs-avgline {
    position: absolute; left: 0; right: 0; height: 0; z-index: 1;
    border-top: 1px dashed rgba(255, 255, 255, 0.22);
    pointer-events: none; margin-bottom: 18px;
}
.fs-avgline i {
    position: absolute; right: 0; top: -12px;
    font-style: normal; font-size: 8px; letter-spacing: 0.4px;
    color: var(--text-muted); background: rgba(6, 8, 15, 0.8); padding: 0 3px;
}
.fs-bar.zero .fs-bar-n { opacity: 0.35; }
.fs-bar.best .fs-bar-col > i { box-shadow: 0 0 10px rgba(95, 180, 201, 0.35); }
.fs-bar.best .fs-bar-n { color: var(--text-secondary); font-weight: 700; }

.fs-bd-row { display: flex; align-items: center; gap: 8px; padding: 7px 0; }
.fs-bd-dot { flex: none; width: 7px; height: 7px; border-radius: 2px; }
.fs-bd-name { flex: 0 0 auto; max-width: 34%; font-size: 12px; color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.fs-bd-bar { flex: 1; min-width: 0; height: 6px; border-radius: 3px; background: rgba(255, 255, 255, 0.06); overflow: hidden; }
.fs-bd-bar > i { display: block; height: 100%; border-radius: 3px; transition: width 0.35s ease; }
.fs-bd-val { flex: none; display: flex; flex-direction: column; align-items: flex-end; line-height: 1.25; }
.fs-bd-val b { font-size: 12px; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.fs-bd-val small { font-size: 9px; color: var(--text-muted); }
.fs-bd-row.top .fs-bd-name { color: var(--text-primary); font-weight: 600; }

/* ═══════ журнал дня: секции утра/дня + телеметрия iPhone (30.07) ═══════ */
.lb-tele-phone { grid-template-columns: repeat(2, 1fr); margin-top: -6px; }
.lb-tele-phone .lb-tc b { color: var(--ctl-cyan); }
.lb-sec-dim { opacity: 0.85; }
.lb-done-row { display: flex; flex-wrap: wrap; gap: 6px 12px; }
.lb-done { font-size: 11.5px; color: var(--text-secondary); letter-spacing: 0.2px; }
.lb-jump {
    align-self: flex-start; padding: 8px 12px;
    background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    clip-path: polygon(0 0, calc(100% - 7px) 0, 100% 7px, 100% 100%, 7px 100%, 0 calc(100% - 7px));
    color: var(--text-secondary); font-family: inherit; font-size: 11.5px; cursor: pointer;
}
.lb-jump:active { color: var(--ctl-amber); box-shadow: inset 0 0 0 1px var(--ctl-amber); }
/* группы чек-листа в утре силы */
.mp-check-group {
    margin: 12px 0 5px; font-size: 9.5px; letter-spacing: 1.6px;
    text-transform: uppercase; color: var(--text-muted); opacity: 0.8;
}

/* ═══════ инлайн-журнал внутри ритуалов (30.07) ═══════
   Открыл завершение дня / утро силы — журнал уже под таймером. Живёт вне
   перерисовываемого .mp-screen, поэтому текст не теряется при тапах чек-листа. */
.pe-journal {
    width: 100%; max-width: 560px; margin: 4px auto 0; padding: 0 18px 8px;
    display: flex; flex-direction: column; gap: 8px;
}
.pe-jt {
    display: flex; align-items: center; gap: 9px; width: 100%;
    min-height: 44px; padding: 10px 12px;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.035), transparent);
    border: none; box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
    clip-path: polygon(0 0, calc(100% - 9px) 0, 100% 9px, 100% 100%, 9px 100%, 0 calc(100% - 9px));
    color: var(--text-primary); font-family: inherit; font-size: 11.5px;
    letter-spacing: 1.4px; text-transform: uppercase; text-align: left; cursor: pointer;
}
.pe-jt-i { flex: none; width: 16px; color: var(--ctl-amber, #f0a03c); font-size: 13px; }
.pe-jt-t { flex: 1; min-width: 0; }
.pe-jt[aria-expanded="true"] { box-shadow: inset 0 0 0 1px rgba(240, 160, 60, 0.35); }
.pe-jbody { display: flex; flex-direction: column; gap: 10px; }
/* шапка журнала уже несёт дату/номер записи — заголовок шита внутри не нужен */
.pe-jbody .lb-head { margin-top: 2px; }

/* идея из журнала → доска идей в Напоминаниях (30.07) */
.lb-idea-row { display: flex; gap: 8px; align-items: stretch; }
.lb-idea-row .lb-input { flex: 1; min-width: 0; }
.lb-idea-send {
    flex: none; min-height: 44px; padding: 0 14px;
    background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(240, 209, 54, 0.35);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
    color: var(--ctl-gold, #f4d136); font-family: inherit; font-size: 11.5px;
    letter-spacing: 0.6px; white-space: nowrap; cursor: pointer;
}
.lb-idea-send:active { box-shadow: inset 0 0 0 1px var(--ctl-gold, #f4d136); background: rgba(240, 209, 54, 0.08); }

/* объём вместо XP (30.07): разбор дня в шите ДЕНЬ */
.vol-rows { display: flex; flex-direction: column; gap: 2px; }
.vol-row {
    display: flex; align-items: center; justify-content: space-between; gap: 10px;
    padding: 8px 0; font-size: 12px; color: var(--text-secondary);
    box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.05);
}
.vol-row b { color: var(--text-primary); font-variant-numeric: tabular-nums; }
.vol-total { display: flex; flex-direction: column; gap: 2px; }
.vol-total { font-size: 26px; font-weight: 700; color: var(--ctl-cyan, #5FB4C9); font-variant-numeric: tabular-nums; }
.vol-total small { font-size: 10px; font-weight: 400; letter-spacing: 1.4px; text-transform: uppercase; color: var(--text-muted); }

/* объём дня в карточке ДЕНЬ (30.07) — главная цифра вместо XP */
.dash-vol { display: flex; flex-direction: column; gap: 6px; margin: 10px 0 12px; }
.dash-vol-top { display: flex; align-items: baseline; gap: 8px; }
.dv-val { font-size: 30px; font-weight: 700; line-height: 1; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.dash-vol.full .dv-val { color: var(--ctl-gold, #f4d136); }
.dv-goal { font-size: 12px; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.dv-lbl { margin-left: auto; font-size: 9.5px; letter-spacing: 1.6px; text-transform: uppercase; color: var(--text-muted); }
.dv-bar { height: 4px; background: rgba(255, 255, 255, 0.07); overflow: hidden; }
.dv-bar > i { display: block; height: 100%; background: var(--ctl-cyan, #5FB4C9); transition: width 0.4s ease; }
.dash-vol.full .dv-bar > i { background: var(--ctl-gold, #f4d136); }
.dv-parts { font-size: 11px; color: var(--text-secondary); letter-spacing: 0.3px; }
.dv-parts.dim { color: var(--text-muted); opacity: 0.7; }
.vol-goal { display: flex; align-items: center; gap: 10px; }
.vol-goal b { font-size: 18px; color: var(--text-primary); font-variant-numeric: tabular-nums; min-width: 46px; text-align: center; }
.vol-goal-btn {
    width: 44px; height: 44px; background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
    color: var(--text-secondary); font-family: inherit; font-size: 18px; cursor: pointer;
}
.vol-goal-btn:active { color: var(--ctl-cyan, #5FB4C9); box-shadow: inset 0 0 0 1px var(--ctl-cyan, #5FB4C9); }
.vol-goal-hint { font-size: 10px; letter-spacing: 1px; text-transform: uppercase; color: var(--text-muted); }

/* ═══════ СТАТЫ → ОБЪЁМ (30.07) ═══════
   Часы опыта: герой-счётчик, плитки, кривая по месяцам, направления,
   плотность дня, рекорды. Язык тот же, что у пульта: без рамок, cut-углы. */
.vol-hero { display: flex; flex-direction: column; gap: 6px; padding: 6px 0 14px; }
.vh-num { font-size: 46px; font-weight: 700; line-height: 1; color: var(--ctl-cyan, #5FB4C9); font-variant-numeric: tabular-nums; }
.vh-num span { font-size: 18px; margin-left: 4px; color: var(--text-muted); }
.vh-lbl { font-size: 10px; letter-spacing: 1.8px; text-transform: uppercase; color: var(--text-muted); }
.vh-bar { height: 3px; background: rgba(255, 255, 255, 0.07); margin-top: 6px; overflow: hidden; }
.vh-bar > i { display: block; height: 100%; background: var(--ctl-gold, #f4d136); transition: width 0.5s ease; }
.vh-next { font-size: 11px; color: var(--text-secondary); }

.vol-tiles { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px; background: rgba(255, 255, 255, 0.07); margin-bottom: 16px; }
.vt { display: flex; flex-direction: column; gap: 3px; padding: 12px 10px; background: var(--bg, #06080f); }
.vt-val { font-size: 19px; font-weight: 700; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.vt-val small { font-size: 11px; color: var(--text-muted); font-weight: 400; }
.vt-lbl { font-size: 9px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--text-muted); }
.vt.accent .vt-val { color: var(--ctl-cyan, #5FB4C9); }

.vol-block { margin-bottom: 20px; }
.vol-h { display: flex; align-items: baseline; gap: 8px; margin-bottom: 10px; font-size: 10px; letter-spacing: 1.8px; text-transform: uppercase; color: var(--text-secondary); }
.vol-h-meta { margin-left: auto; font-size: 9px; letter-spacing: 0.8px; text-transform: none; color: var(--text-muted); }

.vm-cols { display: flex; align-items: flex-end; gap: 2px; height: 108px; }
.vm-col { flex: 1; display: flex; flex-direction: column; justify-content: flex-end; gap: 4px; min-width: 0; height: 100%; }
.vm-barzone { flex: 1; display: flex; align-items: flex-end; }
.vm-bar { width: 100%; background: linear-gradient(180deg, var(--ctl-cyan, #5FB4C9), rgba(95, 180, 201, 0.25)); }
.vm-lbl { height: 10px; font-size: 8px; color: var(--text-muted); text-align: center; white-space: nowrap; }

.vv-row { display: flex; align-items: center; gap: 8px; padding: 7px 0; }
.vv-dot { flex: none; width: 7px; height: 7px; border-radius: 2px; }
.vv-name { flex: 0 0 auto; max-width: 32%; font-size: 12px; color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.vv-bar { flex: 1; min-width: 0; height: 6px; background: rgba(255, 255, 255, 0.06); overflow: hidden; }
.vv-bar > i { display: block; height: 100%; transition: width 0.4s ease; }
.vv-val { flex: none; display: flex; flex-direction: column; align-items: flex-end; line-height: 1.25; }
.vv-val b { font-size: 12px; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.vv-val small { font-size: 9px; color: var(--text-muted); }

.vd-row { display: flex; align-items: center; gap: 12px; }
.vd-num { font-size: 30px; font-weight: 700; color: var(--ctl-amber, #f0a03c); font-variant-numeric: tabular-nums; }
.vd-num small { font-size: 14px; color: var(--text-muted); }
.vd-bar { flex: 1; height: 6px; background: rgba(255, 255, 255, 0.06); overflow: hidden; }
.vd-bar > i { display: block; height: 100%; background: var(--ctl-amber, #f0a03c); }
.vd-note { margin-top: 6px; font-size: 11px; color: var(--text-muted); }

.vr-row { display: flex; align-items: center; gap: 10px; padding: 9px 0; box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.05); }
.vr-ic { flex: none; width: 20px; text-align: center; color: var(--ctl-cyan, #5FB4C9); font-size: 13px; }
.vr-txt { flex: 1; min-width: 0; display: flex; align-items: baseline; gap: 8px; }
.vr-txt b { font-size: 15px; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.vr-txt i { font-style: normal; font-size: 11px; color: var(--text-secondary); }
.vr-sub { flex: none; font-size: 10px; color: var(--text-muted); }

/* журнал отметок миссии (30.07): дата-время каждой отметки правится */
.gm-log {
    flex: none; width: 34px; height: 34px; margin-left: 2px;
    background: none; border: none; color: var(--text-muted);
    font-family: inherit; font-size: 13px; cursor: pointer; opacity: 0.65;
}
.gm-log:active { color: var(--ctl-amber, #f0a03c); opacity: 1; }
.mk-head { display: flex; flex-direction: column; gap: 2px; margin-bottom: 4px; }
.mk-title { font-size: 13px; color: var(--text-primary); }
.mk-goal { font-size: 10px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--text-muted); }
.mk-rows { display: flex; flex-direction: column; gap: 6px; }
.mk-row { display: flex; align-items: center; gap: 8px; }
.mk-dt {
    flex: 1; min-width: 0; min-height: 44px; padding: 8px 10px;
    background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
    color: var(--text-primary); font-family: inherit; font-size: 13px;
}
.mk-del {
    flex: none; width: 44px; height: 44px; background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
    color: var(--text-muted); font-family: inherit; font-size: 14px; cursor: pointer;
}
.mk-del:active { color: #C8403A; box-shadow: inset 0 0 0 1px #C8403A; }
.mk-add { margin-top: 10px; width: auto; white-space: nowrap; }

/* цель с метрикой из баланса (30.07): линия идёт из денег, миссии — подзадачи */
.gmetric { display: flex; flex-direction: column; gap: 5px; margin: 8px 0 4px; }
.gbar-metric { height: 8px; background: rgba(255, 255, 255, 0.07); overflow: hidden; display: block; }
.gbar-metric-fill {
    height: 100%; background: linear-gradient(90deg, var(--gc, #5FB4C9), rgba(244, 209, 54, 0.9));
    transition: width 0.6s ease;
}
.gmetric-row { display: flex; align-items: baseline; gap: 8px; font-variant-numeric: tabular-nums; }
.gmetric-cur { font-size: 15px; font-weight: 700; color: var(--text-primary); }
.gmetric-left { flex: 1; text-align: center; font-size: 10.5px; color: var(--text-muted); }
.gmetric-target { font-size: 11px; color: var(--text-secondary); }
.gmetric-src { font-size: 9.5px; letter-spacing: 0.6px; color: var(--text-muted); opacity: 0.8; }

/* воронка внешнего приложения (31.07): дашборд внутри цели */
.gfun {
    margin-top: 8px; padding: 8px 9px 7px;
    border: 1px dashed rgba(255, 255, 255, 0.12); border-radius: 8px;
    background: rgba(255, 255, 255, 0.02);
    display: flex; flex-direction: column; gap: 4px;
}
.gfun-head {
    display: flex; align-items: baseline; gap: 6px;
    font-size: 9px; letter-spacing: 1.4px; text-transform: uppercase;
    color: var(--text-muted);
}
.gfun-when { margin-left: auto; letter-spacing: 0.4px; text-transform: none; opacity: 0.7; }
.gfun-row { display: flex; align-items: center; gap: 7px; font-variant-numeric: tabular-nums; }
.gfun-name { flex: 0 0 76px; font-size: 10.5px; color: var(--text-secondary); }
.gfun-track { flex: 1; height: 6px; border-radius: 3px; background: rgba(255, 255, 255, 0.06); overflow: hidden; }
.gfun-fill { height: 100%; background: var(--gc, #5FB4C9); opacity: 0.55; transition: width 0.6s ease; }
.gfun-val { flex: 0 0 34px; text-align: right; font-size: 12px; font-weight: 600; color: var(--text-primary); }
.gfun-conv { flex: 0 0 32px; text-align: right; font-size: 9.5px; color: var(--text-muted); }
.gfun-row.is-target .gfun-fill { opacity: 1; }
.gfun-row.is-target .gfun-name { color: var(--gc, #5FB4C9); font-weight: 600; }
.gfun-row.is-target .gfun-val { color: var(--gc, #5FB4C9); }
.gfun-note { margin-top: 2px; font-size: 9.5px; color: var(--text-muted); opacity: 0.85; }
.gcard-subhead {
    margin: 8px 0 2px; font-size: 9px; letter-spacing: 1.6px;
    text-transform: uppercase; color: var(--text-muted); opacity: 0.75;
}

/* ═══════ ЭКРАН РАУНДА (18.08) ═══════
   Всё «про сейчас» — один блок-монитор: визуал, таймер, задача, управление.
   Он же несёт фон со сканлайнами и заканчивается строкой кнопок. Ниже — зона
   статистики, у неё свой фон, чтобы взгляд не смешивал «сейчас» и «итоги». */
.fs-stage {
    position: relative;
    width: 100%; max-width: 560px; margin: 0 auto;
    padding: 10px 14px 12px;
    display: flex; flex-direction: column; align-items: center; gap: 8px;
    background:
        radial-gradient(120% 70% at 50% 0%, rgba(95, 180, 201, 0.06), transparent 62%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.028), rgba(0, 0, 0, 0.22));
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.07);
    clip-path: polygon(0 0, calc(100% - 14px) 0, 100% 14px, 100% 100%, 14px 100%, 0 calc(100% - 14px));
    overflow: hidden;
}
/* сетка монитора: горизонтальные и вертикальные полосы, еле заметные */
.fs-stage::before {
    content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
    background-image:
        linear-gradient(to right, rgba(120, 190, 210, 0.13) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(120, 190, 210, 0.13) 1px, transparent 1px),
        linear-gradient(to right, rgba(120, 190, 210, 0.05) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(120, 190, 210, 0.05) 1px, transparent 1px);
    background-size: 56px 56px, 56px 56px, 14px 14px, 14px 14px;
}
/* к низу сетка гаснет — блок «сейчас» не спорит со статистикой ниже */
.fs-stage::after {
    content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
    background: linear-gradient(180deg, transparent 45%, rgba(6, 8, 15, 0.75) 100%);
}
.fs-stage > * { position: relative; z-index: 1; }

/* шапка блока: название задачи + направление и теги рядом */
.fs-head-line { width: 100%; display: flex; flex-direction: column; align-items: center; gap: 5px; }
.fs-stage .fs-target {
    margin: 0; max-width: 100%;
    padding: 5px 26px 5px 10px;
    background: none; color: var(--text-primary);
    font-size: 12.5px; font-weight: 600; letter-spacing: 1.6px; line-height: 1.25;
    text-transform: uppercase; text-align: center;
    box-shadow: inset 0 -1px 0 rgba(234, 242, 245, 0.25);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
/* mission-скин несёт имя задачи в своём баре — шапку прячем, дублей нет */
.mission-head .fs-target { display: none; }
.fs-stage .fs-run-tags { margin: 0; justify-content: center; }

/* состояние под таймером — пусто в норме, «ПАУЗА» / «＋ СВЕРХ ПЛАНА» по делу */
.fs-state {
    min-height: 12px; font-size: 9.5px; letter-spacing: 2.6px;
    color: var(--ctl-amber, #f0a03c); text-transform: uppercase;
}

/* управление — ОДНА ГОРИЗОНТАЛЬНАЯ строка. Класс не .fs-bar: он уже занят
   столбиками графика статистики (flex-direction: column) — из-за этого кнопки
   и встали вертикально. */
.fs-runbar {
    width: 100%;
    display: flex; flex-direction: row; flex-wrap: nowrap;
    align-items: center; justify-content: center; gap: 8px;
    padding-top: 4px;
}
.fs-runbar-sep { flex: none; width: 1px; height: 24px; background: rgba(255, 255, 255, 0.14); }
.fs-runbar .fs-ib-act {
    width: 52px; height: 46px; flex: 0 0 auto; opacity: 1;
    display: flex; align-items: center; justify-content: center;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.09), rgba(255, 255, 255, 0.03));
    border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.22);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
    color: var(--text-primary); font-family: inherit; font-size: 17px; cursor: pointer;
}
.fs-runbar .fs-ib-act[hidden] { display: none; }
.fs-runbar .fs-ib-act:active { transform: scale(0.94); }
/* завершить — главное действие, золотом и заливкой */
.fs-runbar .fs-ib-ok {
    background: linear-gradient(180deg, rgba(244, 209, 54, 0.22), rgba(244, 209, 54, 0.07));
    box-shadow: inset 0 0 0 1px rgba(244, 209, 54, 0.75), 0 0 16px rgba(244, 209, 54, 0.12);
    color: var(--ctl-gold, #f4d136);
}
.fs-runbar .fs-ib-danger {
    box-shadow: inset 0 0 0 1px rgba(200, 64, 58, 0.5);
    color: #e0725a;
}
/* второстепенные (полный экран, настройки) — тише основных */
.fs-runbar .fs-ib-mute {
    width: 44px; height: 40px; background: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    color: var(--text-muted); font-size: 14px;
}
.fs-runbar .fs-ib-act.open { color: var(--ctl-amber, #f0a03c); box-shadow: inset 0 0 0 1px var(--ctl-amber, #f0a03c); }
/* поповер настроек — над строкой кнопок внутри блока */
.fs-stage .fs-pop { position: absolute; right: 10px; bottom: 62px; top: auto; }

/* свернуть — только значок */
.fs-min-ic { width: 34px; padding: 0; font-size: 13px; letter-spacing: 0; }

/* зона статистики под блоком */
.fs-stage .fs-plus5 {
    margin: 2px 0 0; padding: 9px 18px; min-height: 40px;
    background: none; border: none; border-radius: 0;
    box-shadow: inset 0 0 0 1px rgba(95, 180, 201, 0.45);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
    color: var(--ctl-cyan, #5FB4C9); opacity: 1;
    font-family: inherit; font-size: 11px; letter-spacing: 1.6px;
}
.fs-stage .fs-plus5:active { background: rgba(95, 180, 201, 0.12); transform: scale(0.96); }

.fs-below { width: 100%; max-width: 560px; margin: 14px auto 0; display: flex; flex-direction: column; gap: 16px; }
.fs-below .bp-records:empty { display: none; }

/* ═══════ полный экран раунда = та же раскладка, что в меню (18.08) ═══════ */
.focus-overlay {
    justify-content: center;
    padding: max(16px, env(safe-area-inset-top, 0px)) 16px max(16px, env(safe-area-inset-bottom, 0px));
    gap: 0;
}
.fo-stage { width: 100%; max-width: min(520px, 92vw); }
/* визуал — квадратная сцена с фиксированной высотой: absolute-скины внутри
   (кольцо, миссия, песок) без неё схлопывались в ноль и всё наезжало (18.08) */
.fo-stage .fo-visual {
    position: relative; width: min(78vw, 300px); height: min(78vw, 300px);
    margin: 6px auto 2px; flex: none;
}
.fo-stage .fo-visual > * { position: absolute; inset: 0; }
.fo-stage .fo-grid { display: grid; }
.fo-center {
    position: absolute; inset: 0; z-index: 2;
    display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px;
    pointer-events: none;
}
.fo-stage .fo-time { font-size: clamp(42px, 12vw, 64px); letter-spacing: 2px; line-height: 1; }
.focus-overlay.skin-terminal .fo-visual { display: block; }
.focus-overlay .fs-target { max-width: 100%; }
.fo-hint { position: static; margin-top: 10px; text-align: center; }
/* амбиент только в блоке, не на весь экран */
.amb-stage { position: absolute; top: 0; left: 0; right: 0; bottom: auto; overflow: hidden; }
.focus-overlay .amb-stage { height: 100%; }

/* ±5 — две маленькие кнопки вместо одной широкой */
.fs-adjust { display: flex; gap: 8px; justify-content: center; }
.fs-adj {
    min-width: 56px; min-height: 34px; padding: 0 12px;
    background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(95, 180, 201, 0.35);
    clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 6px 100%, 0 calc(100% - 6px));
    color: var(--ctl-cyan, #5FB4C9); font-family: inherit; font-size: 12px;
    letter-spacing: 1px; cursor: pointer;
}
.fs-adj:active { background: rgba(95, 180, 201, 0.14); transform: scale(0.95); }

/* правка идущего раунда: тап по плашке названия */
.fs-stage .fs-target { position: relative; cursor: pointer; padding-right: 30px; }
.fs-target-ed { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); font-size: 10px; opacity: 0.45; }
.fs-redit {
    width: 100%; margin-top: 4px; padding: 10px;
    display: flex; flex-direction: column; gap: 8px;
    background: rgba(10, 14, 21, 0.92);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
}
.fs-redit[hidden] { display: none; }
.fs-redit-name { width: 100%; min-height: 40px; font-size: 13px; }
.fs-redit-row { display: flex; gap: 8px; align-items: center; }
.fs-redit-row .fs-tag-input { flex: 1; min-width: 0; }


/* ═══════ уборка статистики раунда (18.08) ═══════ */
/* схлопнутые пустые часы таймлайна */
.fs-tl-gap {
    position: absolute; left: 0; right: 0;
    display: flex; align-items: center; justify-content: center;
    background: repeating-linear-gradient(135deg, transparent 0 6px, rgba(255, 255, 255, 0.025) 6px 8px);
}
.fs-tl-gap span {
    font-size: 8.5px; letter-spacing: 1.6px; text-transform: uppercase;
    color: var(--text-muted); opacity: 0.6; background: var(--bg, #06080f); padding: 0 8px;
}
/* легенда «факт/план» — отдельно от заголовка, не слипается */
.cb-subhead .fs-tl-legend {
    margin-left: 10px; font-size: 8.5px; letter-spacing: 1px;
    color: var(--text-muted); text-transform: none; opacity: 0.8;
}
/* фильтры периодов/режима — управление, а не контент: тихий один ряд */
.fs-bd-tabs { gap: 2px; margin: 2px 0 10px; }
.fs-bd-tab {
    padding: 7px 9px; min-height: 32px;
    background: none; border: none; border-radius: 0;
    color: var(--text-muted); font-size: 10.5px; letter-spacing: 0.6px;
    box-shadow: none; position: relative;
}
.fs-bd-tab.sel { background: none; color: var(--text-primary); }
.fs-bd-tab.sel::after {
    content: ''; position: absolute; left: 8px; right: 8px; bottom: 3px; height: 2px;
    background: var(--ctl-cyan, #5FB4C9);
}
.fs-bd-tabsep { width: 1px; height: 14px; background: rgba(255, 255, 255, 0.14); margin: 0 6px; flex: none; }
/* «＋ вручную» — второстепенная кнопка, не золотая */
.fs-hist-add-btn {
    background: none; border: 1px solid var(--glass-border);
    color: var(--text-secondary);
}
.fs-hist-add-btn:active { background: rgba(255, 255, 255, 0.06); }
/* воздух между блоками статистики: тонкий разделитель сверху каждого следующего */
.fs-below { gap: 0; }
.fs-below .bp-records { padding: 16px 0 4px; }
.fs-below .bp-records + .bp-records { box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06); }
.fs-below .cb-subhead { margin-top: 0; }

/* ═══════ пакет улучшений 18.08 ═══════ */
/* активная вкладка нава — линия сверху, не только цвет */
.nav-btn { position: relative; }
.nav-btn.active::after {
    content: ''; position: absolute; top: 0; left: 22%; right: 22%; height: 2px;
    background: var(--ctl-cyan, #5FB4C9);
    box-shadow: 0 0 8px rgba(95, 180, 201, 0.6);
}

/* RPE-полоска после завершения раунда */
.rpe-strip {
    position: fixed; left: 50%; bottom: calc(76px + env(safe-area-inset-bottom, 0px));
    transform: translateX(-50%); z-index: 9600;
    display: flex; align-items: center; gap: 8px;
    padding: 8px 10px;
    background: rgba(10, 14, 21, 0.97);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.14), 0 10px 30px rgba(0, 0, 0, 0.55);
    clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
    animation: rpeIn 0.25s ease;
}
.rpe-strip.out { opacity: 0; transition: opacity 0.25s; }
@keyframes rpeIn { from { opacity: 0; transform: translateX(-50%) translateY(8px); } }
.rpe-q { font-size: 9.5px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--text-muted); white-space: nowrap; }
.rpe-btns { display: flex; gap: 2px; }
.rpe-btns button {
    width: 26px; height: 34px; background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
    color: var(--text-secondary); font-family: inherit; font-size: 11px; cursor: pointer;
    font-variant-numeric: tabular-nums;
}
.rpe-btns button.mid { color: var(--ctl-amber, #f0a03c); }
.rpe-btns button.hard { color: #e0725a; }
.rpe-btns button:active { background: rgba(255, 255, 255, 0.1); }
.rpe-skip { width: 30px; height: 34px; background: none; border: none; color: var(--text-muted); font-size: 13px; cursor: pointer; }

/* профиль: неделя жизни */
.pf-week { margin-top: 2px; font-size: 10px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--text-muted); text-align: center; }
.pf-week small { opacity: 0.6; text-transform: none; letter-spacing: 0.6px; }

/* «повторить прошлый» — с 13.09 это кнопка ↺ в строке задачи (.fsp-task-rep) */

/* пустое состояние с действием */
.fs-empty-act { display: flex; align-items: center; justify-content: space-between; gap: 10px; }
.fs-empty-act .btn-mini { width: auto; white-space: nowrap; }
.dash-empty-act {
    margin-top: 8px; padding: 9px 14px; width: auto;
    background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(95, 180, 201, 0.4);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
    color: var(--ctl-cyan, #5FB4C9); font-family: inherit; font-size: 11.5px; cursor: pointer;
}


/* ═══════ шапка раунда: задача в баре загрузки (идея Стаса 18.08) ═══════ */
/* имя задачи в статусной строке mission-бара — оно и «загружается» */
.rpm-task {
    flex: 1; min-width: 0; margin-right: 10px;
    color: #eaf2f5; font-size: 10.5px; font-weight: 600; letter-spacing: 1.4px;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
    text-shadow: 0 0 12px rgba(234, 242, 245, 0.3);
    cursor: pointer;
}
.rpm-status { gap: 8px; }
/* мета: направление точкой в своём цвете + теги — тихо, без заливок */
.fs-stage .fs-run-tags, .fo-stage .fs-run-tags { gap: 10px; }
.fs-stage .fs-run-dir, .fo-stage .fs-run-dir {
    display: inline-flex; align-items: center; gap: 5px;
    padding: 0; border: none; border-radius: 0; background: none;
    font-size: 10px; letter-spacing: 1.2px; text-transform: uppercase;
    color: var(--dir-c);
}
.fs-run-dot { width: 6px; height: 6px; border-radius: 2px; background: var(--dir-c); box-shadow: 0 0 6px var(--dir-c); flex: none; }
.fs-stage .fs-run-tag, .fo-stage .fs-run-tag {
    font-size: 10px; letter-spacing: 1.2px; text-transform: uppercase;
    color: var(--text-muted);
}
/* вся мета — одна кликабельная строка (правка раунда) */
.fs-stage .fs-run-tags { cursor: pointer; }


/* ═══════ правки 18.08 (вторая волна) ═══════ */
/* мета под полосой загрузки, слева — направление точкой + теги */
.rpm-meta { display: flex; margin-top: 6px; }
.rpm-meta .fs-run-tags { justify-content: flex-start; margin: 0; gap: 10px; }
.rpm-bar, .rpm-status, .rpm-meta { cursor: pointer; }
/* в mission-скине шапка не дублирует мету */
.mission-head .fs-head-meta { display: none; }

/* плитки статистики — приборы на пульте, каждый в своём поле */
.fs-tiles {
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 1px;
    background: rgba(255, 255, 255, 0.07); margin: 8px 0 16px;
}
.fs-tile {
    position: relative; display: flex; flex-direction: column; gap: 2px;
    padding: 11px 10px 12px; background: var(--bg, #06080f); min-height: 62px;
}
.fs-tile::before {
    content: ''; position: absolute; right: 0; top: 0; width: 6px; height: 6px;
    background: linear-gradient(225deg, rgba(255, 255, 255, 0.12) 50%, transparent 50%);
}
.fs-tile-val { font-size: 20px; font-weight: 600; line-height: 1; color: var(--text-primary); font-variant-numeric: tabular-nums; }
.fs-tile-lbl { font-size: 8.5px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--text-muted); }
.fs-tile-sub { font-size: 9px; color: var(--text-muted); opacity: 0.75; }
.fs-tile.accent .fs-tile-val { color: var(--ctl-cyan, #5FB4C9); }

/* столбики недели — тонкие линии вместо толстых плашек */
.fs-bars { gap: 10px; }
.fs-bar-col { height: 46px; justify-content: center; }
.fs-bar-col > i {
    width: 3px; border-radius: 0;
    background: rgba(95, 180, 201, 0.55); box-shadow: none;
}
.fs-bar.now .fs-bar-col > i { width: 3px; background: var(--ctl-gold, #f4d136); box-shadow: 0 0 8px rgba(244, 209, 54, 0.5); }
.fs-bar.best .fs-bar-col > i { background: rgba(95, 180, 201, 0.9); box-shadow: none; }
.fs-bar.zero .fs-bar-col > i { background: rgba(255, 255, 255, 0.12); }

/* стата и направления — одна панель без внутреннего шва */
.fs-below .fs-panel > div + div { margin-top: 4px; }
.fs-panel .cb-subhead { margin-top: 0; }

/* история: лента дней + страницы */
.fs-hist-days { display: flex; gap: 3px; margin: 8px 0 10px; align-items: stretch; }
.fs-hd {
    flex: 1; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 1px;
    padding: 6px 2px; background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.07);
    clip-path: polygon(0 0, calc(100% - 5px) 0, 100% 5px, 100% 100%, 5px 100%, 0 calc(100% - 5px));
    color: var(--text-secondary); font-family: inherit; cursor: pointer;
}
.fs-hd-wd { font-size: 8px; letter-spacing: 0.8px; text-transform: uppercase; color: var(--text-muted); }
.fs-hd-n { font-size: 13px; font-variant-numeric: tabular-nums; }
.fs-hd-dot { font-size: 6px; letter-spacing: 1px; color: var(--ctl-cyan, #5FB4C9); min-height: 8px; }
.fs-hd.zero .fs-hd-dot { color: var(--text-muted); opacity: 0.4; }
.fs-hd.today .fs-hd-n { color: var(--ctl-gold, #f4d136); }
.fs-hd.sel { box-shadow: inset 0 0 0 1px var(--ctl-cyan, #5FB4C9); color: var(--text-primary); }
.fs-hd-all { flex: 0 0 42px; justify-content: center; font-size: 9.5px; letter-spacing: 1px; text-transform: uppercase; }
.fs-hist-pager { display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 10px; }
.fs-hist-pager span { font-size: 10px; letter-spacing: 1px; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.fs-hp {
    width: 40px; height: 34px; background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    clip-path: polygon(0 0, calc(100% - 6px) 0, 100% 6px, 100% 100%, 6px 100%, 0 calc(100% - 6px));
    color: var(--text-secondary); font-family: inherit; font-size: 15px; cursor: pointer;
}
.fs-hp:disabled { opacity: 0.3; cursor: default; }
.fs-hp:active:not(:disabled) { color: var(--ctl-cyan, #5FB4C9); box-shadow: inset 0 0 0 1px var(--ctl-cyan, #5FB4C9); }

/* ═══════ кнопка «фокус идёт» = сам таймер (18.08) ═══════
   Мини-блок таймера с дашборда убран — он налезал на карточку ДЕНЬ.
   Теперь кнопка и показывает время, и «загружается» полосой прогресса. */
.dash-now-act.running {
    position: relative; overflow: hidden;
    padding: 0; min-height: 52px;
    display: flex; align-items: center;
    background: rgba(95, 180, 201, 0.06);
    border-color: rgba(95, 180, 201, 0.45);
}
.dna-fill {
    position: absolute; left: 0; top: 0; bottom: 0; width: 0;
    background: linear-gradient(90deg, rgba(95, 180, 201, 0.3), rgba(95, 180, 201, 0.16));
    box-shadow: 0 0 18px rgba(95, 180, 201, 0.2);
    transition: width 0.5s linear;
}
.dash-now-act.running .dna-row {
    position: relative; z-index: 1;
    display: flex; align-items: baseline; gap: 10px; width: 100%; padding: 0 12px;
}
.dna-time { flex: none; font-size: 19px; font-weight: 700; letter-spacing: 1px; color: var(--text-primary); }
.dna-title {
    flex: 1; min-width: 0; text-align: left;
    font-size: 11px; font-weight: 400; letter-spacing: 0.8px; text-transform: none;
    color: var(--accent-light, #7CCDDF);
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}
.dna-pct { flex: none; font-size: 10px; letter-spacing: 0.6px; color: var(--text-muted); }
/* сверх плана — золото; пауза — приглушение */
.dash-now-act.running.done .dna-fill { background: linear-gradient(90deg, rgba(244, 209, 54, 0.32), rgba(244, 209, 54, 0.14)); }
.dash-now-act.running.done .dna-time { color: var(--ctl-gold, #f4d136); }
.dash-now-act.running.paused { opacity: 0.65; }
.dash-now-act.running.paused .dna-fill { animation: none; }

/* «день засчитан» — полоса во всю ширину, а не обрывок слева */
.dash-day-badge {
    display: flex; align-items: baseline; gap: 8px; width: 100%;
    margin: 8px 0 4px; padding: 7px 10px;
    background: rgba(244, 209, 54, 0.07);
    border: none; border-radius: 0;
    box-shadow: inset 0 0 0 1px rgba(244, 209, 54, 0.35);
    clip-path: polygon(0 0, calc(100% - 8px) 0, 100% 8px, 100% 100%, 8px 100%, 0 calc(100% - 8px));
    font-size: 11px; letter-spacing: 1.6px;
}
.dash-day-badge span {
    margin-left: auto; font-size: 9.5px; letter-spacing: 0.8px;
    color: var(--text-muted); text-transform: none;
}

/* mission-скин: таймер поднимаем в промежуток между плашкой «загрузка миссии»
   и строкой задачи с баром — иначе он центрируется по всей зоне и налезает
   на них (бар прижат к низу через margin-top:auto). */
.fs-zone.skin-mission .fs-center { bottom: 42%; }
.focus-overlay.skin-mission .fo-center { bottom: 40%; }
/* строке задачи и бару — воздух сверху, чтобы цифры точно не касались */
.rp-mission .rpm-bottom { margin-top: auto; padding-top: 10px; }

/* ═══════ правка на месте + единый журнал (18.08) ═══════ */
/* название задачи превращается в поле прямо на своём месте */
.fs-inline-input {
    width: 100%; max-width: 100%; min-height: 34px; padding: 5px 10px;
    background: rgba(255, 255, 255, 0.06); border: none;
    box-shadow: inset 0 0 0 1px var(--ctl-cyan, #5FB4C9);
    color: var(--text-primary); font-family: inherit; font-size: 12.5px;
    letter-spacing: 0.6px; text-align: center;
}
.rp-mission .fs-inline-input { font-size: 11px; text-align: left; }
/* мета: пустые слоты тише, чипы кликабельны */
.fs-run-dir, .fs-run-tag { background: none; border: none; font-family: inherit; cursor: pointer; padding: 3px 2px; }
.fs-run-empty { color: var(--text-muted); opacity: 0.6; }
/* выпадающий список у чипа */
.fs-run-tags { position: relative; }
.fs-chip-pop {
    position: absolute; left: 0; top: calc(100% + 6px); z-index: 20;
    width: min(300px, 84vw); max-height: 260px; overflow-y: auto;
    padding: 8px; display: flex; flex-direction: column; gap: 6px;
    background: rgba(10, 14, 21, 0.98);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.14), 0 12px 30px rgba(0, 0, 0, 0.6);
    clip-path: polygon(0 0, calc(100% - 10px) 0, 100% 10px, 100% 100%, 10px 100%, 0 calc(100% - 10px));
}
.fs-cp-rows { display: flex; flex-wrap: wrap; gap: 4px; }
.fs-cp-row {
    display: inline-flex; align-items: center; gap: 6px;
    padding: 7px 10px; min-height: 34px;
    background: none; border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.1);
    color: var(--text-secondary); font-family: inherit; font-size: 11.5px; cursor: pointer;
}
.fs-cp-row i { width: 7px; height: 7px; border-radius: 2px; }
.fs-cp-row.sel { box-shadow: inset 0 0 0 1px var(--ctl-cyan, #5FB4C9); color: var(--text-primary); }
.fs-cp-input {
    width: 100%; min-height: 36px; padding: 6px 10px;
    background: rgba(255, 255, 255, 0.05); border: none;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    color: var(--text-primary); font-family: inherit; font-size: 12px;
}

/* единый журнал: дата в шапке, внутри — направления, календарь, список */
.fs-journal { display: flex; flex-direction: column; gap: 14px; }
.fs-journal > div:empty { display: none; }
.fs-j-date { margin-left: 10px; color: var(--ctl-cyan, #5FB4C9); letter-spacing: 1px; text-transform: none; }
.fs-hist-head { display: flex; align-items: baseline; gap: 8px; }
.fs-hist-head .fs-hist-add-btn { margin-left: auto; }
/* разделитель дат в сплошном списке */
.fs-hist-sep {
    display: flex; align-items: baseline; gap: 10px;
    margin: 12px 0 4px; padding-bottom: 4px;
    box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.08);
}
.fs-hs-d { font-size: 9.5px; letter-spacing: 1.6px; text-transform: uppercase; color: var(--ctl-cyan, #5FB4C9); }
.fs-hs-n { margin-left: auto; font-size: 9.5px; color: var(--text-muted); font-variant-numeric: tabular-nums; }
.bp-rec-list .fs-hist-sep:first-child { margin-top: 0; }

/* ═══════════ ПИКЕР РАУНДА — компактная сборка (23.08) ═══════════
   Был экран на четыре прокрутки: большое кольцо, четыре пресета, три
   раскрывающиеся секции со списками и поиском, статистика во всю длину.
   Стало: та же логика в языке экрана раунда — блок-«монитор» со шкалой,
   две зоны ввода чипами и строка запуска. Списки уступили место чипам,
   статистика свёрнута (те же цифры лежат на листе ДЕНЬ). */

.fsp { display: flex; flex-direction: column; gap: 10px; width: 100%; }

/* блок-монитор: диск + пресеты, сетка и срезанные углы как на экране раунда */
.fsp-stage {
    position: relative;
    width: 100%; max-width: 560px; margin: 0 auto;
    padding: 12px 14px 14px;
    display: flex; flex-direction: column; align-items: center; gap: 10px;
    background:
        radial-gradient(120% 70% at 50% 0%, rgba(240, 160, 60, 0.05), transparent 62%),
        linear-gradient(180deg, rgba(255, 255, 255, 0.028), rgba(0, 0, 0, 0.22));
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.07);
    clip-path: polygon(0 0, calc(100% - 14px) 0, 100% 14px, 100% 100%, 14px 100%, 0 calc(100% - 14px));
    overflow: hidden;
}
.fsp-stage::before {
    content: ''; position: absolute; inset: 0; pointer-events: none; z-index: 0;
    background-image:
        linear-gradient(to right, rgba(120, 190, 210, 0.11) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(120, 190, 210, 0.11) 1px, transparent 1px),
        linear-gradient(to right, rgba(120, 190, 210, 0.045) 1px, transparent 1px),
        linear-gradient(to bottom, rgba(120, 190, 210, 0.045) 1px, transparent 1px);
    background-size: 56px 56px, 56px 56px, 14px 14px, 14px 14px;
}
.fsp-stage > * { position: relative; z-index: 1; }

/* диск ужат: 55 минут читаются и на 170px, а экран короче на треть */
.fsp-stage .fs-dial-wrap { margin: 0; gap: 6px; }
.fsp-stage .fs-dial { width: min(178px, 46vw); }
.fsp-stage .fsd-center b { font-size: 34px; }
.fsp-stage .fsd-center span { font-size: 8px; }
.fsp-stage .fs-dial circle { stroke-width: 13; }
.fsp-stage .fsd-handle { width: 24px; height: 24px; margin: -12px 0 0 -12px; }
.fsp-stage .fsd-range { font-size: 12px; }

/* пресеты — узкая полоса кнопок под диском */
.fsp-types { display: grid; grid-template-columns: repeat(4, 1fr); gap: 5px; width: 100%; }
.fsp-type {
    display: flex; flex-direction: column; align-items: center; gap: 1px;
    padding: 7px 2px 8px; min-height: 44px; cursor: pointer;
    background: rgba(255, 255, 255, 0.02); border: none;
    box-shadow: inset 0 0 0 1px var(--border-color);
    color: var(--text-secondary); font-family: inherit;
}
.fsp-type b { font-size: 15px; font-weight: 500; line-height: 1; }
.fsp-type span { font-size: 7.5px; letter-spacing: 0.6px; text-transform: uppercase; color: var(--text-muted); }
.fsp-type.sel {
    color: var(--ctl-amber, #f0a03c);
    box-shadow: inset 0 0 0 1px var(--ctl-amber, #f0a03c);
    background: rgba(240, 160, 60, 0.08);
}

/* ── конструктор раунда (13.09): без подписей ──
   Строка задачи на всю ширину: она и цель, и поиск, и своя задача. Список целей
   выпадает под ней только пока в поле курсор. Направление и теги — лентами в один
   ряд с прокруткой; что есть что, видно по форме: цветные точки и решётки. */
.fsp-ctor { display: flex; flex-direction: column; gap: 7px; }
.fsp-taskwrap { position: relative; }
.fsp-task {
    display: flex; align-items: center; gap: 6px;
    height: 46px; padding: 0 4px 0 12px;
    background: rgba(255, 255, 255, 0.04);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12);
    clip-path: polygon(0 0, calc(100% - 9px) 0, 100% 9px, 100% 100%, 9px 100%, 0 calc(100% - 9px));
    transition: box-shadow 0.15s;
}
.fsp-task.open { box-shadow: inset 0 0 0 1px var(--ctl-amber, #f0a03c); background: rgba(240, 160, 60, 0.05); }
.fsp-task-g { flex: none; width: 16px; text-align: center; color: var(--text-muted); font-size: 14px; }
.fsp-task.has .fsp-task-g { color: var(--ctl-amber, #f0a03c); }
.fsp-task input {
    flex: 1; min-width: 0; height: 100%;
    background: none; border: none; outline: none;
    color: var(--text-primary); font-family: inherit; font-size: 14px;
}
.fsp-task input::placeholder { color: var(--text-muted); opacity: 0.75; }
.fsp-task-x, .fsp-task-rep {
    flex: none; width: 38px; height: 38px; cursor: pointer;
    background: none; border: none; font-family: inherit; font-size: 17px; line-height: 1;
    color: var(--text-muted);
}
.fsp-task-rep { color: var(--ctl-cyan, #5FB4C9); font-size: 16px; }
.fsp-task-x:active, .fsp-task-rep:active { color: var(--text-primary); }
.fsp-task-x[hidden], .fsp-task-rep[hidden] { display: none; }
.fsp-drop {
    position: absolute; left: 0; right: 0; top: calc(100% + 4px); z-index: 6;
    max-height: 224px; overflow-y: auto;
    background: var(--bg-card, #161D26);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.12), 0 14px 32px rgba(0, 0, 0, 0.55);
}
.fsp-drop[hidden] { display: none; }
.fsp-drop .fs-row { min-height: 38px; padding: 5px 10px; }
.fsp-drop .fs-targets-loading { padding: 6px 10px; }

/* лента чипов + шестерёнка справа */
.fsp-row { display: flex; align-items: center; gap: 2px; }
.fsp-cfg {
    flex: none; margin-left: auto; width: 30px; height: 30px; cursor: pointer;
    background: none; border: none; color: var(--text-muted); font-size: 13px; font-family: inherit;
    opacity: 0.85;
}
.fsp-cfg:active { color: var(--ctl-amber, #f0a03c); opacity: 1; }

.fsp-chips {
    flex: 1; min-width: 0;
    display: flex; flex-wrap: nowrap; gap: 4px; align-items: center;
    overflow-x: auto; overflow-y: hidden; padding: 1px 14px 1px 1px;
    scrollbar-width: none; -webkit-overflow-scrolling: touch;
    mask-image: linear-gradient(to right, #000 calc(100% - 16px), transparent);
    -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 16px), transparent);
}
.fsp-chips::-webkit-scrollbar { display: none; }
.fsp-chip {
    flex: none;
    padding: 6px 10px; min-height: 32px; cursor: pointer;
    background: none; border: none; font-family: inherit; font-size: 11.5px;
    color: var(--text-secondary);
    box-shadow: inset 0 0 0 1px var(--border-color);
    white-space: nowrap;
}
/* направление — цветная точка перед именем; «без» — пустая */
.fsp-chip.dir i {
    display: inline-block; width: 7px; height: 7px; border-radius: 50%;
    margin-right: 6px; vertical-align: 1px;
    background: var(--chip-c, var(--text-muted)); opacity: 0.6;
}
.fsp-chip.dir i.off { background: none; box-shadow: inset 0 0 0 1px var(--text-muted); }
.fsp-chip.dir.sel i { opacity: 1; box-shadow: 0 0 7px var(--chip-c, transparent); }
.fsp-chip.dir.sel i.off { box-shadow: inset 0 0 0 1px var(--ctl-amber, #f0a03c); }
.fsp-chip:active { background: rgba(255, 255, 255, 0.04); }
.fsp-chip.sel {
    color: var(--chip-c, var(--ctl-amber, #f0a03c));
    box-shadow: inset 0 0 0 1px var(--chip-c, var(--ctl-amber, #f0a03c));
    background: rgba(240, 160, 60, 0.07);
}
.fsp-chip.tag.sel { color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); background: rgba(95, 180, 201, 0.08); }
.fsp-chip.add { color: var(--ctl-amber, #f0a03c); padding: 7px 12px; }
.fsp-taginp { display: inline-flex; align-items: center; }
.fsp-taginp input {
    width: 130px; min-height: 32px; padding: 6px 9px;
    background: rgba(240, 160, 60, 0.06); border: none;
    box-shadow: inset 0 0 0 1px var(--ctl-amber, #f0a03c);
    color: var(--text-primary); font-family: inherit; font-size: 12px; outline: none;
}

/* строка запуска: старт занимает всё, «вручную» — иконкой рядом */
.fsp-go { display: flex; gap: 6px; margin-top: 2px; }
.fsp-start {
    flex: 1; min-height: 52px; cursor: pointer;
    background: var(--ctl-amber, #f0a03c); color: #06080f; border: none;
    font-family: inherit; font-size: 14px; letter-spacing: 2px; font-weight: 600;
    clip-path: polygon(0 0, calc(100% - 12px) 0, 100% 12px, 100% 100%, 12px 100%, 0 calc(100% - 12px));
}
.fsp-start:active { filter: brightness(1.12); }
.fsp-manual {
    width: 52px; min-height: 52px; cursor: pointer;
    background: none; border: none; font-family: inherit; font-size: 15px;
    color: var(--text-muted);
    box-shadow: inset 0 0 0 1px var(--border-color);
}
.fsp-manual:active { color: var(--ctl-amber, #f0a03c); box-shadow: inset 0 0 0 1px var(--ctl-amber, #f0a03c); }

/* сворачиваемая статистика */
.fsp-fold {
    width: 100%; display: flex; align-items: center; gap: 8px;
    padding: 10px 4px; min-height: 40px; cursor: pointer;
    background: none; border: none; font-family: inherit;
    font-size: 9.5px; letter-spacing: 1.8px; text-transform: uppercase;
    color: var(--text-muted);
}
.fsp-fold b { margin-left: auto; color: var(--ctl-amber, #f0a03c); font-size: 13px; font-weight: 400; }
.fsp-fold.open { color: var(--text-secondary); }
/* итог дня прямо в заголовке — свёрнутая панель всё равно отвечает «сколько сегодня» */
.fsp-fold em { font-style: normal; text-transform: none; letter-spacing: 0.3px; font-size: 11px; color: var(--text-secondary); }
.fsp-fold.open em { opacity: 0.55; }

/* журнал вкладками (13.09): список | направления | календарь — один блок за раз */
.fs-jtabs { margin: 0 0 6px; box-shadow: inset 0 -1px 0 rgba(255, 255, 255, 0.07); }
.fs-jtabs .fs-bd-tab { flex: 1; text-align: center; padding: 8px 4px; }
.fs-journal > div[hidden] { display: none; }
.fs-chart-foot { margin: 10px 0 0; padding-top: 8px; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06); }
/* цифры у графика — строчными, капс тут кричит */
.fs-chart-head b { text-transform: none; letter-spacing: 0.3px; }

/* ручная форма использует те же чипы — раскладываем их рядами и там */
.fs-dirs, .fs-tagchips { display: flex; flex-wrap: wrap; gap: 5px; }

/* ═════════ экраны блоков ленты (15.09.2026): шапка с зарядом, карточки, чипы, тумблеры ═════════ */
.blk-head { display: flex; flex-direction: column; gap: 8px; margin-bottom: 14px; }
.charge-cells.big { gap: 4px; margin: 0; }
.charge-cells.big i { height: 7px; border-radius: 2px; }
.blk-status { font-size: 10.5px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--text-muted); }
.blk-two { display: grid; grid-template-columns: 1fr 1fr; gap: 8px; margin-bottom: 14px; }
.blk-card {
    display: flex; flex-direction: column; gap: 3px; text-align: left; cursor: pointer;
    padding: 10px 12px; border: 1px solid var(--glass-border); border-radius: 8px;
    background: rgba(255,255,255,.03); color: var(--text-primary); font-family: inherit;
}
.blk-card-t { font-size: 9.5px; letter-spacing: 1.4px; text-transform: uppercase; color: var(--text-muted); }
.blk-card b { font-size: 14px; font-weight: 500; }
.blk-card small { font-size: 10px; color: var(--text-muted); }
.blk-card.done { border-color: rgba(125,203,142,.45); }
.blk-card.done b { color: var(--v-system, #7DCB8E); }
button.blk-card:active { border-color: var(--accent); }
.blk-done-line { font-size: 12px; color: var(--text-secondary); margin-bottom: 10px; }
.blk-done-line b { color: var(--accent); font-weight: 500; }
.blk-chips { display: flex; flex-wrap: wrap; gap: 6px; }
.blk-chip {
    padding: 7px 11px; min-height: 34px; cursor: pointer; font-family: inherit; font-size: 12px;
    background: rgba(255,255,255,.03); border: 1px solid var(--glass-border); border-radius: 7px; color: var(--text-secondary);
}
.blk-chip.sel { color: var(--accent); border-color: var(--accent); background: rgba(240,178,68,.1); }
.blk-hint { font-size: 11px; color: var(--text-muted); margin: 8px 0; }
.blk-hint b { color: var(--text-secondary); font-weight: 500; }
.blk-em { font-style: normal; color: var(--text-muted); opacity: .7; margin-left: 6px; text-transform: none; letter-spacing: .3px; }
.blk-deed {
    width: 100%; display: flex; align-items: center; gap: 12px; text-align: left; cursor: pointer;
    padding: 12px 14px; margin-bottom: 12px; border: 1px solid var(--accent); border-radius: 10px;
    background: rgba(240,178,68,.07); color: var(--text-primary); font-family: inherit;
}
.blk-deed-l { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.blk-deed-l b { font-size: 16px; font-weight: 500; color: var(--accent); }
.blk-deed-l small { font-size: 10px; color: var(--text-muted); }
.blk-deed-b { font-size: 10.5px; letter-spacing: 1.2px; text-transform: uppercase; color: var(--accent); white-space: nowrap; }
.blk-deed.done { border-color: rgba(125,203,142,.5); background: rgba(125,203,142,.08); }
.blk-deed.done .blk-deed-l b, .blk-deed.done .blk-deed-b { color: var(--v-system, #7DCB8E); }
.blk-links { display: flex; gap: 14px; justify-content: center; margin-top: 10px; }
.blk-link { background: none; border: none; font-family: inherit; font-size: 11.5px; color: var(--text-muted); cursor: pointer; padding: 6px 0; }
.blk-link:active { color: var(--accent); }
.blk-sets { display: flex; flex-direction: column; }
.blk-set { display: flex; align-items: center; gap: 8px; padding: 8px 0; border-bottom: 1px solid var(--glass-border); }
.blk-set:last-child { border-bottom: none; }
.blk-set.off { opacity: .45; }
.blk-set-n { flex: 1; min-width: 0; font-size: 12.5px; color: var(--text-primary); display: flex; flex-direction: column; }
.blk-set-n small { font-size: 10px; color: var(--text-muted); }
.blk-t { width: 74px; padding: 5px 6px; font-size: 11.5px; }
.blk-sw { width: 32px; height: 18px; border-radius: 9px; background: rgba(255,255,255,.1); border: none; position: relative; cursor: pointer; flex: none; padding: 0; }
.blk-sw::after { content: ''; position: absolute; top: 2px; left: 2px; width: 14px; height: 14px; border-radius: 50%; background: var(--text-muted); transition: left .15s; }
.blk-sw.on { background: rgba(240,178,68,.35); }
.blk-sw.on::after { left: 16px; background: var(--accent); }

/* ═════════ шиты разделов (15.09.2026): плитки-цифры, строки, подписи ═════════ */
.tk-kv { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; margin-bottom: 12px; }
.tk-kv.two { grid-template-columns: 1fr 1fr; }
.tk-k { display: flex; flex-direction: column; gap: 2px; padding: 9px 10px; border: 1px solid var(--glass-border); border-radius: 8px; background: rgba(255,255,255,.03); min-width: 0; }
.tk-k b { font-size: 17px; font-weight: 500; color: var(--text-primary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tk-k b.neg { color: #e0574f; }
.tk-k small { font-size: 9.5px; letter-spacing: 1px; text-transform: uppercase; color: var(--text-muted); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.tk-lbl { display: flex; justify-content: space-between; align-items: baseline; gap: 8px; margin: 12px 0 6px; }
.tk-lbl .lbl { font-size: 9.5px; letter-spacing: 1.6px; text-transform: uppercase; color: var(--text-muted); white-space: nowrap; }
.tk-lbl em { font-style: normal; font-size: 10.5px; color: var(--text-muted); text-align: right; }
.tk-rows { display: flex; flex-direction: column; margin-top: 6px; }
.tk-r {
    display: flex; align-items: center; gap: 10px; padding: 8px 0; width: 100%;
    border-bottom: 1px solid var(--glass-border); font-size: 12.5px; color: var(--text-secondary);
    background: none; border-left: none; border-right: none; border-top: none; font-family: inherit; text-align: left;
}
button.tk-r { cursor: pointer; }
.tk-r:last-child { border-bottom: none; }
.tk-r.on { color: var(--text-primary); }
.tk-r .tk-n { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 1px; }
.tk-r .tk-n small { font-size: 10.5px; color: var(--text-muted); }
.tk-r .tk-bar { flex: 0 0 90px; }
.tk-r b { color: var(--text-primary); font-weight: 500; white-space: nowrap; display: inline-flex; align-items: center; gap: 6px; }
.tk-r em { font-style: normal; color: var(--text-muted); font-size: 11px; min-width: 40px; text-align: right; }
.tk-dot { width: 7px; height: 7px; border-radius: 2px; flex: none; }
.tk-focus { padding: 10px 12px; border-left: 2px solid var(--accent); background: rgba(240,178,68,.07); border-radius: 0 6px 6px 0; font-size: 12.5px; line-height: 1.45; color: var(--text-primary); margin: 4px 0 12px; }
.tk-focus b { color: var(--accent); font-weight: 500; }
.tk-focus small { display: block; color: var(--text-muted); margin-top: 4px; font-size: 10.5px; }
.tk-commits { font-size: 11.5px; color: var(--text-muted); line-height: 1.5; }
.tk-commits div::before { content: '• '; color: var(--accent); }
.tk-months { display: flex; align-items: flex-end; gap: 5px; height: 60px; }
.tk-m { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 3px; height: 100%; justify-content: flex-end; }
.tk-m i { width: 100%; display: flex; gap: 1px; align-items: flex-end; flex: 1; }
.tk-m i b { flex: 1; display: block; border-radius: 1px 1px 0 0; min-height: 1px; }
.tk-m small { font-size: 8.5px; color: var(--text-muted); text-transform: uppercase; letter-spacing: .6px; }
#sheet .dwk { border: none; padding: 0; margin: 8px 0; background: none; }
