/* ── Dashboard page ── */
/* 공통 컴포넌트 (favorites, tags, history, notes, quota-bar,
   settings, danger-zone, empty-state, tab-panel)는
   components.css 에서 로드됩니다. */

/* ═══════════════════════════════════════════════════
   1. PAGE SHELL
   ═══════════════════════════════════════════════════ */
.dash {
    max-width: var(--container-max);
    margin: 0 auto;
    padding: 2rem 1.5rem 3rem;
}

/* ═══════════════════════════════════════════════════
   2. WELCOME
   ═══════════════════════════════════════════════════ */
.dash-welcome {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1.5rem;
    flex-wrap: wrap;
    gap: 1rem;
}
.dash-welcome h1 { font-size: 1.75rem; font-weight: 700; letter-spacing: -0.02em; }
.dash-welcome h1 span { color: var(--color-primary); }
.dash-welcome .user-email { color: var(--color-text-secondary); font-size: 0.875rem; }

/* ═══════════════════════════════════════════════════
   3. CONTEXT HEADER
   ═══════════════════════════════════════════════════ */
.dash-surface-header {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: 1rem;
    margin-bottom: 1.5rem;
    padding: 1.25rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background:
        linear-gradient(135deg, color-mix(in srgb, var(--color-primary) 7%, var(--color-surface)) 0%, var(--color-surface) 68%),
        var(--color-surface);
}
.dash-surface-copy {
    display: grid;
    gap: 0.35rem;
}
.dash-surface-copy h1 {
    font-size: 1.6rem;
    line-height: 1.1;
    letter-spacing: -0.02em;
}
.dash-surface-nav {
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
    align-items: center;
    justify-content: flex-end;
}
.dash-surface-link {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-height: 2.5rem;
    padding: 0.6rem 0.95rem;
    border-radius: 999px;
    border: 1px solid var(--color-border);
    background: var(--color-surface);
    color: var(--color-text-secondary);
    font-size: 0.875rem;
    font-weight: 600;
    text-decoration: none;
    transition: border-color 0.15s ease, color 0.15s ease, background-color 0.15s ease;
}
.dash-surface-link:hover {
    border-color: color-mix(in srgb, var(--color-primary) 28%, var(--color-border));
    color: var(--color-primary-dark);
}
.dash-surface-link.active {
    border-color: var(--color-primary);
    background: color-mix(in srgb, var(--color-primary) 8%, var(--color-surface));
    color: var(--color-primary-dark);
}

/* #249 2단계 — --color-primary-dark reads 2.99:1 against this tint in dark
   (composites to #16243e); background/border stay as-is, text only. */
:root[data-theme="dark"] .dash-surface-link.active {
    color: var(--color-primary-strong);
}

/* ═══════════════════════════════════════════════════
   4. LEGACY TAB BAR
   ═══════════════════════════════════════════════════ */
.dash-tab-bar {
    display: flex;
    gap: 0.25rem;
    margin-bottom: 1.5rem;
    flex-wrap: wrap;
    border-bottom: 1px solid var(--color-border);
    padding-bottom: 0.5rem;
}
.dash-tab-btn {
    font-size: 0.875rem;
    font-weight: 600;
    padding: 0.5rem 1rem;
    border: none;
    border-radius: var(--radius-sm) var(--radius-sm) 0 0;
    background: none;
    cursor: pointer;
    color: var(--color-text-secondary);
    transition: all 0.15s;
    font-family: var(--font-sans);
}
.dash-tab-btn:hover { color: var(--color-primary); background: var(--color-bg); }
.dash-tab-btn.active {
    color: var(--color-primary);
    background: var(--color-bg);
    border-bottom: 2px solid var(--color-primary);
}
.dash-tab-panel { display: none; }
.dash-tab-panel.active { display: block; }
.dash-welcome--overview-hidden { display: none; }

/* ═══════════════════════════════════════════════════
   5. QUOTA CONTAINER  (인라인 바 형태)
   ═══════════════════════════════════════════════════ */
.dash-quota {
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: 1rem 1.25rem;
    margin-bottom: 1.5rem;
    display: flex;
    align-items: center;
    gap: 1.25rem;
    flex-wrap: wrap;
}
.dash-quota-label { font-size: 0.875rem; font-weight: 600; white-space: nowrap; }
.dash-quota-bar   { flex: 1; min-width: 120px; height: 8px; background: var(--color-border-light); border-radius: 4px; overflow: hidden; }
.dash-quota-fill  { height: 100%; width: 0; background: var(--color-primary); border-radius: 4px; transition: width 0.3s ease; }
.dash-quota-text  { font-size: 0.8125rem; color: var(--color-text-secondary); white-space: nowrap; }
.dash-overview-hero { margin-bottom: 1.5rem; }
.dash-overview-hero .info-stat-grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}
@media (min-width: 1200px) {
    .dash-overview-hero .info-stat-grid {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}
.dash-signal-strip { margin-bottom: 1.5rem; }
.dash-signal-kind {
    font-size: 0.625rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-primary);
    margin-right: 0.375rem;
}

@media (max-width: 900px) {
    .dash-surface-header {
        flex-direction: column;
        align-items: stretch;
    }

    .dash-surface-nav {
        justify-content: flex-start;
    }
}

/* ═══════════════════════════════════════════════════
   6. OVERVIEW GRID & SECTIONS
   ═══════════════════════════════════════════════════ */
.dash-grid { display: grid; grid-template-columns: 1fr 320px; gap: 1.5rem; }
.dash-grid--legacy { display: none; }

.dash-section {
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    padding: 1.25rem;
    margin-bottom: 1.5rem;
}
/* .dash-section-header → .section-head (components.css §20) */

.dash-count {
    font-size: 0.75rem;
    color: var(--color-text-muted);
    background: var(--color-bg);
    padding: 0.125rem 0.5rem;
    border-radius: 999px;
}
.dash-view-all { font-size: 0.8125rem; color: var(--color-primary); text-decoration: none; font-weight: 500; }
.dash-view-all:hover { text-decoration: underline; }
/* PR7 4단계: on a tinted card background --color-primary drops to 4.34:1
   (< AA 4.5:1). See search.css's .search-source-guidance-kicker for the
   same fix and reasoning. */
