/* ==========================================================================
   Dev Project Vault — чистый portal.css
   Назначение: единый визуальный слой портала без накопленных hotfix-патчей.
   Светлая тема сохранена по текущей удачной палитре.
   Светлая тема: рабочие кнопки #00BFFF с темным текстом.
   Темная тема: отдельная насыщенная синяя палитра кнопок с белым текстом.
   ========================================================================== */


/* ==========================================================================
   01. CSS-переменные и базовые палитры
   --------------------------------------------------------------------------
   .dpv-portal — корневой контейнер портала.
   Здесь задаются все цвета, размеры, радиусы, тени и типографика.
   ========================================================================== */

.dpv-portal {
    /* Размеры интерфейса */
    --dpv-sidebar-width: 300px;
    --dpv-sidebar-collapsed-width: 58px;
    --dpv-topbar-height: 62px;

    /* Ритм интерфейса: единые расстояния между блоками и элементами */
    --dpv-space-2xs: 3px;
    --dpv-space-xs: 6px;
    --dpv-space-sm: 8px;
    --dpv-space-md: 12px;
    --dpv-space-lg: 16px;
    --dpv-space-xl: 20px;

    /* Внутренние отступы: компактно, но без слипания */
    --dpv-card-padding: 14px;
    --dpv-panel-padding: 14px;
    --dpv-field-padding-y: 9px;
    --dpv-field-padding-x: 12px;

    --dpv-radius-xs: 6px;
    --dpv-radius-sm: 8px;
    --dpv-radius-md: 12px;
    --dpv-radius-lg: 16px;
    --dpv-radius-xl: 22px;

    /* Типографика */
    --dpv-font-scale: 1;
    --dpv-font-ui: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Arial, sans-serif;
    --dpv-font-code: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", monospace;

    /* Светлая тема: основная кнопка по ТЗ, цвет не трогаем */
    --dpv-primary: #00BFFF;
    --dpv-primary-hover: #22C9FF;
    --dpv-primary-active: #0099CC;
    --dpv-primary-border: #008CB8;
    --dpv-primary-text: #06121A;

    /* Опасные действия */
    --dpv-danger: #D84A4A;
    --dpv-danger-hover: #E05A5A;
    --dpv-danger-active: #B93434;
    --dpv-danger-border: #A22C2C;
    --dpv-danger-text: #FFFFFF;

    /* Статусы */
    --dpv-success: #2E7D5B;
    --dpv-warning: #B7791F;
    --dpv-info: #0B7FA5;

    /* Светлая тема по умолчанию */
    --dpv-bg: #F3F6FA;
    --dpv-shell: #F8FBFF;
    --dpv-surface: #FFFFFF;
    --dpv-surface-2: #F7FAFE;
    --dpv-surface-3: #EEF3F8;
    --dpv-field: #FFFFFF;
    --dpv-field-pressed: #F4F8FC;
    --dpv-text: #111827;
    --dpv-heading: #0B1220;
    --dpv-muted: #4B5563;
    --dpv-soft: #6B7280;
    --dpv-line: #CBD5E1;
    --dpv-line-soft: rgba(148, 163, 184, 0.32);
    --dpv-shadow: 0 12px 32px rgba(15, 23, 42, 0.10);
    --dpv-shadow-soft: 0 8px 20px rgba(15, 23, 42, 0.08);
    --dpv-shadow-inset: inset 2px 2px 6px rgba(15, 23, 42, 0.08), inset -2px -2px 6px rgba(255, 255, 255, 0.85);

    position: fixed;
    inset: 0;
    z-index: 2147483000;
    width: 100vw;
    height: 100vh;
    height: 100dvh;
    min-height: 0;
    margin: 0;
    padding: 0;
    overflow: hidden;
    color: var(--dpv-text);
    background: var(--dpv-bg);
    font-family: var(--dpv-font-ui);
    font-size: calc(14px * var(--dpv-font-scale));
    line-height: 1.45;
    text-rendering: optimizeLegibility;
    -webkit-font-smoothing: auto;
    -moz-osx-font-smoothing: auto;
    isolation: isolate;
}

/* Темная тема: только темные фоны, без белых чипсов/панелей/полей */
.dpv-portal.dpv-theme-dark {
    color-scheme: dark;
    --dpv-bg: #080D13;
    --dpv-shell: #0D141D;
    --dpv-surface: #121B26;
    --dpv-surface-2: #172231;
    --dpv-surface-3: #1D2A3A;
    --dpv-field: #0D1620;
    --dpv-field-pressed: #101B27;
    --dpv-text: #D8E2EE;
    --dpv-heading: #F0F5FA;
    --dpv-muted: #AAB7C6;
    --dpv-soft: #8FA0B3;
    --dpv-line: #314257;
    --dpv-line-soft: rgba(129, 151, 178, 0.28);
    --dpv-shadow: 0 14px 34px rgba(0, 0, 0, 0.32);
    --dpv-shadow-soft: 0 8px 22px rgba(0, 0, 0, 0.26);
    --dpv-shadow-inset: inset 2px 2px 6px rgba(0, 0, 0, 0.32), inset -1px -1px 4px rgba(255, 255, 255, 0.025);

    /* Темная тема: кнопки не бледные, но спокойные и контрастные */
    --dpv-primary: #2563EB;
    --dpv-primary-hover: #2F6FED;
    --dpv-primary-active: #1D4ED8;
    --dpv-primary-border: #5B8DEF;
    --dpv-primary-text: #FFFFFF;

    /* Темная тема: опасные действия приглушенно-красные, без кислотности */
    --dpv-danger: #B94750;
    --dpv-danger-hover: #C95660;
    --dpv-danger-active: #96323B;
    --dpv-danger-border: #D3737B;
    --dpv-danger-text: #FFFFFF;
}

/* Принудительный полноэкранный режим страницы портала внутри WordPress */
html.dpv-portal-page-active,
body.dpv-portal-page-active {
    width: 100% !important;
    min-height: 100% !important;
    margin: 0 !important;
    padding: 0 !important;
    overflow: hidden !important;
    background: var(--dpv-bg, #F3F6FA) !important;
}

/* Убираем внешние отступы темы WordPress на странице портала */
body.dpv-portal-page-active #page,
body.dpv-portal-page-active .site,
body.dpv-portal-page-active .wp-site-blocks,
body.dpv-portal-page-active .entry-content,
body.dpv-portal-page-active .post,
body.dpv-portal-page-active .page,
body.dpv-portal-page-active main,
body.dpv-portal-page-active article {
    width: 100% !important;
    max-width: none !important;
    margin: 0 !important;
    padding: 0 !important;
}

/* WP admin bar скрывается, чтобы портал занимал весь экран */
body.dpv-portal-page-active #wpadminbar {
    display: none !important;
}

html.dpv-portal-page-active {
    margin-top: 0 !important;
}

/* Все элементы портала считают размеры с учетом border/padding */
.dpv-portal,
.dpv-portal *,
.dpv-portal *::before,
.dpv-portal *::after {
    box-sizing: border-box;
}

/* Атрибут hidden всегда скрывает модалки, оверлеи, тосты и системные блоки */
.dpv-portal [hidden],
.dpv-toast[hidden],
.dpv-loading-overlay[hidden],
.dpv-login-overlay[hidden],
.dpv-modal-backdrop[hidden],
.dpv-command-modal-backdrop[hidden],
.dpv-confirm-modal-backdrop[hidden],
.dpv-trash-drawer-backdrop[hidden],
.dpv-display-modal-backdrop[hidden] {
    display: none !important;
}


/* ==========================================================================
   02. Типографика
   --------------------------------------------------------------------------
   Заголовки, текст, ссылки, переносы длинных строк.
   ========================================================================== */

.dpv-portal :where(h1, h2, h3, h4, h5, h6) {
    margin: 0;
    color: var(--dpv-heading);
    font-weight: 850;
    line-height: 1.18;
    letter-spacing: -0.015em;
}

.dpv-portal h1 { font-size: calc(22px * var(--dpv-font-scale)); }
.dpv-portal h2 { font-size: calc(18px * var(--dpv-font-scale)); }
.dpv-portal h3 { font-size: calc(15px * var(--dpv-font-scale)); }
.dpv-portal h4 { font-size: calc(13px * var(--dpv-font-scale)); }

.dpv-portal :where(p, li, label, span, small, div, button, input, textarea, select, a) {
    font-size: calc(13px * var(--dpv-font-scale));
}

.dpv-portal p {
    margin: 0 0 10px;
    color: var(--dpv-muted);
    line-height: 1.55;
}

.dpv-portal a {
    color: var(--dpv-info);
    text-decoration: none;
}

.dpv-portal a:hover {
    text-decoration: underline;
}

/* Защита от выезда длинного текста за контейнер */
.dpv-portal :where(h1, h2, h3, h4, h5, h6, p, span, small, strong, em, label, li, dt, dd, a, div, button) {
    max-width: 100%;
    overflow-wrap: anywhere;
    word-break: normal;
    text-shadow: none;
}

/* Системные утилиты */
.dpv-muted,
.dpv-muted-note,
.dpv-brand-subtitle,
.dpv-kicker {
    color: var(--dpv-muted);
}

.screen-reader-text,
.dpv-portal .screen-reader-text {
    position: absolute !important;
    width: 1px !important;
    height: 1px !important;
    padding: 0 !important;
    margin: -1px !important;
    overflow: hidden !important;
    clip: rect(0, 0, 0, 0) !important;
    white-space: nowrap !important;
    border: 0 !important;
}


/* ==========================================================================
   03. Основная оболочка портала
   --------------------------------------------------------------------------
   .dpv-shell — контейнер приложения.
   .dpv-topbar — верхняя панель.
   .dpv-layout — сетка "левое меню + рабочая область".
   ========================================================================== */

.dpv-shell {
    display: flex;
    flex-direction: column;
    width: 100%;
    height: 100%;
    min-height: 0;
    overflow: hidden;
    color: var(--dpv-text);
    background: var(--dpv-shell);
    border: 0;
    border-radius: 0;
    box-shadow: none;
}

/* Верхняя шапка: достаточно высокая, не наезжает на контент */
.dpv-topbar {
    position: relative;
    z-index: 50;
    display: grid;
    grid-template-columns: minmax(220px, 1fr) minmax(260px, 560px) minmax(220px, auto);
    align-items: center;
    gap: 12px;
    min-height: var(--dpv-topbar-height);
    padding: 10px 14px;
    color: var(--dpv-text);
    background: var(--dpv-surface);
    border-bottom: 1px solid var(--dpv-line);
    box-shadow: var(--dpv-shadow-soft);
}

/* Блок бренда без лишнего логотипа */
.dpv-brand {
    display: flex;
    align-items: center;
    min-width: 0;
    gap: 10px;
}

/* Логотип скрыт, чтобы не засорять интерфейс */
.dpv-brand-mark {
    display: none !important;
}

.dpv-brand-title {
    color: var(--dpv-heading);
    font-size: calc(15px * var(--dpv-font-scale));
    font-weight: 850;
    line-height: 1.15;
}

.dpv-brand-subtitle {
    margin-top: 2px;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
    line-height: 1.25;
}

/* Центральная зона шапки: поиск и быстрые команды */
.dpv-commandbar {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 0;
    gap: 8px;
}

/* Правая зона шапки: настройки, тема, выход, корзина */
.dpv-topbar-actions,
.dpv-actions-row,
.dpv-card-actions,
.dpv-modal-actions,
.dpv-code-toolbar-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    flex-wrap: wrap;
    gap: 8px;
}

/* Основная сетка: левое меню + рабочее поле */
.dpv-layout {
    display: grid;
    grid-template-columns: var(--dpv-sidebar-width) minmax(0, 1fr);
    flex: 1 1 auto;
    min-height: 0;
    overflow: hidden;
}

/* Правая инспекторная колонка скрыта: рабочее поле занимает максимум ширины */
.dpv-inspector {
    display: none !important;
}

/* Центральное рабочее поле */
.dpv-main {
    min-width: 0;
    min-height: 0;
    padding: 12px;
    overflow: auto;
    color: var(--dpv-text);
    background: var(--dpv-bg);
}

/* Общая доска контента */
.dpv-workspace-board {
    min-height: 100%;
    padding: 12px;
    color: var(--dpv-text);
    background: var(--dpv-surface-2);
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-lg);
    box-shadow: var(--dpv-shadow-soft);
    overflow: auto;
}

/* Свернутая верхняя панель */
.dpv-shell.is-topbar-collapsed .dpv-topbar {
    display: none !important;
}

.dpv-topbar-restore {
    display: none;
    position: absolute;
    top: 8px;
    right: 8px;
    z-index: 200;
    width: 34px;
    height: 34px;
}

.dpv-shell.is-topbar-collapsed .dpv-topbar-restore {
    display: inline-flex;
    align-items: center;
    justify-content: center;
}


/* ==========================================================================
   04. Кнопки
   --------------------------------------------------------------------------
   Все рабочие кнопки используют #00BFFF.
   Для читаемости на #00BFFF используется темный текст.
   Опасные кнопки — красные с белым текстом.
   ========================================================================== */

.dpv-btn,
.dpv-icon-btn,
.dpv-mini-btn,
.dpv-top-icon,
.dpv-rail-btn,
.dpv-command-trigger,
.dpv-login-submit,
a.dpv-btn,
button.dpv-btn {
    appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 7px;
    min-height: 34px;
    padding: 7px 12px;
    border: 1px solid var(--dpv-primary-border);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-primary-text);
    -webkit-text-fill-color: var(--dpv-primary-text);
    background: var(--dpv-primary);
    box-shadow:
        0 2px 0 rgba(0, 100, 135, 0.45),
        0 7px 14px rgba(0, 191, 255, 0.18),
        inset 0 1px 0 rgba(255, 255, 255, 0.28);
    cursor: pointer;
    font-family: inherit;
    font-size: calc(12px * var(--dpv-font-scale));
    font-weight: 800;
    line-height: 1.1;
    text-align: center;
    text-decoration: none;
    white-space: normal;
    vertical-align: middle;
    transition: transform 0.12s ease, box-shadow 0.12s ease, background 0.12s ease, border-color 0.12s ease, opacity 0.12s ease;
}

