/* Shared semantic palette. Legacy light/dark remains a compatibility layer for feature pages. */
html[data-app-theme] {
  --pd-workspace: #f6f1e8; --pd-surface: #fffdf8; --pd-surface-2: #f4ebdd; --pd-elevated: #fffdf9;
  --pd-chrome: #f2e9dc; --pd-chrome-secondary: #fbf6ef; --pd-border: #d8ccbb; --pd-border-subtle: #e9dfd2;
  --pd-text: #30291f; --pd-muted: #726454; --pd-heading: #30291f; --pd-accent: #86532e; --pd-accent-hover: #6e4020;
  --pd-selected: #eaddcb; --pd-hover: #eee3d5; --pd-focus: #985b28; --pd-on-accent: #fff;
  --pd-danger: #b4313c; --pd-warning: #936010; --pd-success: #327557; --pd-info: #326e9f;
  --pd-icon-books: #376caa; --pd-icon-planning: #377e82; --pd-icon-calendar: #a95734; --pd-icon-characters: #7756a5;
  --pd-icon-locations: #3e7c50; --pd-icon-relationships: #a34876; --pd-icon-review: #976318;
  --pd-font-ui: "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
  --pd-radius: 5px; --pd-shadow: 0 3px 12px rgb(35 27 15 / 5%);
  --pd-canvas: var(--pd-workspace); --pd-section: var(--pd-surface); --pd-nested: var(--pd-surface-2);
  --pd-card: var(--pd-elevated); --pd-control: var(--pd-surface); --pd-chip: var(--pd-selected);
  --pd-event-surface: var(--pd-elevated); --pd-event-text: var(--pd-text); --pd-event-muted: var(--pd-muted);
  --pd-event-border: var(--pd-border); --pd-disabled-text: color-mix(in srgb, var(--pd-muted) 82%, var(--pd-text));
}
/* House theme: UI typography stays sans-serif; chart/entity colours remain distinct. */
html[data-app-theme="plotdirector"] {
  --pd-workspace: #f8f1e6; --pd-surface: #fffaf2; --pd-surface-2: #f1e8da; --pd-elevated: #fffcf7;
  --pd-chrome: #eee3d3; --pd-chrome-secondary: #f8f1e6; --pd-border: #9a897a; --pd-border-subtle: #ddd0bf;
  --pd-text: #332b29; --pd-muted: #6c6059; --pd-heading: #48243c; --pd-accent: #59243f; --pd-accent-hover: #40192e;
  --pd-selected: #eadce5; --pd-hover: #f0e6e9; --pd-focus: #75445f; --pd-on-accent: #fffaf2;
  --pd-danger: #a33040; --pd-warning: #805d19; --pd-success: #4e6844; --pd-info: #326a87;
  --pd-icon-books: #356b9b; --pd-icon-planning: #386f6a; --pd-icon-calendar: #965537; --pd-icon-characters: #735594;
  --pd-icon-locations: #4e7046; --pd-icon-relationships: #99466d; --pd-icon-review: #805d19;
  --pd-data-1: #59243f; --pd-data-2: #356b9b; --pd-data-3: #4e7046; --pd-data-4: #966020;
  --pd-data-5: #735594; --pd-data-6: #287b7d; --pd-data-7: #a63d50; --pd-data-8: #596579;
  --pd-data-9: #955735; --pd-data-10: #876b25; --pd-data-11: #7c4279;
  --pd-shadow: 0 3px 12px rgb(61 36 29 / 6%);
}
html[data-app-theme="modern-light"] {
  --pd-workspace: #f4f5f7; --pd-surface: #fff; --pd-surface-2: #f0f2f5; --pd-elevated: #fff;
  --pd-chrome: #f0f1f3; --pd-chrome-secondary: #fafbfc; --pd-border: #d4d8df; --pd-border-subtle: #e7e9ed;
  --pd-text: #292e36; --pd-muted: #626b78; --pd-heading: #20252d; --pd-accent: #875330; --pd-accent-hover: #714023;
  --pd-selected: #ece3dc; --pd-hover: #e5e8ed; --pd-focus: #98552b; --pd-shadow: 0 3px 14px rgb(20 30 45 / 4%);
}
html[data-app-theme="modern-dark"] {
  --pd-workspace: #1d1f23; --pd-surface: #25282d; --pd-surface-2: #2d3036; --pd-elevated: #32363d;
  --pd-chrome: #24272c; --pd-chrome-secondary: #2b2e34; --pd-border: #484d57; --pd-border-subtle: #383d45;
  --pd-text: #e4e7ec; --pd-muted: #aab2bf; --pd-heading: #f4f5f7; --pd-accent: #dfa979; --pd-accent-hover: #efbd92;
  --pd-selected: #44403d; --pd-hover: #3a3f48; --pd-focus: #edb787; --pd-on-accent: #211a15; --pd-shadow: none;
}
html[data-app-theme="warm-dark"] {
  --pd-workspace: #171310; --pd-surface: #231e19; --pd-surface-2: #30271f; --pd-elevated: #382e25;
  --pd-chrome: #251e18; --pd-chrome-secondary: #30271f; --pd-border: #5c4a3b; --pd-border-subtle: #44382e;
  --pd-text: #eee3d4; --pd-muted: #c4af99; --pd-heading: #faecdc; --pd-accent: #dda872; --pd-accent-hover: #f0c18e;
  --pd-selected: #4a3524; --pd-hover: #43362b; --pd-focus: #edb787; --pd-on-accent: #211a15; --pd-shadow: none;
}
html[data-app-theme="rose-pink"] {
  --pd-workspace: #f8f3f4; --pd-surface: #fffdfd; --pd-surface-2: #f5e9ed; --pd-elevated: #fffafa;
  --pd-chrome: #f2e3e8; --pd-chrome-secondary: #fbf4f6; --pd-border: #d9bec8; --pd-border-subtle: #ead9df;
  --pd-text: #392a30; --pd-muted: #756069; --pd-heading: #34242b; --pd-accent: #96415f; --pd-accent-hover: #7b304c;
  --pd-selected: #efd5de; --pd-hover: #f2e1e7; --pd-focus: #a33e63; --pd-on-accent: #fff;
  --pd-danger: #b52f43; --pd-warning: #8a5a10; --pd-success: #2f7255; --pd-info: #356d9a;
  --pd-icon-books: #416fa7; --pd-icon-planning: #467b7e; --pd-icon-calendar: #a75151; --pd-icon-characters: #7658a0;
  --pd-icon-locations: #477951; --pd-icon-relationships: #9b426c; --pd-icon-review: #90621c;
  --pd-shadow: 0 3px 14px rgb(82 40 55 / 6%);
}
html[data-app-theme="baby-blue"] {
  --pd-workspace: #f2f7fa; --pd-surface: #fcfeff; --pd-surface-2: #e7f1f7; --pd-elevated: #fff;
  --pd-chrome: #dfedf5; --pd-chrome-secondary: #f3f9fc; --pd-border: #b9d1df; --pd-border-subtle: #d7e6ee;
  --pd-text: #26343d; --pd-muted: #5c6f7b; --pd-heading: #20313c; --pd-accent: #326b91; --pd-accent-hover: #255676;
  --pd-selected: #cfe4f1; --pd-hover: #deedf5; --pd-focus: #2876a8; --pd-on-accent: #fff;
  --pd-danger: #b23848; --pd-warning: #845c16; --pd-success: #2f725a; --pd-info: #286c9b;
  --pd-icon-books: #356fa8; --pd-icon-planning: #307982; --pd-icon-calendar: #a65c42; --pd-icon-characters: #6d5a9d;
  --pd-icon-locations: #3f7955; --pd-icon-relationships: #995073; --pd-icon-review: #86631e;
  --pd-shadow: 0 3px 14px rgb(40 78 101 / 6%);
}
html[data-app-theme$="dark"] {
  --pd-danger: #f08c97; --pd-warning: #efbf68; --pd-success: #80c7a5; --pd-info: #8cb9f0;
  --pd-icon-books: #88b5f3; --pd-icon-planning: #76c3c9; --pd-icon-calendar: #ecab83; --pd-icon-characters: #c0a3ec;
  --pd-icon-locations: #8bc695; --pd-icon-relationships: #e298bc; --pd-icon-review: #e5be75;
}
/* Bridge established component tokens without independently redesigning feature pages. */
html[data-app-theme] .app-layout {
  --plotline-bg: var(--pd-workspace); --plotline-bg-warm: var(--pd-workspace); --plotline-surface: var(--pd-surface);
  --plotline-surface-elevated: var(--pd-elevated); --plotline-text: var(--pd-text); --plotline-text-muted: var(--pd-muted);
  --plotline-ink: var(--pd-text); --plotline-muted: var(--pd-muted); --plotline-soft: var(--pd-surface-2);
  --plotline-accent: var(--pd-accent); --plotline-accent-dark: var(--pd-accent); --plotline-accent-soft: var(--pd-selected);
  --plotline-border-soft: var(--pd-border-subtle); --app-text: var(--pd-text); --app-text-muted: var(--pd-muted);
  --app-bg: var(--pd-workspace); --app-surface: var(--pd-surface); --app-surface-2: var(--pd-surface-2);
  --app-surface-alt: var(--pd-elevated); --app-card-bg: var(--pd-surface); --app-border: var(--pd-border); --app-timeline-bg: var(--pd-surface-2);
  --plotline-paper: var(--pd-surface); --plotline-panel: var(--pd-surface); --plotline-line: var(--pd-border-subtle);
  --plotline-danger: var(--pd-danger); --plotline-warning: var(--pd-warning); --plotline-success: var(--pd-success);
  --app-link: var(--pd-accent); --app-input-bg: var(--pd-surface); --app-input-text: var(--pd-text);
  --bs-body-bg: var(--pd-workspace); --bs-body-color: var(--pd-text); --bs-secondary-color: var(--pd-muted);
  --bs-border-color: var(--pd-border); --bs-tertiary-bg: var(--pd-surface-2);
  --bs-card-bg: var(--pd-surface); --bs-card-color: var(--pd-text); --bs-modal-bg: var(--pd-elevated);
  --bs-dropdown-bg: var(--pd-elevated); --bs-link-color: var(--pd-accent); --bs-link-hover-color: var(--pd-accent-hover);
  background: var(--pd-workspace); color: var(--pd-text);
}
.app-layout .pd-shell {
  background: var(--pd-chrome); color: var(--pd-text); border-bottom: 1px solid var(--pd-border);
  font-family: var(--pd-font-ui); margin-bottom: 18px; position: relative;
}
.pd-shell *, .pd-shell *::before, .pd-shell *::after { box-sizing: border-box; }
.pd-shell [hidden] { display: none !important; }
.pd-shell button, .pd-shell input, .pd-shell .dropdown-header { font-family: var(--pd-font-ui); }
.pd-titlebar { display: flex; align-items: center; gap: 14px; min-height: 44px; padding: 4px 20px; }
.pd-brand { font: 650 15px var(--pd-font-ui); letter-spacing: -.45px; color: var(--pd-text) !important; text-decoration: none; flex-shrink: 0; }
.pd-brand-mark { color: var(--pd-accent); font-size: 24px; line-height: 0; }
.pd-context-menus { display: flex; align-items: center; gap: 4px; padding: 0 0 0 12px; margin: 0; list-style: none; border-left: 1px solid var(--pd-border); min-width: 0; }
.pd-shell .nav-link { display: flex; align-items: center; gap: 5px; border: 0; background: transparent; color: var(--pd-text); font-size: 12px; padding: 7px 8px; border-radius: 4px; white-space: nowrap; }
.pd-shell .nav-link:hover, .pd-shell .nav-link.show { background: var(--pd-hover); color: var(--pd-text); }
.pd-shell .app-context-label { max-width: 190px; }
.pd-shell .app-book-label { max-width: 140px; }
.pd-titlebar-end { margin-left: auto; display: flex; align-items: center; gap: 12px; }
.pd-presence { display: inline-flex; align-items: center; gap: 5px; color: var(--pd-muted); font-size: 11px; }
.pd-shell .app-account-label { max-width: 130px; }
.pd-shell .dropdown-menu { background: var(--pd-elevated) !important; color: var(--pd-text); border: 1px solid var(--pd-border); border-radius: var(--pd-radius); box-shadow: var(--pd-shadow); max-height: 70vh; overflow-y: auto; min-width: 220px; max-width: min(360px, 94vw); }
.pd-shell .dropdown-item, .pd-shell .dropdown-header { color: var(--pd-text) !important; font-size: 13px; white-space: normal; }
.pd-shell .dropdown-item:hover, .pd-shell .dropdown-item:focus, .pd-shell .dropdown-item.active { background: var(--pd-hover) !important; color: var(--pd-text) !important; }
.pd-shell .app-toolbar { background: transparent; border: 0; padding: 0; margin: 0; min-height: 30px; flex: 0 1 auto; max-width: 32vw; }
.pd-shell .app-toolbar-command { padding: 5px 7px; line-height: 18px; border: 0; border-radius: 3px; box-shadow: none; color: var(--pd-text); }
.pd-shell .app-toolbar-command > span { position: absolute; width: 1px; height: 1px; overflow: hidden; clip-path: inset(50%); }
.pd-shell .app-toolbar-command:hover { background: var(--pd-hover); }
.pd-shell .app-toolbar-command.active { background: var(--pd-selected); box-shadow: none; }
.pd-shell .app-toolbar-customise { font-size: 18px; padding: 0 6px; border: 0; color: var(--pd-muted); }
.pd-shell .app-toolbar-empty { display: none; }
.pd-ribbon-heading { display: flex; align-items: center; padding: 0 20px; gap: 12px; }
.pd-ribbon-tabs { display: flex; align-items: center; gap: 4px; overflow-x: auto; flex: 1; }
.pd-ribbon-tabs [role="tab"] { position: relative; border: 0; background: transparent; color: var(--pd-muted); padding: 8px 16px 10px; font-size: 13px; line-height: 18px; white-space: nowrap; }
.pd-ribbon-tabs [role="tab"]:hover { color: var(--pd-text); background: var(--pd-hover); }
.pd-ribbon-tabs [aria-selected="true"] { color: var(--pd-text); font-weight: 650; background: var(--pd-chrome-secondary); border-radius: 5px 5px 0 0; }
.pd-ribbon-tabs [aria-selected="true"]::after { content: ''; position: absolute; height: 2px; width: 14px; border-radius: 2px; background: var(--pd-accent); left: calc(50% - 7px); bottom: 5px; }
.pd-ribbon-collapse { border: 0; background: transparent; color: var(--pd-muted); font-size: 11px; white-space: nowrap; padding: 5px 7px; }
.pd-ribbon-collapse span { margin-left: 6px; }
.pd-ribbon-surface { background: var(--pd-chrome-secondary); padding: 8px 20px 6px; }
.pd-ribbon-panel { display: flex; overflow-x: auto; gap: 0; min-height: 84px; }
.pd-ribbon-group { display: flex; flex-direction: column; padding: 0 18px; border-right: 1px solid var(--pd-border-subtle); flex-shrink: 0; }
.pd-ribbon-group:first-child { padding-left: 0; }
.pd-ribbon-group:last-child { border: 0; }
.pd-ribbon-commands { display: flex; gap: 4px; flex: 1; align-items: flex-start; }
.pd-shell .pd-ribbon-command { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 5px; padding: 6px 10px; min-width: 65px; border-radius: 4px; text-decoration: none; color: var(--pd-text) !important; font-size: 12px; white-space: nowrap; line-height: 18px; }
.pd-shell button.pd-ribbon-command { border: 0; background: none; font-family: inherit; }
.pd-shell .pd-ribbon-command:hover { background: var(--pd-hover); }
.pd-shell .pd-ribbon-command[aria-current="page"] { background: var(--pd-selected); }
.pd-ribbon-group-label { display: block; text-align: center; color: var(--pd-muted); font-size: 10px; letter-spacing: .03em; padding-top: 4px; }
.pd-shell [aria-disabled="true"] { opacity: .45; cursor: default; }
.pd-icon { width: 22px; height: 22px; fill: none; stroke: currentColor; stroke-width: 1.65; stroke-linecap: round; stroke-linejoin: round; flex-shrink: 0; }
[data-tone="books"] { color: var(--pd-icon-books); } [data-tone="planning"] { color: var(--pd-icon-planning); }
[data-tone="calendar"] { color: var(--pd-icon-calendar); } [data-tone="characters"] { color: var(--pd-icon-characters); }
[data-tone="locations"] { color: var(--pd-icon-locations); } [data-tone="relationships"] { color: var(--pd-icon-relationships); }
[data-tone="review"] { color: var(--pd-icon-review); } [data-tone="warning"] { color: var(--pd-warning); }
.pd-shell :is(button,a,input):focus-visible, .pd-dashboard :is(a,button,input):focus-visible { outline: 2px solid var(--pd-focus); outline-offset: 2px; }
.pd-theme-picker { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.pd-theme-picker button { display: flex; align-items: center; gap: 6px; font-size: 11px; padding: 8px 6px; border: 1px solid var(--pd-border); border-radius: 4px; background: var(--pd-surface); color: var(--pd-text); white-space: nowrap; }
.pd-theme-picker [aria-pressed="true"] { border-color: var(--pd-accent); background: var(--pd-selected); }
.pd-theme-swatch { width: 13px; height: 13px; border-radius: 50%; border: 1px solid #8a8a8a; flex-shrink: 0; }
[data-swatch="plotdirector"] { background: #59243f; }
[data-swatch="modern-light"] { background: #f4f5f7; } [data-swatch="modern-dark"] { background: #25282d; }
[data-swatch="warm-light"] { background: #f4ebdd; } [data-swatch="warm-dark"] { background: #30271f; }
[data-swatch="rose-pink"] { background: #efd5de; } [data-swatch="baby-blue"] { background: #cfe4f1; }
.pd-shell-dialog { font-family: var(--pd-font-ui); }
:is(.pd-shell, .pd-shell-dialog) .modal-content { background: var(--pd-elevated) !important; color: var(--pd-text); border: 1px solid var(--pd-border); border-radius: 7px; }
:is(.pd-shell, .pd-shell-dialog) .modal-title { font: 600 17px var(--pd-font-ui); }
:is(.pd-shell, .pd-shell-dialog) .modal-dialog { max-width: 510px; }
:is(.pd-shell, .pd-shell-dialog) .text-muted { color: var(--pd-muted) !important; }
:is(.pd-shell, .pd-shell-dialog) .toolbar-choice { border-color: var(--pd-border-subtle); }
.pd-customise-section { margin-top: 18px; padding-top: 15px; border-top: 1px solid var(--pd-border-subtle); }
.pd-customise-section .form-check-label { display: grid; gap: 1px; color: var(--pd-text); }
.pd-customise-section .form-check-label span { color: var(--pd-muted); font-size: 12px; }
:is(.pd-shell, .pd-shell-dialog) .btn, .pd-dashboard .btn { border-radius: 4px; font-family: var(--pd-font-ui); font-weight: 500; box-shadow: none; }
:is(.pd-shell, .pd-shell-dialog) .btn-primary, .pd-dashboard .btn-primary { background: var(--pd-accent) !important; border-color: var(--pd-accent) !important; color: var(--pd-on-accent) !important; }
:is(.pd-shell, .pd-shell-dialog) .btn-primary:hover, .pd-dashboard .btn-primary:hover { background: var(--pd-accent-hover) !important; }
:is(.pd-shell, .pd-shell-dialog) .btn-outline-secondary, .pd-dashboard .btn-outline-secondary, .pd-dashboard .pw-actions__toggle { background: transparent !important; border-color: var(--pd-border) !important; color: var(--pd-text) !important; }
:is(.pd-shell, .pd-shell-dialog) .btn-outline-secondary:hover, .pd-dashboard .btn-outline-secondary:hover { background: var(--pd-hover) !important; }
/* Series Dashboard is the Phase 1 reference workspace. */
.app-layout .plotline-shell.pd-dashboard-shell { max-width: none; padding-inline: clamp(20px, 2.6vw, 54px); }
.pd-dashboard { padding-bottom: 28px; font-family: var(--pd-font-ui); }
.pd-dashboard .breadcrumb-trail { margin-bottom: 20px; }
.pd-dashboard .page-heading { margin-bottom: 28px; align-items: center; }
.pd-dashboard h1 { font-size: clamp(30px, 2.6vw, 42px); font-weight: 500; letter-spacing: -.7px; margin-bottom: 8px; }
.pd-dashboard h1, .pd-dashboard h3 a { color: var(--pd-heading) !important; }
.pd-dashboard .eyebrow { font: 600 10px var(--pd-font-ui); letter-spacing: .12em; color: var(--pd-muted); }
.pd-dashboard .lead-text { font: 14px/1.6 var(--pd-font-ui); color: var(--pd-muted) !important; max-width: 760px; }
.pd-dashboard .card { background: var(--pd-surface) !important; border: 0 !important; border-radius: 7px; box-shadow: var(--pd-shadow); color: var(--pd-text); }
.pd-dashboard .card-body { padding: 22px; }
.pd-dashboard .dashboard-summary-grid { display: grid; grid-template-columns: repeat(9,minmax(0,1fr)); gap: 1px; background: var(--pd-border-subtle); border-radius: 7px; overflow: hidden; }
.pd-dashboard .dashboard-summary-card { box-shadow: none; border-radius: 0; height: 100%; }
.pd-dashboard .dashboard-summary-body { padding: 18px 14px; display: grid; grid-template-columns: 1fr auto; align-items: center; gap: 10px; }
.pd-dashboard .dashboard-summary-label { grid-column: 1 / -1; grid-row: 2; margin: 0; font-size: 10px; letter-spacing: .01em; text-transform: none; white-space: normal; color: var(--pd-muted) !important; }
.pd-dashboard .dashboard-summary-value { grid-column: 1; grid-row: 1; font: 600 clamp(19px,1.8vw,28px)/1.2 var(--pd-font-ui); color: var(--pd-text); }
.pd-dashboard .dashboard-stat-icon { grid-column: 2; grid-row: 1; width: 21px; height: 21px; }
.pd-dashboard .dashboard-progress-card { background: transparent !important; box-shadow: none; }
.pd-dashboard .dashboard-progress-body { padding: 18px 0 12px; }
.pd-dashboard .dashboard-progress-title { font: 600 18px var(--pd-font-ui); color: var(--pd-text); }
.pd-dashboard .dashboard-progress-heading { margin-bottom: 12px; }
.pd-dashboard .dashboard-series-progress, .pd-dashboard .progress { height: 5px; border-radius: 3px; background: var(--pd-border-subtle); }
.pd-dashboard .progress-bar { background: var(--pd-accent); }
.pd-dashboard .status-pill { border: 0; border-radius: 4px; padding: 3px 7px; background: var(--pd-surface-2) !important; color: var(--pd-muted) !important; font: 500 11px var(--pd-font-ui); }
.pd-dashboard .dashboard-status-published, .pd-dashboard .dashboard-status-ready { color: var(--pd-success) !important; }
.pd-dashboard .dashboard-status-drafting { color: var(--pd-info) !important; }
.pd-dashboard .dashboard-status-revising, .pd-dashboard .dashboard-status-editing { color: var(--pd-icon-characters) !important; }
.pd-dashboard .dashboard-attention-soft { color: var(--pd-warning) !important; }
.pd-dashboard .list-group-item { background: transparent !important; color: var(--pd-text); border-color: var(--pd-border-subtle) !important; padding-block: 14px; }
.pd-dashboard .border-top { border-color: var(--pd-border-subtle) !important; }
.pd-dashboard .text-muted, .pd-dashboard .muted { color: var(--pd-muted) !important; }
.pd-dashboard .dashboard-book-card .card-body { padding: 20px; }
.pd-dashboard .dashboard-book-card h3 { font-size: 23px; line-height: 1.25; }
.pd-dashboard .dashboard-book-subtitle { color: var(--pd-muted); font-size: 13px; }
.pd-dashboard .dashboard-book-card .btn { font-size: 12px; }
.pd-dashboard .dashboard-attention-card h2, .pd-dashboard .dashboard-activity-card h2 { font: 600 17px var(--pd-font-ui); }
.pd-dashboard .dashboard-attention-card h3 { font: 600 13px var(--pd-font-ui); color: var(--pd-text); }

/* Authenticated feature pages consume the same structural hierarchy as the shell.
   This supersedes the legacy two-theme literals without changing page layout. */
html[data-app-theme] .app-layout :is(
  .timeline-control-panel, .timeline-drag-palette, .drag-drop-panel,
  .timeline-filter-drawer, .timeline-control-group, .timeline-visibility-panel,
  .timeline-jump-panel, .timeline-preset-panel, .timeline-setting-card,
  .scene-inspector-panel, .pacing-panel
) {
  color: var(--pd-text);
  background: var(--pd-section);
  border-color: var(--pd-border);
  box-shadow: none;
}
html[data-app-theme] .app-layout :is(.timeline-filter-drawer, .timeline-control-group) {
  background: var(--pd-nested);
  box-shadow: inset 0 1px 0 var(--pd-border-subtle);
}
html[data-app-theme] .app-layout :is(
  .timeline-filter-drawer, .timeline-control-group, .timeline-drag-palette
) > summary {
  color: var(--pd-accent);
  background: transparent;
}
html[data-app-theme] .app-layout :is(
  .timeline-filter-drawer, .timeline-control-group, .timeline-drag-palette
)[open] > summary { color: var(--pd-accent-hover); background: var(--pd-hover); }
html[data-app-theme] .app-layout :is(
  .timeline-filter-drawer, .timeline-control-group, .timeline-drag-palette
) > summary::after { color: var(--pd-muted); }
html[data-app-theme] .app-layout :is(
  .timeline-control-select, .timeline-control-panel .form-label,
  .timeline-filter-checks, .timeline-visibility-panel label,
  .timeline-preset-panel, .metric-shape-intro, .metric-raw-details summary
) { color: var(--pd-muted); }
html[data-app-theme] .app-layout .timeline-visibility-panel label {
  background: var(--pd-control);
  border-color: var(--pd-border);
}
html[data-app-theme] .app-layout .timeline-visibility-panel label:has(input:checked) {
  color: var(--pd-text);
  background: var(--pd-selected);
  border-color: var(--pd-focus);
}
html[data-app-theme] .app-layout :is(.timeline-workspace, .timeline-shell) {
  color: var(--pd-text);
  background: var(--pd-canvas);
  border-color: var(--pd-border);
  box-shadow: none;
}
html[data-app-theme] .app-layout .timeline-shell { background: var(--pd-section); }
html[data-app-theme] .app-layout :is(
  .timeline-section-header, .metric-lane-label, .metric-shape-controls,
  .metric-chart-frame, .lane-board-heading,
  .pacing-heading, .lane-group-heading, .timeline-chapter-title, .timeline-book-title
) {
  color: var(--pd-accent);
  background: var(--pd-nested);
  border-color: var(--pd-border);
  box-shadow: none;
}
html[data-app-theme] .app-layout .timeline-project-title {
  color: var(--pd-heading);
  background: var(--pd-elevated);
  border-color: var(--pd-border);
  box-shadow: inset 3px 0 0 var(--pd-accent);
}
html[data-app-theme] .app-layout .timeline-chapter {
  color: var(--pd-text);
  background: var(--pd-section);
  border-color: var(--pd-border);
  box-shadow: none;
  outline: 0;
}
html[data-app-theme] .app-layout :is(.timeline-scene-card, .timeline-empty-scene) {
  color: var(--pd-text);
  background: var(--pd-card);
  border-color: var(--pd-border);
  box-shadow: var(--pd-shadow);
}
html[data-app-theme] .app-layout .timeline-scene-card::after { box-shadow: none; }
html[data-app-theme] .app-layout :is(
  .plot-lane-label, .asset-lane-label, .character-lane-label, .asset-lane-slot, .character-lane-slot,
  .metric-graph-points, .timeline-minimap
) {
  color: var(--pd-text);
  background: var(--pd-nested);
  border-color: var(--pd-border);
  box-shadow: none;
}
html[data-app-theme] .app-layout :is(.timeline-placeholder-scene, .timeline-placeholder-cell, .future-lane-placeholder) {
  color: var(--pd-muted);
  background: var(--pd-nested);
  border-color: var(--pd-border);
}
html[data-app-theme] .app-layout .timeline-minimap button {
  color: var(--pd-text);
  background: var(--pd-control);
  border-color: var(--pd-border);
}
html[data-app-theme] .app-layout .timeline-minimap button:is(:hover, :focus-visible) {
  background: var(--pd-hover);
  border-color: var(--pd-focus);
}
html[data-app-theme] .app-layout .timeline-minimap button.is-active {
  color: var(--pd-on-accent);
  background: var(--pd-accent);
  border-color: var(--pd-accent);
}
html[data-app-theme] .app-layout :is(
  .drag-chip, .purpose-chip, .metric-mini-summary, .scene-pov-label,
  .location-pill, .preset-chip
) {
  color: var(--pd-text) !important;
  background: var(--pd-chip) !important;
  border-color: var(--pd-border) !important;
  box-shadow: none;
}
html[data-app-theme] .app-layout :is(.drag-chip, .preset-chip):hover {
  background: var(--pd-hover) !important;
  border-color: var(--pd-focus) !important;
}
html[data-app-theme] .app-layout :is(
  .timeline-scene-card:hover, .timeline-scene-card.selected,
  .timeline-scene-card.focus-match, .timeline-scene-card.keyboard-focus,
  .timeline-scene-card.search-hit
) {
  background: var(--pd-hover);
  border-color: var(--pd-focus);
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--pd-focus) 28%, transparent);
}
html[data-app-theme] .app-layout :is(
  .timeline-scene-card strong, .timeline-chapter-title strong,
  .timeline-book-title strong, .timeline-setting-card strong
) { color: var(--pd-heading); }
html[data-app-theme] .app-layout :is(
  .scene-summary, .timeline-chapter-title span, .timeline-book-title span,
  .timeline-setting-card small, .character-lane-label small
) { color: var(--pd-muted) !important; }
html[data-app-theme] .app-layout :is(.form-control, .form-select, textarea, input, select) {
  color: var(--pd-text);
  background-color: var(--pd-control);
  border-color: var(--pd-border);
}
html[data-app-theme] .app-layout :is(.form-control, .form-select, textarea, input, select):focus {
  border-color: var(--pd-focus);
  box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--pd-focus) 24%, transparent);
}
html[data-app-theme] .app-layout :is(.context-header, .project-tabs) {
  color: var(--pd-text);
  background: var(--pd-section);
  border-color: var(--pd-border);
  box-shadow: none;
}
html[data-app-theme] .app-layout :is(
  .plain-card, .card, .empty-panel, .edit-panel, .list-section,
  .story-calendar-toolbar, .story-calendar-layout, .story-calendar-month,
  .story-calendar-detail, .story-calendar-day, .story-calendar-detail-scene
) {
  color: var(--pd-text);
  background-color: var(--pd-section);
  border-color: var(--pd-border);
}
html[data-app-theme] .app-layout :is(.workspace-heading .button-row, .timeline-filter) .btn {
  --bs-btn-color: var(--pd-text);
  --bs-btn-bg: transparent;
  --bs-btn-border-color: var(--pd-border);
  --bs-btn-hover-color: var(--pd-text);
  --bs-btn-hover-bg: var(--pd-hover);
  --bs-btn-hover-border-color: var(--pd-focus);
  --bs-btn-active-color: var(--pd-text);
  --bs-btn-active-bg: var(--pd-selected);
  --bs-btn-active-border-color: var(--pd-focus);
  --bs-btn-disabled-color: var(--pd-disabled-text);
  --bs-btn-disabled-bg: transparent;
  --bs-btn-disabled-border-color: var(--pd-border-subtle);
  background: var(--bs-btn-bg);
  border-color: var(--bs-btn-border-color);
  color: var(--bs-btn-color);
}
html[data-app-theme] .app-layout :is(.workspace-heading .button-row, .timeline-filter) .btn:is(:hover, :focus-visible) {
  background: var(--bs-btn-hover-bg);
  border-color: var(--bs-btn-hover-border-color);
  color: var(--bs-btn-hover-color);
}
html[data-app-theme] .app-layout :is(.workspace-heading .button-row, .timeline-filter) .btn:is(:active, .active, .show) {
  background: var(--bs-btn-active-bg);
  border-color: var(--bs-btn-active-border-color);
  color: var(--bs-btn-active-color);
}
html[data-app-theme] .app-layout :is(.workspace-heading .button-row, .timeline-filter) .btn:disabled {
  background: var(--bs-btn-disabled-bg);
  border-color: var(--bs-btn-disabled-border-color);
  color: var(--bs-btn-disabled-color);
  opacity: 1;
}
html[data-app-theme] .app-layout .scene-inspector-panel {
  color: var(--pd-text);
  background: var(--pd-section);
  border-color: var(--pd-border);
}
html[data-app-theme] .app-layout .inspector-header {
  color: var(--pd-text);
  background: var(--pd-nested);
  border-color: var(--pd-border);
}
html[data-app-theme] .app-layout .inspector-header :is(.eyebrow, h2) { color: var(--pd-heading); }
html[data-app-theme] .app-layout .inspector-header .btn {
  color: var(--pd-text);
  background: var(--pd-control);
  border-color: var(--pd-border);
}
html[data-app-theme] .app-layout .inspector-header .btn:is(:hover, :focus-visible) {
  background: var(--pd-hover);
  border-color: var(--pd-focus);
}
html[data-app-theme] .app-layout :is( .asset-marker, .character-marker,
  .thread-event-marker, .asset-event-marker
) {
  color: var(--pd-event-text);
  background: color-mix(in srgb, var(--pd-event-surface) 82%, var(--timeline-event-colour, var(--pd-accent)));
  border-color: color-mix(in srgb, var(--pd-event-border) 62%, var(--timeline-event-colour, var(--pd-accent)));
  opacity: 1;
}

html[data-app-theme] .app-layout :is(.asset-marker, .asset-event-marker) { --timeline-event-colour: var(--pd-icon-characters); }
html[data-app-theme] .app-layout .character-marker { --timeline-event-colour: var(--pd-warning); }
html[data-app-theme] .app-layout :is( .asset-marker, .character-marker):is(:hover, :focus-visible) {
  color: var(--pd-event-text);
  background: color-mix(in srgb, var(--pd-hover) 72%, var(--timeline-event-colour, var(--pd-accent)));
  border-color: var(--pd-focus);
  outline-color: color-mix(in srgb, var(--pd-focus) 38%, transparent);
}

html[data-app-theme] .app-layout :is(
  .thread-event-item, .asset-event-item, .story-asset-event-item, .asset-mini-item
) {
  color: var(--pd-event-text);
  background: var(--pd-event-surface);
  border-color: var(--pd-event-border);
}
html[data-app-theme] .app-layout :is(
  .thread-event-item, .asset-event-item, .story-asset-event-item, .asset-mini-item
) :is(p, .muted, small) { color: var(--pd-event-muted) !important; }
html[data-app-theme] .app-layout :is(.timeline-scene-card.filter-dim, .timeline-scene-card.focus-dim) { opacity: .68; }
html[data-app-theme] .app-layout .timeline-scene-card.search-dim { opacity: .6; }
html[data-app-theme] .app-layout .lane-dim { opacity: .72; }
html[data-app-theme] .app-layout .timeline-metric-edit-status {
  color: var(--pd-muted);
  background: transparent;
  border: 0;
  border-radius: 0;
  padding: 0;
  font-weight: 600;
}
html[data-app-theme] .app-layout .metric-toggle-pill {
  color: var(--pd-text);
  background: var(--pd-event-surface);
  border-color: var(--pd-event-border);
}
html[data-app-theme] .app-layout .metric-toggle-pill:has(input:checked) {
  color: var(--pd-text);
  background: var(--pd-selected);
  border-color: color-mix(in srgb, var(--metric-colour) 58%, var(--pd-border));
}
html[data-app-theme] .app-layout .metric-toggle-pill:is(:hover, :focus-within) {
  color: var(--pd-text);
  background: var(--pd-hover);
  border-color: var(--pd-focus);
}
@media (max-width: 1199px) {
  .pd-titlebar { gap: 8px; padding-inline: 12px; flex-wrap: wrap; }
  .pd-shell .app-toolbar { max-width: 40vw; }
  .pd-shell .app-context-label { max-width: 140px; }
  .pd-shell .app-book-label { max-width: 110px; }
  .pd-dashboard .dashboard-summary-grid { grid-template-columns: repeat(5,minmax(0,1fr)); }
}
@media (max-width: 767px) {
  .pd-titlebar { gap: 5px; }
  .pd-titlebar > .app-toolbar { order: 3; flex: 1 1 100%; max-width: 100%; padding-bottom: 3px; }
  .pd-context-menus { order: 4; width: 100%; border: 0; padding-left: 0; }
  .pd-titlebar-end { margin-left: auto; }
  .pd-presence { display: none; }
  .pd-shell .app-account-label { max-width: 100px; }
  .pd-ribbon-heading { padding-inline: 8px; gap: 4px; }
  .pd-ribbon-tabs [role="tab"] { padding-inline: 12px; }
  .pd-ribbon-collapse { width: 32px; overflow: hidden; font-size: 0; }
  .pd-ribbon-collapse span { font-size: 16px; }
  .pd-ribbon-surface { padding-inline: 10px; }
  .pd-ribbon-group { padding-inline: 12px; }
  .pd-dashboard .dashboard-summary-grid { grid-template-columns: repeat(3,minmax(0,1fr)); }
  .pd-dashboard .dashboard-summary-body { padding: 14px 10px; }
}
@media (prefers-reduced-motion: reduce) {
  .app-layout *, .app-layout *::before, .app-layout *::after { transition: none !important; animation: none !important; scroll-behavior: auto !important; }
}

/* Bootstrap's sticky layer (1020) stays below backdrop/modal (1050/1055).
   One natural-height header: no fixed rows or reserved expanded-ribbon space. */


/* Opt-in page contributions only: ordinary browser furniture is untouched. */
.pwa-content-only { display: none; }
html[data-standalone="true"] [data-pwa-accounted="true"] { display: none !important; }
html[data-standalone="true"] .pwa-content-only:not(:empty) { display: block; }
html[data-standalone="true"][data-app-theme] { scroll-padding-top: calc(var(--pd-sticky-height, 0px) + 12px); }
html[data-standalone="true"] .app-layout > .pd-application-header { position: sticky; top: 0; z-index: 1020; margin-bottom: 10px; }
html[data-standalone="true"] .app-layout > .pd-application-header > .pd-shell { margin-bottom: 0; }
/* Context is a set of groups in the active panel, never another chrome row. */
.pd-page-context, .pd-page-context-controls { display: contents; }
.pd-page-context[hidden] { display: none; }
.pd-ribbon-panel > .pd-ribbon-group:has(+ [data-pwa-context-host][hidden]) { border-right: 0; }
.pd-page-context-controls > .pd-ribbon-group:first-child { padding-left: 18px; }
.pd-ribbon-panel:has([data-pwa-context-host]:not([hidden])) { overflow-y: clip; }
.pd-ribbon-group:has(> .pd-context-menu) > .pd-ribbon-group-label { margin-top: auto; }
.pd-context-menu { margin: 0; min-width: 0; }
.pd-context-menu > summary { list-style: none; cursor: pointer; }
.pd-context-menu > summary::-webkit-details-marker { display: none; }
.pd-context-menu[data-compact="false"] > summary { display: none; }
.pd-context-menu[data-compact="true"] > summary span::after { content: ' ⌄'; }
.pd-shell .pd-context-menu[data-compact="true"] > summary { max-width: 110px; }
.pd-context-menu[data-compact="true"] > summary span { white-space: normal; text-align: center; }
.pd-context-menu[data-compact="true"] > .pd-context-menu-content {
  position: fixed; z-index: 1040; display: flex; flex-direction: column; align-items: stretch;
  min-width: 200px; max-width: calc(100vw - 24px); max-height: min(65vh, 560px); overflow-y: auto;
  padding: 6px; border: 1px solid var(--pd-border); border-radius: 6px;
  background: var(--pd-elevated); box-shadow: 0 8px 24px #0003;
}
.pd-context-menu[data-compact="true"]:not([open]) > .pd-context-menu-content { display: none; }
.pd-shell .pd-context-menu[data-compact="true"] > .pd-context-menu-content > .pd-ribbon-command {
  flex-direction: row; justify-content: flex-start; gap: 8px; text-align: left; width: 100%; white-space: normal;
}
.pd-shell .pd-context-command, .pd-shell .pd-context-submit { border: 0; background: transparent; font-family: var(--pd-font-ui); }
.pd-shell .pd-context-command:hover, .pd-shell .pd-context-submit:hover { background: var(--pd-hover); }
.pd-shell .pd-context-command.pd-context-destructive { color: var(--bs-danger-text-emphasis) !important; }
.pd-context-command[aria-disabled="true"] { pointer-events: none; }
.pd-context-command[hidden] { display: none !important; }
.pd-context-form { display: flex; align-items: flex-start; gap: 4px; margin: 0; }
.pd-context-field { display: flex; flex-direction: column; align-items: center; gap: 2px; margin: 0; padding: 3px 6px 0; min-width: 95px; max-width: 165px; color: var(--pd-text); font-size: 11px; line-height: 13px; }
.pd-context-field > .pd-icon { width: 20px; height: 20px; }
.pd-context-select, .pd-context-input, .pd-context-selector > summary {
  width: 100%; max-width: 150px; min-width: 85px; height: 24px; margin: 0;
  border: 1px solid var(--pd-border); border-radius: 3px; padding: 2px 5px;
  background: var(--pd-control); color: var(--pd-text); font: 12px var(--pd-font-ui);
}
.pd-context-select { padding-right: 2px; }
.pd-context-input { width: 140px; }
.pd-context-selector > summary { max-width: 150px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pd-context-selector > summary::after { content: ' ⌄'; }
.pd-context-selector .pd-context-menu-content { gap: 6px; }
.pd-context-selector select.pd-context-select { min-height: 140px; width: 100%; max-width: none; }
.pd-context-selector .form-control { background: var(--pd-control); color: var(--pd-text); border-color: var(--pd-border); }
.pd-context-status { color: var(--pd-muted); font-size: 12px; align-self: center; }
.pd-shell :is(summary, select):focus-visible { outline: 2px solid var(--pd-focus); outline-offset: 2px; }
@media (max-width: 1199px) {
  .pd-ribbon-panel:has([data-pwa-context-host]:not([hidden])) .pd-ribbon-group { padding-inline: 10px; }
  .pd-page-context-controls > .pd-ribbon-group:first-child { padding-left: 10px; }
  .pd-context-field { min-width: 85px; max-width: 135px; padding-inline: 3px; }
  .pd-context-select, .pd-context-input { max-width: 125px; }
}

/* One input with an integrated submit affordance, not a second ribbon Search card. */
.pd-context-search { align-self: stretch; align-items: center; }
.pd-context-search .pd-context-field { gap: 5px; max-width: 210px; align-items: stretch; padding: 4px 6px; }
.pd-context-search .pd-context-field > span:first-child { text-align: left; }
.pd-context-search-field { display: flex; align-items: center; border: 1px solid var(--pd-border); border-radius: 3px; background: var(--pd-control); width: 190px; }
.pd-context-search-field .pd-context-input { flex: 1; min-width: 0; max-width: none; width: 155px; border: 0; background: transparent; }
.pd-context-search-submit { display: flex; align-items: center; justify-content: center; border: 0; background: transparent; color: var(--pd-icon-planning); padding: 3px 5px; border-radius: 3px; }
.pd-context-search-submit .pd-icon { width: 17px; height: 17px; }
.pd-context-search-submit:hover { background: var(--pd-hover); }
.pd-context-search-field:focus-within { outline: 2px solid var(--pd-focus); outline-offset: 2px; }
@media (max-width:1199px) { .pd-context-search-field { width: 150px; } }

/* House-theme primitives. Scope excludes public pages, including ordinary web login. */
html[data-app-theme="plotdirector"] .app-layout {
  --bs-primary: #59243f; --bs-primary-rgb: 89,36,63;
  --bs-success-rgb: 78,104,68; --bs-danger-rgb: 163,48,64;
  --bs-warning-rgb: 128,93,25; --bs-info-rgb: 50,106,135;
  --bs-secondary-rgb: 108,96,89; --bs-light-rgb: 241,232,218;
  --bs-emphasis-color: var(--pd-text); --bs-secondary-bg: var(--pd-surface-2);
  font-family: var(--pd-font-ui);
}
html[data-app-theme="plotdirector"] .app-layout :is(.card,.panel,.modal-content,.dropdown-menu,.offcanvas,.list-group-item) {
  background-color: var(--pd-surface); color: var(--pd-text); border-color: var(--pd-border-subtle);
}
html[data-app-theme="plotdirector"] .app-layout :is(.modal-header,.modal-footer,.card-header,.card-footer) {
  background: var(--pd-chrome-secondary); border-color: var(--pd-border-subtle); color: var(--pd-text);
}
html[data-app-theme="plotdirector"] .app-layout :is(.form-control,.form-select,.input-group-text) {
  background-color: var(--pd-control); color: var(--pd-text); border-color: var(--pd-border);
}
html[data-app-theme="plotdirector"] .app-layout :is(input,textarea)::placeholder { color: var(--pd-muted); opacity: 1; }
html[data-app-theme="plotdirector"] .app-layout :is(.form-control,.form-select):disabled {
  background-color: var(--pd-surface-2); color: var(--pd-disabled-text); opacity: 1;
}
html[data-app-theme="plotdirector"] .app-layout :is(a,button,input,textarea,select,summary,[tabindex]):focus-visible {
  outline: 2px solid var(--pd-focus); outline-offset: 2px;
}
html[data-app-theme="plotdirector"] .app-layout :is(.form-control,.form-select):focus { box-shadow: 0 0 0 3px #75445f26; border-color: var(--pd-focus); }
html[data-app-theme="plotdirector"] .app-layout :is(.form-check-input:checked,.progress-bar) { background-color: var(--pd-accent); border-color: var(--pd-accent); }
html[data-app-theme="plotdirector"] .app-layout .btn-primary {
  --bs-btn-bg: var(--pd-accent); --bs-btn-border-color: var(--pd-accent); --bs-btn-color: var(--pd-on-accent);
  --bs-btn-hover-bg: var(--pd-accent-hover); --bs-btn-hover-border-color: var(--pd-accent-hover); --bs-btn-hover-color: var(--pd-on-accent);
  --bs-btn-active-bg: var(--pd-accent-hover); --bs-btn-active-border-color: var(--pd-accent-hover); --bs-btn-active-color: var(--pd-on-accent);
  background: var(--pd-accent); color: var(--pd-on-accent); border-color: var(--pd-accent);
}
html[data-app-theme="plotdirector"] .app-layout .btn-primary:is(:hover,:active,.active) { background: var(--pd-accent-hover); border-color: var(--pd-accent-hover); }
html[data-app-theme="plotdirector"] .app-layout :is(.btn-secondary,.btn-outline-secondary) {
  --bs-btn-color: var(--pd-text); --bs-btn-border-color: var(--pd-border);
  --bs-btn-hover-color: var(--pd-text); --bs-btn-hover-bg: var(--pd-hover); --bs-btn-hover-border-color: var(--pd-border);
  --bs-btn-active-color: var(--pd-text); --bs-btn-active-bg: var(--pd-selected); --bs-btn-active-border-color: var(--pd-accent);
  background-color: var(--pd-surface-2); color: var(--pd-text); border-color: var(--pd-border);
}
html[data-app-theme="plotdirector"] .app-layout :is(.btn-secondary,.btn-outline-secondary):hover { background-color: var(--pd-hover); }
html[data-app-theme="plotdirector"] .app-layout .btn:disabled { opacity: 1; color: var(--pd-disabled-text) !important; background: var(--pd-surface-2) !important; border-color: var(--pd-border-subtle) !important; }
html[data-app-theme="plotdirector"] .app-layout :is(.text-muted,.muted,.form-text) { color: var(--pd-muted) !important; }
html[data-app-theme="plotdirector"] .app-layout :is(.nav-tabs,.nav-pills) .nav-link { color: var(--pd-accent); }
html[data-app-theme="plotdirector"] .app-layout :is(.nav-tabs,.nav-pills) .nav-link.active,
html[data-app-theme="plotdirector"] .app-layout .dropdown-item:is(:active,.active) { background: var(--pd-selected); color: var(--pd-heading); border-color: var(--pd-border); }
html[data-app-theme="plotdirector"] .app-layout .dropdown-item { color: var(--pd-text); }
html[data-app-theme="plotdirector"] .app-layout .dropdown-item:is(:hover,:focus) { background: var(--pd-hover); }
html[data-app-theme="plotdirector"] .app-layout .table {
  --bs-table-bg: var(--pd-surface); --bs-table-color: var(--pd-text); --bs-table-border-color: var(--pd-border-subtle);
  --bs-table-striped-bg: var(--pd-chrome-secondary); --bs-table-striped-color: var(--pd-text);
  --bs-table-hover-bg: var(--pd-hover); --bs-table-hover-color: var(--pd-text); --bs-table-active-bg: var(--pd-selected); --bs-table-active-color: var(--pd-text);
}
html[data-app-theme="plotdirector"] .app-layout .table thead { --bs-table-bg: var(--pd-surface-2); --bs-table-color: var(--pd-text); }
html[data-app-theme="plotdirector"] .app-layout :is(.alert,.toast) { color: var(--pd-text); background: var(--pd-surface); border-color: var(--pd-border); }
html[data-app-theme="plotdirector"] .app-layout .alert-success { background: #e8edde; border-color: var(--pd-success); }
html[data-app-theme="plotdirector"] .app-layout .alert-danger { background: #f5e4e4; border-color: var(--pd-danger); }
html[data-app-theme="plotdirector"] .app-layout .alert-warning { background: #f2e9d5; border-color: var(--pd-warning); }
html[data-app-theme="plotdirector"] .app-layout .alert-info { background: #e4edf1; border-color: var(--pd-info); }
html[data-app-theme="plotdirector"] .app-layout .tooltip { --bs-tooltip-bg: var(--pd-text); --bs-tooltip-color: var(--pd-on-accent); }
html[data-app-theme="plotdirector"] .app-layout :is(.badge.bg-warning,.badge.bg-info,.badge.bg-light) { color: var(--pd-on-accent) !important; }
html[data-app-theme="plotdirector"] .app-layout .badge.bg-light { background: var(--pd-surface-2) !important; color: var(--pd-text) !important; }
html[data-app-theme="plotdirector"] .app-layout { scrollbar-color: var(--pd-border) var(--pd-workspace); }
/* Installed reauthentication has no .app-layout, but shares the same palette. */
html[data-app-theme="plotdirector"] .public-auth {
  --plotline-bg: var(--pd-workspace); --plotline-bg-warm: var(--pd-workspace);
  --plotline-text: var(--pd-text); --plotline-text-muted: var(--pd-muted);
  --plotline-accent: var(--pd-accent); --plotline-accent-dark: var(--pd-accent-hover);
  --plotline-accent-soft: var(--pd-selected); --plotline-surface: var(--pd-surface);
  --app-input-bg: var(--pd-surface); --app-input-text: var(--pd-text);
}
html[data-app-theme="plotdirector"] .public-auth .btn-primary { background: var(--pd-accent); border-color: var(--pd-accent); color: var(--pd-on-accent); }
html[data-app-theme="plotdirector"] .public-auth :is(.form-control,.form-select) { color: var(--pd-text); background: var(--pd-control); border-color: var(--pd-border); }
html[data-app-theme="plotdirector"] .public-auth :is(a,button,input):focus-visible { outline: 2px solid var(--pd-focus); outline-offset: 2px; }
html[data-app-theme="plotdirector"] .app-layout .btn-outline-primary { color: var(--pd-accent); border-color: var(--pd-accent); background: transparent; }
html[data-app-theme="plotdirector"] .app-layout .btn-outline-primary:is(:hover,:active,.active) { color: var(--pd-on-accent); background: var(--pd-accent); }
html[data-app-theme="plotdirector"] .app-layout :is(.btn-success,.btn-outline-success) { --pd-button-tone: var(--pd-success); }
html[data-app-theme="plotdirector"] .app-layout :is(.btn-danger,.btn-outline-danger) { --pd-button-tone: var(--pd-danger); }
html[data-app-theme="plotdirector"] .app-layout :is(.btn-warning,.btn-outline-warning) { --pd-button-tone: var(--pd-warning); }
html[data-app-theme="plotdirector"] .app-layout :is(.btn-info,.btn-outline-info) { --pd-button-tone: var(--pd-info); }
html[data-app-theme="plotdirector"] .app-layout :is(.btn-success,.btn-danger,.btn-warning,.btn-info) {
  background: var(--pd-button-tone); border-color: var(--pd-button-tone); color: var(--pd-on-accent);
}
html[data-app-theme="plotdirector"] .app-layout :is(.btn-outline-success,.btn-outline-danger,.btn-outline-warning,.btn-outline-info) {
  background: transparent; border-color: var(--pd-button-tone); color: var(--pd-button-tone);
}
html[data-app-theme="plotdirector"] .app-layout :is(.btn-outline-success,.btn-outline-danger,.btn-outline-warning,.btn-outline-info):is(:hover,:active,.active) {
  background: var(--pd-button-tone); color: var(--pd-on-accent);
}
html[data-app-theme="plotdirector"] .app-layout :is(.text-bg-warning,.text-bg-info) { color: var(--pd-on-accent) !important; }
html[data-app-theme="plotdirector"] .pd-shell [aria-disabled="true"] { opacity: 1; color: var(--pd-disabled-text) !important; }
/* Legacy analytical/filter panels used literal white instead of the shared surface token. */
html[data-app-theme="plotdirector"] .app-layout :is(.warning-filter-panel,.analytics-section) {
  background: var(--pd-section); color: var(--pd-text); border-color: var(--pd-border-subtle);
}
html[data-app-theme="plotdirector"] .app-layout input[type="range"] { accent-color: var(--pd-accent); }
/* The house theme anchors the picker; six alternatives remain balanced below it. */
.pd-theme-picker [data-app-theme-choice="plotdirector"] { grid-column: 1 / -1; justify-content: center; }

/* Calendar controls use the shared ribbon form; retain the range and statistics. */
html[data-standalone="true"] .story-calendar-heading {
  margin-bottom: .5rem;
  gap: .5rem;
}
html[data-standalone="true"] .story-calendar-heading .lead-text {
  margin-bottom: 0;
}
html[data-standalone="true"] .story-calendar-shell {
  gap: .5rem;
}
html[data-standalone="true"] .story-calendar-toolbar .button-row {
  flex-wrap: wrap;
  gap: .35rem;
}
html[data-standalone="true"] .story-calendar-toolbar .button-row .btn {
  width: auto;
}

/* Toggle commands retain the ordinary ribbon shape, with a recessed selected state. */
.pd-shell .pd-ribbon-command[aria-pressed="true"],
.location-drag-commands > button[aria-pressed="true"] {
  color: var(--pd-text); background: var(--pd-selected); border: 1px solid var(--pd-border);
  box-shadow: inset 0 2px 3px color-mix(in srgb, var(--pd-text) 24%, transparent), inset 0 -1px 0 var(--pd-surface);
}
.location-drag-commands { display: flex; flex-wrap: wrap; gap: 8px; }
.location-drag-commands > button { display: flex; align-items: center; gap: 6px; border-radius: 4px; font-family: var(--pd-font-ui); }
.location-drag-commands svg { width: 20px; height: 20px; fill: none; stroke: currentColor; stroke-width: 1.7; }

/* Writer uses the same compact hierarchy and 14px panel inset as its queue cards. */
.pd-writer { font-family: var(--pd-font-ui); }
.pd-writer .writer-dashboard-heading h1 { font: 500 clamp(26px, 2.6vw, 36px)/1.2 var(--pd-font-ui); }
.pd-writer .story-bible-section-heading h2 { font: 600 18px/1.3 var(--pd-font-ui); }
.pd-writer .writer-queue-card h3 { font-family: var(--pd-font-ui); }
.pd-writer :is(.story-bible-section, .writer-dashboard-grid) { margin-bottom: 16px; }
.pd-writer .story-bible-section > :last-child { margin-bottom: 0; }