:root:not([data-theme="dark"]) .dash-view-all { color: var(--color-primary-dark); }
/* #249: research.html renders .dash-view-all as <button> (createGlobalProject
   trigger). Without a reset it keeps the native button chrome, and under
   :root[data-theme="dark"]'s color-scheme:dark (main.css) that resolves to
   Chrome's dark widget face (#6b6b6b) behind #3b82f6 text — 1.44:1, fails
   AA. The <a> variants never had this problem since anchors have no native
   chrome. Reset to match the <a> rendering exactly. */
button.dash-view-all {
    background: none;
    border: none;
    cursor: pointer;
    font: inherit;
    padding: 0;
}

/* ═══════════════════════════════════════════════════
   6. HISTORY ITEMS  (dashboard 전용 — 세로 배열)
   베이스는 components.css .history-item
   ═══════════════════════════════════════════════════ */
.history-item { flex-direction: column; gap: 0.5rem; }
.history-row  { display: flex; align-items: center; gap: 1rem; }

.history-repeat {
    font-size: 0.6875rem;
    font-weight: 600;
    color: var(--color-text-muted);
    background: var(--color-bg);
    padding: 0.0625rem 0.375rem;
    border-radius: 999px;
    flex-shrink: 0;
}
.history-error-hint {
    font-size: 0.75rem;
    color: var(--color-danger-strong);
    background: var(--color-danger-soft);
    padding: 0.375rem 0.625rem;
    border-radius: var(--radius-sm);
    display: flex;
    align-items: center;
    gap: 0.375rem;
}
.history-edit-row { display: none; gap: 0.5rem; align-items: center; }
.history-edit-row.open { display: flex; }

/* .history-rerun-btn → .btn-outline (components.css §19) */

/* ═══════════════════════════════════════════════════
   7. HISTORY ITEMS  (compact — overview 탭용)
   ═══════════════════════════════════════════════════ */
