/* CSS-переменные — единый источник цветов и фонов. См. docs/UI_DECISIONS.md. */
:root {
    --color-text-primary: #1a1a1a;
    --color-text-secondary: #5a5a5a;
    --color-text-tertiary: #8a8a8a;
    --color-text-info: #0c447c;
    --color-text-success: #0f6e56;
    --color-text-warning: #854f0b;
    --color-text-danger: #791f1f;

    --color-background-primary: #ffffff;
    --color-background-secondary: #f5f4f0;
    --color-background-info: #e6f1fb;
    --color-background-danger: #fde8e8;

    --color-border-tertiary: rgba(0, 0, 0, 0.1);
    --color-border-info: #378add;
    --color-border-danger: #e24b4a;
}

/* Reset */
*,
*::before,
*::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

html, body {
    height: 100%;
}

body {
    font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
    font-size: 14px;
    line-height: 1.45;
    color: var(--color-text-primary);
    background: var(--color-background-primary);
    display: grid;
    grid-template-columns: 240px 1fr;
    min-height: 100vh;
}

/* Свёрнутый сайдбар: прячем колонку, контент на всю ширину. */
html.sidebar-collapsed body {
    grid-template-columns: 1fr;
}

html.sidebar-collapsed .sidebar {
    display: none;
}

a {
    color: inherit;
    text-decoration: none;
}

button {
    font: inherit;
    color: inherit;
    background: none;
    border: none;
    cursor: pointer;
}

h1 { font-size: 22px; font-weight: 500; }
h2 { font-size: 18px; font-weight: 500; }
h3 { font-size: 16px; font-weight: 500; }

/* ============================================================
   Сайдбар
   ============================================================ */
.sidebar {
    border-right: 0.5px solid var(--color-border-tertiary);
    padding: 14px;
    display: flex;
    flex-direction: column;
    gap: 14px;
    position: sticky;
    top: 0;
    height: 100vh;
    overflow-y: auto;       /* длинное дерево скроллится, сайдбар остаётся в виду */
}

/* ── Верхний ряд вкладок сайдбара ── */
.sidebar-tabs {
    display: flex;
    align-items: center;
    gap: 4px;
}

.sidebar-tab {
    flex: 1;
    padding: 5px 8px;
    font-size: 13px;
    color: var(--color-text-secondary);
    border-radius: 6px;
    text-align: center;
}

.sidebar-tab:hover {
    background: var(--color-background-secondary);
}

html[data-sidebar-tab="menu"] .sidebar-tab[data-tab="menu"],
html[data-sidebar-tab="projects"] .sidebar-tab[data-tab="projects"] {
    background: var(--color-background-secondary);
    color: var(--color-text-primary);
    font-weight: 600;
}

.sidebar-collapse {
    flex-shrink: 0;
    color: var(--color-text-tertiary);
    padding: 4px 8px;
    border-radius: 6px;
    font-size: 14px;
    line-height: 1;
}

.sidebar-collapse:hover {
    background: var(--color-background-secondary);
    color: var(--color-text-primary);
}

/* Панели вкладок: видна одна, выбор — по атрибуту на <html> (без мигания). */
.sidebar-panel[data-panel="projects"] {
    display: none;
}

html[data-sidebar-tab="projects"] .sidebar-panel[data-panel="menu"] {
    display: none;
}

html[data-sidebar-tab="projects"] .sidebar-panel[data-panel="projects"] {
    display: block;
}

/* Кнопка вернуть свёрнутый сайдбар. */
.sidebar-reopen {
    display: none;
    position: fixed;
    top: 12px;
    left: 10px;
    z-index: 200;
    padding: 4px 9px;
    font-size: 14px;
    line-height: 1;
    color: var(--color-text-secondary);
    background: var(--color-background-primary);
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    cursor: pointer;
}

html.sidebar-collapsed .sidebar-reopen {
    display: block;
}

.sidebar-section {
    display: flex;
    flex-direction: column;
    gap: 1px;
}

.sidebar-label {
    font-size: 11px;
    color: var(--color-text-tertiary);
    padding: 4px 8px;
}

.sidebar-item {
    display: block;
    padding: 6px 8px;
    font-size: 14px;
    color: var(--color-text-secondary);
    border-radius: 6px;
}

.sidebar-item:hover {
    background: var(--color-background-secondary);
}

.sidebar-item.active {
    background: var(--color-background-secondary);
    color: var(--color-text-primary);
}

.sidebar-item.priority {
    border-left: 2px solid var(--color-text-primary);
    background: var(--color-background-secondary);
    color: var(--color-text-primary);
    padding-left: 6px;
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

.sidebar-separator {
    height: 1px;
    margin: 8px 0;
    background: var(--color-border-tertiary);
}

.sidebar-add {
    color: var(--color-text-tertiary);
    font-size: 13px;
    margin-top: 4px;
}

/* ============================================================
   Основная область
   ============================================================ */
.main {
    padding: 32px;
    overflow-x: auto;
}

.container {
    max-width: 960px;
    margin: 0 auto;
    display: flex;
    flex-direction: column;
    gap: 28px;
}

.container-wide {
    max-width: 1100px;
}

/* ============================================================
   Верхний блок: таблица 90 лет + правая колонка
   ============================================================ */
.top-grid {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 32px;
    align-items: stretch;       /* правая колонка вытягивается по высоте таблицы */
}

.life-block {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.life-title {
    font-size: 11px;
    color: var(--color-text-tertiary);
}

#life-grid {
    display: flex;
    flex-direction: column;
    gap: 4px;
    position: relative;
}

#life-grid {
    position: relative;
}

.life-decade {
    display: grid;
    grid-template-columns: 18px 1fr;
    gap: 6px;
    align-items: start;      /* метка года напротив начала декады */
    margin-bottom: 3px;
    margin-left: -24px;      /* метки уходят за левый край контейнера */
}

.life-year-label {
    font-size: 10px;
    color: var(--color-text-tertiary);
    text-align: right;
    line-height: 1;
    font-variant-numeric: tabular-nums;
    padding-top: 1px;
}

.life-decade-weeks {
    display: grid;
    grid-template-columns: repeat(52, 4.5px);
    grid-template-rows: repeat(10, 4.5px);
    gap: 1px;
}

.week {
    width: 4.5px;
    height: 4.5px;
    border-radius: 1px;
    background: var(--color-background-secondary);
}

.week.past {
    background: var(--color-text-secondary);
}

.week.current {
    background: var(--color-border-info);
}

.week.future-near {
    background: var(--color-background-secondary);
}

.week.future-far {
    background: transparent;
    box-shadow: inset 0 0 0 0.5px var(--color-border-tertiary);
}

.avg-life-line {
    position: absolute;
    left: 0;
    height: 1px;
    background: var(--color-border-danger);
    pointer-events: none;
}

.life-caption {
    font-size: 12px;
    color: var(--color-text-tertiary);
    text-align: right;        /* прижата к правому краю таблицы */
    margin-top: -2px;         /* ближе к нижнему краю сетки */
}

/* Клетка с событием — белая точка в центре. */
.week.event::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 2px;
    height: 2px;
    background: #fff;
    border-radius: 50%;
    transform: translate(-50%, -50%);
    pointer-events: none;
}

.week {
    position: relative;
}

