/* authoring.css — P6 Schedule Authoring (Phase 1) chrome.
   Namespaced `.authoring-*` (grepped repo-wide 2026-07-10 — no collisions).
   Theme tokens only: every colour is `var(--token, <Classic fallback>)`; NO bare
   colours outside a var() fallback, NO forced-priority flags (new .authoring-* classes
   have no competing rules, so plain specificity wins). Dark mode adapts via the shared grid
   chrome tokens (--tb-btn-*, --accent, --cell-text, --modal-scrim). */

/* ── Dirty chip (sits next to the Authoring toolbar group) ── */
.authoring-dirty-chip {
    display: inline-flex;
    align-items: center;
    margin-left: 8px;
    padding: 2px 10px;
    font-size: 11px;
    font-weight: 600;
    line-height: 18px;
    white-space: nowrap;
    border-radius: var(--btn-radius, 4px);
    background: var(--authoring-chip-bg, #fff3e0);
    color: var(--authoring-chip-fg, #e65100);
    border: 1px solid var(--authoring-chip-border, #ffcc80);
}

/* ── Disabled authoring toolbar buttons (F9 in flight) ── */
.toolbar-btn.authoring-btn-disabled {
    opacity: 0.45;
    cursor: not-allowed;
    pointer-events: none;
}

/* ── Inline cell editor ── */
td.authoring-cell-editing {
    position: relative;
}
.authoring-cell-editor-input {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    box-sizing: border-box;
    margin: 0;
    padding: 0 6px;
    font: inherit;
    color: var(--cell-text, #1f2937);
    background: var(--tb-btn-bg, #ffffff);
    border: 2px solid var(--accent, #1a73e8);
    border-radius: 0;
    outline: none;
    z-index: 3;
}

/* ── Confirm dialog (delete / dissolve) ── */
.authoring-confirm-overlay {
    position: fixed;
    inset: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--modal-scrim, rgba(0, 0, 0, 0.5));
    z-index: var(--z-modal-elevated, 99999);
}
.authoring-confirm-dialog {
    width: 380px;
    max-width: calc(100vw - 32px);
    padding: 20px 22px 18px;
    border-radius: var(--btn-radius, 8px);
    background: var(--tb-btn-bg, #ffffff);
    color: var(--cell-text, #1f2937);
    border: 1px solid var(--tb-btn-border, #d1d5db);
    box-shadow: 0 10px 34px var(--authoring-shadow, rgba(0, 0, 0, 0.28));
}
.authoring-confirm-title {
    font-size: 15px;
    font-weight: 700;
    margin-bottom: 8px;
}
.authoring-confirm-message {
    font-size: 13px;
    line-height: 1.5;
    margin-bottom: 18px;
    color: var(--authoring-muted, #4b5563);
}
.authoring-confirm-actions {
    display: flex;
    justify-content: flex-end;
    gap: 8px;
}
.authoring-confirm-btn {
    padding: 7px 16px;
    font-size: 13px;
    font-weight: 600;
    cursor: pointer;
    border-radius: var(--btn-radius, 4px);
    border: 1px solid var(--tb-btn-border, #d1d5db);
}
.authoring-confirm-cancel {
    background: var(--tb-btn-bg, #ffffff);
    color: var(--tb-btn-text, #374151);
}
.authoring-confirm-ok {
    background: var(--btn-pri, var(--accent, #1a73e8));
    border-color: var(--btn-pri, var(--accent, #1a73e8));
    color: var(--authoring-on-accent, #ffffff);
}
.authoring-confirm-ok.authoring-confirm-danger {
    background: var(--authoring-danger, #d32f2f);
    border-color: var(--authoring-danger, #d32f2f);
    color: var(--authoring-on-accent, #ffffff);
}

/* ── Dependency-popup edit layer (Phase 2 · src/ui/dependency-popup-edit.js) ──
   Additive decorations on the existing `.dependency-table`. Only applied when the
   `.authoring-dep-editable` marker is present (author on an authored version), so the
   viewer popup stays pixel-identical. table-layout is `fixed`, so the authoring column
   widths are redistributed here to make room for the type/lag editors + an action column
   (sum ≈ 444px < the ~469px column pane → no overflow under overflow-x:hidden). */
.dependency-table.authoring-dep-editable th:nth-child(1),
.dependency-table.authoring-dep-editable td:nth-child(1) { width: 176px; min-width: 176px; }
.dependency-table.authoring-dep-editable th:nth-child(2),
.dependency-table.authoring-dep-editable td:nth-child(2) { width: 58px; min-width: 58px; }
.dependency-table.authoring-dep-editable th:nth-child(3),
.dependency-table.authoring-dep-editable td:nth-child(3) { width: 60px; min-width: 60px; }
.dependency-table.authoring-dep-editable th.authoring-dep-action-col,
.dependency-table.authoring-dep-editable td.authoring-dep-action-cell {
    width: 30px;
    min-width: 30px;
    text-align: center;
}

.authoring-dep-type,
.authoring-dep-lag {
    box-sizing: border-box;
    font: inherit;
    font-size: 0.95em;
    padding: 1px 2px;
    color: var(--cell-text, #1f2937);
    background: var(--tb-btn-bg, #ffffff);
    border: 1px solid var(--tb-btn-border, #d1d5db);
    border-radius: var(--btn-radius, 3px);
    text-align: center;
}
.authoring-dep-type { width: 100%; }
.authoring-dep-lag { width: 34px; max-width: 34px; text-align: right; }
.authoring-dep-lag-unit {
    font-size: 0.85em;
    margin-left: 2px;
    color: var(--authoring-muted, #4b5563);
}

.authoring-dep-del {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 20px;
    height: 20px;
    padding: 0;
    font-size: 12px;
    line-height: 1;
    cursor: pointer;
    color: var(--authoring-muted, #4b5563);
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--btn-radius, 3px);
}
.authoring-dep-del:hover {
    color: var(--authoring-on-accent, #ffffff);
    background: var(--authoring-danger, #d32f2f);
    border-color: var(--authoring-danger, #d32f2f);
}

/* + Add predecessor / successor affordance (per column, below the table) */
.authoring-dep-add {
    padding: 6px 12px 8px;
    border-top: 1px solid var(--hdr-border, #e2e8f0);
}
.authoring-dep-add-btn {
    font-size: 0.78em;
    font-weight: 600;
    cursor: pointer;
    padding: 3px 8px;
    color: var(--accent, #1a73e8);
    background: transparent;
    border: 1px dashed var(--tb-btn-border, #d1d5db);
    border-radius: var(--btn-radius, 4px);
}
.authoring-dep-add-btn:hover { background: var(--tb-btn-bg, #ffffff); }
.authoring-dep-add-editor {
    display: flex;
    gap: 6px;
    align-items: center;
    flex-wrap: wrap;
}
.authoring-dep-add-input {
    flex: 1 1 130px;
    min-width: 110px;
    font: inherit;
    font-size: 0.8em;
    padding: 3px 6px;
    color: var(--cell-text, #1f2937);
    background: var(--tb-btn-bg, #ffffff);
    border: 1px solid var(--accent, #1a73e8);
    border-radius: var(--btn-radius, 3px);
}
.authoring-dep-add-confirm,
.authoring-dep-add-cancel {
    font-size: 0.78em;
    font-weight: 600;
    cursor: pointer;
    padding: 3px 10px;
    border-radius: var(--btn-radius, 4px);
    border: 1px solid var(--tb-btn-border, #d1d5db);
}
.authoring-dep-add-confirm {
    color: var(--authoring-on-accent, #ffffff);
    background: var(--btn-pri, var(--accent, #1a73e8));
    border-color: var(--btn-pri, var(--accent, #1a73e8));
}
.authoring-dep-add-cancel {
    color: var(--tb-btn-text, #374151);
    background: var(--tb-btn-bg, #ffffff);
}

/* ── Activity Details · General tab (Phase 3 · src/modules/gantt-grid/authoring/details-general-pane.js) ──
   Design contract: tests/p6-authoring-mockup-gantt.html:319-395 (pm-form-grid) +
   tests/p6-authoring-mockup-modals.html:361-429 (#cstr-hard-warn danger strip). Token-driven; the
   details-panel chrome lives in activity-details-panel.css and shares the same token set. */
.authoring-general-form {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 2px 18px;
    max-width: 940px;
}
.authoring-general-field { margin-bottom: 14px; }
.authoring-general-field > label {
    display: block;
    margin-bottom: 5px;
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    color: var(--authoring-muted, #64748b);
}
.authoring-general-input,
.authoring-general-select,
.authoring-general-date {
    box-sizing: border-box;
    font: inherit;
    font-size: 12.5px;
    padding: 6px 8px;
    color: var(--cell-text, #1e293b);
    background: var(--tb-btn-bg, #ffffff);
    border: 1px solid var(--tb-btn-border, #d1d5db);
    border-radius: var(--btn-radius, 4px);
    outline: none;
}
.authoring-general-input,
.authoring-general-select { width: 100%; }
.authoring-general-input:focus,
.authoring-general-select:focus,
.authoring-general-date:focus {
    border-color: var(--accent, #2563eb);
    box-shadow: 0 0 0 2px var(--authoring-focus-ring, rgba(37, 99, 235, 0.25));
}
.authoring-general-select:disabled,
.authoring-general-ro {
    color: var(--authoring-muted, #64748b);
    background: var(--panel-bg, #f8fafc);
    cursor: not-allowed;
}

/* ── "Link to common successor" fan-in preview (relationship-chooser-dialog.js — Option C) ──
   Diagram + plain-English sentence + roles picker. All colours are token-driven (the file's
   var(--token, fallback) idiom); SVG elements are styled here BY CLASS so the JS carries zero
   colour literals (no-hardcoded-color). ── */
.authoring-lcs-diagram {
    width: 100%;
    height: 152px;
    margin-top: 2px;
    border: 1px dashed var(--tb-btn-border, #d1d5db);
    border-radius: 8px;
    background: var(--panel-bg, #f8fafc);
    overflow: hidden;
}
.authoring-lcs-diagram svg { display: block; width: 100%; height: 100%; }
.authoring-lcs-arrow { fill: none; stroke: var(--accent, #2563eb); stroke-width: 1.6; opacity: 0.85; }
.authoring-lcs-arrowhead { fill: var(--accent, #2563eb); }
.authoring-lcs-node { fill: var(--tb-btn-bg, #ffffff); stroke: var(--tb-btn-border, #cbd5e1); stroke-width: 1.4; }
.authoring-lcs-node-succ { fill: var(--authoring-succ-soft, #e2f3ea); stroke: var(--authoring-succ, #1f8a5b); stroke-width: 1.8; }
.authoring-lcs-node-text { fill: var(--cell-text, #1e293b); font-weight: 700; font-size: 11px; font-family: inherit; }
.authoring-lcs-node-text-succ { fill: var(--authoring-succ, #1f8a5b); }
.authoring-lcs-more-text { fill: var(--authoring-muted, #64748b); font-weight: 600; font-size: 9.5px; font-family: inherit; }
.authoring-lcs-chip { fill: var(--authoring-accent-soft, #e1ecf9); stroke: var(--accent, #2563eb); stroke-width: 1; }
.authoring-lcs-chip-text { fill: var(--accent, #2563eb); font-weight: 700; font-size: 10px; font-family: inherit; }

.authoring-lcs-sentence {
    margin: 0 0 14px;
    padding: 9px 11px;
    border-radius: 8px;
    font-size: 12.5px;
    line-height: 1.5;
    background: var(--authoring-accent-soft, #e1ecf9);
    border: 1px solid var(--authoring-accent-line, #a7cbea);
    color: var(--cell-text, #1e293b);
}
.authoring-lcs-strong { font-weight: 700; }
.authoring-lcs-strong-succ { font-weight: 800; color: var(--authoring-succ, #1f8a5b); }
.authoring-lcs-muted { color: var(--authoring-muted, #64748b); }

.authoring-lcs-roles { display: flex; flex-direction: column; gap: 5px; max-height: 168px; overflow-y: auto; }
.authoring-lcs-row {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 9px;
    border-radius: 7px;
    border: 1px solid var(--tb-btn-border, #e2e8f0);
    background: var(--panel-bg, #f8fafc);
}
.authoring-lcs-row-succ {
    background: var(--authoring-succ-soft, #e2f3ea);
    border-color: var(--authoring-succ-line, #9dd3ba);
}
.authoring-lcs-code {
    font-family: var(--mono-font, ui-monospace, "SF Mono", Consolas, monospace);
    font-size: 12px;
    font-weight: 700;
    min-width: 46px;
    color: var(--cell-text, #1e293b);
}
.authoring-lcs-nm {
    flex: 1;
    font-size: 12px;
    color: var(--authoring-muted, #64748b);
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.authoring-lcs-tag {
    font-size: 9.5px;
    font-weight: 700;
    letter-spacing: 0.4px;
    text-transform: uppercase;
    padding: 2px 7px;
    border-radius: 20px;
    white-space: nowrap;
}
.authoring-lcs-tag-pred { background: var(--authoring-accent-soft, #e1ecf9); color: var(--accent, #2563eb); }
.authoring-lcs-tag-succ { background: var(--authoring-succ, #1f8a5b); color: var(--authoring-on-accent, #ffffff); }
.authoring-lcs-pick {
    appearance: none;
    border: 1px solid var(--tb-btn-border, #cbd5e1);
    background: transparent;
    color: var(--authoring-muted, #64748b);
    font-size: 10px;
    font-weight: 600;
    padding: 3px 8px;
    border-radius: 6px;
    cursor: pointer;
}
.authoring-lcs-pick:hover { border-color: var(--authoring-succ, #1f8a5b); color: var(--authoring-succ, #1f8a5b); }

/* Primary/secondary constraint: select + date on one row */
.authoring-general-row {
    display: flex;
    align-items: center;
    gap: 8px;
}
.authoring-general-row .authoring-general-select { flex: 1 1 auto; }
.authoring-general-date { flex: 0 0 auto; max-width: 152px; }
.authoring-general-help {
    margin-top: 6px;
    font-size: 11px;
    line-height: 1.5;
    color: var(--authoring-muted, #64748b);
}
.authoring-general-manage {
    margin-top: 6px;
    padding: 0;
    font: inherit;
    font-size: 11.5px;
    font-weight: 600;
    color: var(--accent, #2563eb);
    background: none;
    border: none;
    cursor: pointer;
    text-decoration: underline;
}
.authoring-general-manage:hover { filter: brightness(0.92); }

/* Hard-constraint warning strip (mockup #cstr-hard-warn). JS toggles display flex/none. */
.authoring-cstr-warn {
    display: none;
    align-items: center;
    gap: 9px;
    margin-top: 10px;
    padding: 9px 12px;
    font-size: 12px;
    line-height: 1.45;
    border-radius: var(--btn-radius, 6px);
    color: var(--authoring-danger-text, #b71c1c);
    background: var(--authoring-danger-soft, #fdecea);
    border: 1px solid var(--authoring-danger, #d32f2f);
}
.authoring-cstr-warn-icon { flex-shrink: 0; font-size: 15px; }

/* WBS/group row → read-only summary (no editors) */
.authoring-general-summary {
    display: grid;
    grid-template-columns: 120px 1fr;
    gap: 6px 12px;
    max-width: 620px;
    font-size: 12.5px;
}
.authoring-general-kv { display: contents; }
.authoring-general-kv-k {
    font-weight: 600;
    color: var(--authoring-muted, #64748b);
}
.authoring-general-kv-v { color: var(--cell-text, #1e293b); }
.authoring-general-kv-v.mono {
    font-family: var(--mono-font, ui-monospace, Consolas, 'Courier New', monospace);
}
.authoring-general-note {
    margin-top: 12px;
    font-size: 12px;
    font-style: italic;
    color: var(--authoring-muted, #64748b);
}

/* ── Schedule Options (F9) dialog (Phase 6 · src/modules/gantt-grid/authoring/schedule-options-dialog.js) ──
   Design contract: tests/p6-authoring-mockup-modals.html MODAL 1 (#m-opts), honest to real engine
   capability. Reuses the `.authoring-newschedule-*` dialog frame + `.authoring-general-*` fields +
   `.authoring-confirm-*` footer buttons; only the radio rows, the inline threshold input, and the
   results-pane rows are new here. Token-driven with Classic-mode fallbacks (same convention above). */
/* A1 (2026-07-22): slim run view — read-only summary of the persisted options F9 will use. */
.authoring-schedopts-summary {
    display: flex;
    flex-direction: column;
    gap: 6px;
    margin-top: 10px;
    padding: 10px 12px;
    border: 1px solid var(--grid-line, #e2e8f0);
    border-radius: 8px;
    background: var(--surface-2, #f8fafc);
}
.authoring-schedopts-summary-row {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    font-size: 12.5px;
}
.authoring-schedopts-summary-label { color: var(--authoring-muted, #64748b); }
.authoring-schedopts-summary-value {
    color: var(--cell-text, #1e293b);
    font-weight: 600;
    text-align: right;
}
.authoring-schedopts-radio-group {
    display: flex;
    flex-direction: column;
    gap: 8px;
}
.authoring-schedopts-radio-row {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12.5px;
    color: var(--cell-text, #1e293b);
}
.authoring-schedopts-radio-row input[type="radio"] { flex-shrink: 0; margin: 0; }
.authoring-schedopts-radio-row label {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    cursor: pointer;
}
.authoring-schedopts-tag {
    padding: 1px 7px;
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    border-radius: 999px;
    color: var(--accent, #2563eb);
    background: var(--authoring-tag-soft, #e8f0fe);
    border: 1px solid var(--accent, #2563eb);
}
/* Inline "≤ [N] d" number input inside the Total-Float radio label. */
.authoring-schedopts-num {
    width: 64px;
    max-width: 64px;
    margin: 0 2px;
    padding: 3px 6px;
    text-align: right;
}
.authoring-schedopts-num:disabled {
    color: var(--authoring-muted, #64748b);
    background: var(--panel-bg, #f8fafc);
    cursor: not-allowed;
}

/* A1′ Phase 4 (2026-07-24): "Schedule automatically when a change affects dates" is a real toggle
   SWITCH (was a bare checkbox). The <input> is kept for its id + label[for] (e2e + a11y) but visually
   hidden; the track/knob is pure-CSS sibling styling. `!important` per the modal-CSS house rule —
   specificity is contested inside the shared dialog frame. Token-driven, dark-mode-safe (small accent
   knob, no large bright fills): accent track ON, muted-gray track OFF, dimmed while disabled. */
.authoring-schedopts-switch {
    position: relative !important;
    display: inline-block !important;
    flex-shrink: 0 !important;
    width: 40px !important;
    height: 22px !important;
    cursor: pointer !important;
}
.authoring-schedopts-switch input {
    position: absolute !important;
    width: 0 !important;
    height: 0 !important;
    margin: 0 !important;
    opacity: 0 !important;
}
.authoring-schedopts-switch-slider {
    position: absolute !important;
    inset: 0 !important;
    background: var(--authoring-muted, #94a3b8) !important;
    border: 1px solid var(--grid-line, #cbd5e1) !important;
    border-radius: 999px !important;
    transition: background-color 0.2s ease !important;
}
.authoring-schedopts-switch-slider::before {
    content: "" !important;
    position: absolute !important;
    top: 3px !important;
    left: 3px !important;
    width: 16px !important;
    height: 16px !important;
    background: #ffffff !important;
    border-radius: 50% !important;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.35) !important;
    transition: transform 0.2s ease !important;
}
.authoring-schedopts-switch input:checked + .authoring-schedopts-switch-slider {
    background: var(--accent, #2563eb) !important;
    border-color: var(--accent, #2563eb) !important;
}
.authoring-schedopts-switch input:checked + .authoring-schedopts-switch-slider::before {
    transform: translateX(18px) !important;
}
.authoring-schedopts-switch input:focus-visible + .authoring-schedopts-switch-slider {
    box-shadow: 0 0 0 3px var(--authoring-tag-soft, rgba(37, 99, 235, 0.3)) !important;
}
.authoring-schedopts-switch input:disabled + .authoring-schedopts-switch-slider {
    opacity: 0.55 !important;
    cursor: not-allowed !important;
}

/* Results pane (post-run). `[data-schedule-log-slot]` is the swap point for the later full-log workstream. */
.authoring-schedopts-results-head {
    margin-bottom: 12px;
    font-size: 12.5px;
    color: var(--authoring-muted, #64748b);
}
.authoring-schedopts-results-subhead {
    margin: 14px 0 8px;
    padding-top: 12px;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--authoring-muted, #64748b);
    border-top: 1px dashed var(--hdr-border, #e2e8f0);
}
.authoring-schedopts-result-line {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    padding: 5px 0;
    font-size: 12.5px;
    border-bottom: 1px solid var(--hdr-border, #eef2f7);
}
.authoring-schedopts-result-k { color: var(--authoring-muted, #64748b); font-weight: 600; }
.authoring-schedopts-result-v {
    color: var(--cell-text, #1e293b);
    font-family: var(--mono-font, ui-monospace, Consolas, 'Courier New', monospace);
    text-align: right;
}

/* ── Schedule Log view (Phase 6 · SCHEDULE-LOG workstream ·
   src/modules/gantt-grid/authoring/schedule-log-view.js) ──
   Design contract: tests/p6-authoring-mockup-modals.html MODAL 1 log view (:267-286) / MODAL 2
   "Schedule Log" (:302-356) — a monospace, ⚠/✓-annotated run log. Replaces the
   `.authoring-schedopts-results*` pane above (renderScheduleResultsPane now delegates here);
   those rules are kept for the fallback stats table this module reuses via `.authoring-schedlog-kv`.
   Token-driven, Classic-mode fallbacks, same convention as the rest of this file. */
.authoring-schedlog-pane {
    font-size: 12.5px;
    line-height: 1.6;
}
.authoring-schedlog-headhint {
    margin-bottom: 10px;
    color: var(--authoring-muted, #64748b);
}
.authoring-schedlog-meta {
    padding: 2px 0;
    font-family: var(--mono-font, ui-monospace, Consolas, 'Courier New', monospace);
    color: var(--cell-text, #1e293b);
}
.authoring-schedlog-divider {
    margin: 8px 0;
    border-top: 1px dashed var(--hdr-border, #e2e8f0);
}
.authoring-schedlog-line {
    padding: 3px 0;
    font-family: var(--mono-font, ui-monospace, Consolas, 'Courier New', monospace);
}
.authoring-schedlog-count { color: var(--cell-text, #1e293b); }
.authoring-schedlog-warn { color: var(--authoring-danger-text, #b71c1c); }
.authoring-schedlog-ok { color: var(--authoring-muted, #64748b); }
.authoring-schedlog-completion {
    margin-top: 8px;
    padding-top: 10px;
    font-weight: 600;
    color: var(--cell-text, #1e293b);
    border-top: 1px dashed var(--hdr-border, #e2e8f0);
}
.authoring-schedlog-subhead {
    margin: 14px 0 8px;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    color: var(--authoring-muted, #64748b);
    border-top: 1px dashed var(--hdr-border, #e2e8f0);
    padding-top: 12px;
}
.authoring-schedlog-kv {
    display: flex;
    justify-content: space-between;
    gap: 16px;
    padding: 5px 0;
    border-bottom: 1px solid var(--hdr-border, #eef2f7);
}
.authoring-schedlog-k { color: var(--authoring-muted, #64748b); font-weight: 600; }
.authoring-schedlog-v {
    color: var(--cell-text, #1e293b);
    font-family: var(--mono-font, ui-monospace, Consolas, 'Courier New', monospace);
    text-align: right;
}
.authoring-schedlog-note {
    margin-top: 10px;
    font-size: 11.5px;
    font-style: italic;
    color: var(--authoring-muted, #64748b);
}
.authoring-schedlog-history-link {
    display: inline-block;
    margin-top: 14px;
}

/* ── Schedule Log history modal (openScheduleLogHistory) — reuses the
   `.authoring-newschedule-dialog` frame; only the wider width + table need new rules. ── */
.authoring-schedlog-history-dialog {
    width: 760px;
}
.authoring-schedlog-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 12px;
}
.authoring-schedlog-table th {
    padding: 6px 8px;
    text-align: left;
    font-size: 10.5px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    color: var(--authoring-muted, #64748b);
    border-bottom: 1px solid var(--hdr-border, #e2e8f0);
}
.authoring-schedlog-table td {
    padding: 6px 8px;
    color: var(--cell-text, #1e293b);
    border-bottom: 1px solid var(--hdr-border, #eef2f7);
}
.authoring-schedlog-row {
    cursor: pointer;
}
.authoring-schedlog-row:hover {
    background: var(--panel-bg, #f8fafc);
}
.authoring-schedlog-row:focus-visible {
    outline: 2px solid var(--accent, #2563eb);
    outline-offset: -2px;
}
.authoring-schedlog-empty {
    padding: 18px 4px;
    font-size: 12.5px;
    color: var(--authoring-muted, #64748b);
    text-align: center;
}

/* ════════════════════════════════════════════════════════════════════════
   DCMA "Schedule Health" panel (Phase 7 — dcma-panel.js). Additive only.
   Theme-token colours only (var(--token, <Classic fallback>)), matching the
   authoring.css convention on line 4 — Light / Dark / Classic all adapt via
   the shared grid chrome tokens (--tb-btn-*, --accent, --cell-text, --panel-bg).
   The ok/warn/danger semantics reuse the same fallbacks as the warn/danger
   strips above (--authoring-danger*, --authoring-warn*) plus a new --authoring-ok*
   trio for the "within threshold" state.
   ════════════════════════════════════════════════════════════════════════ */

/* Wider dialog so the 10 tiles + findings table breathe. */
.authoring-dcma-dialog {
    width: min(920px, 94vw);
    max-width: 94vw;
}
.authoring-dcma-header {
    position: relative;
}
.authoring-dcma-close {
    position: absolute;
    top: 8px;
    right: 8px;
    width: 26px;
    height: 26px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    line-height: 1;
    cursor: pointer;
    color: var(--authoring-muted, #64748b);
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--btn-radius, 4px);
}
.authoring-dcma-close:hover {
    background: var(--tb-btn-bg, #f1f5f9);
    border-color: var(--tb-btn-border, #d1d5db);
}
.authoring-dcma-body {
    max-height: 70vh;
    overflow-y: auto;
}

/* ── KPI tile row ── */
.authoring-dcma-kpi-row {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 10px;
    margin-bottom: 14px;
}
.authoring-dcma-kpi {
    padding: 10px 12px;
    border-radius: var(--btn-radius, 6px);
    border: 1px solid var(--tb-btn-border, #e2e8f0);
    border-left-width: 4px;
    background: var(--tb-btn-bg, #ffffff);
}
.authoring-dcma-kpi-label {
    font-size: 11px;
    font-weight: 600;
    color: var(--authoring-muted, #64748b);
    text-transform: uppercase;
    letter-spacing: 0.02em;
}
.authoring-dcma-kpi-value {
    font-size: 22px;
    font-weight: 800;
    margin-top: 2px;
    color: var(--cell-text, #1e293b);
}
.authoring-dcma-kpi-sub {
    font-size: 11px;
    margin-top: 2px;
    color: var(--authoring-muted, #64748b);
}
.authoring-dcma-kpi-tag {
    font-size: 11px;
    font-weight: 600;
    margin-top: 4px;
    color: var(--authoring-muted, #64748b);
}
/* Tile states — semantic left border + value + tag colour. */
.authoring-dcma-kpi.ok {
    border-left-color: var(--authoring-ok, #2e7d32);
}
.authoring-dcma-kpi.ok .authoring-dcma-kpi-value,
.authoring-dcma-kpi.ok .authoring-dcma-kpi-tag {
    color: var(--authoring-ok-text, #1b5e20);
}
.authoring-dcma-kpi.warn {
    border-left-color: var(--authoring-warn, #d97706);
    background: var(--authoring-warn-soft, #fef3c7);
}
.authoring-dcma-kpi.warn .authoring-dcma-kpi-value,
.authoring-dcma-kpi.warn .authoring-dcma-kpi-tag {
    color: var(--authoring-warn-text, #92400e);
}
.authoring-dcma-kpi.danger {
    border-left-color: var(--authoring-danger, #d32f2f);
    background: var(--authoring-danger-soft, #fdecea);
}
.authoring-dcma-kpi.danger .authoring-dcma-kpi-value,
.authoring-dcma-kpi.danger .authoring-dcma-kpi-tag {
    color: var(--authoring-danger-text, #b71c1c);
}

/* ── Verdict bar ── */
.authoring-dcma-verdict {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding: 10px 12px;
    margin-bottom: 14px;
    border-radius: var(--btn-radius, 6px);
    background: var(--panel-bg, #f8fafc);
    border: 1px solid var(--tb-btn-border, #e2e8f0);
    color: var(--cell-text, #1e293b);
    font-size: 13px;
}
.authoring-dcma-verdict-num {
    font-size: 16px;
    font-weight: 800;
    color: var(--accent, #2563eb);
}
.authoring-dcma-verdict-msg {
    color: var(--authoring-muted, #64748b);
}

/* ── Findings card + table ── */
.authoring-dcma-card {
    border: 1px solid var(--tb-btn-border, #e2e8f0);
    border-radius: var(--btn-radius, 6px);
    overflow: hidden;
}
.authoring-dcma-card-head {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 8px 12px;
    background: var(--panel-bg, #f8fafc);
    border-bottom: 1px solid var(--tb-btn-border, #e2e8f0);
}
.authoring-dcma-card-title {
    font-size: 13px;
    font-weight: 700;
    color: var(--cell-text, #1e293b);
}
.authoring-dcma-card-sub {
    font-size: 11.5px;
    color: var(--authoring-muted, #64748b);
}
.authoring-dcma-card-body {
    padding: 0;
    overflow-x: auto;
}
.authoring-dcma-table {
    width: 100%;
    border-collapse: collapse;
    font-size: 12.5px;
}
.authoring-dcma-th {
    text-align: left;
    padding: 8px 12px;
    font-weight: 600;
    color: var(--authoring-muted, #64748b);
    border-bottom: 1px solid var(--tb-btn-border, #e2e8f0);
    white-space: nowrap;
}
.authoring-dcma-th.col-check { width: 170px; }
.authoring-dcma-th.col-result { width: 80px; }
.authoring-dcma-th.col-activity { width: 110px; }
.authoring-dcma-td {
    padding: 7px 12px;
    color: var(--cell-text, #1e293b);
    border-bottom: 1px solid var(--hdr-border, #eef2f7);
    vertical-align: top;
}
.authoring-dcma-td.mono {
    font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
}
.authoring-dcma-check-tag {
    display: inline-block;
    padding: 1px 7px;
    font-size: 11px;
    font-weight: 700;
    border-radius: 999px;
}
.authoring-dcma-check-tag.fail {
    color: var(--authoring-danger-text, #b71c1c);
    background: var(--authoring-danger-soft, #fdecea);
    border: 1px solid var(--authoring-danger, #d32f2f);
}
.authoring-dcma-check-tag.warn {
    color: var(--authoring-warn-text, #92400e);
    background: var(--authoring-warn-soft, #fef3c7);
    border: 1px solid var(--authoring-warn, #d97706);
}
.authoring-dcma-empty {
    padding: 18px 12px;
    font-size: 12.5px;
    color: var(--authoring-muted, #64748b);
    text-align: center;
}
.authoring-dcma-note {
    margin-top: 12px;
    font-size: 11.5px;
    color: var(--authoring-muted, #64748b);
}

/* ════════════════════════════════════════════════════════════════════════
   Live "Logic Health" dock (schedule-editing Part 2, Phase P4 #9 / D1 —
   logic-health-sidebar.js). Additive only, namespaced `.authoring-lh-*`.
   A BOTTOM DOCK whose chrome is copied from the Activity Details dock
   (activity-details-panel.css): docked below #gantt-container as its following
   sibling so the grid+gantt split shrinks in HEIGHT (never overlaid), same
   260px/120px height + --header-border top-separator conventions. The wide dock
   lays the four categories out as side-by-side CSS-grid columns, each list
   scrolling on its own. Theme-token colours only (hex fallbacks like the
   neighbours), reusing the same --tb-btn-*/--authoring-*/--accent/--panel-bg
   tokens as the DCMA + details blocks above.
   ════════════════════════════════════════════════════════════════════════ */

/* ── Dock shell (docked below #gantt-container as its following sibling) ── */
.authoring-lh-panel {
    flex: 0 0 auto;
    height: 260px;
    min-height: 120px;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    background: var(--panel-bg, #f8fafc);
    color: var(--cell-text, #1e293b);
    border-top: 1px solid var(--header-border, #e2e8f0);
    /* Mirror #gantt-container's sidebar offset (see the sibling combinator below) so the
       dock's content aligns under the grid+gantt rather than under the fixed sidebar. */
    transition: margin-left 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

/* When the sidebar is pinned open, #gantt-container gains `.sidebar-open` + a margin-left.
   The dock is its immediately-following sibling, so mirror the SAME width chain here — a
   pure-CSS follow with no JS wiring (identical to `.authoring-details-panel`). */
.gantt-container.sidebar-open ~ .authoring-lh-panel {
    margin-left: var(--side-width-user, var(--side-width, 256px));
}

/* ── Header (title · total badge · inline live hint · close) ── */
.authoring-lh-header {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
    padding: 9px 12px;
    background: var(--tb-btn-bg, #ffffff);
    border-bottom: 1px solid var(--header-border, #e2e8f0);
}
.authoring-lh-title {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    font-weight: 700;
    color: var(--cell-text, #0f172a);
}
.authoring-lh-title i { color: var(--accent, #2563eb); }
.authoring-lh-total {
    min-width: 20px;
    padding: 1px 8px;
    font-size: 11px;
    font-weight: 800;
    text-align: center;
    border-radius: 999px;
    color: var(--authoring-danger-text, #b71c1c);
    background: var(--authoring-danger-soft, #fdecea);
    border: 1px solid var(--authoring-danger, #d32f2f);
}
.authoring-lh-total.is-clean {
    color: var(--authoring-ok-text, #1b5e20);
    background: color-mix(in srgb, var(--authoring-ok, #2e7d32) 14%, transparent);
    border-color: var(--authoring-ok, #2e7d32);
}
/* Live-status hint — pushed to the header's right side (was a footer strip in the old drawer). */
.authoring-lh-live {
    display: flex;
    align-items: center;
    gap: 6px;
    margin-left: auto;
    font-size: 11px;
    color: var(--authoring-muted, #64748b);
}
.authoring-lh-live i { color: var(--accent, #2563eb); }
.authoring-lh-close {
    width: 26px;
    height: 26px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    line-height: 1;
    cursor: pointer;
    color: var(--authoring-muted, #64748b);
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--btn-radius, 4px);
}
.authoring-lh-close:hover {
    background: var(--row-hover-bg, #f1f5f9);
    color: var(--cell-text, #1e293b);
}

/* ── Body → 4-column category grid + full-width footnote below it ── */
.authoring-lh-body {
    flex: 1;
    min-height: 0;
    display: flex;
    flex-direction: column;
    overflow: hidden;
    padding: 10px 14px;
}
/* The four categories as independent side-by-side columns (uses the wide dock). */
.authoring-lh-cats {
    flex: 1;
    min-height: 0;
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 18px;
    overflow: hidden;
}
.authoring-lh-cat {
    display: flex;
    flex-direction: column;
    min-height: 0;
    overflow: hidden;
}
.authoring-lh-cat.is-empty { opacity: 0.62; }
.authoring-lh-cat-head {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
    padding: 4px 0 6px;
    font-size: 11px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.03em;
    color: var(--authoring-muted, #64748b);
    border-bottom: 1px solid var(--header-border, #e2e8f0);
}
.authoring-lh-cat-head i { color: var(--authoring-muted, #94a3b8); }
.authoring-lh-cat-label {
    flex: 1;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.authoring-lh-cat-count {
    padding: 0 7px;
    font-size: 10.5px;
    font-weight: 700;
    border-radius: 8px;
    color: var(--authoring-muted, #64748b);
    background: var(--header-border, #e2e8f0);
}
.authoring-lh-none {
    padding: 6px 2px;
    font-size: 11.5px;
    color: var(--authoring-muted, #94a3b8);
}
/* Each category's finding list scrolls independently inside its column. */
.authoring-lh-list {
    flex: 1;
    min-height: 0;
    overflow-y: auto;
    list-style: none;
    margin: 4px 0 0;
    padding: 0;
}
.authoring-lh-item {
    display: flex;
    flex-direction: column;
    gap: 2px;
    padding: 6px 8px;
    border-radius: var(--btn-radius, 5px);
    border: 1px solid transparent;
    cursor: pointer;
}
.authoring-lh-item[data-lh-task-id]:hover {
    background: var(--row-hover-bg, #eef2ff);
    border-color: var(--tb-btn-border, #d1d5db);
}
.authoring-lh-item[data-lh-task-id]:focus-visible {
    outline: none;
    border-color: var(--accent, #2563eb);
    box-shadow: 0 0 0 2px var(--authoring-focus-ring, rgba(37, 99, 235, 0.25));
}
.authoring-lh-item-code {
    font-family: var(--mono-font, ui-monospace, SFMono-Regular, Menlo, Consolas, monospace);
    font-size: 12px;
    font-weight: 700;
    color: var(--accent, #2563eb);
}
.authoring-lh-item-detail {
    font-size: 11.5px;
    line-height: 1.4;
    color: var(--cell-text, #334155);
}
.authoring-lh-more {
    flex-shrink: 0;
    margin-top: 4px;
    font-size: 11px;
    color: var(--authoring-muted, #94a3b8);
}

/* ── Clean state (no findings — fills + centres the wide dock) + footnote stamp ── */
.authoring-lh-clean {
    flex: 1;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 8px;
    padding: 20px 12px;
    text-align: center;
    font-size: 13px;
    color: var(--authoring-muted, #64748b);
}
.authoring-lh-clean i {
    font-size: 26px;
    color: var(--authoring-ok, #2e7d32);
}
.authoring-lh-stamp {
    flex-shrink: 0;
    margin-top: 8px;
    padding-top: 10px;
    font-size: 10.5px;
    line-height: 1.5;
    color: var(--authoring-muted, #94a3b8);
    border-top: 1px dashed var(--header-border, #e2e8f0);
}

/* ── Phase 7 — Renumber Activity IDs dialog (renumber-dialog.js) ── */
/* Always-visible caution strip (unlike .authoring-cstr-warn which JS toggles). Token-driven. */
.authoring-renumber-warn {
    display: flex;
    align-items: flex-start;
    gap: 9px;
    margin-top: 12px;
    padding: 9px 12px;
    font-size: 12px;
    line-height: 1.45;
    border-radius: var(--btn-radius, 6px);
    color: var(--authoring-warn-text, #92400e);
    background: var(--authoring-warn-soft, #fef3c7);
    border: 1px solid var(--authoring-warn, #d97706);
}
.authoring-renumber-warn-icon { flex-shrink: 0; font-size: 15px; line-height: 1.2; }
/* Live "A1000, A1010, A1020, …" preview line + the dryRun result echo. */
.authoring-renumber-preview {
    margin-top: 8px;
    padding: 8px 10px;
    font-family: var(--mono-font, ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace);
    font-size: 12px;
    color: var(--authoring-text, #1e293b);
    background: var(--authoring-field-bg, #f8fafc);
    border: 1px solid var(--authoring-border, #e2e8f0);
    border-radius: var(--btn-radius, 6px);
    word-break: break-word;
}

/* ════════════════════════════════════════════════════════════════════════
   Phase 8 — bar drag (bar-link-drag.js). Additive only. Token-driven with
   Classic-mode fallbacks, matching the authoring.css convention on line 4 —
   every colour is `var(--token, <fallback>)`, no bare hex. All chrome is gated
   under `#gantt-rows.authoring-drag-on` (or lives only during a live drag), so a
   non-authoring viewer's Gantt DOM stays pixel-identical.
   ════════════════════════════════════════════════════════════════════════ */

/* Side LINK handles — a 16px hit box holding a 12px visual dot (2px content-box
   padding), vertically centred and overhanging the bar edge. Hidden (opacity 0)
   until the bar is hovered, and only present while the drag layer is active. */
#gantt-rows.authoring-drag-on .bar-link-handle {
    position: absolute;
    top: 50%;
    width: 16px;
    height: 16px;
    margin-top: -8px;
    padding: 2px;
    box-sizing: border-box;
    background-clip: content-box;
    border-radius: 50%;
    cursor: crosshair;
    opacity: 0;
    /* Inert until the bar is hovered — an always-on invisible 16px catcher would
       swallow mousedowns in the empty space beside every bar end and shadow the
       edge of a same-row neighbour closer than 16px. Hovering the bar turns the
       handle interactive; sliding onto its overhanging half keeps the parent
       :hover (descendant hover), so it stays grabbable. */
    pointer-events: none;
    z-index: 20;
    background-color: var(--accent, #1a73e8);
    box-shadow: 0 0 0 1px var(--authoring-on-accent, #ffffff);
    transition: opacity 0.08s ease;
}
#gantt-rows.authoring-drag-on .bar-link-handle[data-side="left"] { left: -16px; }
#gantt-rows.authoring-drag-on .bar-link-handle[data-side="right"] { right: -16px; }
#gantt-rows.authoring-drag-on .task-bar:hover .bar-link-handle { opacity: 1; pointer-events: auto; }

/* MOVE / RESIZE ghost — snapped preview of the bar's new position/size. */
#gantt-rows .bar-drag-ghost {
    position: absolute;
    box-sizing: border-box;
    pointer-events: none;
    z-index: 40;
    border: 1px dashed var(--accent, #1a73e8);
    background-color: var(--authoring-ghost-fill, rgba(26, 115, 232, 0.22));
    border-radius: 2px;
}

/* LINK rubber-band overlay + line (source anchor → cursor). */
#gantt-rows .bar-link-rubberband {
    position: absolute;
    top: 0;
    left: 0;
    pointer-events: none;
    z-index: 39;
    overflow: visible;
}
#gantt-rows .bar-link-rubberband-line {
    stroke: var(--accent, #1a73e8);
    stroke-width: 2;
    stroke-dasharray: 5 4;
    stroke-linecap: round;
}

/* Current valid LINK drop target — ring highlight (box-shadow → layout-neutral). */
#gantt-rows .bar-link-target {
    box-shadow: 0 0 0 2px var(--authoring-on-accent, #ffffff),
                0 0 0 4px var(--accent, #1a73e8);
}

/* Source bar while its drag is claimed — faded (cosmetic only). */
#gantt-rows .bar-drag-source {
    opacity: 0.5;
}

/* Grab affordance on movable bars while the drag layer is on (resize-zone cursor is
   set inline by the JS cursor-hint handler as the pointer nears the right edge).
   overflow: the link handles overhang ±16px OUTSIDE the bar box, but .task-bar ships a
   legacy `overflow: hidden` (style.css) that CLIPS the overhang — CSS reported the
   handles interactive yet no real mousedown could ever reach them (Playwright finding 1).
   Un-clip only while the drag layer is on; the bar's sole child (.progress, %-width)
   stays inside the box, so nothing else escapes. */
#gantt-rows.authoring-drag-on .task-bar:not(.project-bar) {
    cursor: grab;
    overflow: visible;
}

/* Lift the HOVERED bar's whole stacking context (transform-positioned bars are their own
   context, so the handles' z-index:20 is trapped inside it at the bar's base z-index:1)
   above the dependency overlay (inline z-index 10): FS arrows terminate exactly at bar
   edges, and their `pointer-events:stroke` paths would otherwise steal the mousedown on
   the 1px slivers crossing a link handle (adversarial finding #3). */
#gantt-rows.authoring-drag-on .task-bar:hover {
    z-index: 15;
}

/* ════════════════════════════════════════════════════════════════════════
   Undo/Redo live count badge (browser-QA #4 — undo-status-badge.js).
   The pill rides the two toolbar buttons; same token idiom as the rest of
   this file. Empty stacks reuse the shared .authoring-btn-disabled dim.
   ════════════════════════════════════════════════════════════════════════ */
button[data-action='authoring-undo'],
button[data-action='authoring-redo'] {
    position: relative;               /* anchor for the absolute count pill */
}

.authoring-undo-count {
    position: absolute;
    top: -4px;
    right: -5px;
    min-width: 14px;
    height: 14px;
    padding: 0 3px;
    border-radius: 7px;
    font-size: 9px;
    line-height: 14px;
    font-weight: 700;
    text-align: center;
    background: var(--accent, #2563eb);
    color: var(--authoring-on-accent, #ffffff);
    box-shadow: 0 0 0 1px var(--panel-bg, #f8fafc);   /* ring so it reads on any button state */
    pointer-events: none;             /* clicks always reach the button beneath */
}

/* ════════════════════════════════════════════════════════════════════════
   Co-edit conflict marker (pick B2, CO-02 — conflict-marker.js).
   Namespaced `.authoring-conflict-*` (grepped repo-wide 2026-07-23 — no
   collisions in src/, style.css or index.html). The BADGE rides the grid
   cell (relative-td idiom already used by .authoring-cell-editing); the
   POPOVER is a body-level floating panel, so it carries `!important` per the
   standing modal/popover-CSS rule (specificity wars otherwise hide it).
   All colour is a theme token with a Classic fallback (file convention).
   ════════════════════════════════════════════════════════════════════════ */
td.authoring-conflict-cell {
    position: relative;               /* anchor for the absolute badge */
}
.authoring-conflict-badge {
    position: absolute;
    top: 1px;
    right: 1px;
    z-index: 4;                       /* above the cell-content, below the inline editor (z:3+overlay) */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 14px;
    height: 14px;
    border-radius: 7px;
    font-size: 10px;
    line-height: 14px;
    font-weight: 800;
    cursor: pointer;
    background: var(--authoring-conflict-bg, #f59e0b);
    color: var(--authoring-on-accent, #ffffff);
    box-shadow: 0 0 0 1px var(--panel-bg, #f8fafc);
}
.authoring-conflict-badge:hover,
.authoring-conflict-badge:focus {
    background: var(--authoring-conflict-bg-hover, #d97706);
    outline: none;
}

.authoring-conflict-popover {
    position: fixed !important;
    z-index: var(--z-modal-elevated, 99999) !important;
    width: 250px !important;
    max-width: calc(100vw - 16px) !important;
    padding: 12px 14px !important;
    box-sizing: border-box !important;
    border-radius: var(--btn-radius, 8px) !important;
    background: var(--tb-btn-bg, #ffffff) !important;
    color: var(--cell-text, #1f2937) !important;
    border: 1px solid var(--tb-btn-border, #d1d5db) !important;
    box-shadow: 0 10px 34px var(--authoring-shadow, rgba(0, 0, 0, 0.28)) !important;
    font-size: 12px !important;
}
.authoring-conflict-title {
    font-weight: 700 !important;
    font-size: 12px !important;
    margin: 0 0 2px !important;
    color: var(--cell-text, #1f2937) !important;
}
.authoring-conflict-sub {
    font-size: 11px !important;
    color: var(--muted-text, #6b7280) !important;
    margin: 0 0 8px !important;
}
.authoring-conflict-row {
    display: flex !important;
    align-items: baseline !important;
    justify-content: space-between !important;
    gap: 10px !important;
    padding: 3px 0 !important;
}
.authoring-conflict-row-label {
    color: var(--muted-text, #6b7280) !important;
    white-space: nowrap !important;
}
.authoring-conflict-row-value {
    font-weight: 700 !important;
    text-align: right !important;
    word-break: break-word !important;
    color: var(--cell-text, #1f2937) !important;
}
.authoring-conflict-row.is-theirs .authoring-conflict-row-value {
    color: var(--authoring-conflict-bg-hover, #d97706) !important;
}
.authoring-conflict-actions {
    display: flex !important;
    justify-content: flex-end !important;
    gap: 8px !important;
    margin-top: 10px !important;
}
.authoring-conflict-btn {
    padding: 5px 12px !important;
    font-size: 12px !important;
    font-weight: 600 !important;
    border-radius: var(--btn-radius, 4px) !important;
    cursor: pointer !important;
    border: 1px solid var(--tb-btn-border, #d1d5db) !important;
}
.authoring-conflict-restore {
    background: var(--accent, #2563eb) !important;
    color: var(--authoring-on-accent, #ffffff) !important;
    border-color: var(--accent, #2563eb) !important;
}
.authoring-conflict-dismiss {
    background: var(--tb-btn-bg, #ffffff) !important;
    color: var(--cell-text, #1f2937) !important;
}