.dash-history-item {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    padding: 0.625rem 0;
    border-bottom: 1px solid var(--color-border-light);
}
.dash-history-item:last-child { border-bottom: none; }
.dash-history-query {
    flex: 1;
    font-size: 0.9375rem;
    color: var(--color-text);
    text-decoration: none;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.dash-history-query:hover { color: var(--color-primary); }
.dash-history-meta { display: flex; gap: 0.5rem; align-items: center; flex-shrink: 0; }
/* .dash-history-status → .status-badge (components.css §19) */
/* .dash-rerun → .btn-outline (components.css §19) */

.dash-entity {
    min-width: 0;
    display: flex;
    flex-direction: column;
    gap: 0.15rem;
    flex: 1;
}

.dash-entity-name {
    color: var(--color-text);
    font-size: 0.9375rem;
    font-weight: 600;
    text-decoration: none;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.dash-entity-name:hover {
    color: var(--color-primary);
    text-decoration: underline;
}

.dash-entity-id {
    font-size: 0.6875rem;
    color: var(--color-text-muted);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.dash-entity--alert {
    min-width: 0;
}

.dash-paper .dash-entity {
    margin-bottom: 0.15rem;
}

.dash-paper .dash-paper-meta {
    margin-top: 0;
}

/* ═══════════════════════════════════════════════════
   8. FAVORITES TAB FILTER
   ═══════════════════════════════════════════════════ */
.dash-fav-tabs { display: flex; gap: 0.375rem; margin-bottom: 1rem; flex-wrap: wrap; }
.dash-fav-tab {
    font-size: 0.75rem;
    font-weight: 600;
    padding: 0.25rem 0.75rem;
    border: 1px solid var(--color-border);
    border-radius: 999px;
    background: none;
    cursor: pointer;
    color: var(--color-text-secondary);
    transition: all 0.15s;
}
.dash-fav-tab:hover  { border-color: var(--color-primary); color: var(--color-primary); }
.dash-fav-tab.active { background: var(--color-primary); color: var(--color-text-inverse); border-color: var(--color-primary); }

/* #249 1단계 — white text on --color-primary fails WCAG AA in dark (3.67:1). */
:root[data-theme="dark"] .dash-fav-tab.active {
    background: var(--color-primary-on-fill);
    border-color: var(--color-primary-on-fill);
}

.dash-fav-panel       { display: none; }
.dash-fav-panel.active { display: block; }
.dash-fav-list        { display: flex; flex-direction: column; gap: 0.5rem; }

.dash-fav-item-wrap {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    padding: 0.5rem 0.75rem;
    background: var(--color-bg);
    border-radius: var(--radius-sm);
    transition: background 0.15s;
}
.dash-fav-item-wrap:hover { background: var(--color-border-light); }
.dash-fav-item-row  { display: flex; align-items: center; gap: 0.75rem; }

/* fav-badge는 fav-type-badge의 compact 버전 */
.dash-fav-badge {
    font-size: 0.625rem;
    font-weight: 700;
    padding: 0.125rem 0.375rem;
    border-radius: 999px;
    text-transform: uppercase;
    flex-shrink: 0;
}
.dash-fav-badge.compound   { background: #dbeafe; color: #1e40af; }
.dash-fav-badge.target     { background: #dcfce7; color: #166534; }
.dash-fav-badge.assay      { background: #fef3c7; color: #92400e; }
.dash-fav-badge.comparison { background: #ede9fe; color: #5b21b6; }
.dash-fav-badge.paper      { background: #fff7ed; color: #c2410c; }
.dash-fav-badge.properties { background: #f0f9ff; color: #0369a1; }
.dash-fav-label { font-size: 0.875rem; flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* #249 1단계 — light-only literal pastels, no dark override. */
:root[data-theme="dark"] .dash-fav-badge.compound   { background: rgba(59, 130, 246, 0.16); color: #93c5fd; }
:root[data-theme="dark"] .dash-fav-badge.target     { background: rgba(34, 197, 94, 0.16); color: #4ade80; }
:root[data-theme="dark"] .dash-fav-badge.assay      { background: rgba(245, 158, 11, 0.16); color: #fbbf24; }
:root[data-theme="dark"] .dash-fav-badge.comparison { background: rgba(139, 92, 246, 0.16); color: var(--color-indigo); }
:root[data-theme="dark"] .dash-fav-badge.paper      { background: rgba(234, 88, 12, 0.16); color: #fb923c; }
:root[data-theme="dark"] .dash-fav-badge.properties { background: rgba(14, 165, 233, 0.16); color: #38bdf8; }

/* ═══════════════════════════════════════════════════
   9. SIDEBAR
   ═══════════════════════════════════════════════════ */
.dash-sidebar { display: flex; flex-direction: column; gap: 1.5rem; }

.dash-paper-triage-section {
    position: sticky;
    top: 1rem;
}

/* .dash-stat / .dash-stat-val / .dash-stat-label → .stat-cell / .stat-val / .stat-label (components.css §3) */
.dash-stats { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; }

.dash-note { padding: 0.625rem 0; border-bottom: 1px solid var(--color-border-light); }
.dash-note:last-child { border-bottom: none; }
.dash-note-label { font-size: 0.8125rem; font-weight: 600; margin-bottom: 0.125rem; }
.dash-note-text  { font-size: 0.75rem; color: var(--color-text-secondary); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

.dash-paper-link {
    display: grid;
    gap: 0.65rem;
}

.dash-paper-link--active {
    border-color: var(--color-primary);
    box-shadow: 0 0 0 1px rgba(37, 99, 235, 0.15);
}

.dash-paper-link-head {
    display: grid;
    gap: 0.2rem;
    min-width: 0;
}

.dash-paper-link-title {
    font-size: 0.95rem;
    line-height: 1.45;
    font-weight: 700;
}

.dash-paper-link-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 0.5rem;
    align-items: center;
    font-size: 0.75rem;
    color: var(--color-text-secondary);
}

.dash-paper-link-meta-item {
    white-space: nowrap;
}

.dash-paper-link-rule {
    display: inline-flex;
    align-items: center;
    padding: 0.15rem 0.5rem;
    border-radius: 999px;
    background: var(--color-primary-light);
    color: var(--color-primary-dark);
    font-weight: 600;
}

.dash-paper-link-badges {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    justify-content: flex-end;
}

.dash-paper-link-explain {
    display: grid;
    gap: 0.25rem;
    padding: 0.7rem 0.8rem;
    border-radius: 0.9rem;
    background: var(--color-bg);
    border: 1px solid var(--color-border-light);
}

.dash-paper-link-rule-name {
    font-size: 0.8rem;
    font-weight: 700;
    color: var(--color-text);
}

.dash-paper-link-reason {
    font-size: 0.8rem;
    line-height: 1.6;
    color: var(--color-text-secondary);
}

.dash-paper-link-summary {
    font-size: 0.8rem;
    line-height: 1.65;
    color: var(--color-text-secondary);
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
}

.dash-paper-link-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}

.paper-triage-panel {
    display: grid;
    gap: 0.75rem;
}

.paper-triage-badges {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
}

.paper-triage-title {
    font-size: 1rem;
    font-weight: 700;
    line-height: 1.45;
}

.paper-triage-meta {
    font-size: 0.8rem;
    color: var(--color-text-secondary);
}

.paper-triage-rule {
    font-size: 0.85rem;
    font-weight: 700;
    color: var(--color-text);
}

.paper-triage-reason {
    padding: 0.75rem 0.85rem;
    border: 1px solid var(--color-border-light);
    border-radius: 0.9rem;
    background: var(--color-bg);
    font-size: 0.85rem;
    line-height: 1.65;
    color: var(--color-text-secondary);
}

.paper-triage-summary {
    font-size: 0.84rem;
    line-height: 1.65;
    color: var(--color-text-secondary);
}

.paper-triage-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: center;
}

.paper-add-identifier-block {
    display: grid;
    gap: 0.55rem;
    padding: 0.85rem 0.95rem;
    border: 1px solid var(--color-border-light);
    border-radius: 1rem;
    background: var(--color-surface-elevated);
}

.paper-add-identifier-form {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    align-items: stretch;
}

.paper-triage-note-input.paper-add-identifier-input {
    flex: 1 1 18rem;
    min-width: 0;
    width: auto;
}

.paper-triage-note-form {
    display: grid;
    gap: 0.65rem;
}

.paper-triage-note-textarea,
.paper-triage-note-input {
    width: 100%;
    border: 1px solid var(--color-border);
    border-radius: 0.9rem;
    background: var(--color-surface);
    color: var(--color-text);
    padding: 0.75rem 0.9rem;
    font: inherit;
}

.paper-triage-note-textarea {
    min-height: 110px;
    resize: vertical;
}

.paper-triage-status {
    min-height: 1.1rem;
    font-size: 0.8rem;
    color: var(--color-text-secondary);
}

.paper-triage-status.is-error {
    color: var(--color-danger-strong);
    font-weight: 600;
}

.paper-add-identifier-status {
    min-height: 1.1rem;
}

@media (max-width: 720px) {
    .paper-add-identifier-form {
        flex-direction: column;
        align-items: stretch;
    }

    .paper-add-identifier-form .btn-primary {
        width: 100%;
    }
}

.paper-watch-status-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.5rem;
    margin-bottom: 0.9rem;
}

.paper-watch-status-card {
    display: grid;
    gap: 0.25rem;
    padding: 0.75rem 0.85rem;
    border: 1px solid var(--color-border-light);
    border-radius: 0.9rem;
    background: var(--color-bg);
}

.paper-watch-status-label {
    font-size: 0.6875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-text-muted);
}

.paper-watch-status-value {
    font-size: 1rem;
    font-weight: 700;
    color: var(--color-text);
}

.paper-watch-status-sub {
    font-size: 0.75rem;
    line-height: 1.45;
    color: var(--color-text-secondary);
}

.paper-watch-health-summary {
    display: grid;
    gap: 0.75rem;
    margin-bottom: 0.9rem;
    padding: 0.85rem 0.95rem;
    border: 1px solid var(--color-border-light);
    border-radius: 0.95rem;
    background: linear-gradient(135deg, rgba(59, 130, 246, 0.05), var(--color-surface));
}

.paper-watch-health-summary-empty,
.paper-watch-health-summary-warming_up {
    background: linear-gradient(135deg, rgba(148, 163, 184, 0.08), var(--color-surface));
}

.paper-watch-health-summary-attention {
    background: linear-gradient(135deg, rgba(248, 113, 113, 0.10), var(--color-surface));
}

.paper-watch-health-summary-healthy {
    background: linear-gradient(135deg, rgba(34, 197, 94, 0.10), var(--color-surface));
}

.paper-watch-health-summary-head {
    display: flex;
    justify-content: space-between;
    gap: 0.75rem;
    align-items: flex-start;
}

.paper-watch-health-summary-title {
    font-size: 0.95rem;
    font-weight: 800;
    color: var(--color-text);
    line-height: 1.35;
}

.paper-watch-health-summary-note {
    margin: 0;
    font-size: 0.78rem;
    line-height: 1.55;
    color: var(--color-text-secondary);
}

.paper-watch-health-summary-signals,
.paper-watch-rule-health-row {
    display: flex;
    flex-wrap: wrap;
    gap: 0.4rem;
}

.paper-watch-health-summary-chip,
.paper-watch-rule-health-chip {
    letter-spacing: 0.02em;
}

.paper-watch-health-summary-chip-neutral {
    background: #dbeafe;
    color: #1d4ed8;
}

.paper-watch-health-summary-chip-warning,
.paper-watch-rule-health-chip-warning {
    background: #fef3c7;
    color: #92400e;
}

.paper-watch-health-summary-chip-danger,
.paper-watch-rule-health-chip-danger {
    background: #fee2e2;
    color: #991b1b;
}

/* #249 1단계 — light-only literal pastels, no dark override. */
:root[data-theme="dark"] .paper-watch-health-summary-chip-neutral {
    background: rgba(59, 130, 246, 0.16);
    color: #93c5fd;
}
:root[data-theme="dark"] .paper-watch-health-summary-chip-warning,
:root[data-theme="dark"] .paper-watch-rule-health-chip-warning {
    background: rgba(245, 158, 11, 0.16);
    color: #fbbf24;
}
:root[data-theme="dark"] .paper-watch-health-summary-chip-danger,
:root[data-theme="dark"] .paper-watch-rule-health-chip-danger {
    background: rgba(239, 68, 68, 0.16);
    color: #fca5a5;
}

.paper-watch-run-history {
    display: grid;
    gap: 0.65rem;
}

.paper-watch-run-card {
    border: 1px solid var(--color-border-light);
    border-radius: 0.95rem;
    background: var(--color-surface);
    overflow: hidden;
}

.paper-watch-run-card[open] {
    box-shadow: 0 0 0 1px rgba(37, 99, 235, 0.10);
}

.paper-watch-run-summary {
    list-style: none;
    display: flex;
    justify-content: space-between;
    gap: 0.85rem;
    padding: 0.85rem 0.95rem;
    cursor: pointer;
}

.paper-watch-run-summary::-webkit-details-marker {
    display: none;
}

.paper-watch-run-summary-main {
    display: grid;
    gap: 0.25rem;
    min-width: 0;
}

.paper-watch-run-summary-title {
    font-size: 0.92rem;
    line-height: 1.45;
    font-weight: 700;
    color: var(--color-text);
}

.paper-watch-run-summary-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem 0.5rem;
    align-items: center;
    font-size: 0.75rem;
    color: var(--color-text-secondary);
}

.paper-watch-run-summary-side {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    justify-content: flex-end;
    align-items: flex-start;
}

.paper-watch-run-time {
    font-size: 0.75rem;
    color: var(--color-text-secondary);
}

.paper-watch-run-detail {
    display: grid;
    gap: 0.85rem;
    border-top: 1px solid var(--color-border-light);
    padding: 0.9rem 0.95rem 1rem;
}

.paper-watch-run-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.65rem 0.8rem;
}

.paper-watch-run-field {
    display: grid;
    gap: 0.2rem;
}

.paper-watch-run-label {
    font-size: 0.6875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-text-muted);
}

.paper-watch-run-value {
    font-size: 0.8rem;
    line-height: 1.6;
    color: var(--color-text-secondary);
    word-break: break-word;
    white-space: pre-wrap;
}

.paper-watch-run-error {
    display: grid;
    gap: 0.35rem;
    border: 1px solid var(--color-danger-soft);
    border-radius: 0.9rem;
    background: var(--color-danger-soft);
    color: var(--color-danger-strong);
    padding: 0.75rem 0.85rem;
}

.paper-watch-run-error pre {
    margin: 0;
    white-space: pre-wrap;
    word-break: break-word;
    font-size: 0.75rem;
    font-family: var(--font-mono);
}

.dash-paper { padding: 0.625rem 0; border-bottom: 1px solid var(--color-border-light); }
.dash-paper:last-child { border-bottom: none; }
.dash-paper-title { font-size: 0.8125rem; font-weight: 600; line-height: 1.4; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.dash-paper-meta  { font-size: 0.6875rem; color: var(--color-text-muted); margin-top: 0.25rem; }

.dash-actions { display: flex; flex-direction: column; gap: 0.5rem; }
.dash-action  {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    padding: 0.625rem 0.875rem;
    background: var(--color-bg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    font-size: 0.875rem;
    color: var(--color-text);
    text-decoration: none;
    font-weight: 500;
    transition: all 0.15s;
}
.dash-action:hover { border-color: var(--color-primary); color: var(--color-primary); }
.dash-action-icon { font-size: 1rem; width: 1.25rem; text-align: center; }
.dash-action-subtitle {
    margin-top: 0.125rem;
    margin-bottom: 0;
    font-size: 0.75rem;
    color: var(--color-text-secondary);
}

.dash-empty { text-align: center; padding: 2rem 1rem; color: var(--color-text-muted); font-size: 0.875rem; }

/* section-head 오른쪽 액션 영역 */
.dash-section-actions { display: flex; gap: 0.75rem; align-items: center; }

/* fav-card 하단 날짜 행 */
.fav-card-footer { display: flex; justify-content: space-between; align-items: center; }

/* ── Collections bar (dashboard favorites tab) ─────────── */
#collections-bar {
    display: flex;
    flex-wrap: wrap;
    gap: 0.375rem;
    margin-bottom: 1rem;
    align-items: center;
}
#collections-bar > span {
    font-size: 0.8125rem;
    font-weight: 600;
    color: var(--color-text-secondary);
    margin-right: 0.25rem;
}
#collection-chips { display: flex; gap: 0.25rem; flex-wrap: wrap; }

#btn-new-collection {
    font-size: 0.75rem;
    padding: 0.25rem 0.625rem;
    border: 1px dashed var(--color-border);
    border-radius: 999px;
    background: none;
    color: var(--color-text-muted);
    cursor: pointer;
}
#btn-new-collection:hover { border-color: var(--color-primary); color: var(--color-primary); }

#new-collection-form {
    display: none;
    margin-bottom: 1rem;
    padding: 0.75rem 1rem;
    background: var(--color-bg);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
}
#new-collection-form > div { display: flex; gap: 0.5rem; align-items: center; }
#new-col-name {
    flex: 1;
    font-size: 0.8125rem;
    padding: 0.375rem 0.5rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    font-family: var(--font-sans);
    background: var(--color-surface);
    color: var(--color-text);
}
#new-col-color { width: 32px; height: 28px; border: none; cursor: pointer; }
.btn-col-create {
    font-size: 0.75rem;
    padding: 0.375rem 0.75rem;
    border: none;
    border-radius: var(--radius-sm);
    background: var(--color-primary);
    color: var(--color-text-inverse);
    cursor: pointer;
    font-family: var(--font-sans);
}

/* #249 1단계 — white text on --color-primary fails WCAG AA in dark (3.67:1). */
:root[data-theme="dark"] .btn-col-create {
    background: var(--color-primary-on-fill);
}
.btn-col-cancel {
    font-size: 0.75rem;
    padding: 0.375rem 0.5rem;
    border: none;
    background: none;
    color: var(--color-text-muted);
    cursor: pointer;
}

/* history edit row input */
.history-edit-input {
    flex: 1;
    font-size: 0.875rem;
    padding: 0.375rem 0.5rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-sm);
    font-family: var(--font-sans);
    background: var(--color-surface);
    color: var(--color-text);
}

/* ═══════════════════════════════════════════════════
   10. RESPONSIVE
   ═══════════════════════════════════════════════════ */
@media (max-width: 768px) {
    .dash { padding: 1.25rem 1rem 2rem; }
    .dash-grid  { grid-template-columns: 1fr; }
    .dash-paper-triage-section { position: static; }
    .dash-quota { flex-direction: column; align-items: stretch; }
    .dash-memory-form-row,
    .dash-memory-card-head {
        flex-direction: column;
        align-items: stretch;
    }
    .paper-watch-status-grid,
    .paper-watch-run-grid {
        grid-template-columns: 1fr;
    }
    .paper-watch-health-summary-head {
        flex-direction: column;
        align-items: stretch;
    }
    .paper-watch-run-summary {
        flex-direction: column;
    }
    .paper-watch-run-summary-side {
        justify-content: flex-start;
    }
    .history-item { flex-direction: column; align-items: flex-start; gap: 0.375rem; }
}

/* ═══════════════════════════════════════════════════
   11. QUOTA NOTE & EMPTY STATES
   ═══════════════════════════════════════════════════ */
.dash-quota-note {
    font-size: 0.6875rem;
    color: var(--color-text-muted);
    margin-top: 0.5rem;
    text-align: center;
}
.dash-empty-notes {
    padding: 1rem 0.5rem;
}
.dash-empty-hint {
    margin-bottom: 0.5rem;
}
.dash-view-all-cta {
    font-weight: 600;
}
.empty-state-hint {
    font-size: 0.8125rem;
    color: var(--color-text-muted);
    margin-top: 0.25rem;
}
.dash-start-btn {
    margin-top: 0.75rem;
    display: inline-block;
}
.dash-section-no-margin {
    margin-bottom: 0;
}
.dash-section-desc {
    font-size: 0.8125rem;
    color: var(--color-text-secondary);
    margin-bottom: 1rem;
}
.dash-memory-search {
    display: grid;
    gap: 0.9rem;
}
.dash-memory-form {
    display: grid;
    gap: 0.75rem;
}
.dash-memory-form-row {
    display: flex;
    gap: 0.6rem;
    align-items: center;
    flex-wrap: wrap;
}
.dash-memory-input {
    min-width: 240px;
}
.dash-memory-type-row {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem 0.75rem;
}
.dash-memory-type-option {
    display: inline-flex;
    align-items: center;
    gap: 0.35rem;
    font-size: 0.8125rem;
    color: var(--color-text-secondary);
}
.dash-memory-results-head {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    font-size: 0.875rem;
    color: var(--color-text);
}
.dash-memory-results {
    display: grid;
    gap: 0.75rem;
}
.dash-memory-card {
    display: grid;
    gap: 0.65rem;
    padding: 0.95rem 1rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-surface);
}
.dash-memory-card-head {
    display: flex;
    justify-content: space-between;
    gap: 0.75rem;
    align-items: flex-start;
}
.dash-memory-card-main {
    display: grid;
    gap: 0.25rem;
    min-width: 0;
}
.dash-memory-badges {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
}
.dash-memory-title {
    font-size: 0.95rem;
    font-weight: 700;
    line-height: 1.45;
    color: var(--color-text);
    text-decoration: none;
}
.dash-memory-title:hover {
    color: var(--color-primary);
    text-decoration: underline;
}
.dash-memory-subtitle {
    font-size: 0.8rem;
    color: var(--color-text-secondary);
}
.dash-memory-time {
    font-size: 0.75rem;
    color: var(--color-text-muted);
    white-space: nowrap;
}
.dash-memory-snippet {
    font-size: 0.84rem;
    line-height: 1.65;
    color: var(--color-text-secondary);
}
.dash-memory-why {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
}
.dash-memory-actions {
    display: flex;
    align-items: center;
    gap: 0.6rem;
    flex-wrap: wrap;
}
.dash-memory-source,
.dash-memory-mode {
    font-size: 0.75rem;
    color: var(--color-text-secondary);
}
.dash-memory-error {
    margin-top: -0.2rem;
}
.settings-field-mt {
    margin-top: 1rem;
}
.settings-toggle-label {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    cursor: pointer;
}
.settings-toggle-checkbox {
    width: 18px;
    height: 18px;
    cursor: pointer;
}
.settings-toggle-text {
    font-size: 0.8125rem;
    color: var(--color-text-secondary);
}

/* ═══════════════════════════════════════════════════
   12. WORKSPACE HOME (B-2)
   ═══════════════════════════════════════════════════ */
.workspace-home {
    display: grid;
    gap: 1.25rem;
    /* Match the content width used by .dash / .project-shell / .info-page so the
       Home and Search surfaces don't render wider than every other workbench page. */
    max-width: var(--container-max);
    margin: 0 auto;
}

/* The shared .workbench-checkpoint adds margin: 1rem 0 1.5rem, which stacks on top
   of the .workspace-home grid gap and made the gap after the checkpoint cards larger
   than the rest. Drop the extra bottom margin so spacing follows the 1.25rem grid
   rhythm like every other section. (Scoped so compare/project_summary are untouched.) */
.workspace-home .workspace-home-checkpoint {
    margin-bottom: 0;
}

.workspace-home-onboarding,
.workspace-home-intake,
.workspace-home-block {
    background: var(--color-surface);
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
}

.workspace-home-onboarding,
.workspace-home-intake {
    padding: 1rem 1.15rem;
}

.workspace-home-onboarding {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    background: linear-gradient(135deg, rgba(37, 99, 235, 0.08) 0%, var(--color-surface) 72%);
}

.workspace-home-onboarding-copy {
    margin: 0;
    color: var(--color-text);
    font-size: 0.95rem;
    font-weight: 600;
}

.workspace-home-onboarding-actions,
.workspace-home-intake-actions {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
}

.workspace-home-intake {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
}

.workspace-home-intake-copy {
    display: grid;
    gap: 0.3rem;
}

.workspace-home-intake-label {
    margin: 0;
    color: #475569;
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 0.06em;
    text-transform: uppercase;
}

/* #249 1단계 — light-only literal text colour, no dark override (2.24:1 on
   the dark surface). */
:root[data-theme="dark"] .workspace-home-intake-label {
    color: var(--color-text-muted);
}

.workspace-home-intake-description {
    margin: 0;
    max-width: 58rem;
    color: var(--color-text-secondary);
    line-height: 1.55;
}

.workspace-home-blocks {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 1rem;
}

.workspace-home-execution-board {
    display: grid;
    gap: 1rem;
    margin-top: 1rem;
    padding: 1.1rem 1.15rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    background: linear-gradient(180deg, rgba(15, 23, 42, 0.02), rgba(15, 23, 42, 0.01));
}

.workspace-home-open-db-context,
.workspace-home-traceability-pulse,
.workspace-home-portfolio-contradiction-synthesis {
    display: grid;
    gap: 1rem;
    margin-top: 1rem;
    padding: 1.1rem 1.15rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-lg);
    /* Neutral background matching .workspace-home-execution-board so sibling
       sections read consistently. (.workspace-home-open-db-context re-applies a
       blue tint below as a deliberate "external DB" signal.) */
    background: linear-gradient(180deg, rgba(15, 23, 42, 0.02), rgba(15, 23, 42, 0.01));
}

.workspace-home-open-db-context {
    border-color: rgba(37, 99, 235, 0.18);
    background:
        linear-gradient(135deg, rgba(37, 99, 235, 0.08), rgba(37, 99, 235, 0.02)),
        linear-gradient(180deg, rgba(15, 23, 42, 0.02), rgba(15, 23, 42, 0.01));
}

.workspace-open-db-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
    gap: 0.75rem;
}

.workspace-open-db-card {
    display: grid;
    gap: 0.35rem;
    padding: 0.9rem;
    border-radius: var(--radius-md);
    border: 1px solid rgba(148, 163, 184, 0.22);
    background: var(--color-surface);
}

.workspace-open-db-label {
    font-size: 0.76rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
    color: var(--color-text-secondary);
    font-weight: 700;
}

.workspace-open-db-value {
    color: var(--color-text);
    font-size: 1rem;
    line-height: 1.35;
    font-weight: 700;
}

.workspace-open-db-copy {
    margin: 0;
    color: var(--color-text-secondary);
    line-height: 1.5;
    font-size: 0.84rem;
}

.workspace-open-db-chip-row .search-chip {
    border-color: rgba(37, 99, 235, 0.18);
    color: #1d4ed8;
}

.workspace-home-block {
    display: flex;
    flex-direction: column;
    min-height: 16rem;
    padding: 1.1rem 1.1rem 1rem;
    box-shadow: 0 18px 32px rgba(15, 23, 42, 0.05);
}

.workspace-home-block-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.75rem;
    margin-bottom: 0.95rem;
}