.dpv-btn :where(span, strong, small, em, i, b, svg),
.dpv-icon-btn :where(span, strong, small, em, i, b, svg),
.dpv-mini-btn :where(span, strong, small, em, i, b, svg),
.dpv-top-icon :where(span, strong, small, em, i, b, svg),
.dpv-rail-btn :where(span, strong, small, em, i, b, svg),
.dpv-command-trigger :where(span, strong, small, em, i, b, svg) {
    color: inherit;
    -webkit-text-fill-color: inherit;
    text-shadow: none;
}

/* Основная кнопка */
.dpv-btn-primary,
.dpv-btn[data-dpv-create],
.dpv-btn[data-dpv-create-text],
.dpv-btn[data-dpv-upload-archive],
.dpv-btn[data-dpv-create-final-container],
.dpv-btn[data-dpv-upload-final-file],
.dpv-btn[data-dpv-create-task],
[data-dpv-save-text],
[data-dpv-save-code-file],
[data-dpv-open-command],
[data-dpv-download-file],
[data-dpv-download-archive] {
    color: var(--dpv-primary-text);
    -webkit-text-fill-color: var(--dpv-primary-text);
    background: var(--dpv-primary);
    border-color: var(--dpv-primary-border);
}

/* Кнопка-призрак все равно остается голубой, но визуально мягче */
.dpv-btn-ghost {
    background: color-mix(in srgb, var(--dpv-primary) 42%, var(--dpv-surface));
    border-color: color-mix(in srgb, var(--dpv-primary-border) 52%, var(--dpv-line));
}

/* Маленькая кнопка */
.dpv-btn-small,
.dpv-mini-btn {
    min-height: 30px;
    padding: 5px 9px;
    font-size: calc(11px * var(--dpv-font-scale));
}

/* Иконная кнопка */
.dpv-icon-btn,
.dpv-top-icon,
.dpv-rail-btn {
    width: 36px;
    min-width: 36px;
    height: 36px;
    padding: 0;
    font-size: 18px;
}

/* Чуть крупнее значки */
.dpv-icon-btn,
.dpv-top-icon,
.dpv-rail-btn,
.dpv-tree-emoji,
.dpv-project-icon,
.dpv-folder-icon,
.dpv-entity-icon,
.dpv-module-icon,
.dpv-final-container-icon,
.dpv-final-file-icon,
.dpv-archive-icon,
.dpv-extracted-icon,
.dpv-text-icon,
.dpv-task-icon {
    font-size: 1.18em;
}

/* Состояния кнопок */
.dpv-btn:hover,
.dpv-icon-btn:hover,
.dpv-mini-btn:hover,
.dpv-top-icon:hover,
.dpv-rail-btn:hover,
.dpv-command-trigger:hover {
    background: var(--dpv-primary-hover);
    transform: translateY(-1px);
}

.dpv-btn:active,
.dpv-icon-btn:active,
.dpv-mini-btn:active,
.dpv-top-icon:active,
.dpv-rail-btn:active,
.dpv-command-trigger:active {
    background: var(--dpv-primary-active);
    transform: translateY(2px);
    box-shadow:
        0 1px 0 rgba(0, 100, 135, 0.45),
        0 3px 8px rgba(0, 191, 255, 0.16),
        inset 0 2px 5px rgba(0, 0, 0, 0.12);
}

/* Опасные кнопки: удаление, корзина, сброс */
.dpv-btn-danger,
.dpv-mini-btn.is-danger,
.is-danger,
[data-dpv-trash],
[data-dpv-trash-text],
[data-dpv-trash-archive],
[data-dpv-trash-extracted],
[data-dpv-trash-final-container],
[data-dpv-trash-final-file],
[data-dpv-trash-task],
[data-dpv-trash-task-comment],
[data-dpv-trash-task-link],
[data-dpv-delete],
[data-dpv-delete-revision],
[data-dpv-delete-file-revision],
button[aria-label*="Удал"],
button[title*="Удал"],
button[aria-label*="корзин"],
button[title*="корзин"] {
    color: var(--dpv-danger-text) !important;
    -webkit-text-fill-color: var(--dpv-danger-text) !important;
    background: var(--dpv-danger) !important;
    border-color: var(--dpv-danger-border) !important;
    box-shadow:
        0 2px 0 rgba(125, 20, 20, 0.55),
        0 7px 14px rgba(216, 74, 74, 0.18),
        inset 0 1px 0 rgba(255, 255, 255, 0.18) !important;
}

.dpv-btn-danger:hover,
.dpv-mini-btn.is-danger:hover,
.is-danger:hover,
[data-dpv-trash]:hover,
[data-dpv-delete]:hover,
[data-dpv-delete-revision]:hover,
[data-dpv-delete-file-revision]:hover {
    background: var(--dpv-danger-hover) !important;
}

.dpv-btn-danger:active,
.dpv-mini-btn.is-danger:active,
.is-danger:active,
[data-dpv-trash]:active,
[data-dpv-delete]:active {
    background: var(--dpv-danger-active) !important;
}

/* Отключенные кнопки */
.dpv-btn:disabled,
.dpv-mini-btn:disabled,
.dpv-icon-btn:disabled,
.dpv-top-icon:disabled,
.dpv-rail-btn:disabled,
.dpv-command-trigger:disabled,
.dpv-btn[aria-disabled="true"],
.dpv-mini-btn[aria-disabled="true"],
a.dpv-btn:not([href]),
.dpv-portal.is-busy .dpv-btn,
.dpv-portal.is-busy .dpv-mini-btn,
.dpv-portal.is-busy .dpv-icon-btn {
    cursor: not-allowed;
    opacity: 0.58;
    filter: saturate(0.75);
    transform: none;
}

/* Видимый фокус для клавиатуры */
.dpv-btn:focus-visible,
.dpv-mini-btn:focus-visible,
.dpv-icon-btn:focus-visible,
.dpv-top-icon:focus-visible,
.dpv-rail-btn:focus-visible,
.dpv-command-trigger:focus-visible,
.dpv-command-result:focus-visible {
    outline: 3px solid color-mix(in srgb, var(--dpv-primary) 38%, transparent);
    outline-offset: 2px;
}

/* Горячие клавиши внутри кнопки команд */
.dpv-command-trigger kbd,
.dpv-hotkey-kbd,
.dpv-command-hints kbd,
.dpv-portal kbd {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    min-height: 20px;
    padding: 2px 6px;
    border: 1px solid color-mix(in srgb, var(--dpv-primary-border) 60%, var(--dpv-line));
    border-radius: var(--dpv-radius-xs);
    color: var(--dpv-primary-text);
    background: rgba(255, 255, 255, 0.38);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.18);
    font-family: var(--dpv-font-code);
    font-size: calc(10px * var(--dpv-font-scale));
    font-weight: 850;
    line-height: 1;
}

.dpv-theme-dark .dpv-command-trigger kbd,
.dpv-theme-dark .dpv-hotkey-kbd,
.dpv-theme-dark .dpv-command-hints kbd,
.dpv-theme-dark kbd {
    color: #E6F7FF;
    background: rgba(0, 0, 0, 0.24);
    border-color: var(--dpv-line);
}


/* ==========================================================================
   05. Плашки, бейджи, статусы
   --------------------------------------------------------------------------
   Унифицированные компактные метки.
   ========================================================================== */

.dpv-version-pill,
.dpv-user-pill,
.dpv-tree-count,
.dpv-muted-note,
.dpv-text-mode-pill,
.dpv-draft-pill,
.dpv-saved-pill,
.dpv-editor-status,
.dpv-chip,
.dpv-badge,
.dpv-pill,
.dpv-count-pill,
.dpv-stat-pill,
.dpv-project-top span,
.dpv-task-summary span,
.dpv-task-badges span,
.dpv-text-badges span,
.dpv-archive-badges span,
.dpv-project-smart-meta span,
.dpv-mini-stats span {
    display: inline-flex;
    align-items: center;
    min-height: 24px;
    padding: 3px 8px;
    border: 1px solid var(--dpv-line);
    border-radius: 999px;
    color: var(--dpv-text);
    background: var(--dpv-surface-3);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.12);
    font-size: calc(11px * var(--dpv-font-scale));
    font-weight: 750;
    line-height: 1.2;
}

.dpv-user-pill {
    gap: 8px;
}

.dpv-user-dot {
    width: 8px;
    height: 8px;
    border-radius: 999px;
    background: var(--dpv-success);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--dpv-success) 18%, transparent);
}

.dpv-user-pill-locked .dpv-user-dot {
    background: var(--dpv-warning);
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--dpv-warning) 18%, transparent);
}

.dpv-saved-pill,
.dpv-form-message.is-ok,
.dpv-task-status.is-done,
.dpv-task-priority.is-low,
.dpv-task-month-item.is-done,
.dpv-task-day-chip.is-done {
    color: #0F5132;
    background: #D8F3E4;
    border-color: #B5E7CA;
}

.dpv-theme-dark .dpv-saved-pill,
.dpv-theme-dark .dpv-form-message.is-ok,
.dpv-theme-dark .dpv-task-status.is-done,
.dpv-theme-dark .dpv-task-priority.is-low,
.dpv-theme-dark .dpv-task-month-item.is-done,
.dpv-theme-dark .dpv-task-day-chip.is-done {
    color: #C8F7DC;
    background: #163A29;
    border-color: #285A41;
}

.dpv-draft-pill,
.dpv-text-badges span.is-draft,
.dpv-task-status.is-in_progress,
.dpv-task-priority.is-high {
    color: #7A4A00;
    background: #FFF1D6;
    border-color: #F2D6A2;
}

.dpv-theme-dark .dpv-draft-pill,
.dpv-theme-dark .dpv-text-badges span.is-draft,
.dpv-theme-dark .dpv-task-status.is-in_progress,
.dpv-theme-dark .dpv-task-priority.is-high {
    color: #FFE2A8;
    background: #3B2A12;
    border-color: #5C4421;
}

.dpv-task-status.is-review {
    color: #51368A;
    background: #EEE7FF;
    border-color: #D6C8F4;
}

.dpv-theme-dark .dpv-task-status.is-review {
    color: #D9CCFF;
    background: #2B2441;
    border-color: #4B3D6E;
}

.dpv-task-status.is-postponed {
    color: var(--dpv-muted);
    background: var(--dpv-surface-3);
}

.dpv-task-priority.is-critical,
.dpv-task-overdue,
.dpv-form-message.is-error {
    color: #8A1F1F;
    background: #FBE2E2;
    border-color: #EDBBBB;
}

.dpv-theme-dark .dpv-task-priority.is-critical,
.dpv-theme-dark .dpv-task-overdue,
.dpv-theme-dark .dpv-form-message.is-error {
    color: #FFD6D6;
    background: #3A191C;
    border-color: #6A2B31;
}


/* ==========================================================================
   06. Формы и поля ввода
   --------------------------------------------------------------------------
   .dpv-field — обертка поля.
   input/textarea/select — втянутые поля с нормальным контрастом.
   ========================================================================== */

.dpv-field,
.dpv-final-search,
.dpv-task-toolbar label {
    display: grid;
    gap: 6px;
    margin-bottom: 12px;
    color: var(--dpv-text);
    font-size: calc(12px * var(--dpv-font-scale));
    font-weight: 750;
}

.dpv-field-inline {
    max-width: 180px;
}

.dpv-field input,
.dpv-field textarea,
.dpv-field select,
.dpv-global-search input,
.dpv-command-search-field input,
.dpv-final-search input,
.dpv-task-toolbar input,
.dpv-task-toolbar select,
.dpv-editor-format,
.dpv-code-textarea,
.dpv-rich-textarea {
    width: 100%;
    min-height: 38px;
    padding: 8px 11px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-text);
    background: var(--dpv-field);
    box-shadow: var(--dpv-shadow-inset);
    font: inherit;
    outline: none;
    transition: border-color 0.14s ease, box-shadow 0.14s ease, background 0.14s ease;
}

.dpv-field textarea,
.dpv-code-textarea,
.dpv-rich-textarea {
    min-height: 110px;
    resize: vertical;
}

.dpv-field input:focus,
.dpv-field textarea:focus,
.dpv-field select:focus,
.dpv-global-search input:focus,
.dpv-command-search-field input:focus,
.dpv-final-search input:focus,
.dpv-task-toolbar input:focus,
.dpv-task-toolbar select:focus,
.dpv-editor-format:focus,
.dpv-code-textarea:focus,
.dpv-rich-textarea:focus {
    border-color: var(--dpv-primary-border);
    box-shadow:
        var(--dpv-shadow-inset),
        0 0 0 3px color-mix(in srgb, var(--dpv-primary) 25%, transparent);
}

.dpv-field input::placeholder,
.dpv-field textarea::placeholder,
.dpv-global-search input::placeholder,
.dpv-command-search-field input::placeholder {
    color: color-mix(in srgb, var(--dpv-muted) 80%, transparent);
    opacity: 1;
}

.dpv-file-field input[type="file"],
.dpv-import-export-modal-form input[type="file"] {
    padding: 12px;
    border: 1px dashed var(--dpv-primary-border);
    background: var(--dpv-field);
}

.dpv-file-field small {
    display: block;
    margin-top: 7px;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
    line-height: 1.45;
}


/* ==========================================================================
   07. Левое меню и дерево
   --------------------------------------------------------------------------
   .dpv-sidebar — левая навигация.
   .dpv-tree-* — тематики, проекты, папки, вложенные узлы.
   ========================================================================== */

.dpv-sidebar {
    min-width: 0;
    min-height: 0;
    padding: 12px;
    overflow: auto;
    color: var(--dpv-text);
    background: var(--dpv-surface);
    border-right: 1px solid var(--dpv-line);
}

.dpv-sidebar-section + .dpv-sidebar-section {
    margin-top: 16px;
}

.dpv-sidebar-headline {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 8px;
    margin-bottom: 8px;
}

.dpv-sidebar-headline p {
    margin: 3px 0 0;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
}

.dpv-sidebar-title {
    margin: 0 0 8px;
    color: var(--dpv-muted);
    font-size: calc(10.5px * var(--dpv-font-scale));
    font-weight: 900;
    letter-spacing: 0.08em;
    text-transform: uppercase;
}

.dpv-tree,
.dpv-structure-tree {
    display: grid;
    gap: 6px;
    padding: 10px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    background: var(--dpv-surface-2);
    box-shadow: var(--dpv-shadow-inset);
}