/* Секция «Значимые события». */
.life-events-list {
    list-style: none;
    padding: 0;
    margin: 0 0 10px;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.life-event {
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    background: var(--color-background-primary);
    overflow: hidden;
}

.life-event[open] {
    border-color: var(--color-text-secondary);
}

.life-event-summary {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding: 8px 12px;
    cursor: pointer;
    font-size: 13px;
    list-style: none;
    user-select: none;
}

.life-event-summary::-webkit-details-marker {
    display: none;
}

.life-event-summary:hover {
    background: var(--color-background-secondary);
}

.life-event-title {
    flex: 1;
    color: var(--color-text-primary);
}

.life-event-cat {
    color: var(--color-text-tertiary);
    font-size: 11px;
    padding: 1px 6px;
    border-radius: 4px;
    background: var(--color-background-secondary);
}

.life-event-date {
    color: var(--color-text-tertiary);
    font-variant-numeric: tabular-nums;
    flex: 0 0 auto;
    font-size: 11px;
}

.life-event-body {
    padding: 12px;
    border-top: 0.5px solid var(--color-border-tertiary);
    background: var(--color-background-secondary);
}

.life-event-form textarea {
    width: 100%;
    padding: 8px 10px;
    font-family: inherit;
    font-size: 13px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 4px;
    resize: vertical;
    background: var(--color-background-primary);
}

.life-event-form textarea:focus {
    outline: none;
    border-color: var(--color-border-info);
}

.life-event-actions {
    justify-content: space-between;
}

.life-tooltip {
    position: absolute;
    pointer-events: none;
    background: var(--color-text-primary);
    color: var(--color-background-primary);
    font-size: 11px;
    padding: 3px 6px;
    border-radius: 4px;
    white-space: nowrap;
    z-index: 10;
}

.right-column {
    display: flex;
    flex-direction: column;
    gap: 22px;
    min-width: 0;
    padding-top: 22px;
    /* padding-bottom не нужен — высота .now-priorities-list прибита JS-ом */
}

.right-column .now-block {
    display: grid;
    grid-template-rows: auto 1fr;     /* now-header (auto) + priorities-list (заполняет остаток) */
    min-height: 0;
}

.right-column .now-block .now-priorities-list {
    display: grid;
    grid-template-rows: repeat(3, 1fr);
    gap: 10px;
    min-height: 0;
}

.right-column .now-priority-item {
    /* item — это grid-row из priorities-list. Высота row = 1fr (равные доли). */
    min-height: 0;
}

/* ============================================================
   Карточки в правой колонке
   ============================================================ */
.card {
    background: var(--color-background-secondary);
    border-radius: 8px;
    padding: 10px 14px;
}

.card-label {
    font-size: 11px;
    color: var(--color-text-tertiary);
    margin-bottom: 4px;
}

.card-value {
    font-size: 16px;
    font-weight: 500;
}

.card-sub {
    font-size: 13px;
    color: var(--color-text-secondary);
    margin-top: 2px;
}

.priority-card {
    border-left: 2px solid var(--color-text-primary);
}

.priority-card.empty {
    border-left-color: var(--color-text-tertiary);
}

.card-edit-btn {
    align-self: flex-start;
    margin-top: 10px;
    padding: 4px 10px;
    background: transparent;
    color: var(--color-text-tertiary);
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font-size: 12px;
    cursor: pointer;
}

.card-edit-btn:hover {
    background: var(--color-background-secondary);
    color: var(--color-text-secondary);
}

.card-empty {
    font-size: 16px;
    font-weight: 500;
    color: var(--color-text-tertiary);
    font-style: italic;
}

/* Виджет «Дельта недели» на главной. */
.weekly-delta-section {
    /* nothing special — наследует .section */
}

.weekly-delta-list {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.delta-row {
    display: grid;
    grid-template-columns: 1fr auto auto;
    align-items: baseline;
    gap: 16px;
    padding: 6px 12px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font-size: 13px;
}

.delta-label {
    color: var(--color-text-primary);
}

.delta-value {
    font-weight: 600;
    font-variant-numeric: tabular-nums;
    color: var(--color-text-secondary);
}

.delta-value.good {
    color: var(--color-text-success);
}

.delta-value.warn {
    color: var(--color-text-warning);
}

.delta-comparison {
    color: var(--color-text-tertiary);
    font-size: 12px;
    font-variant-numeric: tabular-nums;
    min-width: 140px;
    text-align: right;
}

/* Страница «Итоги» — сетка карточек со статами. */
.summary-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
    gap: 12px;
}

.summary-card {
    padding: 14px 16px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    background: var(--color-background-primary);
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.summary-card-wide {
    grid-column: span 2;
}

.summary-label {
    font-size: 11px;
    color: var(--color-text-tertiary);
}

.summary-value {
    font-size: 28px;
    font-weight: 500;
    color: var(--color-text-primary);
    font-variant-numeric: tabular-nums;
}

.summary-sub {
    font-size: 12px;
    color: var(--color-text-secondary);
}

.stale-metrics-banner {
    margin: 8px 0 14px;
    padding: 8px 14px;
    border-left: 3px solid var(--color-border-info);
    background: var(--color-background-info);
    color: var(--color-text-primary);
    font-size: 13px;
    border-radius: 4px;
}

.stale-metric-days {
    color: var(--color-text-tertiary);
    font-variant-numeric: tabular-nums;
}

.empty-state {
    padding: 16px 18px;
    border: 0.5px dashed var(--color-border-tertiary);
    border-radius: 8px;
    font-size: 13px;
    color: var(--color-text-tertiary);
    background: var(--color-background-primary);
}

.question-card {
    background: #fdf6ea;
    border-top: 2px solid var(--color-text-tertiary);
    border-radius: 12px;
    border-top-left-radius: 0;
    border-top-right-radius: 0;
}

.card-question-text {
    font-size: 14px;
    font-weight: 500;
    margin-bottom: 6px;
}

.question-input {
    width: 100%;
    border: none;
    background: transparent;
    resize: none;
    height: 40px;
    min-height: 36px;
    font: inherit;
    color: var(--color-text-primary);
    outline: none;
}

.question-input::placeholder {
    color: var(--color-text-tertiary);
}

.question-answer-saved {
    font-size: 14px;
    color: var(--color-text-primary);
    white-space: pre-wrap;
    padding: 4px 0;
}

/* ============================================================
   Секции (Метрики, Дела)
   ============================================================ */
.section-header {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 12px;
}

.section-header h2 {
    margin: 0;
}

.section-header-aside {
    font-size: 12px;
    color: var(--color-text-tertiary);
}

/* ============================================================
   Метрики
   ============================================================ */
.metrics-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 12px;
}

.metric-card {
    background: var(--color-background-secondary);
    border-radius: 12px;
    padding: 12px 14px;
    display: flex;
    flex-direction: column;
    gap: 2px;
    border-top: 2px solid var(--color-border-info);
    border-top-left-radius: 0;
    border-top-right-radius: 0;
}

.metric-card.constant {
    border-top-color: var(--color-text-tertiary);
}

.metric-label {
    font-size: 11px;
    color: var(--color-text-info);
    margin-bottom: 2px;
}

.metric-card.constant .metric-label {
    color: var(--color-text-tertiary);
}

.metric-name {
    font-size: 13px;
    color: var(--color-text-secondary);
}

.metric-value {
    font-size: 22px;
    font-weight: 500;
    margin: 2px 0;
}

.metric-status {
    font-size: 12px;
}

.metric-status.good { color: var(--color-text-success); }
.metric-status.warn { color: var(--color-text-warning); }
.metric-status.bad { color: var(--color-text-danger); }

/* ============================================================
   Список дел
   ============================================================ */
.task-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.task {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 10px;
    align-items: start;
    padding: 10px 12px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    background: var(--color-background-primary);
}

.task input[type="checkbox"] {
    margin-top: 3px;
    cursor: pointer;
}

.task.overdue {
    border-color: var(--color-border-danger);
}

.task.done {
    opacity: 0.55;
}

.task.done .task-title {
    text-decoration: line-through;
}

.task-title {
    font-size: 14px;
}

.task-meta {
    font-size: 12px;
    color: var(--color-text-tertiary);
    margin-top: 2px;
}

.task-meta.overdue {
    color: var(--color-text-danger);
}

.task-badge {
    display: inline-block;
    padding: 1px 6px;
    border-radius: 4px;
    font-size: 11px;
    background: var(--color-background-info);
    color: var(--color-text-info);
    margin-left: 6px;
    vertical-align: 1px;
}

.task-badge.archived-badge {
    background: var(--color-background-secondary);
    color: var(--color-text-tertiary);
}

.sidebar-archive {
    margin-top: 6px;
}

.sidebar-archive summary {
    font-size: 11px;
    color: var(--color-text-tertiary);
    cursor: pointer;
    padding: 4px 10px;
    list-style: none;
    user-select: none;
}

.sidebar-archive summary::-webkit-details-marker {
    display: none;
}

.sidebar-archive summary::before {
    content: "▸ ";
    font-size: 10px;
}

.sidebar-archive[open] summary::before {
    content: "▾ ";
}

.sidebar-item.sidebar-archived {
    color: var(--color-text-tertiary);
}

.task-add {
    align-self: flex-start;
    margin-top: 6px;
    padding: 6px 10px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font-size: 13px;
    color: var(--color-text-secondary);
}

.task-add:hover {
    background: var(--color-background-secondary);
}

/* ============================================================
   Страница /metrics
   ============================================================ */

.metric-add-block,
.task-add-block {
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    margin: 12px 0 16px;
    background: var(--color-background-primary);
}

.metric-add-block[hidden],
.task-add-block[hidden] {
    display: none;
}

.radio-hint {
    color: var(--color-text-tertiary);
    font-size: 11px;
    margin-left: 2px;
}

.secondary-btn {
    align-self: flex-start;
    padding: 8px 14px;
    background: var(--color-background-primary);
    color: var(--color-text-secondary);
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
}

.secondary-btn:hover {
    background: var(--color-background-secondary);
}

.metric-add-form,
.task-add-form {
    padding: 16px;
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.form-row {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.form-row[hidden] {
    display: none;
}

/* Подпись поля — над инпутом, кроме .radio (там подпись справа от чекбокса). */
.metric-add-form .form-row > label:not(.radio),
.task-add-form .form-row > label:not(.radio),
.metric-edit-form .form-row > label:not(.radio),
.priority-card-edit .form-row > label:not(.radio),
.life-event-form .form-row > label:not(.radio) {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.form-row-inline {
    flex-direction: row;
    align-items: flex-end;
    gap: 16px;
    flex-wrap: wrap;
}

.form-row-inline > label {
    flex: 0 1 auto;
    min-width: 140px;
}

.form-row-inline .form-label {
    flex: 0 0 auto;
}

.form-label {
    font-size: 11px;
    color: var(--color-text-tertiary);
}

/* Ряд с кнопками формы — Добавить + отмена в одной строке. */
.form-actions {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 8px;
    margin-top: 4px;
}

.metric-add-form input[type="text"],
.metric-add-form input[type="number"],
.metric-add-form input[type="date"],
.metric-add-form select,
.metric-edit-form input[type="text"],
.metric-edit-form input[type="number"],
.metric-edit-form input[type="date"],
.metric-edit-form select,
.task-add-form input[type="text"],
.task-add-form input[type="number"],
.task-add-form input[type="date"],
.task-add-form select,
.task-add-form textarea,
.priority-card-edit input[type="text"],
.priority-card-edit select,
.life-event-form input[type="text"],
.life-event-form input[type="date"] {
    padding: 6px 8px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font: inherit;
    color: var(--color-text-primary);
    background: var(--color-background-primary);
    width: 100%;
    max-width: 320px;
}

.task-add-form textarea {
    max-width: 100%;
    resize: vertical;
}

.metric-add-form input:focus,
.metric-add-form select:focus,
.metric-edit-form input:focus,
.metric-edit-form select:focus,
.task-add-form input:focus,
.task-add-form select:focus,
.priority-card-edit input:focus,
.priority-card-edit select:focus,
.life-event-form input:focus {
    outline: 1px solid var(--color-border-info);
    outline-offset: -1px;
}

.metric-add-form .radio,
.metric-edit-form .radio,
.task-add-form .radio {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    flex: 0 0 auto;
    flex-direction: row;
    min-width: 0;
    cursor: pointer;
}

.primary-btn {
    align-self: flex-start;
    padding: 8px 14px;
    background: var(--color-text-primary);
    color: var(--color-background-primary);
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
}

.primary-btn:hover {
    opacity: 0.85;
}

/* Кубик метрики на странице /metrics — расширяет общую `.metric-card`
   с «Сегодня». */
.metric-card-managed {
    position: relative;
}

.card-drag-handle {
    position: absolute;
    top: 6px;
    left: 8px;
    color: var(--color-text-tertiary);
    font-size: 14px;
    line-height: 1;
    cursor: grab;
    user-select: none;
    padding: 2px 4px;
    border-radius: 4px;
    opacity: 0;
    transition: opacity 0.15s ease;
}

.metric-card-managed:hover .card-drag-handle {
    opacity: 1;
}

.card-drag-handle:hover {
    color: var(--color-text-primary);
    background: var(--color-background-secondary);
}

.card-drag-handle:active {
    cursor: grabbing;
}

.card-archive-btn {
    position: absolute;
    top: 6px;
    right: 8px;
    width: 20px;
    height: 20px;
    line-height: 1;
    padding: 0;
    font-size: 18px;
    color: var(--color-text-tertiary);
    cursor: pointer;
    border-radius: 4px;
}

.card-archive-btn:hover {
    color: var(--color-text-danger);
    background: var(--color-background-primary);
}

.card-delete-btn {
    position: absolute;
    top: 6px;
    right: 8px;
    width: 20px;
    height: 20px;
    line-height: 1;
    padding: 0;
    font-size: 18px;
    color: var(--color-text-danger);
    cursor: pointer;
    border-radius: 4px;
}

.card-delete-btn:hover {
    background: var(--color-background-danger);
}

.project-archive-actions {
    display: flex;
    gap: 8px;
}

.danger-btn {
    padding: 8px 14px;
    background: var(--color-background-primary);
    color: var(--color-text-danger);
    border: 0.5px solid var(--color-border-danger);
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
}

.danger-btn:hover {
    background: var(--color-background-danger);
}

.metric-value.empty {
    color: var(--color-text-tertiary);
}

.metric-card-foot {
    margin-top: 6px;
    padding-top: 6px;
    border-top: 0.5px solid var(--color-border-tertiary);
    display: flex;
    justify-content: space-between;
    gap: 8px;
    font-size: 11px;
    color: var(--color-text-tertiary);
}

.card-measure-form {
    margin-top: 8px;
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 4px;
}

.card-measure-form input[type="number"] {
    padding: 5px 7px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font: inherit;
    background: var(--color-background-primary);
    min-width: 0;
}

.card-measure-form input:focus {
    outline: 1px solid var(--color-border-info);
    outline-offset: -1px;
}

.card-measure-form button {
    padding: 5px 10px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font-size: 12px;
    color: var(--color-text-secondary);
    background: var(--color-background-primary);
    cursor: pointer;
}

.card-measure-form button:hover {
    background: var(--color-background-secondary);
}

.archive-block {
    margin-top: 24px;
    padding-top: 14px;
    border-top: 0.5px solid var(--color-border-tertiary);
}

.archive-block > summary {
    cursor: pointer;
    font-size: 13px;
    color: var(--color-text-tertiary);
    padding: 4px 0;
    margin-bottom: 8px;
}

.archived-list .metric-card-managed {
    opacity: 0.6;
}

/* ============================================================
   Горизонтальный скролл кубиков и плитка «+ добавить»
   ============================================================ */
/* На странице /metrics карточки в сетке (4 в ряд) — переиспользуем .metrics-grid. */
.metrics-grid .metric-card-managed,
.metrics-grid .metric-card-add {
    width: auto;
    min-width: 0;
}

.metric-card-clickable {
    cursor: pointer;
    display: flex;
    flex-direction: column;
    gap: 2px;
}

.metric-card-managed.selected {
    background: var(--color-background-primary);
    border-color: var(--color-text-primary);
}

.metric-card-managed.selected .metric-card-foot {
    border-top-color: var(--color-border-tertiary);
}

.metric-card-add {
    flex: 0 0 130px;
    width: 130px;
    border: 0.5px dashed var(--color-border-tertiary);
    border-radius: 12px;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    color: var(--color-text-tertiary);
    cursor: pointer;
    gap: 6px;
    padding: 16px;
}

.metric-card-add:hover {
    background: var(--color-background-secondary);
    color: var(--color-text-secondary);
    border-color: var(--color-text-tertiary);
}

.metric-card-add-icon {
    font-size: 22px;
    font-weight: 400;
    line-height: 1;
}

.metric-card-add-label {
    font-size: 12px;
    line-height: 1.3;
    text-align: center;
}

/* ============================================================
   Детальная панель метрики
   ============================================================ */
.metric-detail {
    margin-top: 16px;
    background: var(--color-background-primary);
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 12px;
    padding: 20px 22px;
}

.metric-detail-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    border-bottom: 0.5px solid var(--color-border-tertiary);
    padding-bottom: 12px;
    margin-bottom: 16px;
}

.metric-detail-name {
    font-size: 18px;
    font-weight: 500;
}

.metric-detail-sub {
    font-size: 12px;
    color: var(--color-text-tertiary);
    margin-top: 2px;
}

.metric-detail-header-actions {
    display: flex;
    gap: 4px;
}

.metric-detail-close,
.metric-detail-edit {
    font-size: 12px;
    color: var(--color-text-tertiary);
    cursor: pointer;
    padding: 4px 8px;
    border-radius: 4px;
}

.metric-detail-close:hover,
.metric-detail-edit:hover {
    background: var(--color-background-secondary);
    color: var(--color-text-primary);
}

.metric-edit-form {
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    background: var(--color-background-primary);
    padding: 16px;
    margin-bottom: 18px;
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.metric-edit-form[hidden] {
    display: none;
}

/* ============================================================
   Модальное подтверждение действий (замена браузерного confirm).
   ============================================================ */
.confirm-modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.4);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
}

.confirm-modal {
    background: var(--color-background-primary);
    border-radius: 10px;
    border: 0.5px solid var(--color-border-tertiary);
    padding: 22px 24px;
    min-width: 320px;
    max-width: 440px;
    box-shadow: 0 10px 32px rgba(0, 0, 0, 0.18);
}

.confirm-modal-text {
    font-size: 15px;
    line-height: 1.4;
    color: var(--color-text-primary);
    margin-bottom: 18px;
}

.confirm-modal-actions {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}

.confirm-modal-cancel,
.confirm-modal-yes {
    font: inherit;
    cursor: pointer;
    padding: 8px 16px;
    border-radius: 6px;
    font-size: 13px;
    border: 0.5px solid var(--color-border-tertiary);
}

.confirm-modal-cancel {
    background: var(--color-background-primary);
    color: var(--color-text-secondary);
}

.confirm-modal-cancel:hover {
    background: var(--color-background-secondary);
}

.confirm-modal-yes {
    background: var(--color-border-danger);
    color: #fff;
    border-color: var(--color-border-danger);
}

.confirm-modal-yes:hover {
    background: var(--color-text-danger);
    border-color: var(--color-text-danger);
}

/* Генерик-модалка (например, создание проекта). Визуал — как у confirm-modal. */
.modal-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.4);
    display: flex;
    align-items: center;
    justify-content: center;
    z-index: 1000;
}