.workspace-home-block-head h2 {
    margin: 0;
    font-size: 1rem;
    line-height: 1.35;
}

.workspace-home-block-subtitle {
    margin: 0.28rem 0 0;
    color: var(--color-text-secondary);
    font-size: 0.8125rem;
    line-height: 1.5;
}

.workspace-home-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 2rem;
    min-height: 2rem;
    padding: 0.2rem 0.6rem;
    border-radius: 999px;
    background: var(--color-bg);
    color: var(--color-text);
    font-size: 0.875rem;
    font-weight: 700;
}

.workspace-home-list {
    display: grid;
    align-content: start;
    grid-auto-rows: max-content;
    gap: 0.75rem;
    flex: 1;
}

.workspace-home-item {
    display: grid;
    gap: 0.35rem;
    padding: 0.85rem 0.9rem;
    border-radius: var(--radius-md);
    background: var(--color-bg);
    border: 1px solid transparent;
    color: inherit;
    text-decoration: none;
    transition: border-color 0.15s ease, transform 0.15s ease, background 0.15s ease;
}

.workspace-home-item:hover {
    background: var(--color-surface-secondary);
    border-color: var(--color-border);
    transform: translateY(-1px);
}

.workspace-home-item-topline {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.6rem;
    flex-wrap: wrap;
}