.dpv-structure-tree {
    max-height: calc(100vh - 180px);
    overflow: auto;
}

.dpv-tree-group + .dpv-tree-group {
    margin-top: 6px;
}

.dpv-tree-line {
    display: grid;
    grid-template-columns: 24px minmax(0, 1fr);
    align-items: center;
    gap: 6px;
    min-width: 0;
}

.dpv-tree-children,
.dpv-tree-folders,
.dpv-tree-nested {
    display: grid;
    gap: 6px;
    margin: 5px 0 7px 13px;
    padding-left: 10px;
    border-left: 1px dashed var(--dpv-line);
}

.dpv-tree-button,
.dpv-nav-item {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    min-height: 34px;
    margin: 0;
    padding: 7px 9px;
    border: 1px solid transparent;
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-text);
    background: transparent;
    cursor: pointer;
    font-size: calc(12px * var(--dpv-font-scale));
    font-weight: 750;
    text-align: left;
    transition: background 0.12s ease, border-color 0.12s ease, transform 0.12s ease;
}

.dpv-tree-button:hover,
.dpv-nav-item:hover {
    background: var(--dpv-surface-3);
    border-color: var(--dpv-line);
    transform: translateX(1px);
}

.dpv-tree-button.is-active,
.dpv-nav-item.is-active {
    color: var(--dpv-primary-text);
    background: color-mix(in srgb, var(--dpv-primary) 28%, var(--dpv-surface));
    border-color: var(--dpv-primary-border);
}

.dpv-theme-dark .dpv-tree-button.is-active,
.dpv-theme-dark .dpv-nav-item.is-active {
    color: #EAF8FF;
    background: color-mix(in srgb, var(--dpv-primary) 30%, var(--dpv-surface-2));
}

.dpv-tree-toggle,
.dpv-tree-toggle-spacer,
.dpv-tree-caret {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 22px;
    min-width: 22px;
    height: 26px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-xs);
    color: var(--dpv-text);
    background: var(--dpv-surface-3);
    font-size: 12px;
    font-weight: 900;
    line-height: 1;
}

.dpv-tree-toggle {
    cursor: pointer;
}

.dpv-tree-toggle-spacer,
.dpv-tree-caret.is-empty {
    opacity: 0.42;
    cursor: default;
    background: transparent;
    border-color: transparent;
}

.dpv-tree-folder {
    padding-left: calc(8px + (var(--dpv-depth, 0) * 13px));
}

.dpv-tree-emoji,
.dpv-tree-icon {
    flex: 0 0 auto;
    font-size: 18px;
    line-height: 1;
}

.dpv-tree-label,
.dpv-tree-name,
.dpv-tree-row {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: normal;
}

.dpv-tree-row {
    display: flex;
    align-items: center;
    gap: 8px;
    min-height: 30px;
    color: var(--dpv-muted);
    font-size: calc(12px * var(--dpv-font-scale));
}

/* Подсказка внутри дерева */
.dpv-tree-hint {
    margin: 0 0 8px;
    padding: 8px 9px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-muted);
    background: var(--dpv-surface-3);
    font-size: calc(11px * var(--dpv-font-scale));
    line-height: 1.35;
}

/* Свернутое левое меню: остается вертикальная панель значков */
.dpv-sidebar-rail {
    display: none;
}

.dpv-shell.is-sidebar-collapsed .dpv-layout,
.dpv-portal.is-sidebar-collapsed .dpv-shell .dpv-layout {
    grid-template-columns: var(--dpv-sidebar-collapsed-width) minmax(0, 1fr);
}

.dpv-shell.is-sidebar-collapsed .dpv-sidebar,
.dpv-portal.is-sidebar-collapsed .dpv-sidebar {
    width: var(--dpv-sidebar-collapsed-width);
    min-width: var(--dpv-sidebar-collapsed-width);
    max-width: var(--dpv-sidebar-collapsed-width);
    padding: 10px 8px;
    overflow-x: hidden;
}

.dpv-shell.is-sidebar-collapsed .dpv-sidebar-section,
.dpv-portal.is-sidebar-collapsed .dpv-sidebar-section {
    display: none !important;
}

.dpv-shell.is-sidebar-collapsed .dpv-sidebar-rail,
.dpv-portal.is-sidebar-collapsed .dpv-sidebar-rail {
    display: grid;
    gap: 8px;
    justify-items: center;
    align-content: start;
}


/* ==========================================================================
   08. Хлебные крошки
   --------------------------------------------------------------------------
   .dpv-breadcrumbs — навигационная цепочка в рабочей области.
   ========================================================================== */

.dpv-breadcrumbs {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 5px;
    max-width: 100%;
    margin: 0 0 10px;
    padding: 7px 10px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-muted);
    background: var(--dpv-surface-3);
    font-size: calc(11px * var(--dpv-font-scale));
    line-height: 1.25;
}

.dpv-breadcrumb-link,
.dpv-breadcrumbs button {
    min-height: 22px;
    padding: 2px 4px;
    border: 0;
    color: var(--dpv-info);
    background: transparent;
    box-shadow: none;
    cursor: pointer;
    font-size: calc(11px * var(--dpv-font-scale));
    font-weight: 750;
}

.dpv-breadcrumb-link:hover,
.dpv-breadcrumbs button:hover {
    text-decoration: underline;
}

.dpv-breadcrumb-current {
    color: var(--dpv-heading);
    font-weight: 850;
}

.dpv-breadcrumb-separator {
    color: var(--dpv-soft);
    font-weight: 800;
}


/* ==========================================================================
   09. Карточки и рабочие блоки
   --------------------------------------------------------------------------
   Общая сетка, карточки проектов, папок, модулей, состояний.
   ========================================================================== */

.dpv-welcome-card,
.dpv-roadmap-card,
.dpv-module-card,
.dpv-workspace-head,
.dpv-section,
.dpv-section-head,
.dpv-project-card,
.dpv-folder-card,
.dpv-entity-hero,
.dpv-empty-board,
.dpv-state-card,
.dpv-inspector-card,
.dpv-text-card,
.dpv-text-editor-panel,
.dpv-history-panel,
.dpv-archive-card,
.dpv-extracted-card,
.dpv-extracted-tree-panel,
.dpv-final-container-card,
.dpv-final-file-card,
.dpv-task-card,
.dpv-export-panel,
.dpv-export-card,
.dpv-code-panel,
.dpv-code-editor-card,
.dpv-shortcut-group,
.dpv-shortcut-project,
.dpv-trash-block,
.dpv-task-toolbar,
.dpv-final-toolbar {
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    color: var(--dpv-text);
    background: var(--dpv-surface);
    box-shadow: var(--dpv-shadow-soft);
}

.dpv-welcome-card,
.dpv-empty-board,
.dpv-state-card {
    display: grid;
    gap: 8px;
    padding: 18px;
}

.dpv-welcome-card h1 {
    max-width: 820px;
}

.dpv-workspace-head {
    margin-bottom: 12px;
    padding: 12px;
}

.dpv-workspace-head-compact {
    padding: 10px 12px;
    margin-bottom: 10px;
}

.dpv-workspace-help summary {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    cursor: pointer;
    list-style: none;
    color: var(--dpv-heading);
    font-weight: 850;
}

.dpv-workspace-help summary::-webkit-details-marker {
    display: none;
}

.dpv-workspace-help summary::after {
    content: "▾";
    color: var(--dpv-muted);
    transition: transform 0.14s ease;
}

.dpv-workspace-help[open] summary::after {
    transform: rotate(180deg);
}

.dpv-workspace-help-body {
    display: grid;
    gap: 8px;
    padding-top: 10px;
}

.dpv-kicker {
    margin: 0 0 6px;
    color: var(--dpv-info);
    font-size: calc(10.5px * var(--dpv-font-scale));
    font-weight: 900;
    letter-spacing: 0.09em;
    text-transform: uppercase;
}

.dpv-section-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin: 8px 0 10px;
    padding: 10px;
}

.dpv-section-head h2 {
    margin: 0 0 3px;
}

.dpv-section-head p {
    margin: 0;
    font-size: calc(12px * var(--dpv-font-scale));
}

.dpv-project-grid,
.dpv-module-grid,
.dpv-text-grid,
.dpv-archive-grid,
.dpv-extracted-grid,
.dpv-final-grid,
.dpv-final-file-grid,
.dpv-export-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
    gap: 12px;
    margin: 0 0 16px;
}

.dpv-project-card,
.dpv-folder-card,
.dpv-text-card,
.dpv-archive-card,
.dpv-extracted-card,
.dpv-final-container-card,
.dpv-final-file-card,
.dpv-task-card,
.dpv-module-card,
.dpv-export-card {
    min-width: 0;
    padding: 12px;
    cursor: pointer;
    transition: transform 0.14s ease, box-shadow 0.14s ease, border-color 0.14s ease, background 0.14s ease;
}

.dpv-project-card:hover,
.dpv-folder-card:hover,
.dpv-text-card:hover,
.dpv-archive-card:hover,
.dpv-extracted-card:hover,
.dpv-final-container-card:hover,
.dpv-final-file-card:hover,
.dpv-task-card:hover,
.dpv-module-card:hover,
.dpv-export-card:hover {
    transform: translateY(-1px);
    border-color: var(--dpv-primary-border);
    box-shadow: var(--dpv-shadow);
}

.dpv-project-top,
.dpv-folder-main,
.dpv-text-card-top,
.dpv-archive-top,
.dpv-extracted-top,
.dpv-final-container-top,
.dpv-final-file-top,
.dpv-task-card-top {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
    min-width: 0;
}

.dpv-project-icon,
.dpv-folder-icon,
.dpv-entity-icon,
.dpv-inspector-icon,
.dpv-module-icon,
.dpv-state-icon,
.dpv-text-icon,
.dpv-archive-icon,
.dpv-extracted-icon,
.dpv-final-container-icon,
.dpv-final-file-icon,
.dpv-task-icon,
.dpv-export-icon,
.dpv-login-icon,
.dpv-shortcut-project-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 42px;
    height: 42px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    color: var(--dpv-heading);
    background: var(--dpv-surface-3);
    box-shadow: var(--dpv-shadow-inset);
    font-size: 22px;
}

.dpv-entity-icon {
    width: 54px;
    height: 54px;
    font-size: 28px;
}

.dpv-state-icon {
    width: 52px;
    height: 52px;
    margin-bottom: 8px;
    font-size: 26px;
}

.dpv-project-card h3,
.dpv-folder-card h3,
.dpv-text-card h3,
.dpv-archive-card h3,
.dpv-extracted-card h3,
.dpv-final-container-card h3,
.dpv-final-file-card h4,
.dpv-task-card h3,
.dpv-export-card h3 {
    margin: 8px 0 6px;
    word-break: break-word;
}

.dpv-project-card p,
.dpv-folder-card p,
.dpv-text-card p,
.dpv-archive-card p,
.dpv-extracted-card p,
.dpv-final-container-card p,
.dpv-final-file-card p,
.dpv-task-card p,
.dpv-export-card p {
    margin: 0 0 10px;
    color: var(--dpv-muted);
    line-height: 1.5;
}

.dpv-folder-list,
.dpv-task-list,
.dpv-subtask-list,
.dpv-history-list,
.dpv-revision-list,
.dpv-task-comment-list,
.dpv-task-link-list,
.dpv-final-preview-files {
    display: grid;
    gap: 10px;
}

.dpv-folder-node .dpv-folder-list,
.dpv-subtask-list {
    margin-top: 10px;
    margin-left: 18px;
    padding-left: 12px;
    border-left: 1px dashed var(--dpv-line);
}

.dpv-empty-board-large {
    min-height: 300px;
    align-content: center;
}

.dpv-empty-small,
.dpv-empty-inline,
.dpv-shortcut-empty,
.dpv-loading-line,
.dpv-history-empty,
.dpv-file-tree-empty,
.dpv-code-editor-empty,
.dpv-trash-empty {
    padding: 10px 12px;
    border: 1px dashed var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-muted);
    background: var(--dpv-surface-3);
    font-size: calc(12px * var(--dpv-font-scale));
    line-height: 1.45;
}


/* ==========================================================================
   10. Корзина и выдвижная панель
   --------------------------------------------------------------------------
   .dpv-trash-drawer-backdrop — затемнение.
   .dpv-trash-drawer — правая панель корзины.
   ========================================================================== */

.dpv-trash-drawer-backdrop {
    position: fixed;
    inset: 0;
    z-index: 2147481200;
    display: flex;
    justify-content: flex-end;
    background: rgba(8, 13, 24, 0.36);
}

.dpv-trash-drawer {
    width: min(460px, calc(100vw - 18px));
    height: 100%;
    padding: 16px;
    overflow: auto;
    color: var(--dpv-text);
    background: var(--dpv-surface);
    border-left: 1px solid var(--dpv-line);
    box-shadow: -22px 0 65px rgba(0, 0, 0, 0.22);
    transform: translateX(100%);
    transition: transform 0.16s ease;
}

.dpv-trash-drawer-backdrop.is-open .dpv-trash-drawer {
    transform: translateX(0);
}

.dpv-trash-drawer-head {
    position: sticky;
    top: 0;
    z-index: 2;
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 12px;
    margin: -16px -16px 12px;
    padding: 14px 16px;
    color: var(--dpv-text);
    background: var(--dpv-surface);
    border-bottom: 1px solid var(--dpv-line);
}

.dpv-trash-drawer-head h2 {
    margin: 0;
}

.dpv-trash-panel {
    display: grid;
    gap: 9px;
    margin-top: 12px;
}

.dpv-trash-block {
    margin: 0;
    overflow: hidden;
}

.dpv-trash-block summary,
.dpv-trash-block h3 {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin: 0;
    padding: 10px 12px;
    color: var(--dpv-heading);
    cursor: pointer;
    font-size: calc(12px * var(--dpv-font-scale));
    font-weight: 850;
    list-style: none;
    text-transform: uppercase;
}

.dpv-trash-block summary::-webkit-details-marker {
    display: none;
}

.dpv-trash-block summary::after {
    content: "▾";
    color: var(--dpv-muted);
}

.dpv-trash-block[open] summary::after {
    transform: rotate(180deg);
}