.modal-overlay[hidden] {
    display: none;   /* перебиваем display:flex, иначе атрибут hidden не скрывает */
}

.modal {
    background: var(--color-background-primary);
    border-radius: 10px;
    border: 0.5px solid var(--color-border-tertiary);
    padding: 22px 24px;
    width: 440px;
    max-width: calc(100vw - 32px);
    box-shadow: 0 10px 32px rgba(0, 0, 0, 0.18);
}

.modal-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 16px;
}

.modal-header h3 {
    margin: 0;
}

.modal-close {
    font-size: 22px;
    line-height: 1;
    color: var(--color-text-tertiary);
    cursor: pointer;
    padding: 0 4px;
}

.modal-close:hover {
    color: var(--color-text-primary);
}

.metric-detail-grid {
    display: grid;
    grid-template-columns: 240px 1fr;
    gap: 24px;
    margin-bottom: 22px;
}

.detail-stats {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.detail-stat {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    font-size: 12px;
    padding: 4px 0;
    border-bottom: 0.5px solid var(--color-border-tertiary);
}

.detail-stat:last-child {
    border-bottom: 0;
}

.detail-stat-label {
    color: var(--color-text-tertiary);
}

.detail-stat-value {
    color: var(--color-text-primary);
    font-weight: 500;
    text-align: right;
}

.detail-chart {
    height: 240px;
    position: relative;
}

.detail-measure-form {
    margin: 0 0 22px;
    padding: 14px 16px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    background: var(--color-background-secondary);
    display: flex;
    align-items: flex-end;
    gap: 12px;
    flex-wrap: wrap;
}

.detail-measure-field {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.detail-measure-field.grow {
    flex: 1;
    min-width: 200px;
}

.detail-measure-field input {
    padding: 6px 8px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font: inherit;
    background: var(--color-background-primary);
    color: var(--color-text-primary);
}

.detail-measure-field input:focus {
    outline: 1px solid var(--color-border-info);
    outline-offset: -1px;
}

.detail-measure-submit {
    padding: 8px 14px;
    background: var(--color-text-primary);
    color: var(--color-background-primary);
    border-radius: 6px;
    font-size: 13px;
    cursor: pointer;
}

.detail-measure-submit:hover {
    opacity: 0.85;
}

/* ============================================================
   История замеров — таблица + режим редактирования
   ============================================================ */
.history-section {
    margin-top: 4px;
}

.history-header {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 10px;
}

.history-header h3 {
    font-size: 14px;
    font-weight: 500;
}

.edit-toggle {
    font-size: 12px;
    color: var(--color-text-tertiary);
    cursor: pointer;
    padding: 3px 6px;
    border-radius: 4px;
}

.edit-toggle:hover {
    color: var(--color-text-primary);
    background: var(--color-background-secondary);
}

.edit-toggle .when-editing { display: none; }
.history-section.edit-mode .edit-toggle .when-idle { display: none; }
.history-section.edit-mode .edit-toggle .when-editing { display: inline; }

.history-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}

.history-table th {
    text-align: left;
    color: var(--color-text-tertiary);
    font-weight: 400;
    font-size: 11px;
    border-bottom: 0.5px solid var(--color-border-tertiary);
    padding: 6px 8px;
}

.history-table td {
    padding: 8px;
    border-bottom: 0.5px solid var(--color-border-tertiary);
    vertical-align: top;
}

.history-table .change.good { color: var(--color-text-success); }
.history-table .change.warn { color: var(--color-text-warning); }
.history-table .change.neutral { color: var(--color-text-tertiary); }

.history-table .note {
    color: var(--color-text-secondary);
    font-size: 12px;
}

.history-table .row-actions-col,
.history-table .row-actions {
    display: none;
    width: 28px;
    text-align: right;
}

.history-section.edit-mode .row-actions-col,
.history-section.edit-mode .row-actions {
    display: table-cell;
}

.row-delete {
    color: var(--color-text-tertiary);
    font-size: 16px;
    line-height: 1;
    padding: 2px 6px;
    border-radius: 4px;
    cursor: pointer;
}

.row-delete:hover {
    color: var(--color-text-danger);
    background: var(--color-background-secondary);
}

/* ============================================================
   Страница «Приоритеты»
   ============================================================ */

.priority-card {
    padding: 18px 20px;
    border-radius: 12px;
    background: var(--color-background-secondary);
    margin-bottom: 14px;
    position: relative;
}

.priority-card.active {
    background: var(--color-background-info);
    border: 1.5px solid var(--color-text-primary);
}

.priority-card.archived {
    opacity: 0.75;
}

/* Грип перетаскивания приоритета (только в панели управления). Появляется
   на ховер карточки, в правом верхнем углу — слева заголовок. */
.priority-drag-handle {
    position: absolute;
    top: 10px;
    right: 12px;
    color: var(--color-text-tertiary);
    font-size: 16px;
    line-height: 1;
    cursor: grab;
    user-select: none;
    padding: 2px 4px;
    border-radius: 4px;
    opacity: 0;
    transition: opacity 0.15s ease;
}

.priority-card:hover .priority-drag-handle {
    opacity: 1;
}

.priority-drag-handle:hover {
    color: var(--color-text-primary);
    background: var(--color-background-secondary);
}

.priority-drag-handle:active {
    cursor: grabbing;
}

.priority-card-title {
    font-size: 18px;
    font-weight: 500;
    color: var(--color-text-primary);
    margin-bottom: 4px;
}

.priority-card-skill-label {
    font-size: 11px;
    color: var(--color-text-tertiary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-top: 12px;
}

.priority-card-skill {
    font-size: 14px;
    color: var(--color-text-primary);
    margin-top: 2px;
}

.priority-card-meta {
    font-size: 11px;
    color: var(--color-text-tertiary);
    margin-top: 12px;
    font-variant-numeric: tabular-nums;
}

.priority-card-metric {
    margin-top: 2px;
    font-size: 14px;
    color: var(--color-text-primary);
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    gap: 8px;
    font-variant-numeric: tabular-nums;
}

.priority-card-metric-name {
    font-weight: 500;
}

.priority-card-metric-value {
    font-weight: 600;
}

.priority-card-metric-status {
    font-size: 12px;
}

.priority-card-metric-status.good { color: var(--color-text-success); }
.priority-card-metric-status.warn { color: var(--color-text-warning); }
.priority-card-metric-status.bad  { color: var(--color-text-danger); }

.priority-card-metric-target {
    font-size: 12px;
    color: var(--color-text-tertiary);
}

.priority-card-actions {
    margin-top: 14px;
    display: flex;
    gap: 8px;
}

.priority-card-edit {
    margin-top: 4px;
}

.priority-add-slot {
    padding: 14px 20px;
    border: 0.5px dashed var(--color-border-tertiary);
    border-radius: 8px;
    font-size: 13px;
    color: var(--color-text-tertiary);
    text-align: center;
    cursor: pointer;
    margin-bottom: 14px;
}

.priority-add-slot:hover {
    background: var(--color-background-secondary);
}

.priority-add-slot.disabled {
    cursor: not-allowed;
    opacity: 0.6;
}

.secondary-btn.danger {
    color: var(--color-text-danger);
    border-color: var(--color-border-danger);
}

.secondary-btn.danger:hover {
    background: var(--color-background-secondary);
}

/* ============================================================
   Страница «Камни»
   ============================================================ */

.stones-status-section {
    margin-bottom: 22px;
}

.stones-status-header {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 10px;
}

.stones-status-title {
    font-size: 14px;
    font-weight: 600;
    color: var(--color-text-primary);
}

.stones-status-title.done {
    color: var(--color-text-tertiary);
}

.stones-status-count {
    font-size: 11px;
    color: var(--color-text-tertiary);
}

.stones-list {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.stone-row {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: 10px;
    padding: 8px 12px;
    border: 0.5px solid var(--color-text-primary);
    border-radius: 6px;
    font-size: 13px;
    background: var(--color-background-primary);
    text-decoration: none;
    color: inherit;
}

.stone-row.done {
    opacity: 0.7;
}

.stone-status-dot {
    display: inline-block;
    width: 10px;
    height: 10px;
    border-radius: 50%;
    flex-shrink: 0;
}

.stone-status-dot.waiting {
    background: #cbcbcb;
}

.stone-status-dot.in_progress {
    background: #f7c45d;
}

.stone-status-dot.done {
    background: #5cb98c;
}

.stone-row-body {
    min-width: 0;
    min-height: 44px;
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: 4px;
}

.stone-row-title {
    color: var(--color-text-primary);
    font-weight: 500;
    margin-bottom: 2px;
}

.stone-row-meta {
    font-size: 11px;
    color: var(--color-text-tertiary);
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    align-items: baseline;
}

/* Точка-разделитель между всеми элементами мета-строки кроме первого. */
.stone-row-meta > * + *::before {
    content: "·";
    color: var(--color-text-tertiary);
    margin-right: 6px;
}

.stone-priority-tag {
    color: var(--color-text-secondary);
    background: var(--color-background-secondary);
    padding: 2px 8px;
    border-radius: 4px;
}

.stone-deadline,
.stone-completed,
.stone-added,
.stone-note {
    font-variant-numeric: tabular-nums;
}

.stone-row-actions {
    display: flex;
    gap: 4px;
    flex-shrink: 0;
}

.stone-action-btn {
    background: transparent;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 4px;
    padding: 4px 8px;
    font-size: 11px;
    color: var(--color-text-secondary);
    cursor: pointer;
    font-family: inherit;
}

.stone-action-btn:hover {
    background: var(--color-background-secondary);
    color: var(--color-text-primary);
}

.stone-action-btn.primary {
    color: var(--color-text-success);
    border-color: var(--color-text-success);
}

.stone-action-btn.primary:hover {
    background: var(--color-background-secondary);
}

.stone-action-btn.danger {
    color: var(--color-text-tertiary);
    padding: 4px 7px;
}

.stone-action-btn.danger:hover {
    color: var(--color-text-danger);
    border-color: var(--color-border-danger);
}

.stone-action-btn.timer-start {
    color: var(--color-text-success);
    border-color: var(--color-text-success);
}

.stone-action-btn.timer-start:hover {
    background: var(--color-background-secondary);
}

.stone-action-btn.timer-stop {
    color: var(--color-text-warning);
    border-color: var(--color-text-warning);
}

.stone-action-btn.timer-stop:hover {
    background: var(--color-background-secondary);
}

.stone-time {
    color: var(--color-text-tertiary);
    font-variant-numeric: tabular-nums;
}

.stone-time[data-running="1"] {
    color: var(--color-text-success);
    font-weight: 500;
}

.stone-time-value {
    color: var(--color-text-primary);
    font-weight: 500;
}

.stone-time {
    text-decoration: none;
}

.stone-row-wrap {
    /* Обёртка с раскрывающимся блоком сессий снизу. */
}

.stone-sessions {
    margin-top: 6px;
    margin-bottom: 14px;
    padding: 10px 14px;
    background: var(--color-background-secondary);
    border-radius: 6px;
    border-left: 2px solid var(--color-border-tertiary);
}

.stone-note-form {
    display: flex;
    align-items: flex-start;
    gap: 8px;
    margin-top: 6px;
}

.stone-note-form textarea {
    flex: 1;
    padding: 6px 8px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 4px;
    font: inherit;
    font-size: 13px;
    background: var(--color-background-primary);
    resize: vertical;
    min-height: 36px;
}

.stone-note-form textarea:focus {
    outline: 1px solid var(--color-border-info);
    outline-offset: -1px;
}

.stone-sessions-header {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 10px;
}

.stone-sessions-title {
    font-size: 12px;
    font-weight: 600;
    color: var(--color-text-secondary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.stone-sessions-list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.stone-session-row {
    display: flex;
    gap: 12px;
    align-items: baseline;
    padding: 6px 0;
    font-size: 12px;
    color: var(--color-text-secondary);
    border-bottom: 0.5px solid var(--color-border-tertiary);
}

.stone-session-row:last-child {
    border-bottom: none;
}

.stone-session-row.active {
    color: var(--color-text-success);
}

.stone-session-when {
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}

.stone-session-duration {
    color: var(--color-text-primary);
    font-weight: 600;
}

.stone-session-note {
    color: var(--color-text-tertiary);
    font-size: 11px;
}

/* Блок документов в деталях камня */
.stone-docs-block {
    margin-top: 14px;
}

.stone-docs-list {
    list-style: none;
    padding: 0;
    margin: 8px 0;
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.stone-doc-row {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 4px 0;
    border-bottom: 0.5px solid var(--color-border-tertiary);
}

.stone-doc-row:last-child {
    border-bottom: none;
}

.stone-doc-link {
    font-size: 13px;
    color: var(--color-text-primary);
    text-decoration: none;
}

.stone-doc-link:hover {
    text-decoration: underline;
}

.stone-doc-add-form {
    display: flex;
    gap: 8px;
    align-items: center;
}

.stone-doc-hint {
    font-size: 12px;
    color: var(--color-text-tertiary);
}

/* ============================================================
   Главная: блок «Приоритеты сейчас» (правая колонка top-grid)
   ============================================================ */

.now-block {
    padding: 0;
    background: transparent;
    border: none;
    margin-bottom: 14px;
}

.now-label {
    font-size: 11px;
    color: var(--color-text-tertiary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 10px;
}

.now-header {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 12px;
}

.now-header-title {
    font-size: 18px;
    font-weight: 500;
    color: var(--color-text-primary);
}

.now-header-aside {
    font-size: 12px;
    color: var(--color-text-tertiary);
    font-variant-numeric: tabular-nums;
}

.now-priorities-list {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.now-priority-item {
    display: flex;
    flex-direction: column;
    justify-content: center;     /* контент по центру высокой карточки */
    gap: 8px;
    padding: 12px 16px;
    border: 1.5px solid var(--color-text-primary);
    border-radius: 12px;
    background: var(--color-background-info);
    text-decoration: none;
    color: inherit;
    min-width: 0;
    transition: filter 0.1s ease;
}

.now-priority-item:hover {
    filter: brightness(0.97);
}

.now-priority-head {
    display: flex;
    align-items: baseline;
    gap: 8px;
    min-width: 0;
}

.now-priority-title {
    font-size: 18px;
    font-weight: 500;
    color: var(--color-text-primary);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Бейдж проекта — таблетка с контрастом к фону карточки (иначе сливается). */
.now-priority-project {
    flex-shrink: 0;
    font-size: 11px;
    padding: 1px 8px;
    border-radius: 10px;
    background: var(--color-background-primary);
    color: var(--color-text-secondary);
    border: 0.5px solid var(--color-border-tertiary);
}

.now-priority-skill {
    font-size: 14px;
    color: var(--color-text-primary);
}

.now-priority-skill-label {
    color: var(--color-text-tertiary);
}

.now-priority-stats {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 14px;
    font-size: 12px;
    color: var(--color-text-tertiary);
    font-variant-numeric: tabular-nums;
}

.now-priority-stats b {
    color: var(--color-text-primary);
    font-weight: 600;
}

.now-empty-slot {
    display: block;
    padding: 10px 12px;
    border: 0.5px dashed var(--color-border-tertiary);
    border-radius: 6px;
    font-size: 12px;
    color: var(--color-text-tertiary);
    text-align: center;
    text-decoration: none;
    transition: background 0.1s ease;
}

.now-empty-slot:hover {
    background: var(--color-background-secondary);
}

/* ============================================================
   Главная: прогресс камней этой недели (в правой колонке)
   ============================================================ */

.week-progress-block-label {
    font-size: 11px;
    color: var(--color-text-tertiary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin-bottom: 6px;
}

/* Компактная строка прогресса под заголовком «Открытые камни». */
.week-progress-line {
    font-size: 12px;
    color: var(--color-text-tertiary);
    margin-bottom: 10px;
    font-variant-numeric: tabular-nums;
}

.week-progress-line b {
    color: var(--color-text-primary);
    font-weight: 600;
}

.week-progress {
    display: flex;
    gap: 24px;
    align-items: baseline;
    padding: 12px 16px;
    background: var(--color-background-secondary);
    border-radius: 6px;
    font-size: 13px;
    flex-wrap: wrap;
}

.week-progress-label {
    color: var(--color-text-tertiary);
}

.week-progress-val {
    font-weight: 600;
    color: var(--color-text-primary);
    font-variant-numeric: tabular-nums;
}

/* ============================================================
   Главная: открытые камни (компактный список)
   ============================================================ */

.open-stones-list {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.open-stone-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 14px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    font-size: 14px;
    text-decoration: none;
    color: inherit;
    background: var(--color-background-secondary);
}

.open-stone-row:hover {
    background: var(--color-background-secondary);
}

.open-stone-title {
    flex: 1;
    color: var(--color-text-primary);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ============================================================
   Плиточный выбор (форма добавления метрики)
   ============================================================ */

.type-tile-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    margin-top: 4px;
}

.type-tile {
    padding: 12px 14px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    cursor: pointer;
    background: var(--color-background-primary);
    user-select: none;
    transition: background 0.1s ease, border 0.1s ease;
}

.type-tile:hover {
    background: var(--color-background-secondary);
}

.type-tile.selected {
    border-left: 2px solid var(--color-text-primary);
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
    background: var(--color-background-secondary);
}

.type-tile-title {
    font-size: 14px;
    font-weight: 500;
    color: var(--color-text-primary);
    margin-bottom: 2px;
}

.type-tile-hint {
    font-size: 11px;
    color: var(--color-text-tertiary);
}

.period-hint {
    font-size: 11px;
    color: var(--color-text-tertiary);
    margin-left: 8px;
}

/* ============================================================
   Страница «Вопросы»
   ============================================================ */

.questions-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.question-row {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 10px 14px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    background: var(--color-background-primary);
}

.question-row.archived {
    opacity: 0.7;
}

.question-row-text {
    flex: 1;
    font-size: 14px;
    color: var(--color-text-primary);
}

.question-row-actions {
    display: flex;
    gap: 6px;
    flex-shrink: 0;
}

.secondary-btn.small {
    font-size: 11px;
    padding: 4px 10px;
}

.history-entries {
    display: flex;
    flex-direction: column;
    gap: 12px;
}

.history-entry {
    padding: 10px 14px;
    border-left: 2px solid var(--color-border-tertiary);
    background: var(--color-background-secondary);
    border-radius: 6px;
    border-top-left-radius: 0;
    border-bottom-left-radius: 0;
}

.history-entry-head {
    display: flex;
    gap: 12px;
    align-items: baseline;
    margin-bottom: 4px;
}

.history-entry-date {
    font-size: 11px;
    color: var(--color-text-tertiary);
    font-variant-numeric: tabular-nums;
    flex-shrink: 0;
}

.history-entry-question {
    font-size: 12px;
    color: var(--color-text-secondary);
    font-weight: 500;
}

.history-entry-answer {
    font-size: 14px;
    color: var(--color-text-primary);
    white-space: pre-wrap;
}

.history-entry-delete {
    background: transparent;
    border: none;
    color: var(--color-text-tertiary);
    cursor: pointer;
    padding: 0 6px;
    font-size: 14px;
    line-height: 1;
    border-radius: 4px;
}

.history-entry-delete:hover {
    color: var(--color-text-danger);
    background: var(--color-background-secondary);
}

/* ============================================================
   Итоги — графики и аналитика
   ============================================================ */

.chart-wrap {
    height: 220px;
    position: relative;
}

.period-switcher {
    display: flex;
    gap: 6px;
    margin-bottom: 14px;
}

.period-switch {
    padding: 4px 10px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    color: var(--color-text-secondary);
    text-decoration: none;
    font-size: 12px;
}

.period-switch:hover {
    background: var(--color-background-secondary);
}

.period-switch.active {
    background: var(--color-text-primary);
    color: var(--color-background-primary);
    border-color: var(--color-text-primary);
}

.priority-time-bars {
    display: flex;
    flex-direction: column;
    gap: 12px;
    margin-bottom: 18px;
}

.priority-time-bars.archived {
    opacity: 0.7;
}

.priority-time-group-label {
    font-size: 11px;
    color: var(--color-text-tertiary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
    margin: 8px 0 8px;
}

.priority-time-row {
    display: flex;
    flex-direction: column;
    gap: 4px;
}

.priority-time-head {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    font-size: 13px;
}

.priority-time-title {
    color: var(--color-text-primary);
    font-weight: 500;
}

.priority-time-value {
    color: var(--color-text-tertiary);
    font-variant-numeric: tabular-nums;
}

.priority-time-bar {
    height: 10px;
    background: var(--color-background-secondary);
    border-radius: 4px;
    overflow: hidden;
}

.priority-time-fill {
    height: 100%;
    background: var(--color-border-info);
    transition: width 0.3s ease;
}

/* Heatmap активности — сетка с подписями: уголок, месяцы сверху, дни слева, сетка справа. */
.heatmap-wrap {
    display: grid;
    grid-template-columns: 28px 1fr;
    grid-template-rows: 16px 1fr;
    gap: 4px;
    overflow-x: auto;
    padding-bottom: 4px;
}

.heatmap-corner {
    grid-column: 1;
    grid-row: 1;
}

.heatmap-months {
    grid-column: 2;
    grid-row: 1;
    display: grid;
    font-size: 10px;
    color: var(--color-text-tertiary);
    align-items: end;
    column-gap: 3px;
}

.heatmap-month {
    grid-row: 1;
}

.heatmap-weekdays {
    grid-column: 1;
    grid-row: 2;
    display: grid;
    grid-template-rows: repeat(7, 14px);
    gap: 3px;
    font-size: 10px;
    color: var(--color-text-tertiary);
    align-items: center;
}

.activity-heatmap {
    grid-column: 2;
    grid-row: 2;
    display: grid;
    grid-template-rows: repeat(7, 14px);
    grid-auto-columns: 14px;
    grid-auto-flow: column;
    gap: 3px;
}

.heatmap-cell {
    width: 14px;
    height: 14px;
    border-radius: 2px;
    background: var(--color-background-secondary);
}

.heatmap-cell.heatmap-l0 { background: var(--color-background-secondary); }
.heatmap-cell.heatmap-l1 { background: #c8e1ff; }
.heatmap-cell.heatmap-l2 { background: #79b8ff; }
.heatmap-cell.heatmap-l3 { background: #378add; }
.heatmap-cell.heatmap-l4 { background: #0c447c; }

.heatmap-legend {
    display: flex;
    align-items: center;
    gap: 4px;
    margin-top: 12px;
    font-size: 11px;
    color: var(--color-text-tertiary);
}

.heatmap-legend .heatmap-cell {
    width: 12px;
    height: 12px;
}

.metrics-dynamics {
    display: flex;
    flex-direction: column;
    gap: 10px;
}

.metric-dynamics-row {
    display: grid;
    grid-template-columns: 1.4fr 1.5fr 1fr 1fr;
    align-items: baseline;
    gap: 12px;
    padding: 10px 14px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    background: var(--color-background-primary);
    font-size: 13px;
}

.metric-dynamics-name {
    font-weight: 500;
    color: var(--color-text-primary);
}

.metric-dynamics-values {
    color: var(--color-text-secondary);
    font-variant-numeric: tabular-nums;
}

.metric-dynamics-arrow {
    margin: 0 6px;
    color: var(--color-text-tertiary);
}

.metric-dynamics-last {
    color: var(--color-text-primary);
    font-weight: 500;
}

.metric-dynamics-delta {
    font-weight: 600;
    font-variant-numeric: tabular-nums;
}

.metric-dynamics-delta.good { color: var(--color-text-success); }
.metric-dynamics-delta.warn { color: var(--color-text-warning); }

.metric-dynamics-pct {
    font-size: 11px;
    font-weight: 400;
}

.metric-dynamics-dates {
    font-size: 11px;
    color: var(--color-text-tertiary);
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.archived-priorities-list {
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.archived-priority-row {
    padding: 10px 14px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    opacity: 0.85;
}

.archived-priority-title {
    font-size: 14px;
    font-weight: 500;
    color: var(--color-text-primary);
    margin-bottom: 4px;
}

.archived-priority-meta {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    font-size: 12px;
    color: var(--color-text-tertiary);
}

.archived-priority-dates {
    font-variant-numeric: tabular-nums;
}

/* ============================================================
   Страница «Жизнь» — большая таблица + события сбоку
   ============================================================ */

.life-page {
    max-width: 100%;
}

.life-page-grid {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 32px;
    align-items: start;
}

.life-page-grid-block {
    min-width: 0;
}

/* Большая версия таблицы 90 лет: клетки 9×9, gap между декадами 8. */
.life-grid-big {
    position: relative;
}

.life-grid-big .life-decade {
    grid-template-columns: 28px 1fr;
    gap: 10px;
    margin-bottom: 6px;
    margin-left: 0;           /* на /life метки внутри блока, не за пределами */
}

.life-grid-big .life-year-label {
    font-size: 13px;
    padding-top: 2px;
}

.life-grid-big .life-decade-weeks {
    grid-template-columns: repeat(52, 9px);
    grid-template-rows: repeat(10, 9px);
}

.life-grid-big .week {
    width: 9px;
    height: 9px;
    border-radius: 2px;
}

/* Точка события в большой клетке — крупнее. */
.life-grid-big .week.event::after {
    width: 4px;
    height: 4px;
}

/* Шапка таблицы 90 лет: заголовок слева, счётчик прижат к правому краю сетки.
   Всё выровнено с левым краем сетки клеток (метка года 28px + gap 10px = 38px). */
.life-page-header {
    display: flex;
    align-items: baseline;
    gap: 12px;
    padding-left: 38px;
    margin-bottom: 14px;
}

.life-page-header h2 {
    margin: 0;
    font-size: 20px;
    font-weight: 500;
}

.life-page-header-aside {
    font-size: 13px;
    color: var(--color-text-tertiary);
}

.life-page-header-counter {
    margin-left: auto;
    font-size: 12px;
    color: var(--color-text-tertiary);
    font-variant-numeric: tabular-nums;
}

.life-page-legend {
    display: flex;
    justify-content: space-between;
    flex-wrap: wrap;
    row-gap: 8px;
    column-gap: 18px;
    padding-left: 38px;
    margin-top: 14px;
    font-size: 12px;
    color: var(--color-text-secondary);
}

.legend-item {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}

.legend-dot {
    width: 10px;
    height: 10px;
    border-radius: 2px;
    display: inline-block;
}

.legend-past { background: var(--color-text-secondary); }
.legend-future-near { background: var(--color-background-secondary); border: 0.5px solid var(--color-border-tertiary); }
.legend-future-far { background: transparent; border: 0.5px dashed var(--color-border-tertiary); }
.legend-event { background: var(--color-text-primary); position: relative; }
.legend-event::after {
    content: "";
    position: absolute;
    top: 50%;
    left: 50%;
    width: 4px;
    height: 4px;
    background: #fff;
    border-radius: 50%;
    transform: translate(-50%, -50%);
}

/* Блок событий справа */
.life-page-events-block {
    min-width: 0;
}

.life-events-group {
    margin-top: 18px;
}

.life-events-group-header {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin-bottom: 8px;
}

.life-events-group-title {
    font-size: 13px;
    font-weight: 600;
    color: var(--color-text-primary);
}

.life-events-group-count {
    font-size: 11px;
    color: var(--color-text-tertiary);
}

/* На узких экранах — складываем в одну колонку. */
@media (max-width: 900px) {
    .life-page-grid {
        grid-template-columns: 1fr;
    }
}

/* ============================================================
   Страница входа /login
   ============================================================ */
.login-body {
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 100vh;
    background: var(--color-background-secondary);
    margin: 0;
}

.login-card {
    background: var(--color-background-primary);
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 10px;
    padding: 30px 36px;
    width: 320px;
}

.login-title {
    margin: 0 0 18px;
    font-size: 18px;
    font-weight: 500;
    text-align: center;
}

.login-form {
    display: flex;
    flex-direction: column;
    gap: 14px;
}

.login-field {
    display: flex;
    flex-direction: column;
    gap: 6px;
}

.login-field input {
    padding: 8px 10px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font: inherit;
    color: var(--color-text-primary);
    background: var(--color-background-primary);
}

.login-field input:focus {
    outline: 1px solid var(--color-border-info);
    outline-offset: -1px;
}

.login-error {
    font-size: 12px;
    color: var(--color-text-danger);
}

/* ── Документы проекта (этап 2): дерево + редактор ── */
.docs-layout {
    display: flex;
    gap: 20px;
    align-items: flex-start;
    margin-top: 16px;
}

.docs-tree-panel {
    width: 260px;
    flex-shrink: 0;
}

.docs-tree-actions {
    display: flex;
    gap: 8px;
    margin-bottom: 10px;
}

.docs-editor-panel {
    flex: 1;
    min-width: 0;
}

/* Дерево */
/* ── Серый «стол» + белый лист редактора (страница /workspace) ── */
body.editor-surface .main {
    background: var(--color-background-secondary);
}

/* Полотно шире обычного контейнера, чтобы редактору было просторно. */
body.editor-surface .container {
    max-width: 1240px;
}

body.editor-surface .docs-editor-form {
    padding: 28px 36px;
    background: var(--color-background-primary);
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 12px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}

/* ── Дерево документов: отступы по уровням + направляющая линия ── */
.tree-children {
    margin-left: 9px;
    padding-left: 7px;
    border-left: 0.5px solid var(--color-border-tertiary);
}

.tree-folder {
    margin: 0;
}

/* Строка дерева (папка-summary или документ): метка + «⋯» по ховеру. */
.tree-row {
    display: flex;
    align-items: center;
    gap: 2px;
    position: relative;
    padding: 2px 4px;
    border-radius: 5px;
    cursor: pointer;
    list-style: none;
}

.tree-row:hover {
    background: var(--color-background-secondary);
}

.tree-row::-webkit-details-marker {
    display: none;
}

/* Метка папки/документа — обычный вес и кегль (папка НЕ тяжелее проекта). */
.tree-label {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 13px;
    color: var(--color-text-secondary);
    text-decoration: none;
}

/* Папка: шеврон ▸/▾ слева, поворачивается при раскрытии. */
.tree-folder-row::before {
    content: "▸";
    flex-shrink: 0;
    width: 12px;
    font-size: 9px;
    color: var(--color-text-tertiary);
    text-align: center;
}

.tree-folder[open] > .tree-folder-row::before {
    content: "▾";
}

/* Документ — лист: выравниваем под именем папки (на ширину шеврона). */
.tree-doc-row {
    padding-left: 16px;
}

.doc-tree-doc-link.active {
    background: var(--color-background-info);
    color: var(--color-text-primary);
    font-weight: 500;
}

.tree-menu-btn {
    opacity: 0;
    flex-shrink: 0;
    border: none;
    background: none;
    color: var(--color-text-tertiary);
    cursor: pointer;
    padding: 0 6px;
    font-size: 15px;
    line-height: 1;
    border-radius: 4px;
}

.tree-row:hover .tree-menu-btn {
    opacity: 1;
}

.tree-menu-btn:hover {
    color: var(--color-text-primary);
    background: var(--color-background-secondary);
}

.tree-menu {
    position: absolute;
    right: 0;
    top: 100%;
    z-index: 50;
    min-width: 150px;
    display: flex;
    flex-direction: column;
    padding: 4px;
    background: var(--color-background-primary);
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    box-shadow: 0 6px 20px rgba(0, 0, 0, 0.12);
}

.tree-menu[hidden] {
    display: none;   /* перебиваем display:flex, иначе hidden не скрывает */
}

.tree-menu form,
.tree-upload-form {
    margin: 0;
}

/* Пункт-«ярлык» для загрузки файла выглядит как обычный пункт меню. */
label.tree-menu-item {
    cursor: pointer;
}

.tree-menu-item {
    display: block;
    width: 100%;
    text-align: left;
    background: none;
    border: none;
    padding: 6px 10px;
    border-radius: 5px;
    font-size: 13px;
    color: var(--color-text-primary);
    text-decoration: none;
    cursor: pointer;
}

.tree-menu-item:hover {
    background: var(--color-background-secondary);
}

.tree-menu-item.danger {
    color: var(--color-text-danger);
}

.tree-rename {
    margin: 2px 0 2px 16px;
}

.tree-rename input {
    width: calc(100% - 16px);
    font: inherit;
    font-size: 13px;
    padding: 2px 6px;
    border: 0.5px solid var(--color-border-info);
    border-radius: 5px;
}

.tree-move {
    margin: 2px 0 2px 16px;
}

.tree-move select {
    width: calc(100% - 16px);
    font: inherit;
    font-size: 12px;
    padding: 2px 4px;
    border: 0.5px solid var(--color-border-info);
    border-radius: 5px;
}

.tree-root-add {
    margin-top: 4px;
}

.tree-add-btn {
    width: 100%;
    text-align: left;
    background: none;
    border: none;
    color: var(--color-text-tertiary);
    cursor: pointer;
    padding: 4px 6px;
    font-size: 12px;
    border-radius: 5px;
}

.tree-add-btn:hover {
    background: var(--color-background-secondary);
    color: var(--color-text-secondary);
}

/* ── Вкладка «Проекты» левого сайдбара (дерево документов) ── */
.sidebar-project {
    margin-bottom: 2px;
}

.sidebar-project-name {
    cursor: pointer;
    display: flex;
    align-items: center;
    gap: 2px;
    position: relative;
    padding: 6px 8px;
    font-size: 14px;
    color: var(--color-text-secondary);
    border-radius: 6px;
    list-style: none;
}

.sidebar-project-name .sidebar-project-link {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* Грип перетаскивания проекта в дереве — появляется на ховер шапки. */
.sidebar-project-drag {
    color: var(--color-text-tertiary);
    font-size: 13px;
    line-height: 1;
    cursor: grab;
    user-select: none;
    padding: 0 2px;
    opacity: 0;
    transition: opacity 0.15s ease;
}

.sidebar-project-name:hover .sidebar-project-drag {
    opacity: 1;
}

.sidebar-project-drag:active {
    cursor: grabbing;
}

.sidebar-project-name:hover .tree-menu-btn {
    opacity: 1;
}

.sidebar-project-name::-webkit-details-marker {
    display: none;
}

.sidebar-project-name::before {
    content: "▸ ";
    color: var(--color-text-tertiary);
}

.sidebar-project[open] > .sidebar-project-name::before {
    content: "▾ ";
}

.sidebar-project-name:hover {
    background: var(--color-background-secondary);
}

/* Имя проекта — самый заметный узел дерева: жирный и тёмный (корень). */
.sidebar-project-link {
    color: var(--color-text-primary);
    font-weight: 600;
}

.sidebar-project-link.active {
    text-decoration: underline;
    text-underline-offset: 3px;
}

.sidebar-project-empty {
    font-size: 12px;
    color: var(--color-text-tertiary);
    padding: 2px 8px 4px 14px;
}

.sidebar-project-manage {
    display: block;
    font-size: 11px;
    color: var(--color-text-tertiary);
    text-decoration: none;
    padding: 2px 8px 6px 14px;
}

.sidebar-project-manage:hover {
    text-decoration: underline;
}

/* ── Канбан-доска проектов ── */
.kanban-board {
    display: flex;
    gap: 12px;
    align-items: flex-start;
    overflow-x: auto;
    padding-bottom: 8px;
}

.kanban-column {
    flex: 1;
    min-width: 180px;
    display: flex;
    flex-direction: column;
    gap: 8px;
}

.kanban-column-header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    padding: 0 4px;
}

.kanban-column-title {
    font-size: 12px;
    font-weight: 600;
    color: var(--color-text-secondary);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.kanban-column-count {
    font-size: 12px;
    color: var(--color-text-tertiary);
}

.kanban-cards {
    display: flex;
    flex-direction: column;
    gap: 8px;
    min-height: 48px;                 /* пустую колонку всё равно видно как зону для броска */
    padding: 6px;
    border-radius: 8px;
    background: var(--color-background-secondary);
}

.kanban-card {
    display: block;
    background: var(--color-background-primary);
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    padding: 10px 12px;
    color: var(--color-text-primary);
    text-decoration: none;
    cursor: pointer;
}

.kanban-card:hover {
    border-color: var(--color-border-info);
}

.kanban-card-title {
    display: block;
    font-weight: 500;
}

.kanban-card-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 4px;
    margin-top: 6px;
}

.kanban-add {
    width: 100%;
    margin-top: 2px;
    padding: 8px 12px;
    border: 0.5px dashed var(--color-border-tertiary);
    border-radius: 8px;
    background: none;
    color: var(--color-text-tertiary);
    font-size: 13px;
    text-align: left;
    cursor: pointer;
}

.kanban-add:hover {
    background: var(--color-background-primary);
    color: var(--color-text-secondary);
}

.project-status-badge {
    font-size: 12px;
    font-weight: 400;
    color: var(--color-text-secondary);
    background: var(--color-background-secondary);
    padding: 2px 9px;
    border-radius: 10px;
    vertical-align: middle;
    margin-left: 6px;
}

.kanban-msg {
    margin-top: 14px;
    padding: 8px 12px;
    border-radius: 6px;
    font-size: 13px;
    color: var(--color-text-danger);
    background: var(--color-background-danger, var(--color-background-secondary));
    border: 0.5px solid var(--color-border-tertiary);
}

/* Редактор */
.docs-editor-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-bottom: 10px;
}

.docs-editor-title {
    flex: 1;
    font-size: 18px;
    font-weight: 600;
    padding: 6px 8px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 6px;
    font-family: inherit;
    color: var(--color-text-primary);
    background: var(--color-background-primary);
}

.docs-editor-meta {
    font-size: 12px;
    color: var(--color-text-tertiary);
    white-space: nowrap;
}

.docs-editor-body {
    width: 100%;
    padding: 12px;
    border: 0.5px solid var(--color-border-tertiary);
    border-radius: 8px;
    font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
    font-size: 14px;
    line-height: 1.6;
    color: var(--color-text-primary);
    background: var(--color-background-primary);
    resize: vertical;
    box-sizing: border-box;
}