.workspace-home-kind,
.workspace-home-state,
.workspace-home-meta {
    font-size: 0.72rem;
    line-height: 1.2;
}

.workspace-home-kind,
.workspace-home-state {
    font-weight: 700;
}

.workspace-home-kind {
    color: var(--color-primary);
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.workspace-home-state {
    color: var(--color-text-secondary);
}

.workspace-home-meta {
    color: var(--color-text-muted);
}

.workspace-home-item-title {
    color: var(--color-text);
    font-size: 0.95rem;
    font-weight: 700;
    line-height: 1.45;
}

.workspace-home-item-subtitle {
    color: var(--color-text-secondary);
    font-size: 0.8rem;
    line-height: 1.45;
}

.workspace-home-item-preview {
    color: var(--color-text-secondary);
    font-size: 0.84rem;
    line-height: 1.6;
}

.workspace-home-summary-chips {
    display: flex;
    flex-wrap: wrap;
    gap: 0.35rem;
    margin: 0.15rem 0 0.85rem;
}

.workspace-execution-stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.75rem;
}

.workspace-execution-stat {
    display: grid;
    gap: 0.25rem;
    padding: 0.85rem 0.9rem;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-border-light);
    background: var(--color-surface);
}

.workspace-execution-stat-label {
    color: var(--color-text-secondary);
    font-size: 0.76rem;
    line-height: 1.35;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.workspace-execution-stat-value {
    color: var(--color-text);
    font-size: 1.25rem;
    line-height: 1.1;
}

.workspace-execution-lanes {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.9rem;
}

.workspace-traceability-stats {
    display: grid;
    grid-template-columns: repeat(4, minmax(0, 1fr));
    gap: 0.75rem;
}

.workspace-traceability-stat {
    display: grid;
    gap: 0.25rem;
    padding: 0.9rem;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-border-light);
    background: var(--color-surface);
}