.dpv-trash-block summary strong,
.dpv-trash-block h3 span,
.dpv-trash-badge {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 20px;
    height: 20px;
    padding: 0 6px;
    border-radius: 999px;
    color: var(--dpv-primary-text);
    background: var(--dpv-primary);
    font-size: 10px;
    font-weight: 900;
}

.dpv-trash-badge {
    position: absolute;
    top: -6px;
    right: -6px;
}

.dpv-trash-row {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 8px;
    margin: 0 10px 10px;
    padding: 9px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-text);
    background: var(--dpv-surface-2);
}

.dpv-trash-row strong,
.dpv-trash-row span {
    display: block;
    min-width: 0;
}


/* ==========================================================================
   11. Текстовые разделы и rich-text
   --------------------------------------------------------------------------
   .dpv-text-* — карточки и редактор текстов.
   .dpv-rich-document — отрендеренный HTML/Markdown.
   ========================================================================== */

.dpv-feature-tabs {
    display: flex;
    flex-wrap: wrap;
    gap: 7px;
    margin: 0 0 14px;
    padding: 8px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    background: var(--dpv-surface-2);
}

.dpv-feature-tabs span {
    display: inline-flex;
    align-items: center;
    min-height: 28px;
    padding: 4px 9px;
    border: 1px solid var(--dpv-line);
    border-radius: 999px;
    color: var(--dpv-muted);
    background: var(--dpv-surface-3);
    font-size: calc(11px * var(--dpv-font-scale));
    font-weight: 850;
}

.dpv-feature-tabs span.is-active,
.dpv-feature-tabs span.is-ready {
    color: var(--dpv-primary-text);
    background: color-mix(in srgb, var(--dpv-primary) 55%, var(--dpv-surface));
    border-color: var(--dpv-primary-border);
}

.dpv-theme-dark .dpv-feature-tabs span.is-active,
.dpv-theme-dark .dpv-feature-tabs span.is-ready {
    color: #EAF8FF;
    background: color-mix(in srgb, var(--dpv-primary) 30%, var(--dpv-surface-3));
}

.dpv-text-meta,
.dpv-archive-meta,
.dpv-task-meta,
.dpv-code-status-row {
    display: flex;
    align-items: center;
    justify-content: flex-start;
    flex-wrap: wrap;
    gap: 8px;
    margin-bottom: 10px;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
    line-height: 1.45;
}

.dpv-text-editor-toolbar,
.dpv-code-toolbar {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 10px;
}

.dpv-code-textarea {
    min-height: 460px;
    font-family: var(--dpv-font-code);
    font-size: calc(13px * var(--dpv-font-scale));
    line-height: 1.6;
    tab-size: 4;
    white-space: pre;
}

.dpv-code-textarea[readonly] {
    color: var(--dpv-muted);
    background: var(--dpv-field-pressed);
}

.dpv-rich-textarea {
    min-height: 420px;
    max-height: 62vh;
    overflow: auto;
    white-space: normal;
    line-height: 1.65;
}

.dpv-rich-textarea :where(h1, h2, h3, h4, h5, h6),
.dpv-rich-document :where(h1, h2, h3, h4, h5, h6) {
    margin: 0.8em 0 0.35em;
    font-weight: 850;
    line-height: 1.25;
}

.dpv-rich-textarea :where(p, ul, ol, blockquote, pre, table),
.dpv-rich-document :where(p, ul, ol, blockquote, pre, table) {
    margin: 0 0 0.85em;
}

.dpv-rich-textarea ul,
.dpv-rich-textarea ol,
.dpv-rich-document ul,
.dpv-rich-document ol {
    margin-left: 1.2em;
    padding-left: 1.2em;
}

.dpv-rich-document {
    min-height: 280px;
    line-height: 1.62;
    white-space: normal;
}

.dpv-editor-help {
    margin-top: 10px;
    padding: 10px 12px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-muted);
    background: var(--dpv-surface-3);
    font-size: calc(12px * var(--dpv-font-scale));
    line-height: 1.5;
}

.dpv-history-row,
.dpv-revision-item {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    padding: 10px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    background: var(--dpv-surface-2);
}

.dpv-history-row strong,
.dpv-revision-item strong {
    display: block;
    color: var(--dpv-heading);
    font-size: calc(12px * var(--dpv-font-scale));
}

.dpv-history-row span,
.dpv-revision-item span,
.dpv-revision-item small {
    display: block;
    margin-top: 3px;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
}

.dpv-history-actions,
.dpv-icon-actions {
    display: inline-flex;
    align-items: center;
    justify-content: flex-end;
    flex-wrap: wrap;
    gap: 6px;
}

.dpv-icon-action {
    width: 34px;
    min-width: 34px;
    height: 32px;
    min-height: 32px;
    padding: 0;
    font-size: 15px;
}

/* Полноэкранный текстовый редактор */
.dpv-text-editor-panel.is-text-fullscreen {
    position: fixed !important;
    inset: 10px !important;
    z-index: 2147482000 !important;
    max-height: calc(100vh - 20px) !important;
    padding: 14px !important;
    overflow: auto !important;
    border-radius: var(--dpv-radius-md) !important;
}

.dpv-text-editor-panel.is-text-fullscreen .dpv-code-textarea,
.dpv-text-editor-panel.is-text-fullscreen .dpv-rich-textarea {
    min-height: calc(100vh - 180px) !important;
    max-height: calc(100vh - 180px) !important;
}


/* ==========================================================================
   12. Архивы, распаковка и дерево файлов
   --------------------------------------------------------------------------
   .dpv-archive-* — версии архивов.
   .dpv-extracted-* — распакованные версии.
   .dpv-file-tree-* — список файлов.
   ========================================================================== */

.dpv-archive-limits,
.dpv-import-note,
.dpv-status-note,
.dpv-code-warning {
    margin: 0 0 12px;
    padding: 10px 12px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-muted);
    background: var(--dpv-surface-3);
    font-size: calc(12px * var(--dpv-font-scale));
    line-height: 1.5;
}

.dpv-code-warning {
    color: #7A4A00;
    background: #FFF1D6;
    border-color: #F2D6A2;
}

.dpv-theme-dark .dpv-code-warning {
    color: #FFE2A8;
    background: #3B2A12;
    border-color: #5C4421;
}

.dpv-file-tree,
.dpv-code-tree {
    display: grid;
    gap: 3px;
    max-height: 520px;
    margin-top: 10px;
    padding: 8px;
    overflow: auto;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    background: var(--dpv-surface-2);
    box-shadow: var(--dpv-shadow-inset);
}

.dpv-extracted-card .dpv-file-tree {
    max-height: 220px;
    margin-bottom: 10px;
}

.dpv-file-tree-row,
.dpv-code-tree-row {
    display: grid;
    grid-template-columns: 24px minmax(0, 1fr) auto;
    align-items: center;
    gap: 8px;
    width: 100%;
    min-height: 30px;
    margin: 0;
    padding: 5px 8px 5px calc(8px + (var(--dpv-file-depth, 0) * 16px));
    border: 1px solid transparent;
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-text);
    background: transparent;
    font: inherit;
    font-size: calc(12px * var(--dpv-font-scale));
    text-align: left;
}

button.dpv-code-tree-row,
button.dpv-file-tree-row {
    cursor: pointer;
}

.dpv-file-tree-row:nth-child(odd),
.dpv-code-tree-row:nth-child(odd) {
    background: color-mix(in srgb, var(--dpv-surface-3) 48%, transparent);
}

.dpv-file-tree-row.is-folder,
.dpv-code-tree-row.is-folder {
    font-weight: 800;
}

.dpv-code-tree-row:hover,
.dpv-code-tree-row.is-selected,
.dpv-file-tree-row:hover {
    border-color: var(--dpv-primary-border);
    background: color-mix(in srgb, var(--dpv-primary) 20%, var(--dpv-surface));
}

.dpv-theme-dark .dpv-code-tree-row:hover,
.dpv-theme-dark .dpv-code-tree-row.is-selected,
.dpv-theme-dark .dpv-file-tree-row:hover {
    background: color-mix(in srgb, var(--dpv-primary) 28%, var(--dpv-surface-2));
}

.dpv-file-tree-icon,
.dpv-code-tree-icon {
    opacity: 0.92;
}

.dpv-file-tree-name,
.dpv-code-tree-name {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.dpv-file-tree-meta,
.dpv-code-tree-meta,
.dpv-code-checksum {
    color: var(--dpv-muted);
    font-family: var(--dpv-font-code);
    font-size: calc(11px * var(--dpv-font-scale));
    white-space: nowrap;
}

.dpv-code-tree-load {
    padding: 5px 9px;
    border-radius: var(--dpv-radius-sm);
    font-size: calc(11px * var(--dpv-font-scale));
    font-weight: 800;
}


/* ==========================================================================
   13. Код-редактор и просмотр файлов
   --------------------------------------------------------------------------
   .dpv-code-workbench — две колонки: дерево файлов + редактор/просмотр.
   .dpv-code-editor-shell — область подсветки и textarea.
   ========================================================================== */

.dpv-code-workbench {
    display: grid;
    grid-template-columns: minmax(250px, 32%) minmax(0, 1fr);
    gap: 12px;
    align-items: stretch;
    min-height: 0;
}

.dpv-code-tree-panel,
.dpv-code-editor-panel {
    min-width: 0;
}

.dpv-code-tree-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    margin-bottom: 10px;
    padding: 10px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    color: var(--dpv-text);
    background: var(--dpv-surface-2);
}

.dpv-code-tree-header strong,
.dpv-code-tree-header span {
    display: block;
}

.dpv-code-tree-header span {
    margin-top: 2px;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
}

.dpv-code-editor-empty,
.dpv-code-editor-card {
    min-height: 420px;
}

.dpv-code-editor-empty {
    display: grid;
    place-items: center;
    padding: 28px;
    text-align: center;
}

.dpv-code-toolbar h2 {
    margin: 0 0 3px;
    word-break: break-word;
}

.dpv-code-editor-shell {
    position: relative;
    height: min(68vh, 720px);
    min-height: 420px;
    overflow: hidden;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    background: #0E1726;
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.035), var(--dpv-shadow-soft);
}

.dpv-code-highlight,
.dpv-code-area {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    margin: 0;
    padding: 16px 18px;
    border: 0;
    border-radius: var(--dpv-radius-md);
    font-family: var(--dpv-font-code);
    font-size: calc(13px * var(--dpv-font-scale));
    line-height: 1.55;
    tab-size: 4;
    white-space: pre;
    overflow: auto;
}

.dpv-code-highlight {
    color: #D7E6FF;
    pointer-events: none;
}

.dpv-code-area {
    color: transparent;
    background: transparent;
    caret-color: #E0F7FF;
    resize: none;
    outline: none;
    -webkit-text-fill-color: transparent;
}

.dpv-code-area::selection {
    background: rgba(0, 191, 255, 0.32);
}

.dpv-code-area[readonly] {
    cursor: default;
}