.workspace-traceability-stat-warning {
    border-color: rgba(245, 158, 11, 0.4);
    background: linear-gradient(135deg, rgba(245, 158, 11, 0.14), var(--color-surface));
}

.workspace-traceability-stat-label,
.workspace-traceability-stat-caption {
    color: var(--color-text-secondary);
    line-height: 1.45;
}

.workspace-traceability-stat-label {
    font-size: 0.76rem;
    text-transform: uppercase;
    letter-spacing: 0.04em;
}

.workspace-traceability-stat-value {
    color: var(--color-text);
    font-size: 1.15rem;
    line-height: 1.1;
}

.workspace-traceability-stat-caption {
    font-size: 0.8rem;
}

.workspace-traceability-alerts {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 0.85rem;
}

.workspace-traceability-alert {
    display: grid;
    gap: 0.5rem;
    padding: 0.9rem;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-border-light);
    background: var(--color-surface);
}

.workspace-traceability-alert-warning {
    border-color: rgba(220, 38, 38, 0.24);
    background: linear-gradient(135deg, rgba(239, 68, 68, 0.14), var(--color-surface));
}

.workspace-traceability-alert-info {
    border-color: rgba(37, 99, 235, 0.2);
}

.workspace-traceability-alert-link {
    font-size: 0.8rem;
}

.workspace-traceability-empty {
    min-height: 8rem;
}

.workspace-execution-lane {
    display: grid;
    gap: 0.8rem;
    align-content: start;
    padding: 0.95rem;
    border-radius: var(--radius-md);
    border: 1px solid var(--color-border-light);
    background: var(--color-surface);
}

.workspace-execution-lane-head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.75rem;
}

.workspace-execution-lane-head h3 {
    margin: 0;
    color: var(--color-text);
    font-size: 0.95rem;
}

.workspace-execution-lane-count {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.9rem;
    min-height: 1.9rem;
    padding: 0.2rem 0.55rem;
    border-radius: 999px;
    background: var(--color-bg);
    color: var(--color-text);
    font-size: 0.78rem;
    font-weight: 700;
}

.workspace-execution-list {
    display: grid;
    gap: 0.75rem;
}

.workspace-execution-card {
    display: grid;
    gap: 0.45rem;
    padding: 0.85rem 0.9rem;
    border-radius: var(--radius-md);
    border: 1px solid transparent;
    background: var(--color-bg);
    color: inherit;
    text-decoration: none;
    transition: border-color 0.15s ease, transform 0.15s ease, background 0.15s ease;
}

.workspace-execution-card:hover {
    background: var(--color-surface-secondary);
    border-color: var(--color-border);
    transform: translateY(-1px);
}

.workspace-execution-card-meta {
    display: flex;
    flex-wrap: wrap;
    gap: 0.45rem 0.75rem;
    color: var(--color-text-muted);
    font-size: 0.76rem;
    line-height: 1.4;
}

.workspace-execution-stage {
    display: inline-flex;
    align-items: center;
    padding: 0.18rem 0.55rem;
    border-radius: 999px;
    font-size: 0.72rem;
    font-weight: 700;
    line-height: 1.2;
}

.workspace-execution-stage-accepted {
    background: rgba(245, 158, 11, 0.14);
    color: #92400e;
}

.workspace-execution-stage-in_progress {
    background: rgba(37, 99, 235, 0.14);
    color: #1d4ed8;
}

.workspace-execution-stage-blocked {
    background: rgba(220, 38, 38, 0.12);
    color: #b91c1c;
}

.workspace-execution-stage-done {
    background: rgba(22, 163, 74, 0.12);
    color: #15803d;
}

/* #249 1단계 — light-only literal text on a low-opacity brand tint, no dark
   override (same defect family as .workspace-execution-stage-accepted). */
:root[data-theme="dark"] .workspace-execution-stage-accepted {
    background: rgba(245, 158, 11, 0.16);
    color: #fbbf24;
}
:root[data-theme="dark"] .workspace-execution-stage-in_progress {
    background: rgba(59, 130, 246, 0.16);
    color: #93c5fd;
}
:root[data-theme="dark"] .workspace-execution-stage-blocked {
    background: rgba(239, 68, 68, 0.16);
    color: #fca5a5;
}
:root[data-theme="dark"] .workspace-execution-stage-done {
    background: rgba(34, 197, 94, 0.16);
    color: #4ade80;
}

.workspace-execution-empty {
    min-height: 8rem;
}

.workspace-home-empty {
    display: flex;
    flex: 1;
    flex-direction: column;
    /* `flex: 1` 로 카드 높이만큼 늘어난 뒤 가운데 정렬하면 위아래에 큰 공백이
       남아 카드가 비어 보인다 — 형제 카드가 길수록 심해진다(다음 액션 3건 옆의
       0건 카드). 문구는 위에서 시작한다. */
    justify-content: flex-start;
    gap: 0.85rem;
    padding: 0.9rem;
    border-radius: var(--radius-md);
    background: linear-gradient(180deg, rgba(148, 163, 184, 0.08), transparent);
}

.workspace-home-empty[hidden] {
    display: none;
}

.workspace-home-empty-body {
    margin: 0;
    color: var(--color-text-secondary);
    font-size: 0.9rem;
    line-height: 1.6;
}

.workspace-home-empty-cta[aria-disabled="true"],
.workspace-home-empty-cta:disabled {
    cursor: not-allowed;
    opacity: 0.5;
}

.workspace-home-block-footer {
    display: flex;
    flex-wrap: wrap;
    gap: 0.65rem;
    margin-top: 0.85rem;
    padding-top: 0.85rem;
    border-top: 1px solid var(--color-border-light);
}

.project-upgrade-backdrop {
    position: fixed;
    inset: 0;
    z-index: 1200;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 1rem;
    background: rgba(15, 23, 42, 0.42);
}

.project-upgrade-backdrop[hidden] {
    display: none;
}

.project-upgrade-modal {
    width: min(34rem, 100%);
    max-height: min(42rem, calc(100vh - 2rem));
    overflow: auto;
    border-radius: var(--radius-lg);
    border: 1px solid var(--color-border);
    background: var(--color-surface);
    box-shadow: var(--shadow-xl);
    padding: 1.25rem;
}

.project-upgrade-copy h2 {
    margin: 0.2rem 0 0.45rem;
    font-size: clamp(1.25rem, 4vw, 1.65rem);
    line-height: 1.2;
}

.project-upgrade-copy p:last-child {
    margin: 0;
    color: var(--color-text-secondary);
    line-height: 1.6;
}