/* Подсветка кода */
.dpv-code-token-keyword { color: #8CCBFF; font-weight: 750; }
.dpv-code-token-string { color: #98E6B4; }
.dpv-code-token-comment { color: #8A9AAD; font-style: italic; }
.dpv-code-token-tag { color: #FFB0B0; }
.dpv-code-token-variable { color: #F9DA8B; }
.dpv-code-token-selector { color: #C9B7FF; }
.dpv-code-token-property { color: #70E7F4; }
.dpv-code-token-heading { color: #F5A8D0; font-weight: 800; }

.dpv-code-status-row {
    justify-content: space-between;
    margin: 9px 0 0;
}

.dpv-code-status-row .is-ok,
[data-dpv-code-status].is-ok {
    color: var(--dpv-success);
}

.dpv-code-status-row .is-error,
[data-dpv-code-status].is-error {
    color: var(--dpv-danger);
}

.dpv-file-preview,
.dpv-file-preview-empty {
    margin-top: 12px;
    overflow: hidden;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    background: var(--dpv-surface-2);
}

.dpv-file-preview iframe {
    display: block;
    width: 100%;
    height: min(72vh, 760px);
    border: 0;
    background: #111827;
}

.dpv-file-preview img,
.dpv-file-preview video {
    display: block;
    max-width: 100%;
    max-height: 72vh;
    margin: 0 auto;
}

.dpv-file-preview audio {
    display: block;
    width: 100%;
    padding: 18px;
}

/* Компактная информация о файле в левой колонке */
.dpv-file-info-compact {
    display: grid;
    gap: 4px;
    margin: 8px 0;
    padding: 8px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-muted);
    background: var(--dpv-surface-3);
    font-size: calc(11px * var(--dpv-font-scale));
}

.dpv-file-info-compact :where(strong, span, small, em) {
    overflow-wrap: anywhere;
    word-break: break-word;
}

/* Полноэкранный режим распакованного проекта */
.dpv-extracted-tree-panel.is-extracted-fullscreen,
.dpv-extracted-tree-panel.is-code-fullscreen,
.dpv-code-panel.is-extracted-fullscreen,
.dpv-code-panel.is-code-fullscreen {
    position: fixed !important;
    inset: 8px !important;
    z-index: 2147483000 !important;
    display: flex !important;
    flex-direction: column !important;
    min-height: 0 !important;
    margin: 0 !important;
    padding: 10px !important;
    overflow: hidden !important;
    border-radius: var(--dpv-radius-md) !important;
    background: var(--dpv-bg) !important;
}

.dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-section-head,
.dpv-extracted-tree-panel.is-code-fullscreen .dpv-section-head {
    flex: 0 0 auto;
    margin: 0 0 8px;
    padding: 8px;
}

.dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-section-head p,
.dpv-extracted-tree-panel.is-code-fullscreen .dpv-section-head p {
    display: none;
}

.dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-code-workbench,
.dpv-extracted-tree-panel.is-code-fullscreen .dpv-code-workbench,
.dpv-code-panel.is-extracted-fullscreen .dpv-code-workbench,
.dpv-code-panel.is-code-fullscreen .dpv-code-workbench {
    flex: 1 1 auto;
    grid-template-columns: minmax(220px, 300px) minmax(0, 1fr);
    min-height: 0;
    height: auto;
    overflow: hidden;
}

.dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-code-tree-panel,
.dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-code-editor-panel,
.dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-code-editor-card,
.dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-code-editor-shell,
.dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-file-preview,
.dpv-code-panel.is-code-fullscreen .dpv-code-tree-panel,
.dpv-code-panel.is-code-fullscreen .dpv-code-editor-panel {
    min-height: 0 !important;
    max-height: none !important;
    overflow: auto !important;
}

.dpv-portal.is-extracted-workbench-fullscreen .dpv-topbar,
.dpv-portal.is-extracted-workbench-fullscreen .dpv-sidebar,
.dpv-portal.is-code-workbench-fullscreen .dpv-topbar,
.dpv-portal.is-code-workbench-fullscreen .dpv-sidebar {
    opacity: 0.22;
    pointer-events: none;
}


/* ==========================================================================
   14. Финальное хранилище
   --------------------------------------------------------------------------
   .dpv-final-* — контейнеры и файлы финальных версий.
   ========================================================================== */

.dpv-final-section-head {
    align-items: flex-start;
}

.dpv-final-toolbar {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 12px;
    margin: 12px 0 16px;
    padding: 12px;
}

.dpv-final-search {
    min-width: min(420px, 100%);
}

.dpv-final-container-card,
.dpv-final-file-card {
    display: grid;
    gap: 10px;
}

.dpv-final-preview-files {
    min-height: 34px;
}

.dpv-final-mini-file {
    display: flex;
    align-items: center;
    gap: 8px;
    width: 100%;
    min-height: 32px;
    padding: 7px 10px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-text);
    background: var(--dpv-surface-2);
    cursor: pointer;
    font-size: calc(12px * var(--dpv-font-scale));
    font-weight: 750;
    text-align: left;
}

.dpv-final-mini-file:hover {
    border-color: var(--dpv-primary-border);
    background: color-mix(in srgb, var(--dpv-primary) 16%, var(--dpv-surface));
}


/* ==========================================================================
   15. Календарь и задачи
   --------------------------------------------------------------------------
   .dpv-task-* — задачи, фильтры, календарь, комментарии и ссылки.
   ========================================================================== */

.dpv-task-toolbar {
    display: grid;
    grid-template-columns: repeat(5, minmax(132px, 1fr)) auto;
    gap: 10px;
    align-items: end;
    margin: 0 0 12px;
    padding: 12px;
}

.dpv-task-toolbar label span {
    color: var(--dpv-muted);
    font-size: calc(10.5px * var(--dpv-font-scale));
    font-weight: 850;
    letter-spacing: 0.035em;
    text-transform: uppercase;
}

.dpv-task-nav {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 7px;
}

.dpv-task-summary {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin: 0 0 12px;
}

.dpv-task-card {
    display: grid;
    gap: 10px;
}

.dpv-task-overdue-panel {
    display: grid;
    gap: 8px;
    margin: 0 0 14px;
    padding: 12px;
    border: 1px solid color-mix(in srgb, var(--dpv-danger) 45%, var(--dpv-line));
    border-radius: var(--dpv-radius-md);
    color: var(--dpv-danger);
    background: color-mix(in srgb, var(--dpv-danger) 9%, var(--dpv-surface));
}

.dpv-theme-dark .dpv-task-overdue-panel {
    background: color-mix(in srgb, var(--dpv-danger) 18%, var(--dpv-surface));
}

.dpv-task-overdue-panel button {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 10px;
    width: 100%;
    padding: 9px 11px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-text);
    background: var(--dpv-surface);
    cursor: pointer;
    text-align: left;
}

.dpv-task-calendar,
.dpv-task-week-grid,
.dpv-task-day-list,
.dpv-task-detail-card,
.dpv-task-comment,
.dpv-task-link {
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    color: var(--dpv-text);
    background: var(--dpv-surface);
    box-shadow: var(--dpv-shadow-soft);
}

.dpv-task-calendar {
    padding: 12px;
}

.dpv-task-calendar-title {
    margin: 0 0 10px;
}

.dpv-task-month-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(0, 1fr));
    gap: 8px;
}

.dpv-task-month-head,
.dpv-task-month-cell {
    min-height: 38px;
    padding: 8px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    background: var(--dpv-surface-2);
}

.dpv-task-month-head {
    min-height: auto;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
    font-weight: 850;
    text-align: center;
}

.dpv-task-month-cell strong {
    display: block;
    margin-bottom: 6px;
    color: var(--dpv-heading);
    font-size: calc(12px * var(--dpv-font-scale));
}

.dpv-task-month-cell.is-empty {
    opacity: 0.45;
}

.dpv-task-month-item,
.dpv-task-day-chip {
    display: block;
    width: 100%;
    margin: 4px 0 0;
    padding: 5px 7px;
    overflow: hidden;
    border: 1px solid color-mix(in srgb, var(--dpv-primary) 45%, var(--dpv-line));
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-primary-text);
    background: color-mix(in srgb, var(--dpv-primary) 45%, var(--dpv-surface));
    cursor: pointer;
    font-size: calc(11px * var(--dpv-font-scale));
    font-weight: 800;
    text-align: left;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.dpv-task-week-grid {
    display: grid;
    grid-template-columns: repeat(7, minmax(180px, 1fr));
    gap: 10px;
    padding: 12px;
    overflow-x: auto;
}

.dpv-task-day-list {
    display: grid;
    align-content: start;
    gap: 7px;
    min-height: 160px;
    padding: 12px;
}

.dpv-task-detail-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 12px;
    margin: 14px 0 20px;
}

.dpv-task-detail-card,
.dpv-task-comment,
.dpv-task-link {
    padding: 12px;
}

.dpv-task-comment > div:first-child {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
}

.dpv-task-link a {
    color: var(--dpv-info);
    font-weight: 800;
    word-break: break-word;
}


/* ==========================================================================
   16. Модальные окна
   --------------------------------------------------------------------------
   .dpv-modal-backdrop — затемнение.
   .dpv-structure-modal / .dpv-login-modal / .dpv-command-modal — окна.
   ========================================================================== */

.dpv-modal-backdrop,
.dpv-login-overlay,
.dpv-command-modal-backdrop,
.dpv-confirm-modal-backdrop,
.dpv-display-modal-backdrop {
    position: fixed;
    inset: 0;
    z-index: 2147481000;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 18px;
    overflow-y: auto;
    background: rgba(8, 13, 24, 0.48);
}

.dpv-structure-modal,
.dpv-login-modal,
.dpv-command-modal,
.dpv-confirm-modal,
.dpv-display-modal,
.dpv-text-modal-form,
.dpv-archive-modal-form,
.dpv-final-container-modal-form,
.dpv-final-file-modal-form,
.dpv-task-modal-form,
.dpv-task-comment-modal-form,
.dpv-task-link-modal-form,
.dpv-import-export-modal-form {
    width: min(100%, 620px);
    max-height: calc(100dvh - 36px);
    padding: 18px;
    overflow-y: auto;
    overscroll-behavior: contain;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-lg);
    color: var(--dpv-text);
    background: var(--dpv-surface);
    box-shadow: 0 30px 90px rgba(0, 0, 0, 0.28);
}

.dpv-command-modal {
    width: min(760px, calc(100vw - 28px));
}

.dpv-confirm-modal {
    display: grid;
    grid-template-columns: 52px minmax(0, 1fr);
    gap: 14px;
    width: min(520px, calc(100vw - 28px));
}

.dpv-modal-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 14px;
    margin-bottom: 14px;
}

.dpv-modal-head h2,
.dpv-login-modal h2 {
    margin: 0;
}

.dpv-modal-close {
    width: 34px;
    height: 34px;
    min-width: 34px;
    padding: 0;
    font-size: 22px;
    line-height: 1;
}


/* ==========================================================================
   17. Командная палитра и глобальный поиск
   --------------------------------------------------------------------------
   Ctrl+K, быстрый поиск, последние проекты.
   ========================================================================== */

.dpv-global-search {
    position: relative;
    display: block;
    min-width: min(100%, 360px);
    flex: 1;
}

.dpv-global-search::before {
    content: "⌕";
    position: absolute;
    left: 13px;
    top: 50%;
    z-index: 1;
    transform: translateY(-50%);
    color: var(--dpv-muted);
    font-size: 16px;
    line-height: 1;
}

.dpv-global-search input {
    padding-left: 38px;
}

.dpv-command-search-field {
    margin-top: 12px;
}

.dpv-command-results {
    display: grid;
    gap: 8px;
    max-height: min(520px, 55vh);
    margin-top: 12px;
    padding: 4px;
    overflow: auto;
}

.dpv-command-result {
    display: grid;
    grid-template-columns: 40px minmax(0, 1fr);
    align-items: center;
    gap: 10px;
    width: 100%;
    padding: 10px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    color: var(--dpv-text);
    background: var(--dpv-surface-2);
    cursor: pointer;
    text-align: left;
}

.dpv-command-result:hover,
.dpv-command-result.is-active {
    border-color: var(--dpv-primary-border);
    background: color-mix(in srgb, var(--dpv-primary) 18%, var(--dpv-surface));
}

.dpv-command-result-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-heading);
    background: var(--dpv-surface-3);
    font-size: 20px;
}

.dpv-command-result strong,
.dpv-command-result em {
    display: block;
    min-width: 0;
}

.dpv-command-result strong {
    overflow: hidden;
    color: var(--dpv-heading);
    font-style: normal;
    font-weight: 850;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.dpv-command-result em {
    margin-top: 3px;
    overflow: hidden;
    color: var(--dpv-muted);
    font-size: calc(12px * var(--dpv-font-scale));
    font-style: normal;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.dpv-command-hints {
    display: flex;
    flex-wrap: wrap;
    gap: 8px;
    margin-top: 12px;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
}

.dpv-command-hints span {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    padding: 6px 8px;
    border-radius: 999px;
    background: var(--dpv-surface-3);
}

.dpv-project-shortcuts {
    display: grid;
    gap: 10px;
}

.dpv-shortcut-title {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 8px;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
    font-weight: 800;
    letter-spacing: 0.04em;
    text-transform: uppercase;
}

.dpv-shortcut-project {
    display: grid;
    grid-template-columns: 32px minmax(0, 1fr);
    align-items: flex-start;
    gap: 8px;
    width: 100%;
    padding: 8px;
    cursor: pointer;
    text-align: left;
}

.dpv-shortcut-project-title,
.dpv-shortcut-project-topic {
    display: block;
    min-width: 0;
    overflow-wrap: anywhere;
    white-space: normal;
}

.dpv-shortcut-project-title {
    color: var(--dpv-heading);
    font-weight: 850;
}

.dpv-shortcut-project-topic {
    margin-top: 2px;
    color: var(--dpv-muted);
    font-size: calc(11px * var(--dpv-font-scale));
}


/* ==========================================================================
   18. Toast, loading, tooltips
   --------------------------------------------------------------------------
   Всплывающие сообщения, загрузка, подсказки поверх всего.
   ========================================================================== */

.dpv-loading-overlay {
    position: fixed;
    inset: 0;
    z-index: 2147482500;
    display: grid;
    place-items: center;
    background: rgba(8, 13, 24, 0.28);
    pointer-events: none;
}

.dpv-loader-card,
.dpv-loading-card {
    display: grid;
    justify-items: center;
    gap: 8px;
    width: min(320px, calc(100vw - 34px));
    padding: 18px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-lg);
    color: var(--dpv-text);
    background: var(--dpv-surface);
    box-shadow: var(--dpv-shadow);
    text-align: center;
}

.dpv-loader-ring {
    width: 32px;
    height: 32px;
    border: 4px solid color-mix(in srgb, var(--dpv-primary) 18%, transparent);
    border-top-color: var(--dpv-primary);
    border-radius: 50%;
    animation: dpvSpin 0.85s linear infinite;
}

@keyframes dpvSpin {
    to { transform: rotate(360deg); }
}

.dpv-toast {
    position: fixed;
    right: 20px;
    bottom: 20px;
    z-index: 2147482600;
    display: grid;
    grid-template-columns: 30px minmax(0, 1fr);
    align-items: center;
    gap: 10px;
    width: min(420px, calc(100vw - 36px));
    padding: 12px 14px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    color: var(--dpv-text);
    background: var(--dpv-surface);
    box-shadow: var(--dpv-shadow);
}

.dpv-toast-icon {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 30px;
    height: 30px;
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-primary-text);
    background: var(--dpv-primary);
    font-weight: 900;
}

.dpv-toast-message {
    color: var(--dpv-text);
    font-weight: 750;
    line-height: 1.4;
}

.dpv-toast.is-success .dpv-toast-icon {
    color: #FFFFFF;
    background: var(--dpv-success);
}

.dpv-toast.is-error .dpv-toast-icon {
    color: #FFFFFF;
    background: var(--dpv-danger);
}

.dpv-live-tooltip {
    position: fixed;
    z-index: 2147483200;
    max-width: 280px;
    padding: 8px 10px;
    border-radius: var(--dpv-radius-sm);
    color: #FFFFFF;
    background: rgba(15, 23, 42, 0.96);
    box-shadow: 0 14px 34px rgba(0, 0, 0, 0.30);
    font-size: calc(12px * var(--dpv-font-scale));
    font-weight: 750;
    line-height: 1.35;
    text-align: center;
    transform: translateX(-50%);
    pointer-events: none;
}

/* Отключаем старые CSS-tooltip, чтобы не было черной линии/двойных подсказок */
[data-dpv-tip]::before,
[data-dpv-tip]::after {
    display: none !important;
}


/* ==========================================================================
   19. Палитра значков и настройки отображения
   --------------------------------------------------------------------------
   .dpv-icon-palette — выбор значка.
   .dpv-display-* — настройки размера шрифта/темы/шрифтов.
   ========================================================================== */

.dpv-icon-palette {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
    margin-top: 8px;
}

.dpv-icon-choice {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 34px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-sm);
    color: var(--dpv-heading);
    background: var(--dpv-surface-3);
    box-shadow: var(--dpv-shadow-soft);
    cursor: pointer;
    font-size: 19px;
}

.dpv-icon-choice:hover {
    border-color: var(--dpv-primary-border);
    background: color-mix(in srgb, var(--dpv-primary) 18%, var(--dpv-surface));
}

.dpv-display-controls {
    display: grid;
    gap: 12px;
}

.dpv-display-preview {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    padding: 10px;
    border: 1px solid var(--dpv-line);
    border-radius: var(--dpv-radius-md);
    background: var(--dpv-surface-2);
}


/* ==========================================================================
   20. Скроллбары
   --------------------------------------------------------------------------
   Единый аккуратный скролл внутри программы.
   ========================================================================== */

.dpv-portal {
    scrollbar-width: thin;
    scrollbar-color: color-mix(in srgb, var(--dpv-primary) 55%, var(--dpv-line)) transparent;
}

.dpv-portal ::-webkit-scrollbar {
    width: 10px;
    height: 10px;
}

.dpv-portal ::-webkit-scrollbar-track {
    background: transparent;
}

.dpv-portal ::-webkit-scrollbar-thumb {
    border: 2px solid transparent;
    border-radius: 999px;
    background: color-mix(in srgb, var(--dpv-primary) 55%, var(--dpv-line));
    background-clip: padding-box;
}


/* ==========================================================================
   21. Адаптивность
   --------------------------------------------------------------------------
   Ноутбуки, планшеты, мобильные экраны.
   ========================================================================== */

@media (max-width: 1320px) {
    .dpv-topbar {
        grid-template-columns: 1fr;
        align-items: stretch;
    }

    .dpv-commandbar,
    .dpv-topbar-actions {
        justify-content: flex-start;
    }

    .dpv-task-toolbar {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .dpv-task-detail-grid {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 920px) {
    .dpv-layout,
    .dpv-shell.is-sidebar-collapsed .dpv-layout,
    .dpv-portal.is-sidebar-collapsed .dpv-shell .dpv-layout {
        grid-template-columns: 1fr;
    }

    .dpv-sidebar {
        max-height: 240px;
        border-right: 0;
        border-bottom: 1px solid var(--dpv-line);
    }

    .dpv-shell.is-sidebar-collapsed .dpv-sidebar,
    .dpv-portal.is-sidebar-collapsed .dpv-sidebar {
        max-height: 58px;
        width: auto;
        min-width: 0;
        max-width: none;
    }

    .dpv-project-grid,
    .dpv-module-grid,
    .dpv-text-grid,
    .dpv-archive-grid,
    .dpv-extracted-grid,
    .dpv-final-grid,
    .dpv-final-file-grid,
    .dpv-export-grid,
    .dpv-task-month-grid {
        grid-template-columns: 1fr;
    }

    .dpv-code-workbench,
    .dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-code-workbench,
    .dpv-extracted-tree-panel.is-code-fullscreen .dpv-code-workbench,
    .dpv-code-panel.is-extracted-fullscreen .dpv-code-workbench,
    .dpv-code-panel.is-code-fullscreen .dpv-code-workbench {
        grid-template-columns: 1fr;
    }

    .dpv-extracted-tree-panel.is-extracted-fullscreen .dpv-code-tree-panel,
    .dpv-extracted-tree-panel.is-code-fullscreen .dpv-code-tree-panel {
        max-height: 34vh;
    }
}

@media (max-width: 680px) {
    .dpv-topbar,
    .dpv-sidebar,
    .dpv-main {
        padding: 10px;
    }

    .dpv-commandbar,
    .dpv-topbar-actions,
    .dpv-actions-row,
    .dpv-card-actions,
    .dpv-modal-actions,
    .dpv-code-toolbar,
    .dpv-task-card-top,
    .dpv-folder-card,
    .dpv-entity-hero,
    .dpv-confirm-modal {
        display: grid;
        grid-template-columns: 1fr;
        align-items: stretch;
    }

    .dpv-btn,
    .dpv-mini-btn,
    .dpv-command-trigger {
        width: 100%;
    }

    .dpv-brand-subtitle {
        display: none;
    }

    .dpv-task-month-head {
        display: none;
    }

    .dpv-subtask-list {
        margin-left: 8px;
        padding-left: 10px;
    }

    .dpv-toast {
        right: 12px;
        bottom: 12px;
        width: calc(100vw - 24px);
    }
}

@media (max-height: 720px) {
    .dpv-modal-backdrop,
    .dpv-login-overlay,
    .dpv-command-modal-backdrop,
    .dpv-confirm-modal-backdrop,
    .dpv-display-modal-backdrop {
        align-items: flex-start;
        padding-top: 8px;
        padding-bottom: 8px;
    }

    .dpv-structure-modal,
    .dpv-login-modal,
    .dpv-command-modal,
    .dpv-confirm-modal,
    .dpv-display-modal,
    .dpv-text-modal-form,
    .dpv-archive-modal-form,
    .dpv-final-container-modal-form,
    .dpv-final-file-modal-form,
    .dpv-task-modal-form,
    .dpv-task-comment-modal-form,
    .dpv-task-link-modal-form,
    .dpv-import-export-modal-form {
        max-height: calc(100dvh - 16px);
    }
}


/* ==========================================================================
   22. Уменьшение анимаций
   --------------------------------------------------------------------------
   Для пользователей с prefers-reduced-motion.
   ========================================================================== */

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

/* ==========================================================================
   23. DPV 1.0.28 — финальный слой порядка интерфейса
   --------------------------------------------------------------------------
   Этот блок заменяет прежние конфликтующие hotfix-слои.
   Задачи:
   1) стабильные отступы 15px между кнопками, метаданными, карточками и полями;
   2) красные кнопки для удаления, корзины, закрытия, отмены, сброса и очистки;
   3) читаемый текстовый раздел в темной теме;
   4) ровный тулбар выбора формата текста;
   5) компактное, читаемое левое меню без вертикального дробления слов;
   6) более легкая отрисовка без тяжелых универсальных селекторов.
   ========================================================================== */

.dpv-portal {
    --dpv-ui-gap: 15px;
    --dpv-ui-gap-sm: 10px;
    --dpv-ui-inner: 15px;
    --dpv-ui-field-y: 10px;
    --dpv-ui-field-x: 15px;
}

/* Основные рабочие области: одинаковый внутренний воздух. */
.dpv-portal .dpv-main,
.dpv-portal .dpv-sidebar,
.dpv-portal .dpv-workspace-board {
    padding: var(--dpv-ui-inner) !important;
}

/* Верхняя шапка: отдельный плотный ритм для иконок, чтобы они были видны и не липли. */
.dpv-portal .dpv-topbar {
    min-height: 64px !important;
    padding: 9px 15px !important;
    gap: var(--dpv-ui-gap) !important;
}

.dpv-portal .dpv-commandbar,
.dpv-portal .dpv-topbar-actions {
    gap: var(--dpv-ui-gap) !important;
}

.dpv-portal .dpv-top-icon,
.dpv-portal .dpv-rail-btn,
.dpv-portal .dpv-icon-btn {
    width: 42px !important;
    min-width: 42px !important;
    height: 42px !important;
    min-height: 42px !important;
    padding: 0 !important;
    font-size: 21px !important;
    line-height: 1 !important;
}

.dpv-portal .dpv-top-icon > span,
.dpv-portal .dpv-rail-btn > span,
.dpv-portal .dpv-icon-btn > span {
    font-size: 21px !important;
    line-height: 1 !important;
}

/* Все строки действий и мета-строки получают нормальный горизонтальный/вертикальный ритм. */
.dpv-portal :is(
    .dpv-actions-row,
    .dpv-card-actions,
    .dpv-modal-actions,
    .dpv-code-toolbar-actions,
    .dpv-history-actions,
    .dpv-icon-actions,
    .dpv-task-nav,
    .dpv-archive-badges,
    .dpv-text-badges,
    .dpv-task-badges,
    .dpv-project-top,
    .dpv-folder-main,
    .dpv-text-card-top,
    .dpv-archive-top,
    .dpv-extracted-top,
    .dpv-final-container-top,
    .dpv-final-file-top,
    .dpv-task-card-top,
    .dpv-text-meta,
    .dpv-archive-meta,
    .dpv-task-meta,
    .dpv-code-status-row,
    .dpv-command-hints,
    .dpv-display-preview
) {
    gap: var(--dpv-ui-gap) !important;
    row-gap: var(--dpv-ui-gap) !important;
    column-gap: var(--dpv-ui-gap) !important;
}

/* Все сетки и списки — 15px между элементами. */
.dpv-portal :is(
    .dpv-project-grid,
    .dpv-module-grid,
    .dpv-text-grid,
    .dpv-archive-grid,
    .dpv-extracted-grid,
    .dpv-final-grid,
    .dpv-final-file-grid,
    .dpv-export-grid,
    .dpv-folder-list,
    .dpv-task-list,
    .dpv-subtask-list,
    .dpv-history-list,
    .dpv-revision-list,
    .dpv-task-comment-list,
    .dpv-task-link-list,
    .dpv-final-preview-files,
    .dpv-project-shortcuts,
    .dpv-command-results,
    .dpv-display-controls,
    .dpv-file-tree,
    .dpv-code-tree,
    .dpv-task-month-grid,
    .dpv-task-week-grid,
    .dpv-task-day-list,
    .dpv-trash-panel
) {
    gap: var(--dpv-ui-gap) !important;
}

/* Карточки и панели: аккуратный внутренний отступ 15px. */
.dpv-portal :is(
    .dpv-welcome-card,
    .dpv-roadmap-card,
    .dpv-module-card,
    .dpv-workspace-head,
    .dpv-section,
    .dpv-section-head,
    .dpv-project-card,
    .dpv-folder-card,
    .dpv-entity-hero,
    .dpv-empty-board,
    .dpv-state-card,
    .dpv-inspector-card,
    .dpv-text-card,
    .dpv-text-editor-panel,
    .dpv-history-panel,
    .dpv-history-row,
    .dpv-revision-item,
    .dpv-archive-card,
    .dpv-extracted-card,
    .dpv-extracted-tree-panel,
    .dpv-final-container-card,
    .dpv-final-file-card,
    .dpv-final-file-row,
    .dpv-task-card,
    .dpv-export-panel,
    .dpv-export-card,
    .dpv-code-panel,
    .dpv-code-editor-card,
    .dpv-code-tree-header,
    .dpv-shortcut-group,
    .dpv-shortcut-project,
    .dpv-trash-block,
    .dpv-trash-row,
    .dpv-task-toolbar,
    .dpv-final-toolbar,
    .dpv-task-detail-card,
    .dpv-task-comment,
    .dpv-task-link,
    .dpv-task-calendar,
    .dpv-task-week-grid,
    .dpv-task-day-list,
    .dpv-modal-scroll,
    .dpv-structure-modal,
    .dpv-login-modal,
    .dpv-command-modal,
    .dpv-confirm-modal,
    .dpv-display-modal
) {
    padding: var(--dpv-ui-inner) !important;
}

/* Внутренний вертикальный ритм карточек. */
.dpv-portal :is(
    .dpv-workspace-board,
    .dpv-main,
    .dpv-section,
    .dpv-workspace-head,
    .dpv-entity-hero,
    .dpv-project-card,
    .dpv-folder-card,
    .dpv-text-card,
    .dpv-archive-card,
    .dpv-extracted-card,
    .dpv-final-container-card,
    .dpv-final-file-card,
    .dpv-task-card,
    .dpv-module-card,
    .dpv-export-card,
    .dpv-text-editor-panel,
    .dpv-history-panel,
    .dpv-code-panel,
    .dpv-code-editor-card,
    .dpv-export-panel,
    .dpv-final-toolbar,
    .dpv-task-toolbar,
    .dpv-structure-modal,
    .dpv-login-modal,
    .dpv-command-modal,
    .dpv-confirm-modal,
    .dpv-display-modal
) > * + * {
    margin-top: var(--dpv-ui-gap) !important;
}

/* Служебные плашки и чипсы: компактно, но с нормальным внутренним воздухом. */
.dpv-portal :is(
    .dpv-import-note,
    .dpv-status-note,
    .dpv-form-message,
    .dpv-empty-small,
    .dpv-empty-inline,
    .dpv-shortcut-empty,
    .dpv-loading-line,
    .dpv-history-empty,
    .dpv-file-tree-empty,
    .dpv-code-editor-empty,
    .dpv-trash-empty,
    .dpv-archive-limits,
    .dpv-editor-help,
    .dpv-code-warning,
    .dpv-file-info-compact,
    .dpv-breadcrumbs,
    .dpv-feature-tabs,
    .dpv-version-pill,
    .dpv-user-pill,
    .dpv-tree-count,
    .dpv-muted-note,
    .dpv-text-mode-pill,
    .dpv-draft-pill,
    .dpv-saved-pill,
    .dpv-editor-status,
    .dpv-chip,
    .dpv-badge,
    .dpv-pill,
    .dpv-count-pill,
    .dpv-stat-pill,
    .dpv-project-top span,
    .dpv-task-summary span,
    .dpv-task-badges span,
    .dpv-text-badges span,
    .dpv-archive-badges span,
    .dpv-project-smart-meta span,
    .dpv-mini-stats span,
    .dpv-final-mini-file,
    .dpv-command-hints span
) {
    padding: 8px 15px !important;
}

/* Поля и селекты: нормальный внутренний отступ. */
.dpv-portal :is(
    .dpv-field input,
    .dpv-field textarea,
    .dpv-field select,
    .dpv-global-search input,
    .dpv-command-search-field input,
    .dpv-final-search input,
    .dpv-task-toolbar input,
    .dpv-task-toolbar select,
    .dpv-editor-format,
    .dpv-code-textarea,
    .dpv-rich-textarea
) {
    padding: var(--dpv-ui-field-y) var(--dpv-ui-field-x) !important;
}

.dpv-portal :is(.dpv-field, .dpv-final-search, .dpv-task-toolbar label) {
    gap: var(--dpv-ui-gap-sm) !important;
    margin-bottom: var(--dpv-ui-gap) !important;
}

/* Кнопки не получают внешние margin: расстояния задаются через gap контейнеров. */
.dpv-portal :is(.dpv-btn, .dpv-mini-btn, .dpv-icon-btn, .dpv-top-icon, .dpv-rail-btn, .dpv-command-trigger, .dpv-login-submit, a.dpv-btn, button.dpv-btn) {
    margin: 0 !important;
}

/* Быстрые действия проекта: кнопки и метаданные не слипаются. */
.dpv-portal .dpv-project-smart-actions {
    display: grid !important;
    gap: var(--dpv-ui-gap) !important;
    margin-top: var(--dpv-ui-gap) !important;
}

.dpv-portal .dpv-project-smart-buttons,
.dpv-portal .dpv-project-smart-meta {
    display: flex !important;
    align-items: center !important;
    flex-wrap: wrap !important;
    gap: var(--dpv-ui-gap) !important;
    margin: 0 !important;
}

.dpv-portal .dpv-project-smart-meta span {
    margin: 0 !important;
}

/* Действия карточек: отдельный отступ сверху, чтобы не липли к метаданным. */
.dpv-portal .dpv-card-actions {
    margin-top: var(--dpv-ui-gap) !important;
}

/* Текстовый редактор: ровная структура выбора формата и кнопок. */
.dpv-portal .dpv-text-editor-toolbar {
    display: grid !important;
    grid-template-columns: 1fr !important;
    gap: var(--dpv-ui-gap) !important;
    margin-bottom: var(--dpv-ui-gap) !important;
}

.dpv-portal .dpv-text-editor-toolbar .dpv-text-editor-meta,
.dpv-portal .dpv-text-editor-toolbar .dpv-actions-row {
    display: flex !important;
    align-items: center !important;
    flex-wrap: wrap !important;
    gap: var(--dpv-ui-gap) !important;
    min-width: 0 !important;
    margin: 0 !important;
}

.dpv-portal .dpv-text-editor-toolbar .dpv-actions-row {
    justify-content: flex-end !important;
}

.dpv-portal .dpv-text-editor-toolbar .dpv-editor-format {
    flex: 1 1 320px !important;
    width: auto !important;
    min-width: min(100%, 260px) !important;
    max-width: 100% !important;
    margin: 0 !important;
}

@media (max-width: 980px) {
    .dpv-portal .dpv-text-editor-toolbar .dpv-actions-row {
        justify-content: flex-start !important;
    }
}

/* Светлая тема: оставляем удачную светлую палитру и серые кнопки. */
.dpv-portal.dpv-theme-light {
    --dpv-primary: #E5E7EB;
    --dpv-primary-hover: #EEF0F3;
    --dpv-primary-active: #D7DBE0;
    --dpv-primary-border: #B8C0CC;
    --dpv-primary-text: #111827;
}

.dpv-portal.dpv-theme-light :is(.dpv-btn, .dpv-mini-btn, .dpv-icon-btn, .dpv-top-icon, .dpv-rail-btn, .dpv-command-trigger, .dpv-login-submit, a.dpv-btn, button.dpv-btn):not(.dpv-btn-danger):not(.is-danger):not([data-dpv-open-trash]):not([data-dpv-trash]):not([data-dpv-trash-text]):not([data-dpv-trash-archive]):not([data-dpv-trash-extracted]):not([data-dpv-trash-final-container]):not([data-dpv-trash-final-file]):not([data-dpv-trash-task]):not([data-dpv-trash-task-comment]):not([data-dpv-trash-task-link]):not([data-dpv-delete]):not([data-dpv-delete-revision]):not([data-dpv-delete-file-revision]):not([data-dpv-clear-text]):not([data-dpv-discard-draft]):not([data-dpv-confirm-cancel]):not([data-dpv-close]) {
    color: #111827 !important;
    -webkit-text-fill-color: #111827 !important;
    background: linear-gradient(180deg, #F3F4F6 0%, #E5E7EB 58%, #D7DBE0 100%) !important;
    border-color: #B8C0CC !important;
    box-shadow: 0 2px 0 rgba(120, 132, 150, 0.38), 0 7px 14px rgba(31, 41, 55, 0.10), inset 0 1px 0 rgba(255,255,255,0.72) !important;
}

.dpv-portal.dpv-theme-light :is(.dpv-btn, .dpv-mini-btn, .dpv-icon-btn, .dpv-top-icon, .dpv-rail-btn, .dpv-command-trigger, .dpv-login-submit, a.dpv-btn, button.dpv-btn):not(.dpv-btn-danger):not(.is-danger):not([data-dpv-open-trash]):not([data-dpv-trash]) :is(span,strong,small,em,i,b,kbd,svg) {
    color: inherit !important;
    -webkit-text-fill-color: inherit !important;
}

/* Темная тема: обычные рабочие кнопки насыщенно-синие, включая меню и шапку. */
.dpv-portal.dpv-theme-dark {
    --dpv-primary: #2563EB;
    --dpv-primary-hover: #3B82F6;
    --dpv-primary-active: #1D4ED8;
    --dpv-primary-border: #6EA2FF;
    --dpv-primary-text: #FFFFFF;
    --dpv-danger: #D94343;
    --dpv-danger-hover: #EA5555;
    --dpv-danger-active: #B83232;
    --dpv-danger-border: #FF7A7A;
    --dpv-danger-text: #FFFFFF;
}

.dpv-portal.dpv-theme-dark :is(.dpv-btn, .dpv-mini-btn, .dpv-icon-btn, .dpv-top-icon, .dpv-rail-btn, .dpv-command-trigger, .dpv-login-submit, a.dpv-btn, button.dpv-btn, .dpv-sidebar .dpv-tree-button.is-active, .dpv-sidebar .dpv-nav-item.is-active, .dpv-sidebar .dpv-shortcut-project, .dpv-sidebar .dpv-tree-toggle):not(.dpv-btn-danger):not(.is-danger):not([data-dpv-open-trash]):not([data-dpv-trash]):not([data-dpv-trash-text]):not([data-dpv-trash-archive]):not([data-dpv-trash-extracted]):not([data-dpv-trash-final-container]):not([data-dpv-trash-final-file]):not([data-dpv-trash-task]):not([data-dpv-trash-task-comment]):not([data-dpv-trash-task-link]):not([data-dpv-delete]):not([data-dpv-delete-revision]):not([data-dpv-delete-file-revision]):not([data-dpv-clear-text]):not([data-dpv-discard-draft]):not([data-dpv-confirm-cancel]):not([data-dpv-close]) {
    color: #FFFFFF !important;
    -webkit-text-fill-color: #FFFFFF !important;
    background: linear-gradient(180deg, #3B82F6 0%, #2563EB 58%, #1D4ED8 100%) !important;
    border-color: #6EA2FF !important;
    box-shadow: 0 2px 0 rgba(11,35,92,0.80), 0 8px 16px rgba(37,99,235,0.28), inset 0 1px 0 rgba(255,255,255,0.16) !important;
}

.dpv-portal.dpv-theme-dark :is(.dpv-btn, .dpv-mini-btn, .dpv-icon-btn, .dpv-top-icon, .dpv-rail-btn, .dpv-command-trigger, .dpv-login-submit, a.dpv-btn, button.dpv-btn, .dpv-sidebar .dpv-tree-button.is-active, .dpv-sidebar .dpv-nav-item.is-active, .dpv-sidebar .dpv-shortcut-project, .dpv-sidebar .dpv-tree-toggle) :is(span,strong,small,em,i,b,kbd,svg) {
    color: inherit !important;
    -webkit-text-fill-color: inherit !important;
}

/* Удаление, корзина, закрыть, отменить, сбросить и очистить — всегда красные. */
html body .dpv-portal :is(
    .dpv-btn-danger,
    .dpv-mini-btn.is-danger,
    .is-danger,
    .dpv-modal-close,
    [data-dpv-open-trash],
    [data-dpv-trash],
    [data-dpv-trash-topic],
    [data-dpv-trash-project],
    [data-dpv-trash-folder],
    [data-dpv-trash-text],
    [data-dpv-trash-archive],
    [data-dpv-trash-extracted],
    [data-dpv-trash-final-container],
    [data-dpv-trash-final-file],
    [data-dpv-trash-task],
    [data-dpv-trash-task-comment],
    [data-dpv-trash-task-link],
    [data-dpv-delete],
    [data-dpv-delete-topic],
    [data-dpv-delete-project],
    [data-dpv-delete-folder],
    [data-dpv-delete-text],
    [data-dpv-delete-archive],
    [data-dpv-delete-final-file],
    [data-dpv-delete-final-container],
    [data-dpv-delete-revision],
    [data-dpv-delete-text-revision],
    [data-dpv-delete-file-revision],
    [data-dpv-remove],
    [data-dpv-remove-revision],
    [data-dpv-clear-text],
    [data-dpv-discard-draft],
    [data-dpv-confirm-cancel],
    [data-dpv-cancel],
    [data-dpv-close],
    [data-dpv-command-close],
    [data-dpv-display-close],
    [data-dpv-close-trash],
    [data-dpv-action="trash"],
    [data-dpv-action="delete"],
    [data-dpv-action="remove"],
    button[aria-label*="Удал"],
    button[title*="Удал"],
    button[aria-label*="удал"],
    button[title*="удал"],
    button[aria-label*="В корзину"],
    button[title*="В корзину"],
    button[aria-label*="корзин"],
    button[title*="корзин"],
    button[aria-label*="Закры"],
    button[title*="Закры"],
    button[aria-label*="Отмен"],
    button[title*="Отмен"],
    button[class*="trash"],
    button[class*="delete"],
    button[class*="remove"],
    a.dpv-btn[class*="trash"],
    a.dpv-btn[class*="delete"],
    a.dpv-btn[class*="remove"]
) {
    color: var(--dpv-danger-text) !important;
    -webkit-text-fill-color: var(--dpv-danger-text) !important;
    background: linear-gradient(180deg, var(--dpv-danger-hover) 0%, var(--dpv-danger) 58%, var(--dpv-danger-active) 100%) !important;
    border-color: var(--dpv-danger-border) !important;
    box-shadow: 0 2px 0 rgba(125,20,20,0.58), 0 8px 16px rgba(216,74,74,0.22), inset 0 1px 0 rgba(255,255,255,0.16) !important;
}

html body .dpv-portal :is(
    .dpv-btn-danger,
    .dpv-mini-btn.is-danger,
    .is-danger,
    .dpv-modal-close,
    [data-dpv-open-trash],
    [data-dpv-trash],
    [data-dpv-delete],
    [data-dpv-remove],
    [data-dpv-clear-text],
    [data-dpv-discard-draft],
    [data-dpv-confirm-cancel],
    [data-dpv-cancel],
    [data-dpv-close],
    [data-dpv-command-close],
    [data-dpv-display-close],
    [data-dpv-close-trash]
) :is(span,strong,small,em,i,b,kbd,svg) {
    color: inherit !important;
    -webkit-text-fill-color: inherit !important;
}

.dpv-trash-badge,
.dpv-trash-block summary strong,
.dpv-trash-block h3 span {
    color: var(--dpv-danger-text) !important;
    -webkit-text-fill-color: var(--dpv-danger-text) !important;
    background: var(--dpv-danger) !important;
    border-color: var(--dpv-danger-border) !important;
}

/* Темная тема: текстовые карточки и редактор всегда читаемы. */
html body .dpv-portal.dpv-theme-dark :is(.dpv-text-card, .dpv-text-editor-panel, .dpv-history-panel) {
    color: #E4EDF8 !important;
    -webkit-text-fill-color: #E4EDF8 !important;
    background: #121B26 !important;
    opacity: 1 !important;
}

html body .dpv-portal.dpv-theme-dark :is(.dpv-text-card, .dpv-text-editor-panel, .dpv-history-panel) :is(h1,h2,h3,h4,strong) {
    color: #F0F5FA !important;
    -webkit-text-fill-color: #F0F5FA !important;
    opacity: 1 !important;
}

html body .dpv-portal.dpv-theme-dark :is(.dpv-text-card, .dpv-text-editor-panel, .dpv-history-panel) :is(p,span,small,div,label,em):not(.dpv-btn):not(.dpv-mini-btn):not(.dpv-icon-btn):not(.dpv-top-icon):not(.dpv-rail-btn) {
    color: #D8E2EE !important;
    -webkit-text-fill-color: #D8E2EE !important;
    opacity: 1 !important;
}

html body .dpv-portal.dpv-theme-dark :is(.dpv-code-textarea, .dpv-rich-textarea, [data-dpv-editor-content]):not(.dpv-code-area) {
    color: #E4EDF8 !important;
    -webkit-text-fill-color: #E4EDF8 !important;
    background: #0C141E !important;
    border-color: #3F4B58 !important;
    caret-color: #FFFFFF !important;
    opacity: 1 !important;
}

html body .dpv-portal.dpv-theme-dark :is(.dpv-text-badges span, .dpv-text-mode-pill, .dpv-draft-pill, .dpv-saved-pill, .dpv-editor-status) {
    color: #D8E2EE !important;
    -webkit-text-fill-color: #D8E2EE !important;
    background: #1D2A3A !important;
    border-color: #3F4B58 !important;
    opacity: 1 !important;
}

/* Заголовок раздела: кнопка сворачивания кликабельна и не перекрывает текст. */
.dpv-portal .dpv-entity-hero {
    position: relative !important;
    padding-right: 68px !important;
}

.dpv-portal .dpv-hero-toggle {
    position: absolute !important;
    right: 15px !important;
    top: 15px !important;
    z-index: 5 !important;
    width: 40px !important;
    height: 40px !important;
    min-width: 40px !important;
    padding: 0 !important;
}

.dpv-portal .dpv-entity-hero.is-hero-collapsed {
    min-height: 72px !important;
    align-items: center !important;
}

.dpv-portal .dpv-entity-hero.is-hero-collapsed .dpv-kicker,
.dpv-portal .dpv-entity-hero.is-hero-collapsed .dpv-entity-copy p:not(.dpv-kicker),
.dpv-portal .dpv-entity-hero.is-hero-collapsed .dpv-card-actions {
    display: none !important;
}

/* Модалка выбора иконок: иконки распределяются по ширине, а не по три в ряд. */
.dpv-portal .dpv-icon-palette {
    display: grid !important;
    grid-template-columns: repeat(auto-fill, minmax(42px, 1fr)) !important;
    gap: 8px !important;
    width: 100% !important;
    max-height: min(240px, 34vh) !important;
    margin-top: 10px !important;
    padding: 8px !important;
    overflow: auto !important;
    border: 1px solid var(--dpv-line) !important;
    border-radius: var(--dpv-radius-md) !important;
    background: var(--dpv-surface-2) !important;
}

.dpv-portal .dpv-icon-choice {
    width: 100% !important;
    min-width: 0 !important;
    height: 40px !important;
    min-height: 40px !important;
    margin: 0 !important;
    padding: 0 !important;
    font-size: 21px !important;
}

/* Левое меню: читаемая компактная иерархия, без вертикального дробления слов. */
.dpv-portal {
    --dpv-left-menu-gap: 10px;
    --dpv-left-menu-padding: 12px;
    --dpv-left-menu-row-padding-y: 8px;
    --dpv-left-menu-row-padding-x: 9px;
    --dpv-left-menu-indent: 6px;
}

.dpv-portal .dpv-sidebar {
    padding: var(--dpv-left-menu-padding) !important;
}

.dpv-portal .dpv-sidebar-section {
    display: grid !important;
    gap: 10px !important;
    min-width: 0 !important;
    margin: 0 !important;
}

.dpv-portal .dpv-sidebar-section + .dpv-sidebar-section {
    margin-top: 16px !important;
    padding-top: 4px !important;
}

.dpv-portal .dpv-sidebar-headline {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) auto !important;
    align-items: start !important;
    gap: 10px !important;
    margin: 0 !important;
}

.dpv-portal .dpv-sidebar .dpv-tree,
.dpv-portal .dpv-sidebar .dpv-structure-tree {
    display: grid !important;
    gap: 6px !important;
    padding: 0 !important;
    border: 0 !important;
    border-radius: 0 !important;
    background: transparent !important;
    box-shadow: none !important;
}

.dpv-portal .dpv-tree-group,
.dpv-portal .dpv-tree-branch,
.dpv-portal .dpv-tree-branch-project,
.dpv-portal .dpv-tree-branch-folder {
    display: grid !important;
    gap: 6px !important;
    min-width: 0 !important;
    margin: 0 !important;
}

.dpv-portal .dpv-tree-children,
.dpv-portal .dpv-tree-folders,
.dpv-portal .dpv-tree-nested {
    display: grid !important;
    gap: 6px !important;
    min-width: 0 !important;
    margin: 4px 0 6px var(--dpv-left-menu-indent) !important;
    padding-left: var(--dpv-left-menu-indent) !important;
    border-left: 1px dashed var(--dpv-line) !important;
}

.dpv-portal .dpv-tree-line {
    display: grid !important;
    grid-template-columns: 24px minmax(0, 1fr) !important;
    align-items: center !important;
    gap: 8px !important;
    width: 100% !important;
    min-width: 0 !important;
    margin: 0 !important;
}

.dpv-portal .dpv-tree-toggle,
.dpv-portal .dpv-tree-toggle-spacer,
.dpv-portal .dpv-tree-caret {
    width: 24px !important;
    min-width: 24px !important;
    height: 30px !important;
    min-height: 30px !important;
    margin: 0 !important;
    padding: 0 !important;
    border-radius: 7px !important;
    box-shadow: none !important;
}

.dpv-portal .dpv-sidebar .dpv-tree-button,
.dpv-portal .dpv-sidebar .dpv-nav-item {
    display: grid !important;
    grid-template-columns: 22px minmax(0, 1fr) auto !important;
    align-items: center !important;
    gap: 8px !important;
    width: 100% !important;
    min-width: 0 !important;
    min-height: 34px !important;
    margin: 0 !important;
    padding: var(--dpv-left-menu-row-padding-y) var(--dpv-left-menu-row-padding-x) !important;
    border: 1px solid transparent !important;
    border-radius: 9px !important;
    color: var(--dpv-text) !important;
    -webkit-text-fill-color: var(--dpv-text) !important;
    background: transparent !important;
    background-image: none !important;
    box-shadow: none !important;
    text-align: left !important;
    line-height: 1.22 !important;
    transform: none !important;
}

.dpv-portal .dpv-sidebar .dpv-tree-button:hover,
.dpv-portal .dpv-sidebar .dpv-nav-item:hover {
    color: var(--dpv-heading) !important;
    -webkit-text-fill-color: var(--dpv-heading) !important;
    background: var(--dpv-surface-3) !important;
    border-color: var(--dpv-line) !important;
}

.dpv-portal .dpv-sidebar .dpv-tree-button.is-active,
.dpv-portal .dpv-sidebar .dpv-nav-item.is-active {
    color: var(--dpv-heading) !important;
    -webkit-text-fill-color: var(--dpv-heading) !important;
    background: color-mix(in srgb, var(--dpv-primary) 16%, var(--dpv-surface)) !important;
    border-color: color-mix(in srgb, var(--dpv-primary-border) 58%, var(--dpv-line)) !important;
    box-shadow: inset 3px 0 0 var(--dpv-primary) !important;
}

.dpv-portal.dpv-theme-dark .dpv-sidebar .dpv-tree-button,
.dpv-portal.dpv-theme-dark .dpv-sidebar .dpv-nav-item,
.dpv-portal.dpv-theme-dark .dpv-sidebar .dpv-shortcut-project {
    color: var(--dpv-text) !important;
    -webkit-text-fill-color: var(--dpv-text) !important;
    background: transparent !important;
    border-color: transparent !important;
    box-shadow: none !important;
}

.dpv-portal.dpv-theme-dark .dpv-sidebar .dpv-tree-button:hover,
.dpv-portal.dpv-theme-dark .dpv-sidebar .dpv-nav-item:hover,
.dpv-portal.dpv-theme-dark .dpv-sidebar .dpv-shortcut-project:hover {
    color: var(--dpv-heading) !important;
    -webkit-text-fill-color: var(--dpv-heading) !important;
    background: #182536 !important;
    border-color: #314257 !important;
}

.dpv-portal.dpv-theme-dark .dpv-sidebar .dpv-tree-button.is-active,
.dpv-portal.dpv-theme-dark .dpv-sidebar .dpv-nav-item.is-active {
    color: #F0F7FF !important;
    -webkit-text-fill-color: #F0F7FF !important;
    background: rgba(37, 99, 235, 0.20) !important;
    border-color: rgba(91, 141, 239, 0.48) !important;
    box-shadow: inset 3px 0 0 #5B8DEF !important;
}

.dpv-portal .dpv-sidebar .dpv-tree-emoji,
.dpv-portal .dpv-sidebar .dpv-tree-icon {
    display: inline-flex !important;
    align-items: center !important;
    justify-content: center !important;
    width: 22px !important;
    min-width: 22px !important;
    font-size: 17px !important;
    line-height: 1 !important;
}

.dpv-portal .dpv-sidebar .dpv-tree-label,
.dpv-portal .dpv-sidebar .dpv-tree-name {
    display: block !important;
    min-width: 0 !important;
    max-width: 100% !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
    word-break: normal !important;
    overflow-wrap: normal !important;
    line-height: 1.25 !important;
}

.dpv-portal .dpv-sidebar .dpv-tree-count {
    justify-self: end !important;
    min-width: 24px !important;
    max-width: none !important;
    height: 24px !important;
    padding: 2px 7px !important;
    margin: 0 !important;
    white-space: nowrap !important;
    line-height: 1 !important;
    font-size: 11px !important;
}

.dpv-portal .dpv-project-shortcuts,
.dpv-portal .dpv-shortcut-group,
.dpv-portal .dpv-shortcut-list {
    display: grid !important;
    gap: 10px !important;
    min-width: 0 !important;
}

.dpv-portal .dpv-shortcut-group {
    padding: 10px !important;
}

.dpv-portal .dpv-shortcut-project {
    display: grid !important;
    grid-template-columns: 34px minmax(0, 1fr) !important;
    align-items: center !important;
    gap: 9px !important;
    width: 100% !important;
    min-width: 0 !important;
    min-height: 44px !important;
    margin: 0 !important;
    padding: 8px 9px !important;
    color: var(--dpv-text) !important;
    -webkit-text-fill-color: var(--dpv-text) !important;
    background: var(--dpv-surface-2) !important;
    border-color: var(--dpv-line) !important;
    box-shadow: none !important;
    text-align: left !important;
}

.dpv-portal .dpv-shortcut-project-icon {
    width: 34px !important;
    height: 34px !important;
    min-width: 34px !important;
    margin: 0 !important;
}

.dpv-portal .dpv-shortcut-project-text {
    display: grid !important;
    gap: 2px !important;
    min-width: 0 !important;
}

.dpv-portal .dpv-shortcut-project-title,
.dpv-portal .dpv-shortcut-project-topic {
    display: block !important;
    min-width: 0 !important;
    max-width: 100% !important;
    overflow: hidden !important;
    text-overflow: ellipsis !important;
    white-space: nowrap !important;
    word-break: normal !important;
    overflow-wrap: normal !important;
}

.dpv-portal .dpv-shell.is-sidebar-collapsed .dpv-sidebar,
.dpv-portal.is-sidebar-collapsed .dpv-sidebar {
    padding: 10px 8px !important;
}

.dpv-portal .dpv-shell.is-sidebar-collapsed .dpv-sidebar-rail,
.dpv-portal.is-sidebar-collapsed .dpv-sidebar-rail {
    display: grid !important;
    gap: 10px !important;
}

/* Медиа не перекрашиваются интерфейсными правилами. */
.dpv-portal :where(iframe, img, video, audio, canvas, svg) {
    color: initial;
}

/* ============================================================================
   24. DPV 1.0.28 — абсолютный финальный слой опасных действий
   --------------------------------------------------------------------------
   Повышенная специфичность нужна, чтобы светлая/темная кнопочная палитра не
   перебивала удаление, корзину, закрытие, отмену, сброс и очистку.
   ========================================================================== */
html body .dpv-portal.dpv-theme-light.dpv-theme-light :is(
    .dpv-btn-danger,
    .dpv-mini-btn.is-danger,
    .is-danger,
    .dpv-modal-close,
    [data-dpv-open-trash],
    [data-dpv-trash],
    [data-dpv-trash-topic],
    [data-dpv-trash-project],
    [data-dpv-trash-folder],
    [data-dpv-trash-text],
    [data-dpv-trash-archive],
    [data-dpv-trash-extracted],
    [data-dpv-trash-final-container],
    [data-dpv-trash-final-file],
    [data-dpv-trash-task],
    [data-dpv-trash-task-comment],
    [data-dpv-trash-task-link],
    [data-dpv-delete],
    [data-dpv-delete-revision],
    [data-dpv-delete-text-revision],
    [data-dpv-delete-file-revision],
    [data-dpv-remove],
    [data-dpv-clear-text],
    [data-dpv-discard-draft],
    [data-dpv-confirm-cancel],
    [data-dpv-cancel],
    [data-dpv-close],
    [data-dpv-command-close],
    [data-dpv-display-close],
    [data-dpv-close-trash]
),
html body .dpv-portal.dpv-theme-dark.dpv-theme-dark :is(
    .dpv-btn-danger,
    .dpv-mini-btn.is-danger,
    .is-danger,
    .dpv-modal-close,
    [data-dpv-open-trash],
    [data-dpv-trash],
    [data-dpv-trash-topic],
    [data-dpv-trash-project],
    [data-dpv-trash-folder],
    [data-dpv-trash-text],
    [data-dpv-trash-archive],
    [data-dpv-trash-extracted],
    [data-dpv-trash-final-container],
    [data-dpv-trash-final-file],
    [data-dpv-trash-task],
    [data-dpv-trash-task-comment],
    [data-dpv-trash-task-link],
    [data-dpv-delete],
    [data-dpv-delete-revision],
    [data-dpv-delete-text-revision],
    [data-dpv-delete-file-revision],
    [data-dpv-remove],
    [data-dpv-clear-text],
    [data-dpv-discard-draft],
    [data-dpv-confirm-cancel],
    [data-dpv-cancel],
    [data-dpv-close],
    [data-dpv-command-close],
    [data-dpv-display-close],
    [data-dpv-close-trash]
) {
    color: #FFFFFF !important;
    -webkit-text-fill-color: #FFFFFF !important;
    background: linear-gradient(180deg, var(--dpv-danger-hover) 0%, var(--dpv-danger) 58%, var(--dpv-danger-active) 100%) !important;
    border-color: var(--dpv-danger-border) !important;
    box-shadow: 0 2px 0 rgba(125, 20, 20, 0.58), 0 8px 16px rgba(216, 74, 74, 0.22), inset 0 1px 0 rgba(255,255,255,0.16) !important;
}

html body .dpv-portal.dpv-theme-light.dpv-theme-light :is(
    .dpv-btn-danger,
    .dpv-mini-btn.is-danger,
    .is-danger,
    .dpv-modal-close,
    [data-dpv-open-trash],
    [data-dpv-trash],
    [data-dpv-delete],
    [data-dpv-remove],
    [data-dpv-clear-text],
    [data-dpv-discard-draft],
    [data-dpv-confirm-cancel],
    [data-dpv-cancel],
    [data-dpv-close],
    [data-dpv-command-close],
    [data-dpv-display-close],
    [data-dpv-close-trash]
) :is(span,strong,small,em,i,b,kbd,svg),
html body .dpv-portal.dpv-theme-dark.dpv-theme-dark :is(
    .dpv-btn-danger,
    .dpv-mini-btn.is-danger,
    .is-danger,
    .dpv-modal-close,
    [data-dpv-open-trash],
    [data-dpv-trash],
    [data-dpv-delete],
    [data-dpv-remove],
    [data-dpv-clear-text],
    [data-dpv-discard-draft],
    [data-dpv-confirm-cancel],
    [data-dpv-cancel],
    [data-dpv-close],
    [data-dpv-command-close],
    [data-dpv-display-close],
    [data-dpv-close-trash]
) :is(span,strong,small,em,i,b,kbd,svg) {
    color: #FFFFFF !important;
    -webkit-text-fill-color: #FFFFFF !important;
}


/* ==========================================================================
   25. DPV 1.0.29 — иконка полноэкранного режима без текстовой подписи
   --------------------------------------------------------------------------
   Кнопка раскрытия распакованных файлов должна показывать только значок.
   Текстовая подсказка остается в aria-label/title, но не занимает место.
   ========================================================================== */

.dpv-portal .dpv-extracted-fullscreen-toggle {
    width: 38px !important;
    min-width: 38px !important;
    max-width: 38px !important;
    height: 38px !important;
    min-height: 38px !important;
    padding: 0 !important;
    overflow: hidden !important;
    white-space: nowrap !important;
    font-size: 18px !important;
    line-height: 1 !important;
}

.dpv-portal .dpv-extracted-fullscreen-toggle::after {
    content: none !important;
}