.project-upgrade-preview {
    display: grid;
    gap: 0.65rem;
    margin: 1rem 0;
}

.project-upgrade-preview-row {
    display: grid;
    gap: 0.25rem;
    padding: 0.75rem;
    border: 1px solid var(--color-border-light);
    border-radius: var(--radius-md);
    background: var(--color-surface-secondary);
}

.project-upgrade-preview-row strong {
    font-size: 0.95rem;
    line-height: 1.35;
}

.project-upgrade-actions {
    display: flex;
    flex-wrap: wrap;
    gap: 0.65rem;
    align-items: center;
}

.workspace-home-skeleton {
    display: grid;
    gap: 0.75rem;
    flex: 1;
}

.workspace-home-skeleton span {
    display: block;
    height: 5.2rem;
    border-radius: var(--radius-md);
    background:
        linear-gradient(90deg, rgba(148, 163, 184, 0.14) 0%, rgba(148, 163, 184, 0.24) 50%, rgba(148, 163, 184, 0.14) 100%);
    background-size: 220% 100%;
    animation: workspace-home-shimmer 1.4s ease-in-out infinite;
}

@keyframes workspace-home-shimmer {
    0% { background-position: 100% 0; }
    100% { background-position: -100% 0; }
}

@media (max-width: 1120px) {
    .workspace-home-blocks {
        grid-template-columns: 1fr;
    }

    .workspace-execution-stats,
    .workspace-execution-lanes,
    .workspace-traceability-stats {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .workspace-traceability-alerts {
        grid-template-columns: 1fr;
    }
}

@media (max-width: 768px) {
    .workspace-home-onboarding,
    .workspace-home-intake {
        padding: 0.95rem 1rem;
    }

    .workspace-home-intake-actions,
    .workspace-home-onboarding-actions {
        width: 100%;
    }

    .workspace-home-intake-actions > *,
    .workspace-home-onboarding-actions > *,
    .project-upgrade-actions > * {
        width: 100%;
        justify-content: center;
    }

    .workspace-home-block {
        min-height: 0;
        padding: 1rem;
    }

    .workspace-home-execution-board {
        padding: 1rem;
    }

    .workspace-execution-stats,
    .workspace-execution-lanes,
    .workspace-traceability-stats,
    .workspace-traceability-alerts {
        grid-template-columns: 1fr;
    }

    .workspace-home-open-db-context,
    .workspace-home-traceability-pulse,
    .workspace-home-portfolio-contradiction-synthesis {
        padding: 1rem;
    }
}


.paper-watch-run-date-gate {
    margin-top: 0.75rem;
    padding: 0.65rem 0.75rem;
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-bg);
    color: var(--color-text);
}

.paper-watch-run-date-gate pre {
    margin: 0.35rem 0 0;
    white-space: pre-wrap;
}

/* ── Margin utility classes for dashboard ── */
.dash-card-mb-sm { margin-bottom: 0.5rem; }
.dash-mt-sm      { margin-top: 0.5rem; }
.dash-mt-md      { margin-top: 0.75rem; }
.dash-badge-ml   { margin-left: 0.4rem; }
.dash-project-controls {
    display: flex;
    gap: 0.5rem;
    align-items: center;
    flex-wrap: wrap;
}
.dash-project-protected {
    font-size: 0.75rem;
    color: var(--color-text-tertiary);
}
.dash-project-action {
    font-size: 0.75rem;
    padding: 0.2rem 0.6rem;
}
.dash-project-action--muted {
    color: var(--color-text-secondary);
    border-color: var(--color-border);
}
.dash-current-project-brief {
    display: flex;
    gap: 0.5rem;
    align-items: center;
    flex-wrap: wrap;
    margin: 0.5rem 0;
}
.dash-current-project-brief-cta {
    white-space: nowrap;
}
.dash-current-project-trace {
    margin: 0.75rem 0;
    padding: 0.75rem;
    border: 1px solid var(--color-warning-soft);
    border-radius: var(--radius-md);
    background: color-mix(in srgb, var(--color-warning-soft) 55%, white);
}
.dash-current-project-trace-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.5rem;
    flex-wrap: wrap;
    margin-bottom: 0.35rem;
}
.dash-current-project-trace-note {
    margin: 0.35rem 0 0;
    color: var(--color-text-secondary);
    font-size: 0.85rem;
    line-height: 1.5;
}
.dash-current-project-trace-cta {
    margin-top: 0.65rem;
    white-space: nowrap;
}
.status-badge.status-draft {
    background: var(--color-warning-soft);
    color: var(--color-warning-strong);
}
.status-badge.status-inactive {
    background: var(--color-surface-secondary);
    color: var(--color-text-secondary);
}

/* ── Getting Started Checklist ── */
.gs-checklist {
    border: 1px solid var(--color-border);
    border-radius: var(--radius-md);
    background: var(--color-surface);
    padding: 0.85rem 1rem;
    margin-bottom: 1rem;
}
.gs-checklist-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    margin-bottom: 0.65rem;
}
.gs-checklist-skip {
    background: none;
    border: none;
    color: var(--color-text-secondary);
    cursor: pointer;
    font-size: 0.8rem;
    padding: 0;
}
.gs-checklist-skip:hover {
    color: var(--color-text-primary);
}
.gs-checklist-steps {
    list-style: none;
    margin: 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: 0.4rem;
}
.gs-checklist-step {
    display: flex;
}
.gs-checklist-step-link {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    font-size: 0.875rem;
    color: var(--color-text-primary);
    text-decoration: none;
}
.gs-checklist-step-link:hover {
    color: var(--color-accent);
}
.gs-checklist-step--done .gs-checklist-step-link {
    color: var(--color-text-secondary);
    text-decoration: line-through;
}
.gs-checklist-step-icon {
    width: 1.4rem;
    height: 1.4rem;
    border-radius: 50%;
    border: 1.5px solid var(--color-border);
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 0.72rem;
    flex-shrink: 0;
}
.gs-checklist-step--done .gs-checklist-step-icon {
    background: var(--color-accent);
    border-color: var(--color-accent);
    color: #fff;
}
@media (max-width: 640px) {
    .gs-checklist-header {
        flex-wrap: wrap;
        gap: 0.35rem;
    }
    .gs-checklist-step-link {
        font-size: 0.8rem;
        line-height: 1.35;
        word-break: break-word;
    }
    .gs-checklist-step-icon {
        width: 1.2rem;
        height: 1.2rem;
        font-size: 0.65rem;
    }
}
