From 76750311b317673b550d1c5e14129930c02946e9 Mon Sep 17 00:00:00 2001 From: Nick Beckley Date: Wed, 1 Jul 2026 21:39:33 +0100 Subject: [PATCH 1/4] Tightened the Project Details / Series Dashboard stats strip so the 9 summary tiles use a dedicated responsive grid: --- PlotLine/Views/Projects/Details.cshtml | 4 ++-- PlotLine/wwwroot/css/site.css | 33 ++++++++++++++++++++++---- PlotLine/wwwroot/css/site.min.css | 2 +- 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/PlotLine/Views/Projects/Details.cshtml b/PlotLine/Views/Projects/Details.cshtml index 6f23537..e5e0a6b 100644 --- a/PlotLine/Views/Projects/Details.cshtml +++ b/PlotLine/Views/Projects/Details.cshtml @@ -71,10 +71,10 @@ }
-
+
@foreach (var card in summaryCards) { -
+

@card.Item1

diff --git a/PlotLine/wwwroot/css/site.css b/PlotLine/wwwroot/css/site.css index 6be98a6..082f2da 100644 --- a/PlotLine/wwwroot/css/site.css +++ b/PlotLine/wwwroot/css/site.css @@ -470,20 +470,27 @@ td.text-end { border-color: var(--plotline-line); } +.dashboard-summary-grid { + display: grid; + grid-template-columns: repeat(9, minmax(0, 1fr)); + gap: 8px; +} + .dashboard-summary-body { - padding: 10px 12px; + padding: 8px 9px; } .dashboard-summary-label { - margin-bottom: 4px; - font-size: 0.7rem; + margin-bottom: 3px; + font-size: 0.64rem; line-height: 1.15; } .dashboard-summary-value { display: block; - font-size: 1.45rem; + font-size: 1.25rem; line-height: 1; + overflow-wrap: anywhere; } .dashboard-summary-calm { @@ -501,6 +508,24 @@ td.text-end { background: rgba(252, 241, 246, 0.7); } +@media (max-width: 1199.98px) { + .dashboard-summary-grid { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } +} + +@media (max-width: 767.98px) { + .dashboard-summary-grid { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } +} + +@media (max-width: 420px) { + .dashboard-summary-grid { + grid-template-columns: 1fr; + } +} + .dashboard-progress-card { border-color: rgba(47, 111, 99, 0.18); background: linear-gradient(180deg, #ffffff 0%, rgba(238, 245, 242, 0.64) 100%); diff --git a/PlotLine/wwwroot/css/site.min.css b/PlotLine/wwwroot/css/site.min.css index cde2b33..b18c433 100644 --- a/PlotLine/wwwroot/css/site.min.css +++ b/PlotLine/wwwroot/css/site.min.css @@ -1 +1 @@ -html{font-size:15px;min-height:100%}@media (min-width:768px){html{font-size:16px}}:root{--plotline-ink:#1e252b;--plotline-muted:#66717b;--plotline-paper:#fbfaf7;--plotline-panel:#ffffff;--plotline-line:#d8ddd8;--plotline-accent:#2f6f63;--plotline-accent-dark:#22534a;--plotline-soft:#eef5f2;--timeline-label-width:180px;--timeline-scene-width:220px;--timeline-grid-gap:10px}body{min-height:100%;margin-bottom:0;color:var(--plotline-ink);background:var(--plotline-paper)}a{color:var(--plotline-accent-dark)}.btn-primary{--bs-btn-bg:var(--plotline-accent);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent-dark);--bs-btn-hover-border-color:var(--plotline-accent-dark)}.btn-outline-primary{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent);--bs-btn-hover-border-color:var(--plotline-accent)}.plotline-nav{background:rgba(255,255,255,.94);backdrop-filter:blur(8px)}.plotline-shell{max-width:1480px;padding-left:24px;padding-right:24px}.plotline-shell-wide{max-width:none;padding-left:clamp(18px,2vw,32px);padding-right:clamp(18px,2vw,32px)}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin:18px 0 24px}.workspace-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin:14px 0 18px}.workspace-heading h1{margin:0;font-size:clamp(1.8rem, 3vw, 2.7rem);line-height:1.05}.page-heading.compact{max-width:980px}.page-heading h1{margin:0;font-size:clamp(2rem, 4vw, 3.2rem);line-height:1.05;letter-spacing:0}.eyebrow{margin:0 0 6px;color:var(--plotline-accent-dark);font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.lead-text{max-width:760px;margin:10px 0 0;color:var(--plotline-muted);font-size:1.05rem}.button-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.asset-card-footer form,.button-row form,.compact-buttons form,form[data-confirm-message],td.text-end form{display:inline-flex;align-items:center;margin:0}td.text-end{white-space:nowrap}.content-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.edit-panel,.empty-panel,.list-section,.plain-card{background:var(--plotline-panel);border:1px solid var(--plotline-line);border-radius:8px;padding:20px;box-shadow:0 10px 24px rgba(30,37,43,.04)}.empty-panel h2,.list-section h2,.plain-card h2{margin-top:0;font-size:1.35rem}.empty-panel p,.muted,.plain-card p{color:var(--plotline-muted)}.edit-panel{max-width:980px}.feature-request-admin-page .edit-panel,.feature-request-admin-page .page-heading.compact{max-width:none}.feature-request-admin-table{table-layout:fixed}.feature-request-admin-table td,.feature-request-admin-table th{vertical-align:middle}.feature-request-admin-table__preview{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feature-request-admin-table__action{width:78px}@media (max-width:1100px){.feature-request-admin-table{table-layout:auto}.feature-request-admin-table__preview{max-width:160px}}.trial-dashboard-banner,.trial-status-panel{border:1px solid var(--plotline-line);border-radius:8px;padding:18px 20px;background:var(--plotline-panel)}.trial-status-panel{display:grid;gap:12px;margin-bottom:18px}.trial-status-panel--signup{grid-template-columns:minmax(0,1fr) auto;align-items:center;max-width:980px}.trial-dashboard-banner h2,.trial-status-panel h2,.trial-status-panel h3{margin:0}.trial-dashboard-banner p,.trial-status-panel p{margin-bottom:0}.trial-dashboard-banner,.trial-status-panel__heading{display:flex;gap:16px;align-items:center;justify-content:space-between}.trial-dashboard-banner{margin-bottom:18px}.trial-dashboard-banner__body{min-width:0}.trial-dashboard-banner__actions{display:flex;flex:0 0 auto;flex-wrap:wrap;gap:8px}.trial-progress{height:10px;overflow:hidden;border-radius:999px;background:rgba(84,68,48,.12)}.trial-progress__bar{height:100%;border-radius:inherit}.trial-dashboard-banner[hidden],.trial-status-panel[hidden]{display:none}.location-page .drag-drop-panel,.location-page .edit-panel,.location-page .empty-panel,.location-page .page-heading.compact{max-width:none}.import-panel,.import-preview-section{max-width:none}.import-json-input{font-family:Consolas,"Liberation Mono",Menlo,monospace;font-size:.88rem;line-height:1.45;min-height:34rem;max-height:64vh;overflow:auto;resize:vertical;white-space:pre}.import-counts,.import-preview-heading{display:flex;align-items:flex-start;gap:12px}.import-preview-heading{justify-content:space-between;margin-bottom:16px}.import-counts{flex-wrap:wrap}.import-counts span{display:inline-flex;align-items:baseline;gap:5px;border:1px solid var(--plotline-line);border-radius:999px;padding:5px 11px;background:var(--plotline-soft);color:var(--plotline-muted);font-weight:700}.import-counts strong{color:var(--plotline-ink)}.import-tree{display:grid;gap:12px}.import-tree-book{border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:rgba(255,255,255,.54)}.import-tree-book>summary,.import-tree-chapter>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer}.import-tree-book>summary span,.import-tree-chapter>summary span{color:var(--plotline-muted);font-size:.84rem;font-weight:700;white-space:nowrap}.import-tree-book h3{margin:0 0 10px;font-size:1.08rem}.import-tree-chapter{border-top:1px solid var(--plotline-line);padding:10px 0 0;margin-top:10px}.import-tree-chapter ul{margin:8px 0 0;color:var(--plotline-muted)}.import-scene-meta{display:block;margin-top:2px;color:var(--plotline-muted);font-size:.82rem}.import-mapping-summary{display:grid;gap:6px;border:1px solid rgba(184,118,43,.28);border-radius:8px;padding:10px 12px;margin-bottom:14px;background:rgba(251,236,211,.5);color:var(--plotline-muted);font-size:.9rem}.import-duplicate-confirm{border:1px solid rgba(184,118,43,.34);border-radius:8px;padding:12px 12px 12px 38px;background:rgba(251,236,211,.72)}.import-confirmation,.import-docs details{border:1px solid var(--plotline-line);border-radius:8px;padding:16px;background:rgba(255,255,255,.42)}.import-confirmation h3,.import-doc-grid h3{margin-top:0;font-size:1.05rem}.import-docs summary{cursor:pointer;font-weight:800}.import-doc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:14px}.import-message-list ul{max-height:16rem;overflow:auto}.scene-editor{max-width:1180px}.table{margin-bottom:0}.table th{color:var(--plotline-muted);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase}.narrow{width:90px;white-space:nowrap}.status-pill{display:inline-flex;align-items:center;width:fit-content;border:1px solid #c8d8d2;border-radius:999px;padding:2px 8px;color:var(--plotline-accent-dark);background:var(--plotline-soft);font-size:.78rem;font-weight:700;white-space:nowrap}.dashboard-summary-card{border-color:var(--plotline-line)}.dashboard-summary-body{padding:10px 12px}.dashboard-summary-label{margin-bottom:4px;font-size:.7rem;line-height:1.15}.dashboard-summary-value{display:block;font-size:1.45rem;line-height:1}.dashboard-summary-calm{border-color:rgba(47,111,99,.28);background:rgba(238,245,242,.62)}.dashboard-summary-mild{border-color:rgba(197,139,43,.32);background:rgba(255,248,232,.68)}.dashboard-summary-attention{border-color:rgba(142,80,103,.32);background:rgba(252,241,246,.7)}.dashboard-progress-card{border-color:rgba(47,111,99,.18);background:linear-gradient(180deg,#fff 0,rgba(238,245,242,.64) 100%)}.dashboard-progress-body{padding:12px 14px}.dashboard-progress-heading{margin-bottom:8px}.dashboard-progress-title{margin:0 0 2px;font-size:1.05rem;line-height:1.2}.dashboard-series-progress{height:7px;background:rgba(47,111,99,.1)}.dashboard-series-progress .progress-bar{background:linear-gradient(90deg,var(--plotline-accent),#6fa99b)}.dashboard-progress-source{border-color:rgba(47,111,99,.2);color:var(--plotline-accent-dark);background:rgba(238,245,242,.9)}.dashboard-book-title-block h3{line-height:1.16}.dashboard-book-title-block a{color:var(--plotline-ink);text-decoration-color:rgba(47,111,99,0.35)}.dashboard-book-subtitle{color:var(--plotline-muted);font-size:.95rem;line-height:1.25}.dashboard-status-pill{border-color:var(--dashboard-status-border,#c8d8d2);color:var(--dashboard-status-ink,var(--plotline-accent-dark));background:var(--dashboard-status-bg,var(--plotline-soft))}.dashboard-status-published{--dashboard-status-border:rgba(47, 111, 99, 0.32);--dashboard-status-bg:#e7f2ed;--dashboard-status-ink:#22534a}.dashboard-status-drafting{--dashboard-status-border:rgba(184, 118, 43, 0.35);--dashboard-status-bg:#fff2dd;--dashboard-status-ink:#7b4b12}.dashboard-status-planning{--dashboard-status-border:rgba(51, 117, 155, 0.3);--dashboard-status-bg:#e9f3f8;--dashboard-status-ink:#245b78}.dashboard-status-outlining,.dashboard-status-research{--dashboard-status-border:rgba(103, 80, 164, 0.26);--dashboard-status-bg:#f0edf8;--dashboard-status-ink:#51417c}.dashboard-status-revising{--dashboard-status-border:rgba(123, 82, 148, 0.3);--dashboard-status-bg:#f4eefa;--dashboard-status-ink:#5f3e73}.dashboard-status-editing{--dashboard-status-border:rgba(68, 75, 130, 0.3);--dashboard-status-bg:#eceef8;--dashboard-status-ink:#343b72}.dashboard-status-proofreading{--dashboard-status-border:rgba(43, 130, 123, 0.3);--dashboard-status-bg:#e6f5f2;--dashboard-status-ink:#23625d}.dashboard-status-ready{--dashboard-status-border:rgba(185, 142, 30, 0.34);--dashboard-status-bg:#fff6d8;--dashboard-status-ink:#765a0f}.dashboard-status-paused{--dashboard-status-border:rgba(102, 113, 123, 0.28);--dashboard-status-bg:#f0f2f1;--dashboard-status-ink:#56616b}.dashboard-status-archived{--dashboard-status-border:rgba(139, 80, 86, 0.28);--dashboard-status-bg:#f3eded;--dashboard-status-ink:#76474d}.dashboard-attention-soft{border-color:rgba(102,113,123,.24);color:#56616b;background:#f3f4f2}.word-companion-follow-toggle[aria-pressed=true]{border-color:rgba(47,111,99,.36);color:var(--plotline-accent-dark);background:var(--plotline-soft);font-weight:700}.word-companion-follow-toggle[aria-pressed=true]::after{content:" On"}.word-companion-follow-toggle[aria-pressed=false]::after{content:" Off"}.order-buttons{display:flex;gap:6px}.purpose-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;max-height:260px;overflow:auto;padding:10px;border:1px solid var(--plotline-line);border-radius:8px;background:#fcfcfb}.purpose-check{display:flex;align-items:center;gap:8px;font-size:.92rem}.timeline-filter{display:flex;align-items:center;gap:8px;min-width:min(420px,100%)}.workspace-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:0;align-items:start;--timeline-inspector-width:min(40vw, 560px)}.workspace-layout.inspector-drawer-open{grid-template-columns:minmax(420px,1fr) 10px minmax(420px,var(--timeline-inspector-width));gap:12px}.timeline-workspace{min-width:0;max-width:100%}.timeline-inspector-resizer{position:sticky;top:76px;z-index:25;width:10px;height:calc(100vh - 96px);border-radius:999px;cursor:col-resize;background:linear-gradient(180deg,rgba(47,111,99,.16),rgba(47,111,99,.04))}.timeline-inspector-resizer::before{content:"";display:block;width:2px;height:48px;margin:18px auto;border-radius:999px;background:var(--plotline-accent);opacity:.55}.timeline-inspector-resizer:focus-visible,.timeline-inspector-resizer:hover{background:rgba(47,111,99,.16)}body.timeline-inspector-resizing{cursor:col-resize;user-select:none}.pacing-panel{margin-top:14px;margin-bottom:0;border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:#fff;box-shadow:0 10px 24px rgba(30,37,43,.04)}.pacing-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.pacing-heading h2{margin:0;font-size:1.1rem}.metric-graph-stack{display:grid;gap:10px;max-width:100%;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:4px}.metric-graph-row{display:grid;grid-template-columns:150px minmax(260px,1fr);gap:10px;align-items:center;min-width:max(100%,calc(150px + (var(--scene-count,1) * 34px)))}.metric-graph-label{color:var(--plotline-muted);font-size:.84rem;font-weight:700}.metric-graph-points{display:grid;grid-template-columns:repeat(var(--scene-count),minmax(28px,1fr));gap:5px;align-items:end;min-height:52px;border-radius:8px;padding:6px;background:linear-gradient(180deg,#f6faf8 0,#edf4f1 100%);min-width:calc(var(--scene-count) * 34px)}.metric-point{display:flex;align-items:flex-end;justify-content:center;height:48px;min-width:28px;color:var(--plotline-accent-dark);text-decoration:none}.metric-point::before{content:"";display:block;width:100%;height:max(8px,var(--metric-height));border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,#6fa99b,var(--plotline-accent-dark));box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}.metric-point span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.timeline-shell{overflow-x:auto;padding:16px;border:1px solid var(--plotline-line);border-radius:8px;background:linear-gradient(180deg,#fff 0,#f7faf8 100%)}.workspace-timeline{min-height:420px}.timeline-series-row{display:grid;grid-template-columns:var(--timeline-label-width) max-content;gap:var(--timeline-grid-gap);align-items:stretch;width:max-content;min-width:100%}.timeline-project-title{position:sticky;left:0;z-index:20;display:grid;align-content:start;gap:4px;width:var(--timeline-label-width);min-height:100%;border-radius:8px;padding:12px;color:#fff;background:var(--plotline-accent-dark);font-weight:700;box-shadow:8px 0 18px rgba(30,37,43,.08)}.timeline-book-title span,.timeline-project-title span{color:rgba(255,255,255,.78);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase}.timeline-book-title strong,.timeline-project-title strong{line-height:1.15}.timeline-books{display:flex;gap:var(--timeline-grid-gap);align-items:stretch}.timeline-book{flex:0 0 auto;width:calc((var(--book-scene-count) * var(--timeline-scene-width)) + ((var(--book-scene-count) - 1) * var(--timeline-grid-gap)));min-width:var(--timeline-scene-width)}.timeline-book-title{display:grid;gap:2px;margin-bottom:var(--timeline-grid-gap);border-radius:8px;padding:10px 12px;color:#fff;background:var(--plotline-accent-dark);font-weight:700}.timeline-chapters{display:flex;gap:var(--timeline-grid-gap);align-items:flex-start}.timeline-chapter{flex:0 0 auto;width:calc((var(--chapter-scene-count) * var(--timeline-scene-width)) + ((var(--chapter-scene-count) - 1) * var(--timeline-grid-gap)));min-width:var(--timeline-scene-width);box-sizing:border-box;border-radius:8px;background:rgba(238,245,242,.7);outline:1px solid #d4ded8;outline-offset:0;overflow:visible}.timeline-chapter-title{display:grid;gap:2px;border-bottom:1px solid #d4ded8;padding:10px 12px;color:var(--plotline-accent-dark);font-weight:700}.timeline-chapter-title span{color:var(--plotline-muted);font-size:.76rem;text-transform:uppercase}.timeline-scenes{display:grid;grid-template-columns:repeat(var(--chapter-scene-count),minmax(0,1fr));gap:var(--timeline-grid-gap);width:100%;box-sizing:border-box;min-height:190px;padding:0}.timeline-empty-scene,.timeline-scene-card{display:flex;flex-direction:column;gap:6px;width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--plotline-line);border-radius:8px;padding:12px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 8px 18px rgba(30,37,43,.05)}.timeline-scene-card:hover{border-color:var(--plotline-accent);color:var(--plotline-ink)}.metric-point-placeholder,.timeline-placeholder-cell,.timeline-placeholder-scene{cursor:default;opacity:.72}.timeline-placeholder-scene{align-items:center;justify-content:center;border-style:dashed;color:var(--plotline-muted);background:rgba(255,255,255,.38);font-size:.86rem;font-weight:800;text-align:center}.timeline-placeholder-cell{border-style:dashed;background:repeating-linear-gradient(-45deg,rgba(216,221,216,.18) 0,rgba(216,221,216,.18) 7px,rgba(255,255,255,.18) 7px,rgba(255,255,255,.18) 14px)}.metric-point-placeholder::before{height:4px;background:rgba(102,113,123,.2);box-shadow:none}.timeline-scene-card.selected{border-color:var(--plotline-accent-dark);box-shadow:0 0 0 3px rgba(47,111,99,.16),0 10px 22px rgba(30,37,43,.08)}.purpose-chip-row,.scene-badge-row{display:flex;flex-wrap:wrap;gap:5px;align-items:center}.warning-placeholder{display:inline-flex;width:fit-content;border:1px dashed #d6b25e;border-radius:999px;padding:2px 8px;color:#755715;background:#fff8e8;font-size:.74rem;font-weight:700}.warning-placeholder.active{border-color:rgba(159,69,69,.36);color:#8a3434;background:rgba(255,232,232,.9);gap:5px;font-weight:800}.dependency-placeholder{display:inline-flex;width:fit-content;border:1px solid rgba(47,111,99,.2);border-radius:999px;padding:2px 8px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.08);font-size:.74rem;font-weight:700}.purpose-chip{display:inline-flex;width:fit-content;border-radius:999px;padding:2px 7px;color:#38453e;background:#edf0eb;font-size:.72rem;font-weight:700}.future-lane-placeholder{border-top:1px dashed #cbd8d2;padding:8px 12px;color:var(--plotline-muted);font-size:.78rem;background:rgba(255,255,255,.45)}.metric-timeline-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.metric-shape-controls{position:sticky;left:0;z-index:6;display:grid;gap:8px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;border-radius:8px;padding:10px;background:rgba(255,255,255,.88)}.metric-timeline-row{display:grid;grid-template-columns:var(--timeline-label-width) calc((var(--scene-count) * var(--timeline-scene-width)) + ((var(--scene-count) - 1) * var(--timeline-grid-gap)));gap:var(--timeline-grid-gap);align-items:stretch}.metric-lane-label{position:sticky;left:0;z-index:12;display:grid;align-content:start;gap:4px;min-height:320px;border:1px solid rgba(47,111,99,.18);border-radius:8px;padding:10px;color:var(--plotline-accent-dark);background:#fff;box-shadow:0 6px 14px rgba(30,37,43,.04)}.metric-lane-label span{color:var(--plotline-muted);font-size:.78rem;font-weight:600}.colour-swatch{display:inline-block;width:18px;height:18px;border:1px solid rgba(30,37,43,.18);border-radius:999px;vertical-align:middle}.plot-lane-board{position:relative;display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.plot-lane-svg-overlay{position:absolute;inset:0 auto auto 0;z-index:4;pointer-events:none;overflow:visible}.plot-lane-svg-health-overlay{z-index:8}.plot-line-svg-path{fill:none;stroke-width:3.5;stroke-linecap:round;opacity:.72}.plot-line-svg-segment-dormant{stroke-dasharray:9 8;opacity:.48}.plot-line-svg-connector{fill:none;stroke-width:3;stroke-linecap:round;opacity:.58}.plot-line-svg-path.plotline-state-questionable,.plot-line-svg-path.plotline-state-resolved{stroke:#8c9491;opacity:.42}.plot-line-svg-path.plotline-state-abandoned{stroke:#9b2f36;opacity:.5}.plot-event-svg-node.plotline-state-questionable,.plot-event-svg-node.plotline-state-resolved{opacity:.88}.plot-event-svg-node.plotline-state-abandoned{opacity:.9}.plot-event-svg-node.plotline-state-abandoned line{stroke:#ffffff}.plotline-health-marker circle,.plotline-health-marker path{fill:#f4c430;stroke:#8a6712;stroke-width:1.5}.plotline-health-marker{pointer-events:visiblePainted}.plotline-health-marker line,.plotline-health-marker text{stroke:#5e4710;fill:#5e4710;stroke-width:1.6;stroke-linecap:round}.plotline-health-marker text{font-size:11px;font-weight:800;stroke-width:0;pointer-events:none}.plotline-health-count{fill:#ffffff;stroke:#8a6712;stroke-width:2;paint-order:stroke}.plotline-health-marker-dangling circle,.plotline-health-marker-dangling path{fill:#f8df8f}.plotline-health-marker-abandoned circle,.plotline-health-marker-abandoned path{fill:#d85c63;stroke:#8b1e2d}.plotline-health-marker-abandoned line{stroke:#ffffff}.plot-event-svg-node circle,.plot-event-svg-node ellipse,.plot-event-svg-node path{stroke:#ffffff;stroke-width:2}.plot-event-svg-node line,.plot-event-svg-node path[fill=none]{stroke:#8b1e2d;stroke-width:3.4;stroke-linecap:round;stroke-linejoin:round}.plot-event-svg-node-reveal ellipse{stroke-width:2.4}.plot-event-svg-label{font-size:9.5px;font-weight:900;font-family:system-ui,-apple-system,"Segoe UI",sans-serif;paint-order:stroke;stroke:rgba(30,37,43,0.22);stroke-width:.8px;pointer-events:none}.plot-event-svg-node-resolve path[fill=none]{stroke:#ffffff}.lane-board-heading,.metric-lane-board-heading,.plot-lane-board-heading{position:sticky;left:0;z-index:6;display:flex;align-items:center;justify-content:space-between;gap:14px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;margin-bottom:2px;border-radius:8px;padding:8px 10px;color:var(--plotline-accent-dark);background:rgba(255,255,255,.92);font-weight:700;box-shadow:0 8px 16px rgba(30,37,43,.05)}.lane-board-heading small,.metric-lane-board-heading small,.plot-lane-board-heading small{color:var(--plotline-muted);font-weight:500;white-space:nowrap}.timeline-heading-with-help{display:inline-flex;align-items:center;gap:6px;min-width:0}.plot-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.plot-lane-label{position:sticky;left:0;z-index:12;display:flex;align-items:center;gap:8px;min-height:46px;border:1px solid color-mix(in srgb,var(--plot-colour),#fff 55%);border-left:5px solid var(--plot-colour);border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.plot-lane-label:hover{color:var(--plotline-ink);border-color:var(--plot-colour)}.plot-lane-slots{display:contents}.plot-lane-slot{display:flex;flex-wrap:wrap;align-content:center;align-items:center;justify-content:center;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,255,255,.62)}.thread-marker{position:relative;z-index:5;display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:34px;height:30px;border:2px solid color-mix(in srgb,var(--plot-colour),#000 20%);border-radius:999px;padding:0 8px;color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 66%);font-size:.74rem;font-weight:900;text-decoration:none;box-shadow:0 3px 8px rgba(30,37,43,.14)}.plot-lane-board [data-plot-event-node]{opacity:1}.thread-marker:focus-visible,.thread-marker:hover{color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 48%);outline:3px solid rgba(47,111,99,.22);outline-offset:2px}.thread-marker.resolved{border-color:#5a8c60;background:#e6f4e7;color:#24512b}.thread-marker.contradicted{border-color:#b45c5c;background:#fff0f0;color:#7a2222}.thread-events-section{margin-top:16px}.thread-event-list{display:grid;gap:8px;margin-bottom:12px}.thread-event-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid color-mix(in srgb,var(--plot-colour),#fff 55%);border-left:4px solid var(--plot-colour);border-radius:8px;padding:8px;background:#fff}.thread-event-item>div{display:grid;gap:3px}.thread-event-marker{display:inline-flex;align-items:center;justify-content:center;width:fit-content;min-width:24px;height:22px;border-radius:999px;padding:0 7px;background:color-mix(in srgb,var(--plot-colour),#fff 72%);font-size:.72rem;font-weight:800}.thread-event-create{border-top:1px solid var(--plotline-line);padding-top:12px}.asset-lane-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.asset-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.asset-lane-label{position:sticky;left:0;z-index:12;display:grid;gap:2px;min-height:46px;border:1px solid #d4d7df;border-left:5px solid #6b5b95;border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.asset-lane-label span{color:var(--plotline-muted);font-size:.75rem}.asset-lane-slots{display:contents}.asset-lane-slot{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(250,249,255,.72)}.asset-event-marker,.asset-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid #7f70aa;border-radius:7px;padding:0 7px;color:#33284e;background:#eee9fb;font-size:.72rem;font-weight:800;text-decoration:none}.asset-marker:hover{color:#33284e;background:#dfd6f7}.asset-marker.timeline-marker-story-turn,.character-marker.timeline-marker-story-turn{border-width:2px}.asset-marker.timeline-marker-important,.character-marker.timeline-marker-important{box-shadow:inset 0 -3px 0 rgba(197,139,43,.36)}.asset-marker.timeline-marker-state-change,.character-marker.timeline-marker-state-change{border-style:double}.asset-marker.timeline-marker-transfer{box-shadow:inset 3px 0 0 rgba(47,111,99,.32)}.character-marker.timeline-marker-exit{opacity:.86;border-style:dashed}.asset-marker.timeline-marker-has-warning,.character-marker.timeline-marker-has-warning{box-shadow:0 0 0 2px rgba(179,95,59,.22)}.asset-events-section{margin-top:16px}.asset-event-list,.asset-mini-list{display:grid;gap:8px;margin-bottom:12px}.asset-event-item,.asset-mini-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid #ded9ea;border-left:4px solid #6b5b95;border-radius:8px;padding:8px;background:#fff}.asset-event-item>div,.asset-mini-item>div{display:grid;gap:3px}.asset-create-form{border-top:1px solid var(--plotline-line);padding-top:12px}.asset-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.asset-card{display:grid;gap:12px;border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:#fff;box-shadow:0 8px 18px rgba(30,37,43,.04)}.asset-card h2{margin:0;font-size:1.1rem}.asset-card-footer{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.asset-detail-grid{display:grid;grid-template-columns:minmax(260px,0.8fr) minmax(320px,1.2fr);gap:14px}.character-lane-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.character-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.character-lane-label{position:sticky;left:0;z-index:12;display:grid;gap:2px;min-height:46px;border:1px solid #d7d4ce;border-left:5px solid #8a6f3d;border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.character-lane-label span{color:var(--plotline-muted);font-size:.75rem}.character-lane-slots{display:contents}.character-lane-slot{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,252,246,.72)}.character-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid #9a7a3f;border-radius:999px;padding:0 7px;color:#4f3810;background:#fff2d7;font-size:.72rem;font-weight:800;text-decoration:none}.character-card{border-left:4px solid #8a6f3d}.character-section{margin-top:16px}.character-item{border-left-color:#8a6f3d}.character-appearance-card{display:grid;gap:8px;border:1px solid #d7d4ce;border-left:4px solid #8a6f3d;border-radius:8px;padding:10px;background:#fff}.character-appearance-summary{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.character-appearance-summary>div:first-child{display:grid;gap:3px}.character-appearance-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.character-appearance-edit .asset-create-form{margin-top:8px;border-top:1px solid var(--plotline-line)}.word-companion-suggestion-panel{display:grid;gap:8px;margin-bottom:12px;border:1px solid rgba(138,111,61,.24);border-radius:8px;padding:10px;background:rgba(255,248,232,.72)}.word-companion-suggestion-list{display:grid;gap:8px}.word-companion-suggestion-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid #ded9ea;border-left:4px solid #8a6f3d;border-radius:8px;padding:8px;background:#fff}.word-companion-suggestion-item>div:first-child{display:grid;gap:3px}.word-companion-suggestion-pill{margin-left:6px}.form-helper-message{margin:0 0 8px;font-size:.86rem;font-weight:700}.scene-number,.time-label{color:var(--plotline-muted);font-size:.82rem}.location-badge,.location-pill{display:inline-flex;align-items:center;width:fit-content;border:1px solid rgba(47,111,99,.18);border-radius:999px;padding:2px 7px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.08);font-size:.74rem;font-weight:700}.scene-summary{display:-webkit-box;overflow:hidden;color:var(--plotline-muted);font-size:.88rem;-webkit-box-orient:vertical;-webkit-line-clamp:4}.timeline-empty-scene{justify-content:center;color:var(--plotline-muted);background:rgba(255,255,255,.58)}.form-check-input:focus,.form-control:focus,.form-select:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .2rem rgba(47,111,99,.16)}.scene-inspector-panel{position:sticky;top:76px;display:flex;flex-direction:column;max-height:calc(100vh - 96px);min-width:0;overflow:hidden;border:1px solid var(--plotline-line);border-radius:8px;background:#fff;box-shadow:0 14px 32px rgba(30,37,43,.08)}.inspector-header{position:sticky;top:0;z-index:5;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);padding:16px;background:#fff}.scene-inspector-body{flex:1 1 auto;min-height:0;overflow:auto;padding:16px}.inspector-header h2{margin:0;font-size:1.25rem}.location-helper{border:1px solid rgba(138,111,61,.22);border-radius:8px;padding:10px;background:rgba(255,248,232,.74)}.location-warning-list{margin:0;padding-left:18px;color:#6f5526;font-size:.86rem}.location-tree{display:grid;gap:8px}.location-tree-row{display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);padding:10px 0 10px calc(var(--location-depth,0) * 22px)}.location-tree-row:last-child{border-bottom:0}.location-tree-row>div:first-child{display:grid;gap:3px}.compact-buttons{flex-wrap:nowrap}.location-chip-list{display:flex;flex-wrap:wrap;gap:8px}.location-chip{border:1px solid var(--plotline-line);border-radius:8px;padding:7px 10px;background:#fff;text-decoration:none}.location-relationship-list{display:grid;gap:8px}.location-relationship-card{display:flex;justify-content:space-between;gap:12px;border:1px solid var(--plotline-line);border-radius:8px;padding:10px;background:#fff}.location-flags{display:flex;flex-wrap:wrap;gap:10px 16px;color:var(--plotline-muted);font-size:.86rem}.validation-summary,.warning-filter-panel{border:1px solid var(--plotline-line);border-radius:8px;margin-bottom:16px;padding:12px;background:#fff}.validation-summary{display:flex;flex-wrap:wrap;gap:12px;color:var(--plotline-muted)}.warning-dashboard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:18px}.inspector-section-heading,.warning-card-title,.warning-count-row{display:flex;align-items:center;justify-content:space-between;gap:10px}.warning-list,.warning-mini-list{display:grid;gap:10px}.warning-card,.warning-mini-card{border:1px solid var(--plotline-line);border-radius:8px;padding:12px;background:#fff}.warning-card{display:grid;grid-template-columns:1fr auto;gap:12px}.warning-card p,.warning-mini-card p{margin:6px 0}.warning-actions{display:flex;align-items:flex-start;flex-wrap:wrap;gap:6px}.severity-pill{display:inline-flex;align-items:center;border-radius:999px;padding:2px 8px;font-size:.74rem;font-weight:800}.severity-pill.info{color:#365f7c;background:rgba(107,153,184,.14)}.severity-pill.warning{color:#7a5527;background:rgba(205,154,72,.17)}.severity-pill.error{color:#8a3434;background:rgba(190,83,83,.15)}.warning-mini-card{background:rgba(255,255,255,.76)}.dependency-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.dependency-card{display:grid;gap:3px;border:1px solid var(--plotline-line);border-radius:8px;margin-bottom:8px;padding:9px;background:rgba(255,255,255,.78)}.move-preview-panel{max-width:900px}.focused-validation-summary{display:flex;flex-wrap:wrap;gap:10px;border:1px solid rgba(47,111,99,.16);border-radius:8px;margin-top:12px;padding:10px;color:var(--plotline-muted);background:rgba(47,111,99,.05)}.inspector-purpose-list{grid-template-columns:1fr;max-height:210px}.metric-slider-stack{display:grid;gap:12px}.metric-slider{display:grid;gap:4px}.metric-slider-label{display:flex;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.86rem;font-weight:700}.metric-slider-label output{color:var(--plotline-accent-dark)}.metric-slider .form-range{accent-color:var(--plotline-accent)}.asset-importance-slider{border:1px solid var(--plotline-line);border-radius:8px;padding:10px 12px;background:rgba(47,111,99,.05)}.story-asset-checkbox-field{margin-top:1.95rem}.story-asset-event-item{justify-content:flex-start;gap:8px}.story-asset-event-item .asset-event-marker{flex:0 0 auto;min-width:1.55rem;width:auto}.story-asset-event-details{min-width:0}.breadcrumb-trail,.context-nav,.overview-chip-grid{display:flex;flex-wrap:wrap;gap:7px}.breadcrumb-trail a,.breadcrumb-trail span,.context-nav a,.overview-chip{display:inline-flex;align-items:center;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-decoration:none;background:rgba(255,255,255,.72)}.overview-chip.attention{color:#7a5527;border-color:rgba(205,154,72,.35);background:rgba(205,154,72,.14)}.overview-outcome{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;margin:0;color:var(--plotline-muted)}.breadcrumb-trail{margin-bottom:12px}.breadcrumb-trail a:hover,.context-nav a:hover{color:var(--plotline-accent-dark);border-color:rgba(47,111,99,.35);background:rgba(47,111,99,.08)}.context-header,.working-context-banner{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid var(--plotline-line);border-radius:10px;margin-bottom:16px;padding:10px 12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.context-title{display:grid;gap:2px}.context-title strong{color:var(--plotline-ink)}.analytics-grid-three,.analytics-grid-two,.health-kpi-grid{display:grid;gap:14px;margin:18px 0}.health-kpi-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.health-kpi-grid .plain-card{display:grid;gap:4px}.health-kpi-grid strong{color:var(--plotline-ink);font-size:2rem;line-height:1}.analytics-grid-two{grid-template-columns:repeat(2,minmax(0,1fr))}.analytics-grid-three{grid-template-columns:repeat(3,minmax(0,1fr))}.analytics-section{border:1px solid var(--plotline-line);border-radius:10px;margin:18px 0;padding:16px;background:rgba(255,255,255,.84);box-shadow:0 14px 34px rgba(55,48,39,.07)}.analytics-section-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}.analytics-section-heading h2,.plain-card h3{margin:0}.analytics-metric-stack{display:grid;gap:12px;overflow-x:auto;padding-bottom:4px}.metric-shape-chart{display:grid;gap:12px}.metric-shape-intro{max-width:760px;margin:0;color:var(--plotline-muted)}.metric-toggle-row{display:flex;flex-wrap:wrap;gap:8px}.metric-toggle-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid rgba(82,75,65,.16);border-radius:999px;padding:5px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.78);cursor:pointer}.metric-toggle-pill::before{content:"";width:10px;height:10px;border-radius:999px;background:var(--metric-colour)}.metric-toggle-pill input{margin:0;accent-color:var(--metric-colour)}.timeline-metric-edit-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:end}.timeline-metric-edit-select{display:grid;gap:3px;min-width:180px;color:var(--plotline-muted);font-size:.78rem;font-weight:800}.timeline-metric-edit-status{align-self:center;border:1px solid rgba(47,111,99,.18);border-radius:999px;padding:5px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.72)}.timeline-metric-edit-hint{font-size:.82rem}.metric-chart-frame canvas.metric-curve-editing{cursor:ns-resize}.metric-chart-frame{position:relative;min-height:320px;border:1px solid var(--plotline-line);border-radius:10px;padding:14px 12px 32px;background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(247,245,240,.76))}.metric-timeline-frame{width:calc((var(--scene-count) * var(--timeline-scene-width)) + ((var(--scene-count) - 1) * var(--timeline-grid-gap)))}.metric-chart-frame canvas{width:100%;height:300px}.metric-timeline-board .metric-graph-stack{width:max-content;min-width:100%}.metric-timeline-board .metric-graph-row{grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);min-width:100%}.metric-timeline-board .metric-graph-points{display:contents}.metric-timeline-board .metric-point{border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(255,255,255,.62)}.metric-raw-details{border-top:1px solid var(--plotline-line);padding-top:8px}.metric-raw-details summary{color:var(--plotline-muted);font-size:.82rem;font-weight:800;cursor:pointer}.timeline-control-panel{display:grid;gap:12px;border:1px solid var(--plotline-line);border-radius:10px;margin-bottom:16px;padding:12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.timeline-filter-drawer summary{color:var(--plotline-ink);font-weight:900;cursor:pointer}.timeline-filter-grid{display:grid;grid-template-columns:repeat(6,minmax(130px,1fr));gap:10px;margin-top:12px}.preset-chip-row,.timeline-filter-actions,.timeline-filter-checks,.timeline-preset-panel,.timeline-visibility-panel{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.timeline-filter-checks{grid-column:span 3;color:var(--plotline-muted);font-size:.82rem;font-weight:700}.timeline-filter-actions{grid-column:span 3;justify-content:flex-end}.preset-chip,.timeline-visibility-panel label{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 8px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.76)}.timeline-preset-panel form{display:inline-flex;align-items:center;gap:6px}.preset-chip a{color:var(--plotline-accent-dark);text-decoration:none}.preset-chip button{border:0;color:var(--plotline-muted);background:0 0;font-weight:900}.timeline-focus-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid rgba(47,111,99,.22);border-radius:10px;margin-bottom:16px;padding:10px 12px;background:rgba(47,111,99,.08)}.thread-marker-icon{display:inline-flex;align-items:center;justify-content:center;min-width:16px;font-size:.78rem;font-weight:900}.thread-marker-type-abandon .thread-marker-icon,.thread-marker-type-resolve .thread-marker-icon,.thread-marker-type-start .thread-marker-icon,.thread-marker-type-twist .thread-marker-icon{font-size:.9rem}.thread-marker-type-start{border-radius:8px 999px 999px 8px}.thread-marker-type-twist{border-color:#b8762b;background:#fff4dc}.thread-marker-type-branch,.thread-marker-type-merge,.thread-marker-type-split{border-color:#6750a4;background:#f0ebff}.thread-marker-type-reveal .thread-marker-icon{border:1px solid currentColor;border-radius:999px;font-size:0}.thread-marker-type-reveal .thread-marker-icon::after{content:"";width:4px;height:4px;border-radius:999px;background:currentColor}.timeline-navigation-card{display:grid;grid-template-areas:"icon copy" "icon actions";grid-template-columns:auto minmax(0,620px);gap:8px 14px;align-items:center;justify-content:center;border:1px solid rgba(47,111,99,.42);border-left:5px solid var(--plotline-accent);border-radius:8px;margin:0 0 12px;padding:14px 16px;max-height:280px;overflow:hidden;color:var(--plotline-ink);background:linear-gradient(135deg,rgba(238,245,242,.98),rgba(255,255,255,.94));box-shadow:0 10px 26px rgba(30,37,43,.08);opacity:1;transform:translateY(0);transition:opacity 1.15s ease,max-height 1.2s ease,margin 1.2s ease,padding 1.2s ease,transform 1.15s ease}.timeline-navigation-card[hidden]{display:none}.timeline-navigation-card.is-dismissing{margin-bottom:0;padding-top:0;padding-bottom:0;max-height:0;opacity:0;transform:translateY(-6px)}.timeline-navigation-card-icon{grid-area:icon;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;color:#fff;background:var(--plotline-accent);font-size:1.25rem;font-weight:900}.timeline-navigation-card-copy{grid-area:copy;text-align:center}.timeline-navigation-card-copy h2{margin:0 0 6px;color:var(--plotline-accent-dark);font-size:1rem;font-weight:900}.timeline-navigation-card-copy p{margin:2px 0;color:var(--plotline-ink);font-size:.9rem}.timeline-navigation-card-actions{grid-area:actions;display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.timeline-horizontal-overflow{transition:box-shadow .18s ease}.timeline-horizontal-overflow.has-scroll-left{box-shadow:inset 18px 0 18px -20px rgba(30,37,43,.55)}.timeline-horizontal-overflow.has-scroll-right{box-shadow:inset -18px 0 18px -20px rgba(30,37,43,.55)}.timeline-horizontal-overflow.has-scroll-left.has-scroll-right{box-shadow:inset 18px 0 18px -20px rgba(30,37,43,.55),inset -18px 0 18px -20px rgba(30,37,43,.55)}[data-theme=dark] .timeline-navigation-card{border-color:rgba(111,169,155,.52);border-left-color:#6fa99b;color:#f4eadc;background:linear-gradient(135deg,rgba(34,83,74,.72),rgba(32,31,34,.96));box-shadow:0 12px 28px rgba(0,0,0,.28)}[data-theme=dark] .timeline-navigation-card-copy h2,[data-theme=dark] .timeline-navigation-card-copy p{color:#f4eadc}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-left{box-shadow:inset 18px 0 18px -20px rgba(244,234,220,.55)}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-right{box-shadow:inset -18px 0 18px -20px rgba(244,234,220,.55)}[data-theme=dark] .timeline-horizontal-overflow.has-scroll-left.has-scroll-right{box-shadow:inset 18px 0 18px -20px rgba(244,234,220,.55),inset -18px 0 18px -20px rgba(244,234,220,.55)}@media (prefers-reduced-motion:reduce){.timeline-navigation-card{transition:opacity .12s ease}}.lane-dim,.timeline-scene-card.filter-dim,.timeline-scene-card.focus-dim{opacity:.35}.timeline-scene-card.filter-match.focus-match,.timeline-scene-card.focus-match{outline:3px solid rgba(47,111,99,.32);box-shadow:0 12px 26px rgba(47,111,99,.16)}.timeline-section-hidden{display:none!important}.hide-scene-cards .timeline-scene-card{display:none}.timeline-control-panel{position:sticky;top:56px;z-index:18}.timeline-control-select{padding-right:6px}.timeline-control-select .form-select{width:auto;min-width:132px;border:0;padding-top:2px;padding-bottom:2px;background-color:transparent;color:var(--plotline-accent-dark);font-weight:800}.timeline-jump-panel{display:grid;grid-template-columns:auto minmax(180px,1.2fr) minmax(180px,1fr) minmax(170px,0.9fr) minmax(180px,1fr) auto;gap:8px;align-items:center;width:100%}.timeline-shortcut-hint{color:var(--plotline-muted);font-size:.76rem;font-weight:700;white-space:nowrap}.timeline-minimap{display:flex;align-items:stretch;gap:4px;margin:0 0 12px;padding:8px;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-gutter:stable;border:1px solid rgba(47,111,99,.18);border-radius:8px;background:rgba(255,255,255,.72)}.timeline-minimap button{position:relative;flex:0 0 max(42px,calc(var(--chapter-scenes) * 18px));min-width:42px;min-height:34px;border:1px solid rgba(47,111,99,.18);border-radius:7px;color:var(--plotline-accent-dark);background:linear-gradient(180deg,#f8fbf9 0,#edf4f1 100%);font-size:.72rem;font-weight:800}.timeline-minimap button.is-active{border-color:var(--plotline-accent);color:#fff;background:linear-gradient(180deg,var(--plotline-accent) 0,var(--plotline-accent-dark) 100%);box-shadow:0 0 0 2px rgba(47,111,99,.14)}.timeline-minimap button::after{content:"";position:absolute;right:5px;bottom:5px;width:calc(var(--chapter-warnings) * 4px);max-width:28px;height:4px;border-radius:999px;background:#b45c5c;opacity:.75}.drag-drop-panel,.timeline-drag-palette{border:1px solid rgba(47,111,99,.18);border-radius:10px;margin-bottom:12px;padding:12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.timeline-drag-palette{display:grid;grid-template-columns:minmax(220px,0.35fr) minmax(0,1fr);gap:12px;align-items:center}.drag-chip-group{display:flex;flex-wrap:wrap;gap:6px;max-height:104px;overflow:auto;padding-right:4px}.drag-chip{display:inline-flex;align-items:center;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 9px;background:#fff;color:var(--plotline-ink);font-size:.78rem;font-weight:800;cursor:grab}.drag-chip.character{border-color:#dacb9e;background:#fff8e8}.drag-chip.asset{border-color:#ded9ea;background:#f4f0ff}.drag-chip.location{border-color:rgba(47,111,99,.18);background:#eef8f4}.is-dragging{opacity:.55}.drop-target-active{outline:3px solid rgba(47,111,99,.28);outline-offset:2px}.timeline-chapter.chapter-drop-active,.timeline-scenes.drop-chapter-end{background:rgba(47,111,99,.06)}.timeline-scenes.drop-chapter-end::after{content:"Drop scene at end of chapter";display:flex;align-items:center;justify-content:center;min-width:var(--timeline-scene-width);min-height:74px;border:2px dashed rgba(197,139,43,.48);border-radius:12px;color:#7a5527;background:rgba(255,248,232,.82);font-size:.8rem;font-weight:900}.timeline-scene-card.drop-before{box-shadow:inset 5px 0 0 #c58b2b,0 12px 26px rgba(197,139,43,.16)}.timeline-scene-card.drop-after{box-shadow:inset -5px 0 0 #c58b2b,0 12px 26px rgba(197,139,43,.16)}.drag-drop-panel{position:sticky;top:132px;z-index:19}.drag-drop-panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.drag-drop-panel h2{margin:0;font-size:1.08rem}.drag-drop-form{border-top:1px solid var(--plotline-line);margin-top:10px;padding-top:10px}.scene-move-modal-content{border:1px solid rgba(47,111,99,.18);border-radius:14px;background:var(--plotline-surface);color:var(--plotline-ink);box-shadow:0 24px 70px rgba(55,48,39,.22)}.scene-move-modal-content .modal-footer,.scene-move-modal-content .modal-header{border-color:var(--plotline-line)}.scene-move-modal-content .modal-title{margin:0;color:var(--plotline-ink);font-size:1.2rem;font-weight:900}.scene-move-summary{margin:0 0 12px;color:var(--plotline-ink);font-size:1rem;font-weight:800}[data-theme=dark] .scene-move-modal-content{background:#201f22;color:#f4eadc;border-color:rgba(244,234,220,.16);box-shadow:0 24px 70px rgba(0,0,0,.55)}[data-theme=dark] .scene-move-modal-content .modal-title,[data-theme=dark] .scene-move-summary{color:#f4eadc}[data-theme=dark] .scene-move-modal-content .modal-footer,[data-theme=dark] .scene-move-modal-content .modal-header{border-color:rgba(244,234,220,.14)}[data-theme=dark] .scene-move-modal-content .btn-close{filter:invert(1) grayscale(100%)}.plain-preview{border:1px solid rgba(197,139,43,.28);border-radius:8px;margin:10px 0 0;padding:8px 10px;color:#5e4518;background:#fff8e8;font-size:.86rem;font-weight:800}.drag-check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px;color:var(--plotline-muted);font-size:.82rem;font-weight:700}.lane-board-heading,.pacing-heading,.timeline-section-header{position:sticky;left:0;z-index:6}.timeline-section-header{display:flex;align-items:center;justify-content:space-between;gap:10px;width:calc(var(--timeline-label-width) + (var(--scene-count) * var(--timeline-scene-width)) + (var(--scene-count) * var(--timeline-grid-gap)));min-width:100%;margin-bottom:10px;border-radius:8px;padding:8px 10px;background:rgba(255,255,255,.92);box-shadow:0 8px 16px rgba(30,37,43,.05)}.lane-board-heading button,.lane-group-heading,.pacing-heading button,.plot-lane-board-heading button,.timeline-section-header button{border:0;padding:0;color:var(--plotline-accent-dark);background:0 0;font:inherit;font-weight:900;text-align:left}.lane-board-heading button::before,.lane-group-heading::before,.pacing-heading button::before,.plot-lane-board-heading button::before,.timeline-section-header button::before{content:"v";display:inline-block;margin-right:6px;color:var(--plotline-muted);font-size:.72rem}.lane-board-heading button.is-collapsed::before,.lane-group-heading.is-collapsed::before,.pacing-heading button.is-collapsed::before,.plot-lane-board-heading button.is-collapsed::before,.timeline-section-header button.is-collapsed::before{content:">"}.lane-group{display:grid;gap:7px}.character-lane-group-body{display:grid;gap:7px}.lane-group-heading{position:sticky;left:0;z-index:6;width:var(--timeline-label-width);border-top:1px solid rgba(47,111,99,.12);padding:7px 8px 2px;color:var(--plotline-muted);background:rgba(247,250,248,.96);font-size:.78rem;text-transform:uppercase}.timeline-section-collapsed{display:none!important}.timeline-chapter-title{position:sticky;top:0;z-index:5;background:rgba(238,245,242,.96);backdrop-filter:blur(6px)}.metric-mini-summary,.scene-pov-label{display:inline-flex;width:fit-content;border-radius:999px;padding:2px 7px;font-size:.72rem;font-weight:800}.scene-pov-label{color:#514018;background:#fff3d3}.metric-mini-summary{color:var(--plotline-accent-dark);background:rgba(47,111,99,.08)}.scene-overview-panel{display:none;gap:8px;margin-top:4px}.scene-overview-section{display:grid;gap:4px}.scene-overview-label{color:var(--plotline-muted);font-size:.68rem;font-weight:900;letter-spacing:.06em;text-transform:uppercase}.scene-overview-chip-row{display:flex;flex-wrap:wrap;gap:5px;min-width:0}.scene-overview-brief,.scene-overview-chip,.scene-overview-empty{display:inline-flex;width:fit-content;max-width:100%;border-radius:999px;padding:3px 8px;background:rgba(47,111,99,.08);color:var(--plotline-ink);font-size:.72rem;font-weight:750;line-height:1.25;overflow-wrap:anywhere}.scene-overview-chip.is-pov{border:1px solid rgba(197,139,43,.38);background:#fff3d3}.scene-overview-chip.is-important{border:1px solid rgba(103,80,164,.3);background:#f0edf8}.scene-overview-chip.is-more,.scene-overview-empty{color:var(--plotline-muted);background:rgba(102,113,123,.08)}.scene-overview-brief{display:block;width:auto;border-radius:8px;background:rgba(255,255,255,.62);color:var(--plotline-muted);font-weight:600}.timeline-scene-card.keyboard-focus,.timeline-scene-card.search-hit{outline:3px solid rgba(197,139,43,.34);box-shadow:0 12px 26px rgba(197,139,43,.16)}.timeline-scene-card.search-dim{opacity:.28}.asset-marker,.character-marker,.thread-marker{transition:transform .12s ease,box-shadow .12s ease}.asset-marker:hover,.character-marker:hover,.thread-marker:hover{transform:translateY(-1px);box-shadow:0 6px 12px rgba(30,37,43,.12)}.timeline-filtered-root.density-compact{--timeline-scene-width:170px;--timeline-grid-gap:6px}.timeline-filtered-root.density-expanded{--timeline-scene-width:280px;--timeline-grid-gap:14px}.timeline-filtered-root.density-compact .timeline-scene-card,.timeline-filtered-root.zoom-book .timeline-scene-card{gap:4px;padding:9px}.timeline-filtered-root.density-compact .metric-mini-summary,.timeline-filtered-root.density-compact .purpose-chip-row,.timeline-filtered-root.density-compact .scene-summary,.timeline-filtered-root.zoom-book .location-pill,.timeline-filtered-root.zoom-book .metric-mini-summary,.timeline-filtered-root.zoom-book .purpose-chip-row,.timeline-filtered-root.zoom-book .scene-pov-label,.timeline-filtered-root.zoom-book .scene-summary{display:none}.timeline-filtered-root.zoom-book{--timeline-scene-width:150px;--timeline-grid-gap:6px}.timeline-filtered-root.zoom-scene-detail{--timeline-scene-width:300px}.timeline-filtered-root.zoom-scene-detail .scene-summary{-webkit-line-clamp:7}.timeline-filtered-root.zoom-scene-overview{--timeline-scene-width:380px}.timeline-filtered-root.zoom-scene-overview .timeline-scenes{min-height:320px}.timeline-filtered-root.zoom-scene-overview .timeline-scene-card{gap:8px;padding:14px}.timeline-filtered-root.zoom-scene-overview .scene-summary{display:none}.timeline-filtered-root.zoom-scene-overview .scene-overview-panel{display:grid}.timeline-filtered-root.density-expanded .timeline-scenes{min-height:230px}.timeline-control-panel{position:relative;top:auto;z-index:4;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;padding:8px;box-shadow:none}.timeline-control-group,.timeline-filter-drawer{border:1px solid var(--plotline-line);border-radius:999px;background:rgba(255,255,255,.82)}.timeline-control-group[open],.timeline-filter-drawer[open]{border-radius:10px;flex-basis:100%}.timeline-control-group summary,.timeline-filter-drawer summary{min-width:max-content;padding:5px 10px;color:var(--plotline-accent-dark);font-size:.82rem;font-weight:900;cursor:pointer;list-style:none}.timeline-control-group summary::-webkit-details-marker,.timeline-drag-palette summary::-webkit-details-marker,.timeline-filter-drawer summary::-webkit-details-marker{display:none}.timeline-control-group summary::after,.timeline-drag-palette summary::after,.timeline-filter-drawer summary::after{content:" v";color:var(--plotline-muted);font-size:.72rem}.timeline-control-group[open] summary::after,.timeline-drag-palette[open] summary::after,.timeline-filter-drawer[open] summary::after{content:" ^"}.timeline-filter-grid{grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:8px;max-height:min(48vh,430px);overflow:auto;padding:0 10px 10px}.timeline-filter-grid .form-label{margin-bottom:2px;font-size:.72rem;font-weight:800}.timeline-filter-actions,.timeline-filter-checks{grid-column:1/-1}.timeline-jump-panel,.timeline-preset-panel,.timeline-visibility-panel{padding:0 10px 10px}.timeline-jump-panel{grid-template-columns:minmax(180px,1.5fr) repeat(3,minmax(150px,1fr))}.timeline-shortcut-hint{grid-column:1/-1}.timeline-preset-panel form{flex-wrap:nowrap}.timeline-preset-panel .form-control{width:150px}.timeline-filter-actions .btn,.timeline-preset-panel .btn{white-space:nowrap}.timeline-drag-palette{display:block;margin-bottom:8px;padding:7px 9px;box-shadow:none}.timeline-drag-palette summary{color:var(--plotline-accent-dark);font-size:.82rem;font-weight:900;cursor:pointer}.timeline-drag-palette .drag-chip-group{margin-top:8px}.drag-drop-panel{position:relative;top:auto;z-index:9;box-shadow:0 12px 28px rgba(30,37,43,.08)}.timeline-filtered-root,.timeline-filtered-root.density-compact,.timeline-filtered-root.zoom-book{--timeline-scene-width:220px;--timeline-grid-gap:10px}.timeline-filtered-root.density-expanded,.timeline-filtered-root.zoom-scene-detail{--timeline-scene-width:290px}.timeline-filtered-root.density-compact.zoom-book{--timeline-scene-width:200px}.timeline-chapter,.timeline-empty-scene,.timeline-scene-card{overflow-wrap:normal;word-break:normal}.asset-lane-label strong,.character-lane-label strong,.plot-lane-label strong,.timeline-chapter-title strong,.timeline-scene-card strong{min-width:0;white-space:normal;word-break:normal;overflow-wrap:break-word}.timeline-scene-card{cursor:grab}.drag-chip:active,.timeline-scene-card:active,[draggable=true]:active{cursor:grabbing}body.drag-active .timeline-scene-card,body.dragging-asset [data-asset-drop-target],body.dragging-location [data-drag-type=location]{transition:outline-color .12s ease,box-shadow .12s ease,opacity .12s ease}body.dragging-asset .timeline-scene-card,body.dragging-asset [data-asset-drop-target],body.dragging-character .timeline-scene-card,body.dragging-location [data-drag-type=location],body.dragging-scene .timeline-scene-card,body.dragging-scene .timeline-scenes[data-chapter-drop-target]{outline:1px dashed rgba(47,111,99,.22);outline-offset:2px}.is-dragging{opacity:.42;transform:scale(.98)}.drop-target-active{outline:3px solid rgba(47,111,99,.42)!important;outline-offset:3px}.analytics-metric-row{display:grid;grid-template-columns:170px minmax(560px,1fr);gap:12px;align-items:stretch}.analytics-metric-label{display:flex;align-items:center;border-right:1px solid var(--plotline-line);color:var(--plotline-muted);font-weight:800}.analytics-sparkline{display:grid;grid-template-columns:repeat(var(--point-count),minmax(28px,1fr));align-items:end;gap:5px;min-height:88px;border-bottom:1px solid rgba(47,111,99,.25);padding-top:10px}.analytics-bar{position:relative;display:flex;align-items:end;justify-content:center;min-height:12px;height:max(12px,var(--bar-height));border-radius:6px 6px 2px 2px;color:var(--plotline-accent-dark);text-decoration:none;background:linear-gradient(180deg,rgba(47,111,99,.58),rgba(47,111,99,.18))}.analytics-bar:hover{background:linear-gradient(180deg,rgba(47,111,99,.82),rgba(47,111,99,.28))}.analytics-bar span{position:absolute;bottom:calc(100% + 3px);color:var(--plotline-muted);font-size:.68rem;font-weight:800}.analytics-count-row,.analytics-link-row,.analytics-list-item,.purpose-stat-row{border-top:1px solid var(--plotline-line);padding:9px 0}.analytics-list-item{display:grid;gap:3px}.analytics-list-item p{margin:0}.analytics-count-row,.analytics-link-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.analytics-link-row{color:inherit;text-decoration:none}.analytics-link-row:hover{color:var(--plotline-accent-dark)}.analytics-link-row span,.analytics-link-row strong{min-width:0}.purpose-stat-row{display:grid;grid-template-columns:minmax(120px,1fr) minmax(90px,1.5fr) 42px;align-items:center;gap:10px}.purpose-stat-bar{overflow:hidden;height:8px;border-radius:999px;background:rgba(47,111,99,.08)}.purpose-stat-bar span{display:block;height:100%;border-radius:inherit;background:var(--plotline-accent)}.story-bible-heading{align-items:end}.story-bible-search{display:flex;gap:8px;min-width:min(100%,420px)}.story-bible-search .form-control{min-width:0}.story-bible-nav{position:sticky;top:72px;z-index:4;display:flex;flex-wrap:wrap;gap:8px;margin:0 0 18px;padding:10px;border:1px solid var(--plotline-line);border-radius:12px;background:rgba(250,249,246,.92);backdrop-filter:blur(10px)}.story-bible-actions a,.story-bible-nav a{display:inline-flex;align-items:center;border-radius:999px;padding:6px 10px;background:rgba(47,111,99,.08);color:var(--plotline-ink);font-size:.86rem;font-weight:650;text-decoration:none}.story-bible-actions a:hover,.story-bible-nav a:hover{background:rgba(47,111,99,.16)}.story-bible-section{margin:0 0 28px}.story-bible-section-heading{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-bottom:12px}.story-bible-section-heading h2{margin:0}.soft-count{color:var(--plotline-muted);font-size:.9rem;font-weight:650;white-space:nowrap}.story-bible-grid,.story-bible-search-results{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}.story-bible-grid-compact{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.story-bible-card{border:1px solid var(--plotline-line);border-radius:14px;padding:14px;background:rgba(255,255,255,.86);box-shadow:0 14px 34px rgba(36,32,26,.06)}.story-bible-card h3{margin:0 0 8px;font-size:1.05rem}.story-bible-card h4{margin:14px 0 8px;font-size:.96rem}.story-bible-card p{color:var(--plotline-muted)}.story-bible-card-title{display:flex;align-items:start;justify-content:space-between;gap:10px}.story-bible-card-title span{border:1px solid var(--plotline-line);border-radius:999px;padding:3px 8px;background:rgba(250,249,246,.9);color:var(--plotline-muted);font-size:.78rem;font-weight:700;white-space:nowrap}.story-bible-meta{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.story-bible-meta span{border-radius:999px;padding:4px 8px;background:rgba(36,32,26,.05);color:var(--plotline-muted);font-size:.78rem;font-weight:650}.story-bible-facts{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 10px;margin:12px 0}.story-bible-facts dt{color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.story-bible-facts dd{margin:0;min-width:0;overflow-wrap:anywhere}.story-bible-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.story-bible-link-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.story-bible-link-list li{display:grid;gap:2px;padding:8px 0;border-bottom:1px solid rgba(36,32,26,.08)}.story-bible-link-list li:last-child{border-bottom:0}.story-bible-link-list span{color:var(--plotline-muted);font-size:.88rem}.story-bible-timeline-summary{display:grid;gap:14px}.story-bible-wide-card{max-width:none}.story-bible-chapter-summary{border-top:1px solid var(--plotline-line);padding-top:8px}.story-bible-scene-summary{display:grid;grid-template-columns:minmax(220px,1.5fr) repeat(3,minmax(120px,0.8fr));gap:8px;padding:9px 0;border-top:1px solid rgba(36,32,26,.08)}.story-bible-scene-summary p{grid-column:1/-1;margin:0}.story-bible-scene-summary span{color:var(--plotline-muted);font-size:.88rem}.attention-list{display:grid;gap:10px}.attention-list article{display:grid;grid-template-columns:max-content minmax(0,1fr) auto;align-items:center;gap:10px;border:1px solid var(--plotline-line);border-radius:12px;padding:10px 12px;background:rgba(255,255,255,.82)}.attention-list p{grid-column:2/-1;margin:0;color:var(--plotline-muted)}.chapter-goal-form,.writer-add-form,.writer-edit-form,.writer-workspace-form{display:grid;gap:10px}.writer-checkbox-grid{display:flex;flex-wrap:wrap;gap:8px 14px}.writer-checkbox-grid label{display:inline-flex;align-items:center;gap:6px;color:var(--plotline-muted);font-size:.86rem;font-weight:650}.writer-priority-control{display:grid;grid-template-columns:minmax(0,1fr) max-content;align-items:center;gap:12px}.writer-priority-control .form-range{min-width:0}.writer-note-list,.writer-queue-list{display:grid;gap:10px}.writer-mini-card{border:1px solid var(--plotline-line);border-radius:12px;padding:10px;background:rgba(255,255,255,.72)}.writer-mini-card summary{display:flex;align-items:center;gap:8px;cursor:pointer}.writer-mini-card summary strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-card-list{display:grid;gap:10px}.attachment-summary{align-items:center}.attachment-kind{border-radius:999px;padding:3px 8px;background:rgba(47,111,99,.1);color:var(--plotline-accent);font-size:.76rem;font-weight:800;text-transform:uppercase}.attachment-card-body{display:grid;gap:6px;margin-top:10px}.attachment-card-body p{margin:0}.attachment-add-card{margin-top:10px}.writer-checklist{display:grid;gap:6px}.writer-add-inline,.writer-checklist-row{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px}.writer-remove-inline{display:flex;justify-content:end;margin:-2px 0 4px}.writer-dashboard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:26px}.writer-dashboard-panel{border:1px solid var(--plotline-line);border-radius:14px;padding:14px;background:rgba(255,255,255,.7);box-shadow:0 14px 34px rgba(36,32,26,.05)}.writer-queue-card{border:1px solid var(--plotline-line);border-radius:12px;padding:12px;background:rgba(255,255,255,.9)}.writer-queue-card h3{margin:0;font-size:1rem}.writer-queue-card p{margin:8px 0 0;color:var(--plotline-muted)}.writer-queue-title{display:flex;align-items:start;justify-content:space-between;gap:12px}.writer-kpi{display:block;color:var(--plotline-accent);font-size:2.2rem;line-height:1}.export-action-row{margin:-8px 0 18px}.dynamics-timeline{position:relative;min-height:128px;border:1px solid var(--plotline-line);border-radius:14px;background:linear-gradient(180deg,rgba(47,111,99,.07),rgba(255,255,255,.84));overflow:hidden}.dynamics-timeline::before{content:"";position:absolute;left:12px;right:12px;top:64px;height:1px;background:rgba(36,32,26,.18)}.dynamics-marker{position:absolute;bottom:18px;width:12px;height:86px;transform:translateX(-50%);display:flex;align-items:end;justify-content:center}.dynamics-marker span{display:block;width:8px;min-height:12px;max-height:82px;border-radius:999px;background:var(--plotline-accent);box-shadow:0 8px 20px rgba(47,111,99,.22)}.dynamics-marker.pov span{background:#8a4b2f}.dynamics-timeline.relationship .dynamics-marker span{background:#7c5fb0}.scenario-banner{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;border:1px solid rgba(103,80,164,.22);border-radius:12px;padding:16px;margin-bottom:16px;background:linear-gradient(135deg,rgba(103,80,164,.1),rgba(255,255,255,.86));box-shadow:0 12px 28px rgba(36,32,26,.08)}.scenario-banner h1{margin:0 0 4px}.scenario-banner p{margin:0;color:var(--plotline-muted)}.scenario-card{border-color:rgba(103,80,164,.18)}.scenario-warning-strip{display:flex;gap:10px;align-items:center;border:1px solid var(--plotline-line);border-radius:10px;padding:10px 12px;margin-bottom:14px;background:rgba(255,255,255,.76);color:var(--plotline-muted)}.scenario-warning-strip strong{color:var(--plotline-ink)}.scenario-board{border:1px solid var(--plotline-line);border-radius:12px;padding:12px;background:rgba(247,245,240,.74);overflow:hidden;margin-bottom:18px}.scenario-scroll{display:flex;gap:14px;overflow-x:auto;padding-bottom:8px}.scenario-chapter{min-width:360px;max-width:520px;border:1px solid rgba(82,75,65,.14);border-radius:10px;background:rgba(255,255,255,.86)}.scenario-chapter header{display:grid;gap:2px;border-bottom:1px solid var(--plotline-line);padding:10px 12px}.scenario-chapter header span{color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.scenario-scene-row{display:grid;gap:10px;padding:10px}.scenario-scene-card{display:grid;gap:8px;border:1px solid rgba(82,75,65,.12);border-radius:9px;padding:10px;background:#fff}.scenario-scene-title{display:grid;gap:2px}.scenario-mini-data,.scenario-scene-title span{color:var(--plotline-muted);font-size:.78rem}.scenario-mini-data{display:grid;gap:2px}.scenario-chapter-form,.scenario-compare-list article,.scenario-move-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.scenario-chapter-form select{min-width:160px;width:auto}.scenario-compare-list{display:grid;gap:10px}.scenario-compare-list article{justify-content:space-between;border:1px solid var(--plotline-line);border-radius:9px;padding:10px;background:rgba(255,255,255,.82)}.danger-zone{border-color:rgba(163,61,61,.24)}.archive-filter-form{align-items:end}.archive-item-list{display:grid;gap:10px}.archive-item-card{display:flex;justify-content:space-between;gap:14px;align-items:center;border:1px solid var(--plotline-line);border-radius:10px;padding:12px;background:rgba(255,255,255,.82)}.archive-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-items:end}.delete-forever-form{display:inline-flex;margin:0}.archive-item-card h3{margin:4px 0}.archived-badge{display:inline-flex;border:1px solid rgba(82,75,65,.16);border-radius:999px;padding:2px 8px;color:var(--plotline-muted);font-size:.72rem;font-weight:800;text-transform:uppercase;background:rgba(247,245,240,.86)}.restore-button{white-space:nowrap}.archive-button-form{display:inline-flex;align-items:center;margin:0}.acceptance-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:12px;margin-bottom:16px}.acceptance-summary{display:grid;gap:4px;padding:16px}.acceptance-summary strong{font-size:2rem;line-height:1}.acceptance-summary.pass{border-left:5px solid #4d7654}.acceptance-summary.review{border-left:5px solid #b8762b}.acceptance-summary.blocked{border-left:5px solid #963f36}.acceptance-check-list{display:grid;gap:14px}.acceptance-area{border:1px solid var(--plotline-line);border-radius:10px;padding:12px;background:rgba(255,255,255,.62)}.acceptance-area h3{margin:0 0 10px;font-size:1.05rem}.acceptance-check-items{display:grid;gap:8px}.acceptance-check-item{display:grid;grid-template-columns:92px minmax(0,1fr);gap:10px;align-items:start;border:1px solid rgba(82,75,65,.12);border-radius:8px;padding:10px;background:rgba(255,255,255,.74)}.acceptance-check-item p{margin:2px 0 0;color:var(--plotline-muted)}.acceptance-status{display:inline-flex;justify-content:center;width:fit-content;min-width:74px;border-radius:999px;padding:3px 9px;font-size:.72rem;font-weight:900;text-transform:uppercase}.acceptance-check-item.pass .acceptance-status{color:#24512b;background:#e6f4e7}.acceptance-check-item.review .acceptance-status{color:#7b4b13;background:#fbecd3}.acceptance-check-item.blocked .acceptance-status{color:#7a2222;background:#fff0f0}.plotline-confirm-modal .modal-title{color:var(--plotline-ink)}.plotline-confirm-modal .modal-body p{white-space:pre-line}.delete-confirm-field{border:1px solid rgba(163,61,61,.22);border-radius:8px;padding:12px;background:rgba(255,247,244,.7)}@media print{.breadcrumb-trail,.button-row,.context-header,.story-bible-nav,header{display:none!important}.plotline-shell{max-width:none;padding:0}}@media (max-width:760px){.plotline-shell{padding-left:14px;padding-right:14px}.page-heading{display:block}.page-heading .button-row,.timeline-filter{margin-top:14px}.timeline-filter{align-items:stretch;flex-direction:column}.timeline-navigation-card{grid-template-areas:"copy" "actions";grid-template-columns:1fr}.timeline-navigation-card-icon{display:none}.timeline-navigation-card-actions{justify-content:center}.story-bible-search,.story-bible-section-heading{align-items:stretch;flex-direction:column}.attention-list article,.story-bible-scene-summary{grid-template-columns:1fr}.writer-dashboard-grid{grid-template-columns:1fr}.writer-add-inline,.writer-checklist-row{grid-template-columns:1fr}.trial-dashboard-banner,.trial-status-panel--signup,.trial-status-panel__heading{align-items:stretch;flex-direction:column}.trial-dashboard-banner__actions,.trial-dashboard-banner__actions .btn,.trial-status-panel--signup .btn{width:100%}.attention-list p{grid-column:auto}}@media (max-width:900px){.workspace-layout,.workspace-layout.inspector-drawer-open{grid-template-columns:1fr;gap:14px}.timeline-inspector-resizer{display:none}.scene-inspector-panel{position:static;max-height:none;overflow:visible}.scene-inspector-body{max-height:none;overflow:visible}}@media (max-width:1100px){.metric-graph-row{grid-template-columns:1fr}.analytics-grid-three,.analytics-grid-two,.health-kpi-grid{grid-template-columns:1fr}.analytics-metric-row{grid-template-columns:1fr}.analytics-metric-label{border-right:0}}.floor-plan-list{display:grid;gap:12px}.floor-plan-list-item{align-items:center;border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:flex;justify-content:space-between;gap:16px;padding:14px}.floor-plan-list-item h2{font-size:1.05rem;margin:0 0 4px}.floor-plan-list-item p{margin:0}.floor-plan-tools{display:grid;gap:14px}.floor-plan-meta-wide{max-width:none}.floor-plan-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.floor-plan-tab{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:999px;color:inherit;padding:6px 12px}.floor-plan-tab.active{background:var(--bs-primary,#2f6f63);border-color:var(--bs-primary,#2f6f63);color:#fff}.floor-plan-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(320px,360px)}.floor-plan-editor--occupancy .floor-plan-layout{grid-template-columns:minmax(0,1fr)}.floor-plan-editor-toolbar{background:rgba(255,255,255,.92);border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:grid;gap:10px;margin-bottom:12px;padding:10px 12px;position:sticky;top:10px;z-index:20}.floor-plan-occupancy-scene-row,.floor-plan-toolbar-action-group,.floor-plan-toolbar-control-group,.floor-plan-toolbar-floor-group,.floor-plan-toolbar-main{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.floor-plan-toolbar-main{justify-content:space-between}.scene-editor-v2-workspace{max-width:none;width:100%;padding:0;border:0;background:0 0;box-shadow:none}.scene-inspector-v2{position:relative;display:grid;gap:14px;color:var(--plotline-ink)}.scene-inspector-v2-edit{--scene-editor-width:520px;padding-bottom:16px}.scene-inspector-v2-edit.editor-overlay-open{display:grid;grid-template-columns:minmax(0,1fr) 10px minmax(400px,min(var(--scene-editor-width),46%));align-items:stretch;gap:12px;height:clamp(480px,calc(100vh - 240px),820px);min-height:0}.scene-inspector-v2-summary-pane{display:grid;gap:12px;min-width:0}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-v2-summary-pane{min-height:0;overflow:auto;padding-right:2px}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-v2-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.scene-inspector-v2-timeline{min-height:100%}.scene-inspector-v2-timeline.editor-overlay-open{height:clamp(380px,calc(100vh - 190px),680px);min-height:0;overflow:hidden}.scene-inspector-v2-grid{display:grid;align-items:stretch;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.scene-inspector-v2-edit .scene-inspector-v2-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.scene-inspector-v2-stack{display:grid;gap:12px}.scene-inspector-v2-health{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));gap:8px}.scene-inspector-editor-overlay,.scene-inspector-v2-card,.scene-inspector-v2-health>div{border:1px solid var(--plotline-line);background:var(--plotline-panel);border-radius:8px;box-shadow:0 8px 24px rgba(30,37,43,.06)}.scene-inspector-v2-health>div{min-width:0;padding:10px 12px}.scene-inspector-v2-counts span,.scene-inspector-v2-facts dt,.scene-inspector-v2-health span,.scene-inspector-v2-section>span,.scene-inspector-v2-summary>span{display:block;color:var(--plotline-muted);font-size:.72rem;font-weight:800;text-transform:uppercase}.scene-inspector-v2-health strong{display:block;overflow:hidden;color:var(--plotline-ink);font-size:.94rem;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-counts .attention strong,.scene-inspector-v2-health .attention strong{color:var(--plotline-danger,#b35f3b)}.scene-inspector-v2-card{display:grid;align-content:start;gap:14px;height:100%;min-width:0;padding:16px}.scene-inspector-v2-edit .scene-inspector-v2-card{gap:10px;padding:14px}.scene-inspector-v2-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-inspector-v2-card-header>div:first-child{min-width:0}.scene-inspector-v2-card-header h3{margin:0;font-size:1.08rem;line-height:1.25}.scene-inspector-editor-title-row,.scene-inspector-v2-heading{display:flex;align-items:center;gap:6px;min-width:0}.scene-inspector-editor-title-row h3,.scene-inspector-v2-heading h3{min-width:0}.scene-inspector-v2-heading .plotline-help-icon-wrapper{flex:0 0 auto}.scene-inspector-v2-edit .scene-inspector-v2-card-header{gap:10px}.scene-inspector-v2-edit .scene-inspector-v2-card-header h3{font-size:1rem}.scene-inspector-v2-card p{margin:0}.scene-inspector-v2-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0}.scene-inspector-v2-facts div{min-width:0}.scene-inspector-v2-facts dd{margin:2px 0 0;overflow-wrap:anywhere}.scene-inspector-v2-section,.scene-inspector-v2-summary{display:grid;gap:6px}.scene-inspector-v2-edit .scene-inspector-v2-section,.scene-inspector-v2-edit .scene-inspector-v2-summary{gap:5px}.scene-inspector-v2-actions,.scene-inspector-v2-chip-row{display:flex;flex-wrap:wrap;gap:7px}.scene-inspector-v2-edit .scene-inspector-v2-actions{gap:6px}.scene-inspector-v2-edit .scene-inspector-v2-actions .btn{padding:.22rem .5rem}.scene-inspector-v2-card-header .scene-inspector-v2-actions{flex:0 0 auto;justify-content:flex-end;max-width:100%}.scene-inspector-v2-card-header .scene-inspector-v2-action-menu{flex-wrap:nowrap;max-width:100%}.scene-inspector-v2-card-header .scene-inspector-v2-action-menu .btn{white-space:nowrap}.scene-inspector-v2-action-menu .dropdown-menu{min-width:11rem}.scene-inspector-v2-action-menu .dropdown-item{font-size:.86rem}.scene-inspector-v2-chip-row span{border:1px solid rgba(47,111,99,.18);border-radius:999px;background:rgba(47,111,99,.08);padding:3px 9px;color:var(--plotline-accent-dark);font-size:.82rem;font-weight:800}.scene-inspector-v2-counts,.scene-inspector-v2-metrics{display:grid;gap:8px}.scene-inspector-v2-metrics{grid-template-columns:1fr}.scene-inspector-v2-counts{grid-template-columns:repeat(auto-fit,minmax(72px,1fr))}.scene-inspector-v2-counts>div,.scene-inspector-v2-metrics>div{min-width:0;border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.05);padding:9px 10px}.scene-inspector-v2-edit .scene-inspector-v2-counts>div,.scene-inspector-v2-edit .scene-inspector-v2-metrics>div{padding:7px 8px}.scene-inspector-v2-metrics span{display:block;overflow:hidden;color:var(--plotline-muted);font-size:.78rem;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-counts strong,.scene-inspector-v2-metrics strong{display:block;color:var(--plotline-ink);font-size:1rem}.scene-inspector-v2-list{display:grid;gap:7px;margin:0;padding:0;list-style:none}.scene-inspector-v2-edit .scene-inspector-v2-list{gap:5px}.scene-inspector-v2-list li{display:flex;align-items:baseline;justify-content:space-between;gap:10px;border-bottom:1px solid rgba(47,111,99,.1);padding-bottom:6px}.scene-inspector-v2-edit .scene-inspector-v2-list li{padding-bottom:5px}.scene-inspector-v2-list li:last-child{border-bottom:0;padding-bottom:0}.scene-inspector-v2-list span{color:var(--plotline-muted);font-size:.82rem;text-align:right}.scene-inspector-v2-character-list,.scene-inspector-v2-compact-list{display:grid;gap:7px;margin:0;padding:0;list-style:none}.scene-inspector-v2-character-list li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;min-width:0}.scene-inspector-v2-character-list span,.scene-inspector-v2-character-list strong{display:block}.scene-inspector-v2-character-list div{min-width:0}.scene-inspector-v2-character-list div span{color:var(--plotline-muted);font-size:.8rem}.scene-inspector-v2-character-list .visual-avatar{width:34px}.scene-inspector-v2-character-list .visual-avatar>span{display:flex;align-items:center;justify-content:center;width:100%;height:100%;line-height:1}.scene-inspector-v2-avatar-pov{box-shadow:0 0 0 2px rgba(47,111,99,.24)}.scene-inspector-v2-mini-badge{border:1px solid rgba(47,111,99,.2);border-radius:999px;background:var(--plotline-soft);color:var(--plotline-accent-dark);padding:2px 7px;font-size:.7rem;font-weight:800}.scene-inspector-v2-preview-stack{display:grid;gap:8px}.scene-inspector-v2-preview-group{border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.04);padding:8px 10px}.scene-inspector-v2-preview-group summary{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-accent-dark);cursor:pointer;font-size:.82rem;font-weight:800}.scene-inspector-v2-preview-group summary span{color:var(--plotline-muted);font-size:.76rem}.scene-inspector-v2-preview-group[open] summary{margin-bottom:7px}.scene-inspector-v2-compact-list li{min-width:0;color:var(--plotline-ink);font-size:.88rem;overflow-wrap:anywhere}.scene-inspector-v2-compact-list li::before{content:"";display:inline-block;width:5px;height:5px;margin-right:7px;border-radius:999px;background:rgba(47,111,99,.42);vertical-align:middle}.scene-inspector-v2-compact-list a{color:var(--plotline-accent-dark);font-weight:700}.scene-inspector-v2-good-state,.scene-inspector-v2-suggestion-strip,.scene-inspector-v2-warning-state{border-radius:8px;padding:8px 10px}.scene-inspector-v2-suggestion-strip{display:flex;align-items:center;gap:8px;border:1px solid rgba(197,139,43,.24);background:rgba(197,139,43,.1)}.scene-inspector-v2-suggestion-strip strong{color:#805815;font-size:1rem}.scene-inspector-v2-suggestion-strip span{color:var(--plotline-muted);font-size:.86rem;font-weight:700}.scene-inspector-v2-good-state{border:1px solid rgba(47,111,99,.16);background:rgba(47,111,99,.07);color:var(--plotline-accent-dark);font-weight:800}.scene-inspector-v2-good-state::before{content:"\2713";margin-right:7px}.scene-inspector-v2-warning-state{border:1px solid rgba(179,95,59,.22);background:rgba(179,95,59,.1);color:var(--plotline-danger,#b35f3b);font-weight:800}.scene-inspector-v2-metric-row{display:grid;grid-template-columns:minmax(130px,180px) minmax(0,1fr) auto;align-items:center;gap:6px}.scene-inspector-v2-metric-row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-metric-track{display:flex;align-items:stretch;width:100%;height:8px;overflow:hidden;border:0;border-radius:999px;background:rgba(47,111,99,.12);padding:0}.scene-inspector-v2-metric-track i{display:block;width:var(--metric-percent);min-width:4px;border-radius:inherit;background:linear-gradient(90deg,#6fa99b,var(--plotline-accent-dark))}.scene-inspector-v2-callout{border-left:4px solid var(--plotline-warning,#c58b2b);border-radius:8px;background:rgba(197,139,43,.1);padding:10px 12px}.scene-overview-v2-header{align-items:flex-start}.scene-overview-v2-controls{display:flex;flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end;gap:6px}.scene-overview-v2-facts{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px}.scene-overview-v2-facts div:nth-child(3),.scene-overview-v2-summary{grid-column:1/-1}.scene-overview-v2-summary p{display:-webkit-box;overflow:hidden;-webkit-line-clamp:3;-webkit-box-orient:vertical}.scene-inspector-editor-overlay{position:absolute;inset:0;z-index:4;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;max-height:100%;padding:16px;overflow:hidden;background:var(--plotline-panel)}.scene-inspector-editor-overlay[hidden]{display:none}.scene-inspector-v2-edit .scene-inspector-editor-overlay{position:static;inset:auto;z-index:1;min-width:0;height:100%;max-height:none}.scene-inspector-editor-resizer{display:none}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer{display:block;align-self:stretch;min-height:100%;border-radius:999px;cursor:col-resize;background:linear-gradient(180deg,rgba(47,111,99,.16),rgba(47,111,99,.04))}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer::before{content:"";display:block;width:2px;height:48px;margin:18px auto;border-radius:999px;background:var(--plotline-accent);opacity:.55}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer:focus-visible,.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer:hover{background:rgba(47,111,99,.16)}body.scene-inspector-editor-resizing{cursor:col-resize;user-select:none}.scene-inspector-editor-shell{position:sticky;top:0;z-index:2;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);background:var(--plotline-panel);padding-bottom:12px}.scene-inspector-editor-shell h3{margin:0;font-size:1.1rem}.scene-inspector-editor-help{flex:0 0 auto}.scene-inspector-editor-empty{min-height:0;overflow:auto}.scene-inspector-editor-form{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:100%;gap:14px}.scene-inspector-editor-fields{display:grid;align-content:start;gap:14px;padding-right:4px}.scene-inspector-editor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.scene-inspector-editor-fieldset{display:grid;gap:10px;min-width:0;margin:0;border:1px solid var(--plotline-line);border-radius:8px;padding:12px}.scene-inspector-editor-fieldset legend{float:none;width:auto;margin:0;padding:0 4px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-inspector-editor-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.scene-inspector-editor-checks label{display:flex;align-items:center;gap:8px;min-width:0;margin:0;border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.05);padding:8px 10px}.scene-inspector-editor-checks span{overflow-wrap:anywhere}.scene-inspector-editor-footer{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--plotline-line);background:var(--plotline-panel);padding-top:12px}.scene-inspector-editor-error{border:1px solid rgba(179,95,59,.28);border-radius:8px;background:rgba(179,95,59,.1);padding:10px 12px;color:var(--plotline-danger,#b35f3b);font-weight:700}.scene-inspector-editor-loading,.scene-inspector-editor-pending{border:1px dashed rgba(47,111,99,.24);border-radius:8px;background:rgba(47,111,99,.04);padding:16px;color:var(--plotline-muted)}.scene-inspector-editor-metric{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-inspector-editor-metric-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-inspector-editor-metric-heading h4{margin:0;font-size:.98rem}.scene-inspector-editor-metric-heading p{margin:3px 0 0;color:var(--plotline-muted);font-size:.88rem}.scene-inspector-editor-metric-heading output{min-width:42px;border-radius:8px;background:var(--plotline-accent);padding:5px 8px;color:#fff;font-weight:800;text-align:center}.scene-inspector-editor-range-labels{display:flex;justify-content:space-between;color:var(--plotline-muted);font-size:.78rem}.scene-character-editor-section{display:grid;gap:10px}.scene-character-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-character-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-character-pov-options{display:grid;gap:7px}.scene-character-pov-options label{display:flex;align-items:center;gap:8px;margin:0;font-weight:700}.scene-character-editor-list{display:grid;gap:10px}.scene-character-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-character-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-character-editor-card-header h4{margin:0;font-size:1rem}.scene-character-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-character-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-world-editor-section{display:grid;gap:10px}.scene-world-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-world-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-world-editor-list{display:grid;gap:10px}.scene-world-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-world-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-world-editor-card-header h4{margin:0;font-size:1rem}.scene-world-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-world-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-writer-editor-section{display:grid;gap:10px}.scene-writer-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-writer-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-writer-editor-list{display:grid;gap:10px}.scene-writer-checklist-row,.scene-writer-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-writer-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-writer-editor-card-header h4{margin:0;font-size:1rem}.scene-writer-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-writer-checklist-row{grid-template-columns:auto minmax(0,1fr) auto;align-items:center}.scene-writer-checklist-complete,.scene-writer-inline-check,.scene-writer-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-attachment-editor-card{align-items:stretch}.scene-attachment-preview-row{display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:start}.scene-attachment-thumb{display:grid;place-items:center;width:72px;height:72px;overflow:hidden;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.06);color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-align:center}.scene-attachment-thumb img{width:100%;height:100%;object-fit:cover}.scene-attachment-preview-copy{display:grid;gap:8px;min-width:0}.scene-attachment-preview-copy p{margin:0}.scene-attachment-delete-form,.scene-attachment-editor-form{display:grid;gap:10px}.scene-attachment-action-row{display:flex;justify-content:flex-end;gap:8px}.scene-structure-editor-section{display:grid;gap:10px}.scene-structure-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-structure-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-structure-delete-form,.scene-structure-editor-form,.scene-structure-editor-list{display:grid;gap:10px}.scene-structure-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-structure-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-structure-card-header h4{margin:0;font-size:1rem}.scene-structure-card-header p,.scene-structure-editor-card p{margin:2px 0 0}.scene-structure-marker{flex:0 0 auto;border-radius:999px;background:var(--plot-colour,var(--plotline-accent));padding:3px 8px;color:#fff;font-size:.78rem;font-weight:800}.scene-structure-action-row{display:flex;justify-content:flex-end;gap:8px}.scene-structure-dependency-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.scene-structure-inline-check{display:inline-flex;align-items:center;align-self:end;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-inspector-v2-timeline .scene-inspector-v2-health{grid-template-columns:repeat(2,minmax(0,1fr))}.scene-inspector-v2-timeline .scene-inspector-v2-card{padding:14px}.scene-inspector-v2-timeline .scene-inspector-v2-card-header,.scene-inspector-v2-timeline .scene-inspector-v2-list li{align-items:stretch;flex-direction:column}.scene-inspector-v2-timeline .scene-inspector-v2-card-header .scene-inspector-v2-actions{justify-content:flex-start}.scene-inspector-v2-timeline .scene-inspector-v2-counts,.scene-inspector-v2-timeline .scene-inspector-v2-facts,.scene-inspector-v2-timeline .scene-inspector-v2-metrics{grid-template-columns:1fr}.scene-inspector-v2-timeline .scene-inspector-v2-metrics{grid-template-columns:1fr}.scene-inspector-v2-timeline .scene-inspector-v2-metric-track{height:7px}.scene-inspector-v2-timeline .scene-inspector-v2-metric-row{grid-template-columns:minmax(118px,150px) minmax(0,1fr) auto}@media (max-width:1100px){.scene-inspector-v2-edit.editor-overlay-open{grid-template-columns:minmax(0,1fr) 10px minmax(360px,min(var(--scene-editor-width),52%))}.scene-inspector-v2-grid,.scene-inspector-v2-health{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:1180px){.scene-inspector-v2-edit .scene-inspector-v2-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:720px){.scene-inspector-v2-counts,.scene-inspector-v2-facts,.scene-inspector-v2-grid,.scene-inspector-v2-health,.scene-inspector-v2-metrics{grid-template-columns:1fr}.scene-inspector-v2-card-header{flex-direction:column}.scene-inspector-editor-checks,.scene-inspector-editor-grid{grid-template-columns:1fr}.scene-writer-checklist-row{grid-template-columns:1fr;align-items:stretch}.scene-attachment-preview-row{grid-template-columns:1fr}.scene-structure-dependency-columns{grid-template-columns:1fr}}.floor-plan-toolbar-floor-group{flex:1 1 420px;min-width:min(100%,320px)}.floor-plan-active-floor{display:grid;gap:2px}.floor-plan-toolbar-control-group{flex:0 1 auto}.floor-plan-toolbar-action-group{flex:1 1 360px;justify-content:flex-end}.floor-plan-occupancy-scene-row{border-top:1px solid rgba(47,111,99,.12);padding-top:9px}.floor-plan-occupancy-scene-row[hidden]{display:none}.floor-plan-occupancy-scene-row .floor-plan-reference-control{flex:1 1 320px;min-width:min(100%,320px)}.floor-plan-occupancy-scene-row .form-select{width:100%}.floor-plan-occupancy-warning-panel{background:rgba(47,111,99,.05);border:1px solid rgba(47,111,99,.16);border-radius:8px;color:var(--plotline-ink,#1e252b);flex:1 1 100%;font-size:.82rem;padding:.55rem .7rem}.floor-plan-occupancy-warning-panel strong{display:block;font-size:.78rem;margin-bottom:.25rem;text-transform:uppercase}.floor-plan-occupancy-warning-panel p,.floor-plan-occupancy-warning-panel ul{margin:0}.floor-plan-occupancy-warning-panel ul{display:grid;gap:.25rem;list-style:none;padding:0}.floor-plan-occupancy-warning,.floor-plan-occupancy-warning-empty{border-radius:6px;font-weight:700;padding:.32rem .45rem}.floor-plan-occupancy-warning-empty{background:rgba(47,111,99,.08);color:var(--plotline-accent-dark,#22534a)}.floor-plan-occupancy-warning--warning{background:rgba(251,236,211,.78);color:#7b4b12}.floor-plan-occupancy-warning--info{background:rgba(233,243,248,.86);color:#245b78}.floor-plan-occupancy-warning-empty[hidden],.floor-plan-occupancy-warning[hidden]{display:none}.floor-plan-editor-toolbar .muted{display:block;font-size:.76rem;line-height:1.1}.floor-plan-reference-control,.floor-plan-toolbar-check{align-items:center;color:var(--muted-color,#6b756f);display:inline-flex;font-size:.82rem;font-weight:700;gap:6px}.floor-plan-reference-control{align-items:flex-start;flex-direction:column;gap:2px}.floor-plan-reference-control .form-select{min-width:180px}.floor-plan-save-status{border:1px solid rgba(47,111,99,.2);border-radius:999px;color:var(--plotline-accent-dark,#22534a);background:rgba(47,111,99,.08);font-size:.78rem;font-weight:800;padding:4px 9px}.floor-plan-save-status[data-save-state=dirty]{border-color:rgba(184,118,43,.32);color:#7b4b12;background:rgba(251,236,211,.72)}.floor-plan-save-status[data-save-state=saving]{border-color:rgba(51,117,155,.3);color:#245b78;background:rgba(233,243,248,.82)}.floor-plan-save-status[data-save-state=failed]{border-color:rgba(163,61,61,.32);color:#8a3434;background:rgba(255,232,232,.9)}.floor-plan-floor{display:none}.floor-plan-floor.active{display:block}.floor-plan-stage{min-width:0}.floor-plan-grid-wrap{max-width:100%;max-height:calc(100vh - 250px);min-height:min(58vh,520px);overflow:auto;padding-bottom:8px}.floor-plan-grid{--cell-size:34px;background:linear-gradient(to right,rgba(93,111,101,.18) 1px,transparent 1px),linear-gradient(to bottom,rgba(93,111,101,.18) 1px,transparent 1px),var(--panel-bg,#fff);background-size:var(--cell-size) var(--cell-size),var(--cell-size) var(--cell-size),auto;border:1px solid var(--border-color,#d8ded9);border-radius:8px;height:calc(var(--grid-height) * var(--cell-size));min-width:calc(var(--grid-width) * var(--cell-size));position:relative;width:calc(var(--grid-width) * var(--cell-size))}.floor-plan-coordinate-label{color:rgba(33,61,55,.42);font-size:.62rem;font-weight:800;line-height:1;pointer-events:none;position:absolute;text-shadow:0 1px 0 rgba(255,255,255,.7);user-select:none;z-index:5}.floor-plan-coordinate-label--column{left:calc(var(--coord-x) * var(--cell-size) + 4px);top:3px}.floor-plan-coordinate-label--row{left:4px;top:calc(var(--coord-y) * var(--cell-size) + 4px)}.floor-plan-reference-overlay{inset:0;pointer-events:none;position:absolute;z-index:1}.floor-plan-reference-block{align-items:center;background:rgba(47,111,99,.08);border:1px dashed rgba(47,111,99,.34);border-radius:2px;color:rgba(27,55,49,.46);display:flex;font-size:.62rem;font-weight:800;height:calc(var(--h) * var(--cell-size));justify-content:center;left:calc(var(--x) * var(--cell-size));line-height:1.05;overflow:hidden;padding:3px;position:absolute;text-align:center;top:calc(var(--y) * var(--cell-size));width:calc(var(--w) * var(--cell-size))}.floor-plan-reference-warning{background:rgba(251,236,211,.92);border:1px solid rgba(184,118,43,.34);border-radius:999px;color:#7b4b12;font-size:.76rem;font-weight:800;left:10px;padding:4px 10px;pointer-events:none;position:absolute;top:10px;z-index:6}.floor-plan-background-image{height:auto;left:0;max-width:none;opacity:var(--bg-opacity, .35);pointer-events:none;position:absolute;top:0;transform:translate(var(--bg-offset-x,0),var(--bg-offset-y,0)) scale(var(--bg-scale,1));transform-origin:top left;user-select:none;width:100%;z-index:0}.floor-plan-background-image.is-locked{pointer-events:none}.floor-plan-block{align-items:center;--floor-plan-wall-color:rgba(44, 84, 75, .55);border:2px solid transparent;border-radius:2px;color:#12332c;cursor:grab;display:flex;font-size:.72rem;font-weight:700;height:calc(var(--h) * var(--cell-size));justify-content:center;left:calc(var(--x) * var(--cell-size));line-height:1.08;overflow:hidden;padding:4px;position:absolute;text-align:center;top:calc(var(--y) * var(--cell-size));touch-action:none;width:calc(var(--w) * var(--cell-size));z-index:2}.floor-plan-wall-segment{background:var(--floor-plan-wall-color);pointer-events:none;position:absolute;z-index:2}.floor-plan-wall-segment--north,.floor-plan-wall-segment--south{height:2px;left:var(--wall-start);width:var(--wall-length)}.floor-plan-wall-segment--north{top:0}.floor-plan-wall-segment--south{bottom:0}.floor-plan-wall-segment--east,.floor-plan-wall-segment--west{height:var(--wall-length);top:var(--wall-start);width:2px}.floor-plan-wall-segment--east{right:0}.floor-plan-wall-segment--west{left:0}.floor-plan-block-label{display:-webkit-box;max-width:100%;overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:1}.floor-plan-block[style*="--h:2"] .floor-plan-block-label,.floor-plan-block[style*="--h:3"] .floor-plan-block-label,.floor-plan-block[style*="--h:4"] .floor-plan-block-label,.floor-plan-block[style*="--h:5"] .floor-plan-block-label,.floor-plan-block[style*="--h:6"] .floor-plan-block-label,.floor-plan-block[style*="--h:7"] .floor-plan-block-label,.floor-plan-block[style*="--h:8"] .floor-plan-block-label{-webkit-line-clamp:2}.floor-plan-block.selected{box-shadow:0 0 0 3px rgba(47,111,99,.28);outline:2px solid var(--bs-primary,#2f6f63);z-index:3}.floor-plan-block.overlap{border-color:#b45544;box-shadow:inset 0 0 0 2px rgba(180,85,68,.18)}.floor-plan-block.is-hidden-location{background-image:repeating-linear-gradient(135deg,rgba(18,51,44,.08) 0,rgba(18,51,44,.08) 3px,transparent 3px,transparent 9px);box-shadow:inset 0 0 0 1px rgba(43,54,49,.18)}.floor-plan-block.is-hidden-location.selected{box-shadow:inset 0 0 0 1px rgba(43,54,49,.18),0 0 0 3px rgba(47,111,99,.28)}.floor-plan-block.is-hidden-location.overlap{box-shadow:inset 0 0 0 2px rgba(180,85,68,.18),inset 0 0 0 1px rgba(43,54,49,.18)}.floor-plan-secret-route{border-top:2px dashed rgba(69,55,42,.58);height:0;left:calc(var(--route-x,0) * var(--cell-size));opacity:.72;pointer-events:none;position:absolute;top:calc(var(--route-y,0) * var(--cell-size));transform:rotate(var(--route-angle,0));transform-origin:0 50%;width:calc(var(--route-length,0) * var(--cell-size));z-index:3}.floor-plan-secret-route::after{background:rgba(255,250,242,.9);border:1px solid rgba(69,55,42,.5);border-radius:50%;content:"";height:7px;left:50%;position:absolute;top:-5px;transform:translateX(-50%);width:7px}.floor-plan-transition-marker{align-items:center;--transition-marker-ink:#12332c;--transition-marker-window:#246f9f;--transition-marker-blocked:#9b342b;background:rgba(255,250,242,.98);border:1px solid rgba(47,111,99,.55);border-radius:50%;box-shadow:0 2px 6px rgba(31,37,34,.16);color:var(--transition-marker-ink);display:flex;font-size:.72rem;font-weight:900;height:21px;justify-content:center;left:calc(var(--transition-x,0) * var(--cell-size));line-height:1;pointer-events:none;position:absolute;top:calc(var(--transition-y,0) * var(--cell-size));transform:translate(-50%,-50%);width:21px;z-index:4}.floor-plan-transition-marker svg{display:block;height:21px;overflow:visible;width:21px}.floor-plan-transition-marker.is-vertical svg{transform:rotate(90deg)}.floor-plan-transition-marker .marker-arc,.floor-plan-transition-marker .marker-blocked,.floor-plan-transition-marker .marker-line,.floor-plan-transition-marker .marker-window{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7}.floor-plan-transition-marker .marker-arc{stroke-width:1.35}.floor-plan-transition-marker .marker-window{stroke:var(--transition-marker-window)}.floor-plan-transition-marker .marker-dotted{opacity:.72;stroke-dasharray:1.4 2}.floor-plan-transition-marker .marker-blocked{stroke:var(--transition-marker-blocked);stroke-width:1.8}.floor-plan-transition-marker .marker-strong{stroke-width:2}.floor-plan-transition-marker .marker-track{opacity:.72}.floor-plan-transition-marker--window{background:rgba(239,249,255,.98);border-color:rgba(36,111,159,.48)}.floor-plan-transition-marker--sliding-door{background:rgba(248,252,249,.98);border-color:rgba(47,111,99,.58)}.floor-plan-transition-marker--french-door{background:rgba(255,252,246,.98);border-color:rgba(119,86,45,.5)}.floor-plan-transition-marker--secret-door{background:rgba(255,250,242,.88);border-style:dashed}.floor-plan-transition-marker--ladder{background:rgba(246,248,245,.98);border-color:rgba(77,91,67,.55)}.floor-plan-transition-marker--blocked-door{background:rgba(255,244,241,.98);border-color:rgba(155,52,43,.52)}.floor-plan-transition-marker--exterior-door{border-width:2px}.floor-plan-transition-marker.is-shared-edge{background:rgba(255,255,255,.98);border-color:rgba(47,111,99,.72)}.floor-plan-transition-marker--window.is-shared-edge{background:rgba(239,249,255,.98);border-color:rgba(36,111,159,.58)}.floor-plan-transition-marker--blocked-door.is-shared-edge{background:rgba(255,244,241,.98);border-color:rgba(155,52,43,.6)}.visual-card-heading{align-items:flex-start;display:flex;gap:12px}.visual-card-heading>div{min-width:0}.visual-avatar{align-items:center;aspect-ratio:1;background:linear-gradient(135deg,rgba(47,111,99,.16),rgba(212,154,98,.16));border:1px solid rgba(47,111,99,.22);border-radius:999px;color:var(--plotline-accent-dark,#22534a);display:inline-flex;flex:0 0 auto;font-weight:900;justify-content:center;letter-spacing:.02em;overflow:hidden;text-transform:uppercase}.visual-avatar img{height:100%;object-fit:cover;width:100%}.visual-avatar--sm{font-size:.72rem;width:32px}.visual-avatar--md{font-size:.9rem;width:48px}.visual-avatar--lg{font-size:1.3rem;width:96px}.visual-avatar--xl{font-size:1.6rem;width:128px}.visual-image-editor{align-items:center;background:rgba(47,111,99,.05);border:1px solid rgba(47,111,99,.14);border-radius:8px;display:flex;gap:18px;padding:14px}.visual-image-editor__controls{flex:1 1 auto;min-width:220px}.floor-plan-block--room{background:#d9eee7}.floor-plan-block--corridor{background:#e7e2f4}.floor-plan-block--openspace{background:#e5efd4}.floor-plan-block--exterior{background:#d9ecf3}.floor-plan-block--other{background:#ece9e1}.floor-plan-resize-handle{border-bottom:10px solid rgba(18,51,44,.45);border-left:10px solid transparent;bottom:4px;height:0;position:absolute;right:4px;width:0}.floor-plan-side-panel{align-self:start;position:sticky;top:82px}.floor-plan-side-panel h2{font-size:1.05rem;margin-bottom:8px}.floor-plan-side-panel h3{font-size:.92rem;margin:0 0 8px}.floor-plan-toolbox{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:grid;grid-template-rows:auto minmax(0,1fr);max-height:calc(100vh - 250px);min-height:min(58vh,520px);overflow:hidden}.floor-plan-toolbox-tabs{border-bottom:1px solid var(--border-color,#d8ded9);display:flex;flex-wrap:wrap;gap:0}.floor-plan-toolbox-tab{background:0 0;border:0;border-right:1px solid var(--border-color,#d8ded9);border-bottom:1px solid var(--border-color,#d8ded9);color:inherit;flex:1 1 118px;font-size:.82rem;font-weight:800;min-width:112px;padding:10px 8px}.floor-plan-toolbox-tab.active:last-child,.floor-plan-toolbox-tab:last-child{border-right:0}.floor-plan-toolbox-tab.active{background:rgba(47,111,99,.1);border-bottom-color:var(--plotline-accent,#2f6f63);color:var(--plotline-accent-dark,#22534a)}.floor-plan-toolbox-body{min-height:0;overflow:auto}.floor-plan-tool-card{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:8px;padding:14px}.floor-plan-toolbox .floor-plan-tool-card{background:0 0;border:0;border-radius:0}.floor-plan-tool-card[hidden]{display:none}.floor-plan-tool-card p{margin-bottom:10px}.floor-plan-tool-subsection{border-top:1px solid var(--border-color,#d8ded9);margin-top:12px;padding-top:12px}.floor-plan-tool-subsection:first-of-type{border-top:0;margin-top:0;padding-top:0}.floor-plan-background-file{border:1px solid rgba(47,111,99,.16);border-radius:6px;font-size:.86rem;padding:8px 10px}.floor-plan-background-range{align-items:center;display:grid;gap:10px;grid-template-columns:minmax(0,1fr) 44px}.floor-plan-background-range span{color:var(--muted-text,#5d6f65);font-size:.8rem;font-variant-numeric:tabular-nums;text-align:right}.floor-plan-transition-list{display:grid;gap:8px}.floor-plan-transition-item{border:1px solid rgba(47,111,99,.14);border-radius:6px;display:grid;gap:8px;padding:8px}.floor-plan-transition-item span,.floor-plan-transition-item strong{display:block;font-size:.84rem}.floor-plan-transition-item span{color:var(--muted-text,#5d6f65)}.floor-plan-editor--occupancy .floor-plan-block{cursor:default;touch-action:auto}.floor-plan-editor--occupancy .floor-plan-resize-handle{display:none}.floor-plan-editor--occupancy .floor-plan-side-panel{display:none}.floor-plan-occupancy-tray{position:absolute;z-index:14;height:calc(var(--h) * var(--cell-size));left:calc(var(--x) * var(--cell-size));top:calc(var(--y) * var(--cell-size));width:calc(var(--w) * var(--cell-size));display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.18rem;padding:0 0 .25rem;pointer-events:auto}.floor-plan-occupancy-tray[hidden]{display:none}.floor-plan-occupancy-token{display:grid;place-items:center;width:1.8rem;height:1.8rem;overflow:hidden;border:2px solid #fff;border-radius:999px;color:#fff;background:var(--plotline-accent);box-shadow:0 4px 12px rgba(30,37,43,.18);font-size:.68rem;font-weight:800}.floor-plan-occupancy-token img{width:100%;height:100%;object-fit:cover}.floor-plan-occupancy-token--asset{width:1.45rem;height:1.45rem;background:#805c15;font-size:.58rem}.floor-plan-occupancy-more{border-radius:999px;padding:.15rem .36rem;color:var(--plotline-ink);background:rgba(255,255,255,.92);box-shadow:0 4px 12px rgba(30,37,43,.12);font-size:.72rem;font-weight:800}.floor-plan-occupancy-message{align-self:start;background:rgba(255,255,255,.94);border:1px solid rgba(47,111,99,.18);border-radius:8px;box-shadow:0 6px 16px rgba(30,37,43,.08);color:var(--muted-color,#6b756f);font-size:.82rem;font-weight:700;grid-column:1/-1;grid-row:1;justify-self:center;margin-top:.55rem;max-width:min(92%,520px);padding:.45rem .7rem;position:relative;z-index:16}.floor-plan-occupancy-message[hidden]{display:none}.floor-plan-transition-accordion .accordion-item{background:0 0;border-color:var(--border-color,#d8ded9)}.floor-plan-transition-accordion .accordion-button{background:rgba(47,111,99,.06);color:inherit;font-size:.88rem;font-weight:800;padding:10px 12px}.floor-plan-transition-accordion .accordion-button:not(.collapsed){background:rgba(47,111,99,.12);color:var(--plotline-accent-dark,#22534a);box-shadow:inset 0 -1px 0 var(--border-color,#d8ded9)}.floor-plan-transition-accordion .accordion-body{padding:12px}.floor-plan-checkbox{align-items:center;display:inline-flex;gap:6px;font-weight:700;margin-bottom:4px}.floor-plan-choice-row{display:grid;gap:4px;margin-bottom:10px}.floor-plan-choice-row label{align-items:center;display:flex;gap:6px;font-size:.88rem}.floor-plan-overlap-warning{background:rgba(180,85,68,.12);border:1px solid rgba(180,85,68,.35);border-radius:6px;color:#8f3f31;margin-bottom:10px;padding:8px 10px}.dark .floor-plan-grid,[data-bs-theme=dark] .floor-plan-grid{background:linear-gradient(to right,rgba(214,224,218,.12) 1px,transparent 1px),linear-gradient(to bottom,rgba(214,224,218,.12) 1px,transparent 1px),#15201d;background-size:var(--cell-size) var(--cell-size),var(--cell-size) var(--cell-size),auto}.dark .floor-plan-editor-toolbar,.dark .floor-plan-tool-card,.dark .floor-plan-toolbox,[data-bs-theme=dark] .floor-plan-editor-toolbar,[data-bs-theme=dark] .floor-plan-tool-card,[data-bs-theme=dark] .floor-plan-toolbox{background:var(--panel-bg,#1f2522)}.dark .floor-plan-toolbox .floor-plan-tool-card,[data-bs-theme=dark] .floor-plan-toolbox .floor-plan-tool-card{background:0 0}.dark .floor-plan-toolbox-tab.active,[data-bs-theme=dark] .floor-plan-toolbox-tab.active{background:rgba(212,154,98,.16);color:var(--plotline-accent-dark,#f0c99d)}.dark .floor-plan-block,[data-bs-theme=dark] .floor-plan-block{--floor-plan-wall-color:rgba(212, 154, 98, .6);color:#f1f6f3}.dark .floor-plan-block.is-hidden-location,[data-bs-theme=dark] .floor-plan-block.is-hidden-location{background-image:repeating-linear-gradient(135deg,rgba(244,234,220,.09) 0,rgba(244,234,220,.09) 3px,transparent 3px,transparent 9px);box-shadow:inset 0 0 0 1px rgba(244,234,220,.2)}.dark .floor-plan-secret-route,[data-bs-theme=dark] .floor-plan-secret-route{border-top-color:rgba(244,204,160,.58);opacity:.76}.dark .floor-plan-secret-route::after,[data-bs-theme=dark] .floor-plan-secret-route::after{background:rgba(42,35,30,.95);border-color:rgba(244,204,160,.55)}.dark .floor-plan-coordinate-label,[data-bs-theme=dark] .floor-plan-coordinate-label{color:rgba(244,234,220,.46);text-shadow:0 1px 0 rgba(0,0,0,.55)}.dark .floor-plan-reference-block,[data-bs-theme=dark] .floor-plan-reference-block{background:rgba(131,199,242,.08);border-color:rgba(131,199,242,.32);color:rgba(244,234,220,.46)}.dark .floor-plan-reference-warning,[data-bs-theme=dark] .floor-plan-reference-warning{background:rgba(84,57,25,.92);border-color:rgba(244,177,100,.32);color:#ffd9a5}.dark .floor-plan-transition-marker,[data-bs-theme=dark] .floor-plan-transition-marker{--transition-marker-ink:#f4eadc;--transition-marker-window:#83c7f2;--transition-marker-blocked:#f08a78;background:rgba(42,35,30,.98);border-color:rgba(212,154,98,.6)}.dark .floor-plan-transition-marker.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker.is-shared-edge{background:rgba(48,39,32,.98);border-color:rgba(212,154,98,.78)}.dark .floor-plan-transition-marker--window,.dark .floor-plan-transition-marker--window.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker--window,[data-bs-theme=dark] .floor-plan-transition-marker--window.is-shared-edge{background:rgba(24,45,58,.98);border-color:rgba(131,199,242,.66)}.dark .floor-plan-transition-marker--french-door,.dark .floor-plan-transition-marker--ladder,.dark .floor-plan-transition-marker--sliding-door,[data-bs-theme=dark] .floor-plan-transition-marker--french-door,[data-bs-theme=dark] .floor-plan-transition-marker--ladder,[data-bs-theme=dark] .floor-plan-transition-marker--sliding-door{background:rgba(39,43,37,.98);border-color:rgba(212,154,98,.58)}.dark .floor-plan-transition-marker--blocked-door,.dark .floor-plan-transition-marker--blocked-door.is-shared-edge,[data-bs-theme=dark] .floor-plan-transition-marker--blocked-door,[data-bs-theme=dark] .floor-plan-transition-marker--blocked-door.is-shared-edge{background:rgba(58,33,28,.98);border-color:rgba(240,138,120,.66)}.dark .visual-avatar,[data-bs-theme=dark] .visual-avatar{background:linear-gradient(135deg,rgba(131,199,242,.14),rgba(212,154,98,.18));border-color:rgba(244,234,220,.18);color:#f4eadc}.dark .visual-image-editor,[data-bs-theme=dark] .visual-image-editor{background:rgba(244,234,220,.04);border-color:rgba(244,234,220,.12)}.dark .floor-plan-transition-item,[data-bs-theme=dark] .floor-plan-transition-item{border-color:rgba(212,154,98,.22)}.dark .floor-plan-occupancy-token,[data-bs-theme=dark] .floor-plan-occupancy-token{border-color:#1f2630;box-shadow:0 4px 12px rgba(0,0,0,.28)}.dark .floor-plan-occupancy-more,[data-bs-theme=dark] .floor-plan-occupancy-more{color:#f1e7dd;background:rgba(31,38,48,.92)}.dark .floor-plan-occupancy-message,[data-bs-theme=dark] .floor-plan-occupancy-message{background:rgba(31,38,48,.94);border-color:rgba(212,154,98,.24);color:#d9c8b8}.dark .floor-plan-occupancy-warning-panel,[data-bs-theme=dark] .floor-plan-occupancy-warning-panel{background:rgba(244,234,220,.04);border-color:rgba(212,154,98,.2);color:#f1e7dd}.dark .floor-plan-occupancy-warning-empty,[data-bs-theme=dark] .floor-plan-occupancy-warning-empty{background:rgba(47,111,99,.18);color:#b8e2d7}.dark .floor-plan-occupancy-warning--warning,[data-bs-theme=dark] .floor-plan-occupancy-warning--warning{background:rgba(84,57,25,.92);color:#ffd9a5}.dark .floor-plan-occupancy-warning--info,[data-bs-theme=dark] .floor-plan-occupancy-warning--info{background:rgba(24,45,58,.92);color:#b9dcf3}.dark .floor-plan-transition-accordion .accordion-item,[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-item{border-color:rgba(212,154,98,.22)}.dark .floor-plan-transition-accordion .accordion-button,[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-button{background:rgba(212,154,98,.08);color:#f4eadc}.dark .floor-plan-transition-accordion .accordion-button:not(.collapsed),[data-bs-theme=dark] .floor-plan-transition-accordion .accordion-button:not(.collapsed){background:rgba(212,154,98,.16);color:var(--plotline-accent-dark,#f0c99d);box-shadow:inset 0 -1px 0 rgba(212,154,98,.22)}.dark .floor-plan-block--room,[data-bs-theme=dark] .floor-plan-block--room{background:#29584f}.dark .floor-plan-block--corridor,[data-bs-theme=dark] .floor-plan-block--corridor{background:#514876}.dark .floor-plan-block--openspace,[data-bs-theme=dark] .floor-plan-block--openspace{background:#4f6133}.dark .floor-plan-block--exterior,[data-bs-theme=dark] .floor-plan-block--exterior{background:#315d6f}.dark .floor-plan-block--other,[data-bs-theme=dark] .floor-plan-block--other{background:#5b564c}@media (max-width:1100px){.floor-plan-editor-toolbar,.floor-plan-layout{grid-template-columns:1fr}.floor-plan-grid-wrap{max-height:62vh}.floor-plan-side-panel{position:static}.floor-plan-toolbox{max-height:none}} \ No newline at end of file +html{font-size:15px;min-height:100%}@media(min-width:768px){html{font-size:16px}}:root{--plotline-ink:#1e252b;--plotline-muted:#66717b;--plotline-paper:#fbfaf7;--plotline-panel:#fff;--plotline-line:#d8ddd8;--plotline-accent:#2f6f63;--plotline-accent-dark:#22534a;--plotline-soft:#eef5f2;--timeline-label-width:180px;--timeline-scene-width:220px;--timeline-grid-gap:10px}body{min-height:100%;margin-bottom:0;color:var(--plotline-ink);background:var(--plotline-paper)}a{color:var(--plotline-accent-dark)}.btn-primary{--bs-btn-bg:var(--plotline-accent);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent-dark);--bs-btn-hover-border-color:var(--plotline-accent-dark)}.btn-outline-primary{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent);--bs-btn-hover-border-color:var(--plotline-accent)}.plotline-nav{background:rgba(255,255,255,.94);backdrop-filter:blur(8px)}.plotline-shell{max-width:1480px;padding-left:24px;padding-right:24px}.plotline-shell-wide{max-width:none;padding-left:clamp(18px,2vw,32px);padding-right:clamp(18px,2vw,32px)}.page-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;margin:18px 0 24px}.workspace-heading{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;margin:14px 0 18px}.workspace-heading h1{margin:0;font-size:clamp(1.8rem,3vw,2.7rem);line-height:1.05}.page-heading.compact{max-width:980px}.page-heading h1{margin:0;font-size:clamp(2rem,4vw,3.2rem);line-height:1.05;letter-spacing:0}.eyebrow{margin:0 0 6px;color:var(--plotline-accent-dark);font-size:.78rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.lead-text{max-width:760px;margin:10px 0 0;color:var(--plotline-muted);font-size:1.05rem}.button-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.button-row form,.compact-buttons form,.asset-card-footer form,td.text-end form,form[data-confirm-message]{display:inline-flex;align-items:center;margin:0}td.text-end{white-space:nowrap}.content-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.plain-card,.empty-panel,.edit-panel,.list-section{background:var(--plotline-panel);border:1px solid var(--plotline-line);border-radius:8px;padding:20px;box-shadow:0 10px 24px rgba(30,37,43,.04)}.plain-card h2,.empty-panel h2,.list-section h2{margin-top:0;font-size:1.35rem}.plain-card p,.empty-panel p,.muted{color:var(--plotline-muted)}.edit-panel{max-width:980px}.feature-request-admin-page .page-heading.compact,.feature-request-admin-page .edit-panel{max-width:none}.feature-request-admin-table{table-layout:fixed}.feature-request-admin-table th,.feature-request-admin-table td{vertical-align:middle}.feature-request-admin-table__preview{max-width:180px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.feature-request-admin-table__action{width:78px}@media(max-width:1100px){.feature-request-admin-table{table-layout:auto}.feature-request-admin-table__preview{max-width:160px}}.trial-status-panel,.trial-dashboard-banner{border:1px solid var(--plotline-line);border-radius:8px;padding:18px 20px;background:var(--plotline-panel)}.trial-status-panel{display:grid;gap:12px;margin-bottom:18px}.trial-status-panel--signup{grid-template-columns:minmax(0,1fr) auto;align-items:center;max-width:980px}.trial-status-panel h2,.trial-status-panel h3,.trial-dashboard-banner h2{margin:0}.trial-status-panel p,.trial-dashboard-banner p{margin-bottom:0}.trial-status-panel__heading,.trial-dashboard-banner{display:flex;gap:16px;align-items:center;justify-content:space-between}.trial-dashboard-banner{margin-bottom:18px}.trial-dashboard-banner__body{min-width:0}.trial-dashboard-banner__actions{display:flex;flex:0 0 auto;flex-wrap:wrap;gap:8px}.trial-progress{height:10px;overflow:hidden;border-radius:999px;background:rgba(84,68,48,.12)}.trial-progress__bar{height:100%;border-radius:inherit}.trial-status-panel[hidden],.trial-dashboard-banner[hidden]{display:none}.location-page .page-heading.compact,.location-page .edit-panel,.location-page .empty-panel,.location-page .drag-drop-panel{max-width:none}.import-panel,.import-preview-section{max-width:none}.import-json-input{font-family:Consolas,"Liberation Mono",Menlo,monospace;font-size:.88rem;line-height:1.45;min-height:34rem;max-height:64vh;overflow:auto;resize:vertical;white-space:pre}.import-preview-heading,.import-counts{display:flex;align-items:flex-start;gap:12px}.import-preview-heading{justify-content:space-between;margin-bottom:16px}.import-counts{flex-wrap:wrap}.import-counts span{display:inline-flex;align-items:baseline;gap:5px;border:1px solid var(--plotline-line);border-radius:999px;padding:5px 11px;background:var(--plotline-soft);color:var(--plotline-muted);font-weight:700}.import-counts strong{color:var(--plotline-ink)}.import-tree{display:grid;gap:12px}.import-tree-book{border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:rgba(255,255,255,.54)}.import-tree-book>summary,.import-tree-chapter>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer}.import-tree-book>summary span,.import-tree-chapter>summary span{color:var(--plotline-muted);font-size:.84rem;font-weight:700;white-space:nowrap}.import-tree-book h3{margin:0 0 10px;font-size:1.08rem}.import-tree-chapter{border-top:1px solid var(--plotline-line);padding:10px 0 0;margin-top:10px}.import-tree-chapter ul{margin:8px 0 0;color:var(--plotline-muted)}.import-scene-meta{display:block;margin-top:2px;color:var(--plotline-muted);font-size:.82rem}.import-mapping-summary{display:grid;gap:6px;border:1px solid rgba(184,118,43,.28);border-radius:8px;padding:10px 12px;margin-bottom:14px;background:rgba(251,236,211,.5);color:var(--plotline-muted);font-size:.9rem}.import-duplicate-confirm{border:1px solid rgba(184,118,43,.34);border-radius:8px;padding:12px 12px 12px 38px;background:rgba(251,236,211,.72)}.import-confirmation,.import-docs details{border:1px solid var(--plotline-line);border-radius:8px;padding:16px;background:rgba(255,255,255,.42)}.import-confirmation h3,.import-doc-grid h3{margin-top:0;font-size:1.05rem}.import-docs summary{cursor:pointer;font-weight:800}.import-doc-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:14px}.import-message-list ul{max-height:16rem;overflow:auto}.scene-editor{max-width:1180px}.table{margin-bottom:0}.table th{color:var(--plotline-muted);font-size:.78rem;letter-spacing:.06em;text-transform:uppercase}.narrow{width:90px;white-space:nowrap}.status-pill{display:inline-flex;align-items:center;width:fit-content;border:1px solid #c8d8d2;border-radius:999px;padding:2px 8px;color:var(--plotline-accent-dark);background:var(--plotline-soft);font-size:.78rem;font-weight:700;white-space:nowrap}.dashboard-summary-card{border-color:var(--plotline-line)}.dashboard-summary-grid{display:grid;grid-template-columns:repeat(9,minmax(0,1fr));gap:8px}.dashboard-summary-body{padding:8px 9px}.dashboard-summary-label{margin-bottom:3px;font-size:.64rem;line-height:1.15}.dashboard-summary-value{display:block;font-size:1.25rem;line-height:1;overflow-wrap:anywhere}.dashboard-summary-calm{border-color:rgba(47,111,99,.28);background:rgba(238,245,242,.62)}.dashboard-summary-mild{border-color:rgba(197,139,43,.32);background:rgba(255,248,232,.68)}.dashboard-summary-attention{border-color:rgba(142,80,103,.32);background:rgba(252,241,246,.7)}@media(max-width:1199.98px){.dashboard-summary-grid{grid-template-columns:repeat(4,minmax(0,1fr))}}@media(max-width:767.98px){.dashboard-summary-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:420px){.dashboard-summary-grid{grid-template-columns:1fr}}.dashboard-progress-card{border-color:rgba(47,111,99,.18);background:linear-gradient(180deg,#fff 0%,rgba(238,245,242,.64) 100%)}.dashboard-progress-body{padding:12px 14px}.dashboard-progress-heading{margin-bottom:8px}.dashboard-progress-title{margin:0 0 2px;font-size:1.05rem;line-height:1.2}.dashboard-series-progress{height:7px;background:rgba(47,111,99,.1)}.dashboard-series-progress .progress-bar{background:linear-gradient(90deg,var(--plotline-accent),#6fa99b)}.dashboard-progress-source{border-color:rgba(47,111,99,.2);color:var(--plotline-accent-dark);background:rgba(238,245,242,.9)}.dashboard-book-title-block h3{line-height:1.16}.dashboard-book-title-block a{color:var(--plotline-ink);text-decoration-color:rgba(47,111,99,.35)}.dashboard-book-subtitle{color:var(--plotline-muted);font-size:.95rem;line-height:1.25}.dashboard-status-pill{border-color:var(--dashboard-status-border,#c8d8d2);color:var(--dashboard-status-ink,var(--plotline-accent-dark));background:var(--dashboard-status-bg,var(--plotline-soft))}.dashboard-status-published{--dashboard-status-border:rgba(47,111,99,.32);--dashboard-status-bg:#e7f2ed;--dashboard-status-ink:#22534a}.dashboard-status-drafting{--dashboard-status-border:rgba(184,118,43,.35);--dashboard-status-bg:#fff2dd;--dashboard-status-ink:#7b4b12}.dashboard-status-planning{--dashboard-status-border:rgba(51,117,155,.3);--dashboard-status-bg:#e9f3f8;--dashboard-status-ink:#245b78}.dashboard-status-research,.dashboard-status-outlining{--dashboard-status-border:rgba(103,80,164,.26);--dashboard-status-bg:#f0edf8;--dashboard-status-ink:#51417c}.dashboard-status-revising{--dashboard-status-border:rgba(123,82,148,.3);--dashboard-status-bg:#f4eefa;--dashboard-status-ink:#5f3e73}.dashboard-status-editing{--dashboard-status-border:rgba(68,75,130,.3);--dashboard-status-bg:#eceef8;--dashboard-status-ink:#343b72}.dashboard-status-proofreading{--dashboard-status-border:rgba(43,130,123,.3);--dashboard-status-bg:#e6f5f2;--dashboard-status-ink:#23625d}.dashboard-status-ready{--dashboard-status-border:rgba(185,142,30,.34);--dashboard-status-bg:#fff6d8;--dashboard-status-ink:#765a0f}.dashboard-status-paused{--dashboard-status-border:rgba(102,113,123,.28);--dashboard-status-bg:#f0f2f1;--dashboard-status-ink:#56616b}.dashboard-status-archived{--dashboard-status-border:rgba(139,80,86,.28);--dashboard-status-bg:#f3eded;--dashboard-status-ink:#76474d}.dashboard-attention-soft{border-color:rgba(102,113,123,.24);color:#56616b;background:#f3f4f2}.word-companion-follow-toggle[aria-pressed="true"]{border-color:rgba(47,111,99,.36);color:var(--plotline-accent-dark);background:var(--plotline-soft);font-weight:700}.word-companion-follow-toggle[aria-pressed="true"]::after{content:" On"}.word-companion-follow-toggle[aria-pressed="false"]::after{content:" Off"}.order-buttons{display:flex;gap:6px}.purpose-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;max-height:260px;overflow:auto;padding:10px;border:1px solid var(--plotline-line);border-radius:8px;background:#fcfcfb}.purpose-check{display:flex;align-items:center;gap:8px;font-size:.92rem}.timeline-filter{display:flex;align-items:center;gap:8px;min-width:min(420px,100%)}.workspace-layout{display:grid;grid-template-columns:minmax(0,1fr);gap:0;align-items:start;--timeline-inspector-width:min(40vw,560px)}.workspace-layout.inspector-drawer-open{grid-template-columns:minmax(420px,1fr) 10px minmax(420px,var(--timeline-inspector-width));gap:12px}.timeline-workspace{min-width:0;max-width:100%}.timeline-inspector-resizer{position:sticky;top:76px;z-index:25;width:10px;height:calc(100vh - 96px);border-radius:999px;cursor:col-resize;background:linear-gradient(180deg,rgba(47,111,99,.16),rgba(47,111,99,.04))}.timeline-inspector-resizer::before{content:"";display:block;width:2px;height:48px;margin:18px auto;border-radius:999px;background:var(--plotline-accent);opacity:.55}.timeline-inspector-resizer:hover,.timeline-inspector-resizer:focus-visible{background:rgba(47,111,99,.16)}body.timeline-inspector-resizing{cursor:col-resize;user-select:none}.pacing-panel{margin-top:14px;margin-bottom:0;border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:#fff;box-shadow:0 10px 24px rgba(30,37,43,.04)}.pacing-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.pacing-heading h2{margin:0;font-size:1.1rem}.metric-graph-stack{display:grid;gap:10px;max-width:100%;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;padding-bottom:4px}.metric-graph-row{display:grid;grid-template-columns:150px minmax(260px,1fr);gap:10px;align-items:center;min-width:max(100%,calc(150px + (var(--scene-count,1)*34px)))}.metric-graph-label{color:var(--plotline-muted);font-size:.84rem;font-weight:700}.metric-graph-points{display:grid;grid-template-columns:repeat(var(--scene-count),minmax(28px,1fr));gap:5px;align-items:end;min-height:52px;border-radius:8px;padding:6px;background:linear-gradient(180deg,#f6faf8 0%,#edf4f1 100%);min-width:calc(var(--scene-count)*34px)}.metric-point{display:flex;align-items:flex-end;justify-content:center;height:48px;min-width:28px;color:var(--plotline-accent-dark);text-decoration:none}.metric-point::before{content:"";display:block;width:100%;height:max(8px,var(--metric-height));border-radius:5px 5px 2px 2px;background:linear-gradient(180deg,#6fa99b,var(--plotline-accent-dark));box-shadow:inset 0 1px 0 rgba(255,255,255,.35)}.metric-point span{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}.timeline-shell{overflow-x:auto;padding:16px;border:1px solid var(--plotline-line);border-radius:8px;background:linear-gradient(180deg,#fff 0%,#f7faf8 100%)}.workspace-timeline{min-height:420px}.timeline-series-row{display:grid;grid-template-columns:var(--timeline-label-width) max-content;gap:var(--timeline-grid-gap);align-items:stretch;width:max-content;min-width:100%}.timeline-project-title{position:sticky;left:0;z-index:20;display:grid;align-content:start;gap:4px;width:var(--timeline-label-width);min-height:100%;border-radius:8px;padding:12px;color:#fff;background:var(--plotline-accent-dark);font-weight:700;box-shadow:8px 0 18px rgba(30,37,43,.08)}.timeline-project-title span,.timeline-book-title span{color:rgba(255,255,255,.78);font-size:.72rem;letter-spacing:.08em;text-transform:uppercase}.timeline-project-title strong,.timeline-book-title strong{line-height:1.15}.timeline-books{display:flex;gap:var(--timeline-grid-gap);align-items:stretch}.timeline-book{flex:0 0 auto;width:calc((var(--book-scene-count)*var(--timeline-scene-width)) + ((var(--book-scene-count) - 1)*var(--timeline-grid-gap)));min-width:var(--timeline-scene-width)}.timeline-book-title{display:grid;gap:2px;margin-bottom:var(--timeline-grid-gap);border-radius:8px;padding:10px 12px;color:#fff;background:var(--plotline-accent-dark);font-weight:700}.timeline-chapters{display:flex;gap:var(--timeline-grid-gap);align-items:flex-start}.timeline-chapter{flex:0 0 auto;width:calc((var(--chapter-scene-count)*var(--timeline-scene-width)) + ((var(--chapter-scene-count) - 1)*var(--timeline-grid-gap)));min-width:var(--timeline-scene-width);box-sizing:border-box;border-radius:8px;background:rgba(238,245,242,.7);outline:1px solid #d4ded8;outline-offset:0;overflow:visible}.timeline-chapter-title{display:grid;gap:2px;border-bottom:1px solid #d4ded8;padding:10px 12px;color:var(--plotline-accent-dark);font-weight:700}.timeline-chapter-title span{color:var(--plotline-muted);font-size:.76rem;text-transform:uppercase}.timeline-scenes{display:grid;grid-template-columns:repeat(var(--chapter-scene-count),minmax(0,1fr));gap:var(--timeline-grid-gap);width:100%;box-sizing:border-box;min-height:190px;padding:0}.timeline-scene-card,.timeline-empty-scene{display:flex;flex-direction:column;gap:6px;width:100%;min-width:0;box-sizing:border-box;border:1px solid var(--plotline-line);border-radius:8px;padding:12px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 8px 18px rgba(30,37,43,.05)}.timeline-scene-card:hover{border-color:var(--plotline-accent);color:var(--plotline-ink)}.timeline-placeholder-scene,.timeline-placeholder-cell,.metric-point-placeholder{cursor:default;opacity:.72}.timeline-placeholder-scene{align-items:center;justify-content:center;border-style:dashed;color:var(--plotline-muted);background:rgba(255,255,255,.38);font-size:.86rem;font-weight:800;text-align:center}.timeline-placeholder-cell{border-style:dashed;background:repeating-linear-gradient(-45deg,rgba(216,221,216,.18) 0,rgba(216,221,216,.18) 7px,rgba(255,255,255,.18) 7px,rgba(255,255,255,.18) 14px)}.metric-point-placeholder::before{height:4px;background:rgba(102,113,123,.2);box-shadow:none}.timeline-scene-card.selected{border-color:var(--plotline-accent-dark);box-shadow:0 0 0 3px rgba(47,111,99,.16),0 10px 22px rgba(30,37,43,.08)}.scene-badge-row,.purpose-chip-row{display:flex;flex-wrap:wrap;gap:5px;align-items:center}.warning-placeholder{display:inline-flex;width:fit-content;border:1px dashed #d6b25e;border-radius:999px;padding:2px 8px;color:#755715;background:#fff8e8;font-size:.74rem;font-weight:700}.warning-placeholder.active{border-color:rgba(159,69,69,.36);color:#8a3434;background:rgba(255,232,232,.9);gap:5px;font-weight:800}.dependency-placeholder{display:inline-flex;width:fit-content;border:1px solid rgba(47,111,99,.2);border-radius:999px;padding:2px 8px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.08);font-size:.74rem;font-weight:700}.purpose-chip{display:inline-flex;width:fit-content;border-radius:999px;padding:2px 7px;color:#38453e;background:#edf0eb;font-size:.72rem;font-weight:700}.future-lane-placeholder{border-top:1px dashed #cbd8d2;padding:8px 12px;color:var(--plotline-muted);font-size:.78rem;background:rgba(255,255,255,.45)}.metric-timeline-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.metric-shape-controls{position:sticky;left:0;z-index:6;display:grid;gap:8px;width:calc(var(--timeline-label-width) + (var(--scene-count)*var(--timeline-scene-width)) + (var(--scene-count)*var(--timeline-grid-gap)));min-width:100%;border-radius:8px;padding:10px;background:rgba(255,255,255,.88)}.metric-timeline-row{display:grid;grid-template-columns:var(--timeline-label-width) calc((var(--scene-count)*var(--timeline-scene-width)) + ((var(--scene-count) - 1)*var(--timeline-grid-gap)));gap:var(--timeline-grid-gap);align-items:stretch}.metric-lane-label{position:sticky;left:0;z-index:12;display:grid;align-content:start;gap:4px;min-height:320px;border:1px solid rgba(47,111,99,.18);border-radius:8px;padding:10px;color:var(--plotline-accent-dark);background:#fff;box-shadow:0 6px 14px rgba(30,37,43,.04)}.metric-lane-label span{color:var(--plotline-muted);font-size:.78rem;font-weight:600}.colour-swatch{display:inline-block;width:18px;height:18px;border:1px solid rgba(30,37,43,.18);border-radius:999px;vertical-align:middle}.plot-lane-board{position:relative;display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.plot-lane-svg-overlay{position:absolute;inset:0 auto auto 0;z-index:4;pointer-events:none;overflow:visible}.plot-lane-svg-health-overlay{z-index:8}.plot-line-svg-path{fill:none;stroke-width:3.5;stroke-linecap:round;opacity:.72}.plot-line-svg-segment-dormant{stroke-dasharray:9 8;opacity:.48}.plot-line-svg-connector{fill:none;stroke-width:3;stroke-linecap:round;opacity:.58}.plot-line-svg-path.plotline-state-resolved,.plot-line-svg-path.plotline-state-questionable{stroke:#8c9491;opacity:.42}.plot-line-svg-path.plotline-state-abandoned{stroke:#9b2f36;opacity:.5}.plot-event-svg-node.plotline-state-resolved,.plot-event-svg-node.plotline-state-questionable{opacity:.88}.plot-event-svg-node.plotline-state-abandoned{opacity:.9}.plot-event-svg-node.plotline-state-abandoned line{stroke:#fff}.plotline-health-marker path,.plotline-health-marker circle{fill:#f4c430;stroke:#8a6712;stroke-width:1.5}.plotline-health-marker{pointer-events:visiblePainted}.plotline-health-marker line,.plotline-health-marker text{stroke:#5e4710;fill:#5e4710;stroke-width:1.6;stroke-linecap:round}.plotline-health-marker text{font-size:11px;font-weight:800;stroke-width:0;pointer-events:none}.plotline-health-count{fill:#fff;stroke:#8a6712;stroke-width:2;paint-order:stroke}.plotline-health-marker-dangling path,.plotline-health-marker-dangling circle{fill:#f8df8f}.plotline-health-marker-abandoned path,.plotline-health-marker-abandoned circle{fill:#d85c63;stroke:#8b1e2d}.plotline-health-marker-abandoned line{stroke:#fff}.plot-event-svg-node circle,.plot-event-svg-node ellipse,.plot-event-svg-node path{stroke:#fff;stroke-width:2}.plot-event-svg-node line,.plot-event-svg-node path[fill="none"]{stroke:#8b1e2d;stroke-width:3.4;stroke-linecap:round;stroke-linejoin:round}.plot-event-svg-node-reveal ellipse{stroke-width:2.4}.plot-event-svg-label{font-size:9.5px;font-weight:900;font-family:system-ui,-apple-system,"Segoe UI",sans-serif;paint-order:stroke;stroke:rgba(30,37,43,.22);stroke-width:.8px;pointer-events:none}.plot-event-svg-node-resolve path[fill="none"]{stroke:#fff}.lane-board-heading,.metric-lane-board-heading,.plot-lane-board-heading{position:sticky;left:0;z-index:6;display:flex;align-items:center;justify-content:space-between;gap:14px;width:calc(var(--timeline-label-width) + (var(--scene-count)*var(--timeline-scene-width)) + (var(--scene-count)*var(--timeline-grid-gap)));min-width:100%;margin-bottom:2px;border-radius:8px;padding:8px 10px;color:var(--plotline-accent-dark);background:rgba(255,255,255,.92);font-weight:700;box-shadow:0 8px 16px rgba(30,37,43,.05)}.lane-board-heading small,.metric-lane-board-heading small,.plot-lane-board-heading small{color:var(--plotline-muted);font-weight:500;white-space:nowrap}.timeline-heading-with-help{display:inline-flex;align-items:center;gap:6px;min-width:0}.plot-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.plot-lane-label{position:sticky;left:0;z-index:12;display:flex;align-items:center;gap:8px;min-height:46px;border:1px solid color-mix(in srgb,var(--plot-colour),#fff 55%);border-left:5px solid var(--plot-colour);border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.plot-lane-label:hover{color:var(--plotline-ink);border-color:var(--plot-colour)}.plot-lane-slots{display:contents}.plot-lane-slot{display:flex;flex-wrap:wrap;align-content:center;align-items:center;justify-content:center;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,255,255,.62)}.thread-marker{position:relative;z-index:5;display:inline-flex;align-items:center;justify-content:center;gap:4px;min-width:34px;height:30px;border:2px solid color-mix(in srgb,var(--plot-colour),#000 20%);border-radius:999px;padding:0 8px;color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 66%);font-size:.74rem;font-weight:900;text-decoration:none;box-shadow:0 3px 8px rgba(30,37,43,.14)}.plot-lane-board [data-plot-event-node]{opacity:1}.thread-marker:hover,.thread-marker:focus-visible{color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 48%);outline:3px solid rgba(47,111,99,.22);outline-offset:2px}.thread-marker.resolved{border-color:#5a8c60;background:#e6f4e7;color:#24512b}.thread-marker.contradicted{border-color:#b45c5c;background:#fff0f0;color:#7a2222}.thread-events-section{margin-top:16px}.thread-event-list{display:grid;gap:8px;margin-bottom:12px}.thread-event-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid color-mix(in srgb,var(--plot-colour),#fff 55%);border-left:4px solid var(--plot-colour);border-radius:8px;padding:8px;background:#fff}.thread-event-item>div{display:grid;gap:3px}.thread-event-marker{display:inline-flex;align-items:center;justify-content:center;width:fit-content;min-width:24px;height:22px;border-radius:999px;padding:0 7px;background:color-mix(in srgb,var(--plot-colour),#fff 72%);font-size:.72rem;font-weight:800}.thread-event-create{border-top:1px solid var(--plotline-line);padding-top:12px}.asset-lane-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.asset-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.asset-lane-label{position:sticky;left:0;z-index:12;display:grid;gap:2px;min-height:46px;border:1px solid #d4d7df;border-left:5px solid #6b5b95;border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.asset-lane-label span{color:var(--plotline-muted);font-size:.75rem}.asset-lane-slots{display:contents}.asset-lane-slot{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(250,249,255,.72)}.asset-marker,.asset-event-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid #7f70aa;border-radius:7px;padding:0 7px;color:#33284e;background:#eee9fb;font-size:.72rem;font-weight:800;text-decoration:none}.asset-marker:hover{color:#33284e;background:#dfd6f7}.asset-marker.timeline-marker-story-turn,.character-marker.timeline-marker-story-turn{border-width:2px}.asset-marker.timeline-marker-important,.character-marker.timeline-marker-important{box-shadow:inset 0 -3px 0 rgba(197,139,43,.36)}.asset-marker.timeline-marker-state-change,.character-marker.timeline-marker-state-change{border-style:double}.asset-marker.timeline-marker-transfer{box-shadow:inset 3px 0 0 rgba(47,111,99,.32)}.character-marker.timeline-marker-exit{opacity:.86;border-style:dashed}.asset-marker.timeline-marker-has-warning,.character-marker.timeline-marker-has-warning{box-shadow:0 0 0 2px rgba(179,95,59,.22)}.asset-events-section{margin-top:16px}.asset-event-list,.asset-mini-list{display:grid;gap:8px;margin-bottom:12px}.asset-event-item,.asset-mini-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid #ded9ea;border-left:4px solid #6b5b95;border-radius:8px;padding:8px;background:#fff}.asset-event-item>div,.asset-mini-item>div{display:grid;gap:3px}.asset-create-form{border-top:1px solid var(--plotline-line);padding-top:12px}.asset-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}.asset-card{display:grid;gap:12px;border:1px solid var(--plotline-line);border-radius:8px;padding:14px;background:#fff;box-shadow:0 8px 18px rgba(30,37,43,.04)}.asset-card h2{margin:0;font-size:1.1rem}.asset-card-footer{display:flex;flex-wrap:wrap;align-items:center;gap:6px}.asset-detail-grid{display:grid;grid-template-columns:minmax(260px,.8fr) minmax(320px,1.2fr);gap:14px}.character-lane-board{display:grid;gap:8px;width:max-content;min-width:100%;margin-top:14px;border-top:1px solid var(--plotline-line);padding-top:14px}.character-lane-row{display:grid;grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);align-items:stretch}.character-lane-label{position:sticky;left:0;z-index:12;display:grid;gap:2px;min-height:46px;border:1px solid #d7d4ce;border-left:5px solid #8a6f3d;border-radius:8px;padding:8px 10px;background:#fff;color:var(--plotline-ink);text-decoration:none;box-shadow:0 6px 14px rgba(30,37,43,.04)}.character-lane-label span{color:var(--plotline-muted);font-size:.75rem}.character-lane-slots{display:contents}.character-lane-slot{display:flex;flex-wrap:wrap;align-content:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,252,246,.72)}.character-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid #9a7a3f;border-radius:999px;padding:0 7px;color:#4f3810;background:#fff2d7;font-size:.72rem;font-weight:800;text-decoration:none}.character-card{border-left:4px solid #8a6f3d}.character-section{margin-top:16px}.character-item{border-left-color:#8a6f3d}.character-appearance-card{display:grid;gap:8px;border:1px solid #d7d4ce;border-left:4px solid #8a6f3d;border-radius:8px;padding:10px;background:#fff}.character-appearance-summary{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.character-appearance-summary>div:first-child{display:grid;gap:3px}.character-appearance-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:6px}.character-appearance-edit .asset-create-form{margin-top:8px;border-top:1px solid var(--plotline-line)}.word-companion-suggestion-panel{display:grid;gap:8px;margin-bottom:12px;border:1px solid rgba(138,111,61,.24);border-radius:8px;padding:10px;background:rgba(255,248,232,.72)}.word-companion-suggestion-list{display:grid;gap:8px}.word-companion-suggestion-item{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;border:1px solid #ded9ea;border-left:4px solid #8a6f3d;border-radius:8px;padding:8px;background:#fff}.word-companion-suggestion-item>div:first-child{display:grid;gap:3px}.word-companion-suggestion-pill{margin-left:6px}.form-helper-message{margin:0 0 8px;font-size:.86rem;font-weight:700}.scene-number,.time-label{color:var(--plotline-muted);font-size:.82rem}.location-pill,.location-badge{display:inline-flex;align-items:center;width:fit-content;border:1px solid rgba(47,111,99,.18);border-radius:999px;padding:2px 7px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.08);font-size:.74rem;font-weight:700}.scene-summary{display:-webkit-box;overflow:hidden;color:var(--plotline-muted);font-size:.88rem;-webkit-box-orient:vertical;-webkit-line-clamp:4}.timeline-empty-scene{justify-content:center;color:var(--plotline-muted);background:rgba(255,255,255,.58)}.form-control:focus,.form-select:focus,.form-check-input:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .2rem rgba(47,111,99,.16)}.scene-inspector-panel{position:sticky;top:76px;display:flex;flex-direction:column;max-height:calc(100vh - 96px);min-width:0;overflow:hidden;border:1px solid var(--plotline-line);border-radius:8px;background:#fff;box-shadow:0 14px 32px rgba(30,37,43,.08)}.inspector-header{position:sticky;top:0;z-index:5;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);padding:16px;background:#fff}.scene-inspector-body{flex:1 1 auto;min-height:0;overflow:auto;padding:16px}.inspector-header h2{margin:0;font-size:1.25rem}.location-helper{border:1px solid rgba(138,111,61,.22);border-radius:8px;padding:10px;background:rgba(255,248,232,.74)}.location-warning-list{margin:0;padding-left:18px;color:#6f5526;font-size:.86rem}.location-tree{display:grid;gap:8px}.location-tree-row{display:flex;align-items:center;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);padding:10px 0 10px calc(var(--location-depth,0)*22px)}.location-tree-row:last-child{border-bottom:0}.location-tree-row>div:first-child{display:grid;gap:3px}.compact-buttons{flex-wrap:nowrap}.location-chip-list{display:flex;flex-wrap:wrap;gap:8px}.location-chip{border:1px solid var(--plotline-line);border-radius:8px;padding:7px 10px;background:#fff;text-decoration:none}.location-relationship-list{display:grid;gap:8px}.location-relationship-card{display:flex;justify-content:space-between;gap:12px;border:1px solid var(--plotline-line);border-radius:8px;padding:10px;background:#fff}.location-flags{display:flex;flex-wrap:wrap;gap:10px 16px;color:var(--plotline-muted);font-size:.86rem}.validation-summary,.warning-filter-panel{border:1px solid var(--plotline-line);border-radius:8px;margin-bottom:16px;padding:12px;background:#fff}.validation-summary{display:flex;flex-wrap:wrap;gap:12px;color:var(--plotline-muted)}.warning-dashboard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-bottom:18px}.warning-count-row,.warning-card-title,.inspector-section-heading{display:flex;align-items:center;justify-content:space-between;gap:10px}.warning-list,.warning-mini-list{display:grid;gap:10px}.warning-card,.warning-mini-card{border:1px solid var(--plotline-line);border-radius:8px;padding:12px;background:#fff}.warning-card{display:grid;grid-template-columns:1fr auto;gap:12px}.warning-card p,.warning-mini-card p{margin:6px 0}.warning-actions{display:flex;align-items:flex-start;flex-wrap:wrap;gap:6px}.severity-pill{display:inline-flex;align-items:center;border-radius:999px;padding:2px 8px;font-size:.74rem;font-weight:800}.severity-pill.info{color:#365f7c;background:rgba(107,153,184,.14)}.severity-pill.warning{color:#7a5527;background:rgba(205,154,72,.17)}.severity-pill.error{color:#8a3434;background:rgba(190,83,83,.15)}.warning-mini-card{background:rgba(255,255,255,.76)}.dependency-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.dependency-card{display:grid;gap:3px;border:1px solid var(--plotline-line);border-radius:8px;margin-bottom:8px;padding:9px;background:rgba(255,255,255,.78)}.move-preview-panel{max-width:900px}.focused-validation-summary{display:flex;flex-wrap:wrap;gap:10px;border:1px solid rgba(47,111,99,.16);border-radius:8px;margin-top:12px;padding:10px;color:var(--plotline-muted);background:rgba(47,111,99,.05)}.inspector-purpose-list{grid-template-columns:1fr;max-height:210px}.metric-slider-stack{display:grid;gap:12px}.metric-slider{display:grid;gap:4px}.metric-slider-label{display:flex;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.86rem;font-weight:700}.metric-slider-label output{color:var(--plotline-accent-dark)}.metric-slider .form-range{accent-color:var(--plotline-accent)}.asset-importance-slider{border:1px solid var(--plotline-line);border-radius:8px;padding:10px 12px;background:rgba(47,111,99,.05)}.story-asset-checkbox-field{margin-top:1.95rem}.story-asset-event-item{justify-content:flex-start;gap:8px}.story-asset-event-item .asset-event-marker{flex:0 0 auto;min-width:1.55rem;width:auto}.story-asset-event-details{min-width:0}.overview-chip-grid,.context-nav,.breadcrumb-trail{display:flex;flex-wrap:wrap;gap:7px}.overview-chip,.context-nav a,.breadcrumb-trail a,.breadcrumb-trail span{display:inline-flex;align-items:center;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-decoration:none;background:rgba(255,255,255,.72)}.overview-chip.attention{color:#7a5527;border-color:rgba(205,154,72,.35);background:rgba(205,154,72,.14)}.overview-outcome{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;margin:0;color:var(--plotline-muted)}.breadcrumb-trail{margin-bottom:12px}.breadcrumb-trail a:hover,.context-nav a:hover{color:var(--plotline-accent-dark);border-color:rgba(47,111,99,.35);background:rgba(47,111,99,.08)}.context-header,.working-context-banner{display:flex;align-items:center;justify-content:space-between;gap:14px;border:1px solid var(--plotline-line);border-radius:10px;margin-bottom:16px;padding:10px 12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.context-title{display:grid;gap:2px}.context-title strong{color:var(--plotline-ink)}.health-kpi-grid,.analytics-grid-two,.analytics-grid-three{display:grid;gap:14px;margin:18px 0}.health-kpi-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.health-kpi-grid .plain-card{display:grid;gap:4px}.health-kpi-grid strong{color:var(--plotline-ink);font-size:2rem;line-height:1}.analytics-grid-two{grid-template-columns:repeat(2,minmax(0,1fr))}.analytics-grid-three{grid-template-columns:repeat(3,minmax(0,1fr))}.analytics-section{border:1px solid var(--plotline-line);border-radius:10px;margin:18px 0;padding:16px;background:rgba(255,255,255,.84);box-shadow:0 14px 34px rgba(55,48,39,.07)}.analytics-section-heading{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}.analytics-section-heading h2,.plain-card h3{margin:0}.analytics-metric-stack{display:grid;gap:12px;overflow-x:auto;padding-bottom:4px}.metric-shape-chart{display:grid;gap:12px}.metric-shape-intro{max-width:760px;margin:0;color:var(--plotline-muted)}.metric-toggle-row{display:flex;flex-wrap:wrap;gap:8px}.metric-toggle-pill{display:inline-flex;align-items:center;gap:6px;border:1px solid rgba(82,75,65,.16);border-radius:999px;padding:5px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.78);cursor:pointer}.metric-toggle-pill::before{content:"";width:10px;height:10px;border-radius:999px;background:var(--metric-colour)}.metric-toggle-pill input{margin:0;accent-color:var(--metric-colour)}.timeline-metric-edit-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:end}.timeline-metric-edit-select{display:grid;gap:3px;min-width:180px;color:var(--plotline-muted);font-size:.78rem;font-weight:800}.timeline-metric-edit-status{align-self:center;border:1px solid rgba(47,111,99,.18);border-radius:999px;padding:5px 9px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.72)}.timeline-metric-edit-hint{font-size:.82rem}.metric-chart-frame canvas.metric-curve-editing{cursor:ns-resize}.metric-chart-frame{position:relative;min-height:320px;border:1px solid var(--plotline-line);border-radius:10px;padding:14px 12px 32px;background:linear-gradient(180deg,rgba(255,255,255,.92),rgba(247,245,240,.76))}.metric-timeline-frame{width:calc((var(--scene-count)*var(--timeline-scene-width)) + ((var(--scene-count) - 1)*var(--timeline-grid-gap)))}.metric-chart-frame canvas{width:100%;height:300px}.metric-timeline-board .metric-graph-stack{width:max-content;min-width:100%}.metric-timeline-board .metric-graph-row{grid-template-columns:var(--timeline-label-width) repeat(var(--scene-count),var(--timeline-scene-width));gap:var(--timeline-grid-gap);min-width:100%}.metric-timeline-board .metric-graph-points{display:contents}.metric-timeline-board .metric-point{border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(255,255,255,.62)}.metric-raw-details{border-top:1px solid var(--plotline-line);padding-top:8px}.metric-raw-details summary{color:var(--plotline-muted);font-size:.82rem;font-weight:800;cursor:pointer}.timeline-control-panel{display:grid;gap:12px;border:1px solid var(--plotline-line);border-radius:10px;margin-bottom:16px;padding:12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.timeline-filter-drawer summary{color:var(--plotline-ink);font-weight:900;cursor:pointer}.timeline-filter-grid{display:grid;grid-template-columns:repeat(6,minmax(130px,1fr));gap:10px;margin-top:12px}.timeline-filter-checks,.timeline-filter-actions,.timeline-visibility-panel,.timeline-preset-panel,.preset-chip-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}.timeline-filter-checks{grid-column:span 3;color:var(--plotline-muted);font-size:.82rem;font-weight:700}.timeline-filter-actions{grid-column:span 3;justify-content:flex-end}.timeline-visibility-panel label,.preset-chip{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 8px;color:var(--plotline-muted);font-size:.78rem;font-weight:800;background:rgba(255,255,255,.76)}.timeline-preset-panel form{display:inline-flex;align-items:center;gap:6px}.preset-chip a{color:var(--plotline-accent-dark);text-decoration:none}.preset-chip button{border:0;color:var(--plotline-muted);background:transparent;font-weight:900}.timeline-focus-banner{display:flex;align-items:center;justify-content:space-between;gap:12px;border:1px solid rgba(47,111,99,.22);border-radius:10px;margin-bottom:16px;padding:10px 12px;background:rgba(47,111,99,.08)}.thread-marker-icon{display:inline-flex;align-items:center;justify-content:center;min-width:16px;font-size:.78rem;font-weight:900}.thread-marker-type-start .thread-marker-icon,.thread-marker-type-resolve .thread-marker-icon,.thread-marker-type-abandon .thread-marker-icon,.thread-marker-type-twist .thread-marker-icon{font-size:.9rem}.thread-marker-type-start{border-radius:8px 999px 999px 8px}.thread-marker-type-twist{border-color:#b8762b;background:#fff4dc}.thread-marker-type-branch,.thread-marker-type-split,.thread-marker-type-merge{border-color:#6750a4;background:#f0ebff}.thread-marker-type-reveal .thread-marker-icon{border:1px solid currentColor;border-radius:999px;font-size:0}.thread-marker-type-reveal .thread-marker-icon::after{content:"";width:4px;height:4px;border-radius:999px;background:currentColor}.timeline-navigation-card{display:grid;grid-template-areas:"icon copy" "icon actions";grid-template-columns:auto minmax(0,620px);gap:8px 14px;align-items:center;justify-content:center;border:1px solid rgba(47,111,99,.42);border-left:5px solid var(--plotline-accent);border-radius:8px;margin:0 0 12px;padding:14px 16px;max-height:280px;overflow:hidden;color:var(--plotline-ink);background:linear-gradient(135deg,rgba(238,245,242,.98),rgba(255,255,255,.94));box-shadow:0 10px 26px rgba(30,37,43,.08);opacity:1;transform:translateY(0);transition:opacity 1.15s ease,max-height 1.2s ease,margin 1.2s ease,padding 1.2s ease,transform 1.15s ease}.timeline-navigation-card[hidden]{display:none}.timeline-navigation-card.is-dismissing{margin-bottom:0;padding-top:0;padding-bottom:0;max-height:0;opacity:0;transform:translateY(-6px)}.timeline-navigation-card-icon{grid-area:icon;display:grid;place-items:center;width:42px;height:42px;border-radius:50%;color:#fff;background:var(--plotline-accent);font-size:1.25rem;font-weight:900}.timeline-navigation-card-copy{grid-area:copy;text-align:center}.timeline-navigation-card-copy h2{margin:0 0 6px;color:var(--plotline-accent-dark);font-size:1rem;font-weight:900}.timeline-navigation-card-copy p{margin:2px 0;color:var(--plotline-ink);font-size:.9rem}.timeline-navigation-card-actions{grid-area:actions;display:flex;flex-wrap:wrap;gap:8px;justify-content:center}.timeline-horizontal-overflow{transition:box-shadow .18s ease}.timeline-horizontal-overflow.has-scroll-left{box-shadow:inset 18px 0 18px -20px rgba(30,37,43,.55)}.timeline-horizontal-overflow.has-scroll-right{box-shadow:inset -18px 0 18px -20px rgba(30,37,43,.55)}.timeline-horizontal-overflow.has-scroll-left.has-scroll-right{box-shadow:inset 18px 0 18px -20px rgba(30,37,43,.55),inset -18px 0 18px -20px rgba(30,37,43,.55)}[data-theme="dark"] .timeline-navigation-card{border-color:rgba(111,169,155,.52);border-left-color:#6fa99b;color:#f4eadc;background:linear-gradient(135deg,rgba(34,83,74,.72),rgba(32,31,34,.96));box-shadow:0 12px 28px rgba(0,0,0,.28)}[data-theme="dark"] .timeline-navigation-card-copy h2,[data-theme="dark"] .timeline-navigation-card-copy p{color:#f4eadc}[data-theme="dark"] .timeline-horizontal-overflow.has-scroll-left{box-shadow:inset 18px 0 18px -20px rgba(244,234,220,.55)}[data-theme="dark"] .timeline-horizontal-overflow.has-scroll-right{box-shadow:inset -18px 0 18px -20px rgba(244,234,220,.55)}[data-theme="dark"] .timeline-horizontal-overflow.has-scroll-left.has-scroll-right{box-shadow:inset 18px 0 18px -20px rgba(244,234,220,.55),inset -18px 0 18px -20px rgba(244,234,220,.55)}@media(prefers-reduced-motion:reduce){.timeline-navigation-card{transition:opacity .12s ease}}.timeline-scene-card.filter-dim,.timeline-scene-card.focus-dim,.lane-dim{opacity:.35}.timeline-scene-card.focus-match,.timeline-scene-card.filter-match.focus-match{outline:3px solid rgba(47,111,99,.32);box-shadow:0 12px 26px rgba(47,111,99,.16)}.timeline-section-hidden{display:none!important}.hide-scene-cards .timeline-scene-card{display:none}.timeline-control-panel{position:sticky;top:56px;z-index:18}.timeline-control-select{padding-right:6px}.timeline-control-select .form-select{width:auto;min-width:132px;border:0;padding-top:2px;padding-bottom:2px;background-color:transparent;color:var(--plotline-accent-dark);font-weight:800}.timeline-jump-panel{display:grid;grid-template-columns:auto minmax(180px,1.2fr) minmax(180px,1fr) minmax(170px,.9fr) minmax(180px,1fr) auto;gap:8px;align-items:center;width:100%}.timeline-shortcut-hint{color:var(--plotline-muted);font-size:.76rem;font-weight:700;white-space:nowrap}.timeline-minimap{display:flex;align-items:stretch;gap:4px;margin:0 0 12px;padding:8px;max-width:100%;min-width:0;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain;scrollbar-gutter:stable;border:1px solid rgba(47,111,99,.18);border-radius:8px;background:rgba(255,255,255,.72)}.timeline-minimap button{position:relative;flex:0 0 max(42px,calc(var(--chapter-scenes)*18px));min-width:42px;min-height:34px;border:1px solid rgba(47,111,99,.18);border-radius:7px;color:var(--plotline-accent-dark);background:linear-gradient(180deg,#f8fbf9 0%,#edf4f1 100%);font-size:.72rem;font-weight:800}.timeline-minimap button.is-active{border-color:var(--plotline-accent);color:#fff;background:linear-gradient(180deg,var(--plotline-accent) 0%,var(--plotline-accent-dark) 100%);box-shadow:0 0 0 2px rgba(47,111,99,.14)}.timeline-minimap button::after{content:"";position:absolute;right:5px;bottom:5px;width:calc(var(--chapter-warnings)*4px);max-width:28px;height:4px;border-radius:999px;background:#b45c5c;opacity:.75}.timeline-drag-palette,.drag-drop-panel{border:1px solid rgba(47,111,99,.18);border-radius:10px;margin-bottom:12px;padding:12px;background:rgba(255,255,255,.84);box-shadow:0 10px 24px rgba(55,48,39,.05)}.timeline-drag-palette{display:grid;grid-template-columns:minmax(220px,.35fr) minmax(0,1fr);gap:12px;align-items:center}.drag-chip-group{display:flex;flex-wrap:wrap;gap:6px;max-height:104px;overflow:auto;padding-right:4px}.drag-chip{display:inline-flex;align-items:center;border:1px solid var(--plotline-line);border-radius:999px;padding:4px 9px;background:#fff;color:var(--plotline-ink);font-size:.78rem;font-weight:800;cursor:grab}.drag-chip.character{border-color:#dacb9e;background:#fff8e8}.drag-chip.asset{border-color:#ded9ea;background:#f4f0ff}.drag-chip.location{border-color:rgba(47,111,99,.18);background:#eef8f4}.is-dragging{opacity:.55}.drop-target-active{outline:3px solid rgba(47,111,99,.28);outline-offset:2px}.timeline-chapter.chapter-drop-active,.timeline-scenes.drop-chapter-end{background:rgba(47,111,99,.06)}.timeline-scenes.drop-chapter-end::after{content:"Drop scene at end of chapter";display:flex;align-items:center;justify-content:center;min-width:var(--timeline-scene-width);min-height:74px;border:2px dashed rgba(197,139,43,.48);border-radius:12px;color:#7a5527;background:rgba(255,248,232,.82);font-size:.8rem;font-weight:900}.timeline-scene-card.drop-before{box-shadow:inset 5px 0 0 #c58b2b,0 12px 26px rgba(197,139,43,.16)}.timeline-scene-card.drop-after{box-shadow:inset -5px 0 0 #c58b2b,0 12px 26px rgba(197,139,43,.16)}.drag-drop-panel{position:sticky;top:132px;z-index:19}.drag-drop-panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.drag-drop-panel h2{margin:0;font-size:1.08rem}.drag-drop-form{border-top:1px solid var(--plotline-line);margin-top:10px;padding-top:10px}.scene-move-modal-content{border:1px solid rgba(47,111,99,.18);border-radius:14px;background:var(--plotline-surface);color:var(--plotline-ink);box-shadow:0 24px 70px rgba(55,48,39,.22)}.scene-move-modal-content .modal-header,.scene-move-modal-content .modal-footer{border-color:var(--plotline-line)}.scene-move-modal-content .modal-title{margin:0;color:var(--plotline-ink);font-size:1.2rem;font-weight:900}.scene-move-summary{margin:0 0 12px;color:var(--plotline-ink);font-size:1rem;font-weight:800}[data-theme="dark"] .scene-move-modal-content{background:#201f22;color:#f4eadc;border-color:rgba(244,234,220,.16);box-shadow:0 24px 70px rgba(0,0,0,.55)}[data-theme="dark"] .scene-move-modal-content .modal-title,[data-theme="dark"] .scene-move-summary{color:#f4eadc}[data-theme="dark"] .scene-move-modal-content .modal-header,[data-theme="dark"] .scene-move-modal-content .modal-footer{border-color:rgba(244,234,220,.14)}[data-theme="dark"] .scene-move-modal-content .btn-close{filter:invert(1) grayscale(100%)}.plain-preview{border:1px solid rgba(197,139,43,.28);border-radius:8px;margin:10px 0 0;padding:8px 10px;color:#5e4518;background:#fff8e8;font-size:.86rem;font-weight:800}.drag-check-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 10px;color:var(--plotline-muted);font-size:.82rem;font-weight:700}.timeline-section-header,.lane-board-heading,.pacing-heading{position:sticky;left:0;z-index:6}.timeline-section-header{display:flex;align-items:center;justify-content:space-between;gap:10px;width:calc(var(--timeline-label-width) + (var(--scene-count)*var(--timeline-scene-width)) + (var(--scene-count)*var(--timeline-grid-gap)));min-width:100%;margin-bottom:10px;border-radius:8px;padding:8px 10px;background:rgba(255,255,255,.92);box-shadow:0 8px 16px rgba(30,37,43,.05)}.timeline-section-header button,.lane-board-heading button,.plot-lane-board-heading button,.pacing-heading button,.lane-group-heading{border:0;padding:0;color:var(--plotline-accent-dark);background:transparent;font:inherit;font-weight:900;text-align:left}.timeline-section-header button::before,.lane-board-heading button::before,.plot-lane-board-heading button::before,.pacing-heading button::before,.lane-group-heading::before{content:"v";display:inline-block;margin-right:6px;color:var(--plotline-muted);font-size:.72rem}.timeline-section-header button.is-collapsed::before,.lane-board-heading button.is-collapsed::before,.plot-lane-board-heading button.is-collapsed::before,.pacing-heading button.is-collapsed::before,.lane-group-heading.is-collapsed::before{content:">"}.lane-group{display:grid;gap:7px}.character-lane-group-body{display:grid;gap:7px}.lane-group-heading{position:sticky;left:0;z-index:6;width:var(--timeline-label-width);border-top:1px solid rgba(47,111,99,.12);padding:7px 8px 2px;color:var(--plotline-muted);background:rgba(247,250,248,.96);font-size:.78rem;text-transform:uppercase}.timeline-section-collapsed{display:none!important}.timeline-chapter-title{position:sticky;top:0;z-index:5;background:rgba(238,245,242,.96);backdrop-filter:blur(6px)}.scene-pov-label,.metric-mini-summary{display:inline-flex;width:fit-content;border-radius:999px;padding:2px 7px;font-size:.72rem;font-weight:800}.scene-pov-label{color:#514018;background:#fff3d3}.metric-mini-summary{color:var(--plotline-accent-dark);background:rgba(47,111,99,.08)}.scene-overview-panel{display:none;gap:8px;margin-top:4px}.scene-overview-section{display:grid;gap:4px}.scene-overview-label{color:var(--plotline-muted);font-size:.68rem;font-weight:900;letter-spacing:.06em;text-transform:uppercase}.scene-overview-chip-row{display:flex;flex-wrap:wrap;gap:5px;min-width:0}.scene-overview-chip,.scene-overview-empty,.scene-overview-brief{display:inline-flex;width:fit-content;max-width:100%;border-radius:999px;padding:3px 8px;background:rgba(47,111,99,.08);color:var(--plotline-ink);font-size:.72rem;font-weight:750;line-height:1.25;overflow-wrap:anywhere}.scene-overview-chip.is-pov{border:1px solid rgba(197,139,43,.38);background:#fff3d3}.scene-overview-chip.is-important{border:1px solid rgba(103,80,164,.3);background:#f0edf8}.scene-overview-chip.is-more,.scene-overview-empty{color:var(--plotline-muted);background:rgba(102,113,123,.08)}.scene-overview-brief{display:block;width:auto;border-radius:8px;background:rgba(255,255,255,.62);color:var(--plotline-muted);font-weight:600}.timeline-scene-card.search-hit,.timeline-scene-card.keyboard-focus{outline:3px solid rgba(197,139,43,.34);box-shadow:0 12px 26px rgba(197,139,43,.16)}.timeline-scene-card.search-dim{opacity:.28}.thread-marker,.asset-marker,.character-marker{transition:transform .12s ease,box-shadow .12s ease}.thread-marker:hover,.asset-marker:hover,.character-marker:hover{transform:translateY(-1px);box-shadow:0 6px 12px rgba(30,37,43,.12)}.timeline-filtered-root.density-compact{--timeline-scene-width:170px;--timeline-grid-gap:6px}.timeline-filtered-root.density-expanded{--timeline-scene-width:280px;--timeline-grid-gap:14px}.timeline-filtered-root.density-compact .timeline-scene-card,.timeline-filtered-root.zoom-book .timeline-scene-card{gap:4px;padding:9px}.timeline-filtered-root.density-compact .scene-summary,.timeline-filtered-root.density-compact .purpose-chip-row,.timeline-filtered-root.density-compact .metric-mini-summary,.timeline-filtered-root.zoom-book .scene-summary,.timeline-filtered-root.zoom-book .purpose-chip-row,.timeline-filtered-root.zoom-book .metric-mini-summary,.timeline-filtered-root.zoom-book .location-pill,.timeline-filtered-root.zoom-book .scene-pov-label{display:none}.timeline-filtered-root.zoom-book{--timeline-scene-width:150px;--timeline-grid-gap:6px}.timeline-filtered-root.zoom-scene-detail{--timeline-scene-width:300px}.timeline-filtered-root.zoom-scene-detail .scene-summary{-webkit-line-clamp:7}.timeline-filtered-root.zoom-scene-overview{--timeline-scene-width:380px}.timeline-filtered-root.zoom-scene-overview .timeline-scenes{min-height:320px}.timeline-filtered-root.zoom-scene-overview .timeline-scene-card{gap:8px;padding:14px}.timeline-filtered-root.zoom-scene-overview .scene-summary{display:none}.timeline-filtered-root.zoom-scene-overview .scene-overview-panel{display:grid}.timeline-filtered-root.density-expanded .timeline-scenes{min-height:230px}.timeline-control-panel{position:relative;top:auto;z-index:4;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px;padding:8px;box-shadow:none}.timeline-filter-drawer,.timeline-control-group{border:1px solid var(--plotline-line);border-radius:999px;background:rgba(255,255,255,.82)}.timeline-filter-drawer[open],.timeline-control-group[open]{border-radius:10px;flex-basis:100%}.timeline-filter-drawer summary,.timeline-control-group summary{min-width:max-content;padding:5px 10px;color:var(--plotline-accent-dark);font-size:.82rem;font-weight:900;cursor:pointer;list-style:none}.timeline-filter-drawer summary::-webkit-details-marker,.timeline-control-group summary::-webkit-details-marker,.timeline-drag-palette summary::-webkit-details-marker{display:none}.timeline-filter-drawer summary::after,.timeline-control-group summary::after,.timeline-drag-palette summary::after{content:" v";color:var(--plotline-muted);font-size:.72rem}.timeline-filter-drawer[open] summary::after,.timeline-control-group[open] summary::after,.timeline-drag-palette[open] summary::after{content:" ^"}.timeline-filter-grid{grid-template-columns:repeat(auto-fit,minmax(145px,1fr));gap:8px;max-height:min(48vh,430px);overflow:auto;padding:0 10px 10px}.timeline-filter-grid .form-label{margin-bottom:2px;font-size:.72rem;font-weight:800}.timeline-filter-checks,.timeline-filter-actions{grid-column:1/-1}.timeline-visibility-panel,.timeline-jump-panel,.timeline-preset-panel{padding:0 10px 10px}.timeline-jump-panel{grid-template-columns:minmax(180px,1.5fr) repeat(3,minmax(150px,1fr))}.timeline-shortcut-hint{grid-column:1/-1}.timeline-preset-panel form{flex-wrap:nowrap}.timeline-preset-panel .form-control{width:150px}.timeline-preset-panel .btn,.timeline-filter-actions .btn{white-space:nowrap}.timeline-drag-palette{display:block;margin-bottom:8px;padding:7px 9px;box-shadow:none}.timeline-drag-palette summary{color:var(--plotline-accent-dark);font-size:.82rem;font-weight:900;cursor:pointer}.timeline-drag-palette .drag-chip-group{margin-top:8px}.drag-drop-panel{position:relative;top:auto;z-index:9;box-shadow:0 12px 28px rgba(30,37,43,.08)}.timeline-filtered-root,.timeline-filtered-root.density-compact,.timeline-filtered-root.zoom-book{--timeline-scene-width:220px;--timeline-grid-gap:10px}.timeline-filtered-root.density-expanded,.timeline-filtered-root.zoom-scene-detail{--timeline-scene-width:290px}.timeline-filtered-root.density-compact.zoom-book{--timeline-scene-width:200px}.timeline-chapter,.timeline-scene-card,.timeline-empty-scene{overflow-wrap:normal;word-break:normal}.timeline-scene-card strong,.timeline-chapter-title strong,.plot-lane-label strong,.asset-lane-label strong,.character-lane-label strong{min-width:0;white-space:normal;word-break:normal;overflow-wrap:break-word}.timeline-scene-card{cursor:grab}.timeline-scene-card:active,.drag-chip:active,[draggable="true"]:active{cursor:grabbing}body.drag-active .timeline-scene-card,body.dragging-asset [data-asset-drop-target],body.dragging-location [data-drag-type="location"]{transition:outline-color .12s ease,box-shadow .12s ease,opacity .12s ease}body.dragging-character .timeline-scene-card,body.dragging-asset .timeline-scene-card,body.dragging-scene .timeline-scene-card,body.dragging-scene .timeline-scenes[data-chapter-drop-target],body.dragging-asset [data-asset-drop-target],body.dragging-location [data-drag-type="location"]{outline:1px dashed rgba(47,111,99,.22);outline-offset:2px}.is-dragging{opacity:.42;transform:scale(.98)}.drop-target-active{outline:3px solid rgba(47,111,99,.42)!important;outline-offset:3px}.analytics-metric-row{display:grid;grid-template-columns:170px minmax(560px,1fr);gap:12px;align-items:stretch}.analytics-metric-label{display:flex;align-items:center;border-right:1px solid var(--plotline-line);color:var(--plotline-muted);font-weight:800}.analytics-sparkline{display:grid;grid-template-columns:repeat(var(--point-count),minmax(28px,1fr));align-items:end;gap:5px;min-height:88px;border-bottom:1px solid rgba(47,111,99,.25);padding-top:10px}.analytics-bar{position:relative;display:flex;align-items:end;justify-content:center;min-height:12px;height:max(12px,var(--bar-height));border-radius:6px 6px 2px 2px;color:var(--plotline-accent-dark);text-decoration:none;background:linear-gradient(180deg,rgba(47,111,99,.58),rgba(47,111,99,.18))}.analytics-bar:hover{background:linear-gradient(180deg,rgba(47,111,99,.82),rgba(47,111,99,.28))}.analytics-bar span{position:absolute;bottom:calc(100% + 3px);color:var(--plotline-muted);font-size:.68rem;font-weight:800}.analytics-list-item,.analytics-link-row,.analytics-count-row,.purpose-stat-row{border-top:1px solid var(--plotline-line);padding:9px 0}.analytics-list-item{display:grid;gap:3px}.analytics-list-item p{margin:0}.analytics-link-row,.analytics-count-row{display:flex;align-items:center;justify-content:space-between;gap:12px}.analytics-link-row{color:inherit;text-decoration:none}.analytics-link-row:hover{color:var(--plotline-accent-dark)}.analytics-link-row span,.analytics-link-row strong{min-width:0}.purpose-stat-row{display:grid;grid-template-columns:minmax(120px,1fr) minmax(90px,1.5fr) 42px;align-items:center;gap:10px}.purpose-stat-bar{overflow:hidden;height:8px;border-radius:999px;background:rgba(47,111,99,.08)}.purpose-stat-bar span{display:block;height:100%;border-radius:inherit;background:var(--plotline-accent)}.story-bible-heading{align-items:end}.story-bible-search{display:flex;gap:8px;min-width:min(100%,420px)}.story-bible-search .form-control{min-width:0}.story-bible-nav{position:sticky;top:72px;z-index:4;display:flex;flex-wrap:wrap;gap:8px;margin:0 0 18px;padding:10px;border:1px solid var(--plotline-line);border-radius:12px;background:rgba(250,249,246,.92);backdrop-filter:blur(10px)}.story-bible-nav a,.story-bible-actions a{display:inline-flex;align-items:center;border-radius:999px;padding:6px 10px;background:rgba(47,111,99,.08);color:var(--plotline-ink);font-size:.86rem;font-weight:650;text-decoration:none}.story-bible-nav a:hover,.story-bible-actions a:hover{background:rgba(47,111,99,.16)}.story-bible-section{margin:0 0 28px}.story-bible-section-heading{display:flex;align-items:end;justify-content:space-between;gap:16px;margin-bottom:12px}.story-bible-section-heading h2{margin:0}.soft-count{color:var(--plotline-muted);font-size:.9rem;font-weight:650;white-space:nowrap}.story-bible-grid,.story-bible-search-results{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}.story-bible-grid-compact{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}.story-bible-card{border:1px solid var(--plotline-line);border-radius:14px;padding:14px;background:rgba(255,255,255,.86);box-shadow:0 14px 34px rgba(36,32,26,.06)}.story-bible-card h3{margin:0 0 8px;font-size:1.05rem}.story-bible-card h4{margin:14px 0 8px;font-size:.96rem}.story-bible-card p{color:var(--plotline-muted)}.story-bible-card-title{display:flex;align-items:start;justify-content:space-between;gap:10px}.story-bible-card-title span{border:1px solid var(--plotline-line);border-radius:999px;padding:3px 8px;background:rgba(250,249,246,.9);color:var(--plotline-muted);font-size:.78rem;font-weight:700;white-space:nowrap}.story-bible-meta{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}.story-bible-meta span{border-radius:999px;padding:4px 8px;background:rgba(36,32,26,.05);color:var(--plotline-muted);font-size:.78rem;font-weight:650}.story-bible-facts{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:6px 10px;margin:12px 0}.story-bible-facts dt{color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.story-bible-facts dd{margin:0;min-width:0;overflow-wrap:anywhere}.story-bible-actions{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.story-bible-link-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.story-bible-link-list li{display:grid;gap:2px;padding:8px 0;border-bottom:1px solid rgba(36,32,26,.08)}.story-bible-link-list li:last-child{border-bottom:0}.story-bible-link-list span{color:var(--plotline-muted);font-size:.88rem}.story-bible-timeline-summary{display:grid;gap:14px}.story-bible-wide-card{max-width:none}.story-bible-chapter-summary{border-top:1px solid var(--plotline-line);padding-top:8px}.story-bible-scene-summary{display:grid;grid-template-columns:minmax(220px,1.5fr) repeat(3,minmax(120px,.8fr));gap:8px;padding:9px 0;border-top:1px solid rgba(36,32,26,.08)}.story-bible-scene-summary p{grid-column:1/-1;margin:0}.story-bible-scene-summary span{color:var(--plotline-muted);font-size:.88rem}.attention-list{display:grid;gap:10px}.attention-list article{display:grid;grid-template-columns:max-content minmax(0,1fr) auto;align-items:center;gap:10px;border:1px solid var(--plotline-line);border-radius:12px;padding:10px 12px;background:rgba(255,255,255,.82)}.attention-list p{grid-column:2/-1;margin:0;color:var(--plotline-muted)}.writer-workspace-form,.writer-add-form,.writer-edit-form,.chapter-goal-form{display:grid;gap:10px}.writer-checkbox-grid{display:flex;flex-wrap:wrap;gap:8px 14px}.writer-checkbox-grid label{display:inline-flex;align-items:center;gap:6px;color:var(--plotline-muted);font-size:.86rem;font-weight:650}.writer-priority-control{display:grid;grid-template-columns:minmax(0,1fr) max-content;align-items:center;gap:12px}.writer-priority-control .form-range{min-width:0}.writer-note-list,.writer-queue-list{display:grid;gap:10px}.writer-mini-card{border:1px solid var(--plotline-line);border-radius:12px;padding:10px;background:rgba(255,255,255,.72)}.writer-mini-card summary{display:flex;align-items:center;gap:8px;cursor:pointer}.writer-mini-card summary strong{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-card-list{display:grid;gap:10px}.attachment-summary{align-items:center}.attachment-kind{border-radius:999px;padding:3px 8px;background:rgba(47,111,99,.1);color:var(--plotline-accent);font-size:.76rem;font-weight:800;text-transform:uppercase}.attachment-card-body{display:grid;gap:6px;margin-top:10px}.attachment-card-body p{margin:0}.attachment-add-card{margin-top:10px}.writer-checklist{display:grid;gap:6px}.writer-checklist-row,.writer-add-inline{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px}.writer-remove-inline{display:flex;justify-content:end;margin:-2px 0 4px}.writer-dashboard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin-bottom:26px}.writer-dashboard-panel{border:1px solid var(--plotline-line);border-radius:14px;padding:14px;background:rgba(255,255,255,.7);box-shadow:0 14px 34px rgba(36,32,26,.05)}.writer-queue-card{border:1px solid var(--plotline-line);border-radius:12px;padding:12px;background:rgba(255,255,255,.9)}.writer-queue-card h3{margin:0;font-size:1rem}.writer-queue-card p{margin:8px 0 0;color:var(--plotline-muted)}.writer-queue-title{display:flex;align-items:start;justify-content:space-between;gap:12px}.writer-kpi{display:block;color:var(--plotline-accent);font-size:2.2rem;line-height:1}.export-action-row{margin:-8px 0 18px}.dynamics-timeline{position:relative;min-height:128px;border:1px solid var(--plotline-line);border-radius:14px;background:linear-gradient(180deg,rgba(47,111,99,.07),rgba(255,255,255,.84));overflow:hidden}.dynamics-timeline::before{content:"";position:absolute;left:12px;right:12px;top:64px;height:1px;background:rgba(36,32,26,.18)}.dynamics-marker{position:absolute;bottom:18px;width:12px;height:86px;transform:translateX(-50%);display:flex;align-items:end;justify-content:center}.dynamics-marker span{display:block;width:8px;min-height:12px;max-height:82px;border-radius:999px;background:var(--plotline-accent);box-shadow:0 8px 20px rgba(47,111,99,.22)}.dynamics-marker.pov span{background:#8a4b2f}.dynamics-timeline.relationship .dynamics-marker span{background:#7c5fb0}.scenario-banner{display:flex;justify-content:space-between;gap:18px;align-items:flex-start;border:1px solid rgba(103,80,164,.22);border-radius:12px;padding:16px;margin-bottom:16px;background:linear-gradient(135deg,rgba(103,80,164,.1),rgba(255,255,255,.86));box-shadow:0 12px 28px rgba(36,32,26,.08)}.scenario-banner h1{margin:0 0 4px}.scenario-banner p{margin:0;color:var(--plotline-muted)}.scenario-card{border-color:rgba(103,80,164,.18)}.scenario-warning-strip{display:flex;gap:10px;align-items:center;border:1px solid var(--plotline-line);border-radius:10px;padding:10px 12px;margin-bottom:14px;background:rgba(255,255,255,.76);color:var(--plotline-muted)}.scenario-warning-strip strong{color:var(--plotline-ink)}.scenario-board{border:1px solid var(--plotline-line);border-radius:12px;padding:12px;background:rgba(247,245,240,.74);overflow:hidden;margin-bottom:18px}.scenario-scroll{display:flex;gap:14px;overflow-x:auto;padding-bottom:8px}.scenario-chapter{min-width:360px;max-width:520px;border:1px solid rgba(82,75,65,.14);border-radius:10px;background:rgba(255,255,255,.86)}.scenario-chapter header{display:grid;gap:2px;border-bottom:1px solid var(--plotline-line);padding:10px 12px}.scenario-chapter header span{color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.scenario-scene-row{display:grid;gap:10px;padding:10px}.scenario-scene-card{display:grid;gap:8px;border:1px solid rgba(82,75,65,.12);border-radius:9px;padding:10px;background:#fff}.scenario-scene-title{display:grid;gap:2px}.scenario-scene-title span,.scenario-mini-data{color:var(--plotline-muted);font-size:.78rem}.scenario-mini-data{display:grid;gap:2px}.scenario-move-actions,.scenario-chapter-form,.scenario-compare-list article{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.scenario-chapter-form select{min-width:160px;width:auto}.scenario-compare-list{display:grid;gap:10px}.scenario-compare-list article{justify-content:space-between;border:1px solid var(--plotline-line);border-radius:9px;padding:10px;background:rgba(255,255,255,.82)}.danger-zone{border-color:rgba(163,61,61,.24)}.archive-filter-form{align-items:end}.archive-item-list{display:grid;gap:10px}.archive-item-card{display:flex;justify-content:space-between;gap:14px;align-items:center;border:1px solid var(--plotline-line);border-radius:10px;padding:12px;background:rgba(255,255,255,.82)}.archive-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-items:end}.delete-forever-form{display:inline-flex;margin:0}.archive-item-card h3{margin:4px 0}.archived-badge{display:inline-flex;border:1px solid rgba(82,75,65,.16);border-radius:999px;padding:2px 8px;color:var(--plotline-muted);font-size:.72rem;font-weight:800;text-transform:uppercase;background:rgba(247,245,240,.86)}.restore-button{white-space:nowrap}.archive-button-form{display:inline-flex;align-items:center;margin:0}.acceptance-summary-grid{display:grid;grid-template-columns:repeat(3,minmax(160px,1fr));gap:12px;margin-bottom:16px}.acceptance-summary{display:grid;gap:4px;padding:16px}.acceptance-summary strong{font-size:2rem;line-height:1}.acceptance-summary.pass{border-left:5px solid #4d7654}.acceptance-summary.review{border-left:5px solid #b8762b}.acceptance-summary.blocked{border-left:5px solid #963f36}.acceptance-check-list{display:grid;gap:14px}.acceptance-area{border:1px solid var(--plotline-line);border-radius:10px;padding:12px;background:rgba(255,255,255,.62)}.acceptance-area h3{margin:0 0 10px;font-size:1.05rem}.acceptance-check-items{display:grid;gap:8px}.acceptance-check-item{display:grid;grid-template-columns:92px minmax(0,1fr);gap:10px;align-items:start;border:1px solid rgba(82,75,65,.12);border-radius:8px;padding:10px;background:rgba(255,255,255,.74)}.acceptance-check-item p{margin:2px 0 0;color:var(--plotline-muted)}.acceptance-status{display:inline-flex;justify-content:center;width:fit-content;min-width:74px;border-radius:999px;padding:3px 9px;font-size:.72rem;font-weight:900;text-transform:uppercase}.acceptance-check-item.pass .acceptance-status{color:#24512b;background:#e6f4e7}.acceptance-check-item.review .acceptance-status{color:#7b4b13;background:#fbecd3}.acceptance-check-item.blocked .acceptance-status{color:#7a2222;background:#fff0f0}.plotline-confirm-modal .modal-title{color:var(--plotline-ink)}.plotline-confirm-modal .modal-body p{white-space:pre-line}.delete-confirm-field{border:1px solid rgba(163,61,61,.22);border-radius:8px;padding:12px;background:rgba(255,247,244,.7)}@media print{header,.breadcrumb-trail,.context-header,.button-row,.story-bible-nav{display:none!important}.plotline-shell{max-width:none;padding:0}}@media(max-width:760px){.plotline-shell{padding-left:14px;padding-right:14px}.page-heading{display:block}.page-heading .button-row,.timeline-filter{margin-top:14px}.timeline-filter{align-items:stretch;flex-direction:column}.timeline-navigation-card{grid-template-areas:"copy" "actions";grid-template-columns:1fr}.timeline-navigation-card-icon{display:none}.timeline-navigation-card-actions{justify-content:center}.story-bible-search,.story-bible-section-heading{align-items:stretch;flex-direction:column}.story-bible-scene-summary,.attention-list article{grid-template-columns:1fr}.writer-dashboard-grid{grid-template-columns:1fr}.writer-checklist-row,.writer-add-inline{grid-template-columns:1fr}.trial-status-panel--signup,.trial-status-panel__heading,.trial-dashboard-banner{align-items:stretch;flex-direction:column}.trial-dashboard-banner__actions,.trial-dashboard-banner__actions .btn,.trial-status-panel--signup .btn{width:100%}.attention-list p{grid-column:auto}}@media(max-width:900px){.workspace-layout,.workspace-layout.inspector-drawer-open{grid-template-columns:1fr;gap:14px}.timeline-inspector-resizer{display:none}.scene-inspector-panel{position:static;max-height:none;overflow:visible}.scene-inspector-body{max-height:none;overflow:visible}}@media(max-width:1100px){.metric-graph-row{grid-template-columns:1fr}.health-kpi-grid,.analytics-grid-two,.analytics-grid-three{grid-template-columns:1fr}.analytics-metric-row{grid-template-columns:1fr}.analytics-metric-label{border-right:0}}.floor-plan-list{display:grid;gap:12px}.floor-plan-list-item{align-items:center;border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:flex;justify-content:space-between;gap:16px;padding:14px}.floor-plan-list-item h2{font-size:1.05rem;margin:0 0 4px}.floor-plan-list-item p{margin:0}.floor-plan-tools{display:grid;gap:14px}.floor-plan-meta-wide{max-width:none}.floor-plan-tabs{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:12px}.floor-plan-tab{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:999px;color:inherit;padding:6px 12px}.floor-plan-tab.active{background:var(--bs-primary,#2f6f63);border-color:var(--bs-primary,#2f6f63);color:#fff}.floor-plan-layout{display:grid;gap:16px;grid-template-columns:minmax(0,1fr) minmax(320px,360px)}.floor-plan-editor--occupancy .floor-plan-layout{grid-template-columns:minmax(0,1fr)}.floor-plan-editor-toolbar{background:rgba(255,255,255,.92);border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:grid;gap:10px;margin-bottom:12px;padding:10px 12px;position:sticky;top:10px;z-index:20}.floor-plan-toolbar-main,.floor-plan-toolbar-floor-group,.floor-plan-toolbar-control-group,.floor-plan-toolbar-action-group,.floor-plan-occupancy-scene-row{align-items:center;display:flex;flex-wrap:wrap;gap:10px}.floor-plan-toolbar-main{justify-content:space-between}.scene-editor-v2-workspace{max-width:none;width:100%;padding:0;border:0;background:transparent;box-shadow:none}.scene-inspector-v2{position:relative;display:grid;gap:14px;color:var(--plotline-ink)}.scene-inspector-v2-edit{--scene-editor-width:520px;padding-bottom:16px}.scene-inspector-v2-edit.editor-overlay-open{display:grid;grid-template-columns:minmax(0,1fr) 10px minmax(400px,min(var(--scene-editor-width),46%));align-items:stretch;gap:12px;height:clamp(480px,calc(100vh - 240px),820px);min-height:0}.scene-inspector-v2-summary-pane{display:grid;gap:12px;min-width:0}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-v2-summary-pane{min-height:0;overflow:auto;padding-right:2px}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-v2-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.scene-inspector-v2-timeline{min-height:100%}.scene-inspector-v2-timeline.editor-overlay-open{height:clamp(380px,calc(100vh - 190px),680px);min-height:0;overflow:hidden}.scene-inspector-v2-grid{display:grid;align-items:stretch;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.scene-inspector-v2-edit .scene-inspector-v2-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.scene-inspector-v2-stack{display:grid;gap:12px}.scene-inspector-v2-health{display:grid;grid-template-columns:repeat(7,minmax(110px,1fr));gap:8px}.scene-inspector-v2-health>div,.scene-inspector-v2-card,.scene-inspector-editor-overlay{border:1px solid var(--plotline-line);background:var(--plotline-panel);border-radius:8px;box-shadow:0 8px 24px rgba(30,37,43,.06)}.scene-inspector-v2-health>div{min-width:0;padding:10px 12px}.scene-inspector-v2-health span,.scene-inspector-v2-section>span,.scene-inspector-v2-counts span,.scene-inspector-v2-summary>span,.scene-inspector-v2-facts dt{display:block;color:var(--plotline-muted);font-size:.72rem;font-weight:800;text-transform:uppercase}.scene-inspector-v2-health strong{display:block;overflow:hidden;color:var(--plotline-ink);font-size:.94rem;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-health .attention strong,.scene-inspector-v2-counts .attention strong{color:var(--plotline-danger,#b35f3b)}.scene-inspector-v2-card{display:grid;align-content:start;gap:14px;height:100%;min-width:0;padding:16px}.scene-inspector-v2-edit .scene-inspector-v2-card{gap:10px;padding:14px}.scene-inspector-v2-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-inspector-v2-card-header>div:first-child{min-width:0}.scene-inspector-v2-card-header h3{margin:0;font-size:1.08rem;line-height:1.25}.scene-inspector-v2-heading,.scene-inspector-editor-title-row{display:flex;align-items:center;gap:6px;min-width:0}.scene-inspector-v2-heading h3,.scene-inspector-editor-title-row h3{min-width:0}.scene-inspector-v2-heading .plotline-help-icon-wrapper{flex:0 0 auto}.scene-inspector-v2-edit .scene-inspector-v2-card-header{gap:10px}.scene-inspector-v2-edit .scene-inspector-v2-card-header h3{font-size:1rem}.scene-inspector-v2-card p{margin:0}.scene-inspector-v2-facts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0}.scene-inspector-v2-facts div{min-width:0}.scene-inspector-v2-facts dd{margin:2px 0 0;overflow-wrap:anywhere}.scene-inspector-v2-summary,.scene-inspector-v2-section{display:grid;gap:6px}.scene-inspector-v2-edit .scene-inspector-v2-summary,.scene-inspector-v2-edit .scene-inspector-v2-section{gap:5px}.scene-inspector-v2-chip-row,.scene-inspector-v2-actions{display:flex;flex-wrap:wrap;gap:7px}.scene-inspector-v2-edit .scene-inspector-v2-actions{gap:6px}.scene-inspector-v2-edit .scene-inspector-v2-actions .btn{padding:.22rem .5rem}.scene-inspector-v2-card-header .scene-inspector-v2-actions{flex:0 0 auto;justify-content:flex-end;max-width:100%}.scene-inspector-v2-card-header .scene-inspector-v2-action-menu{flex-wrap:nowrap;max-width:100%}.scene-inspector-v2-card-header .scene-inspector-v2-action-menu .btn{white-space:nowrap}.scene-inspector-v2-action-menu .dropdown-menu{min-width:11rem}.scene-inspector-v2-action-menu .dropdown-item{font-size:.86rem}.scene-inspector-v2-chip-row span{border:1px solid rgba(47,111,99,.18);border-radius:999px;background:rgba(47,111,99,.08);padding:3px 9px;color:var(--plotline-accent-dark);font-size:.82rem;font-weight:800}.scene-inspector-v2-metrics,.scene-inspector-v2-counts{display:grid;gap:8px}.scene-inspector-v2-metrics{grid-template-columns:1fr}.scene-inspector-v2-counts{grid-template-columns:repeat(auto-fit,minmax(72px,1fr))}.scene-inspector-v2-metrics>div,.scene-inspector-v2-counts>div{min-width:0;border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.05);padding:9px 10px}.scene-inspector-v2-edit .scene-inspector-v2-metrics>div,.scene-inspector-v2-edit .scene-inspector-v2-counts>div{padding:7px 8px}.scene-inspector-v2-metrics span{display:block;overflow:hidden;color:var(--plotline-muted);font-size:.78rem;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-metrics strong,.scene-inspector-v2-counts strong{display:block;color:var(--plotline-ink);font-size:1rem}.scene-inspector-v2-list{display:grid;gap:7px;margin:0;padding:0;list-style:none}.scene-inspector-v2-edit .scene-inspector-v2-list{gap:5px}.scene-inspector-v2-list li{display:flex;align-items:baseline;justify-content:space-between;gap:10px;border-bottom:1px solid rgba(47,111,99,.1);padding-bottom:6px}.scene-inspector-v2-edit .scene-inspector-v2-list li{padding-bottom:5px}.scene-inspector-v2-list li:last-child{border-bottom:0;padding-bottom:0}.scene-inspector-v2-list span{color:var(--plotline-muted);font-size:.82rem;text-align:right}.scene-inspector-v2-character-list,.scene-inspector-v2-compact-list{display:grid;gap:7px;margin:0;padding:0;list-style:none}.scene-inspector-v2-character-list li{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:9px;min-width:0}.scene-inspector-v2-character-list strong,.scene-inspector-v2-character-list span{display:block}.scene-inspector-v2-character-list div{min-width:0}.scene-inspector-v2-character-list div span{color:var(--plotline-muted);font-size:.8rem}.scene-inspector-v2-character-list .visual-avatar{width:34px}.scene-inspector-v2-character-list .visual-avatar>span{display:flex;align-items:center;justify-content:center;width:100%;height:100%;line-height:1}.scene-inspector-v2-avatar-pov{box-shadow:0 0 0 2px rgba(47,111,99,.24)}.scene-inspector-v2-mini-badge{border:1px solid rgba(47,111,99,.2);border-radius:999px;background:var(--plotline-soft);color:var(--plotline-accent-dark);padding:2px 7px;font-size:.7rem;font-weight:800}.scene-inspector-v2-preview-stack{display:grid;gap:8px}.scene-inspector-v2-preview-group{border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.04);padding:8px 10px}.scene-inspector-v2-preview-group summary{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-accent-dark);cursor:pointer;font-size:.82rem;font-weight:800}.scene-inspector-v2-preview-group summary span{color:var(--plotline-muted);font-size:.76rem}.scene-inspector-v2-preview-group[open] summary{margin-bottom:7px}.scene-inspector-v2-compact-list li{min-width:0;color:var(--plotline-ink);font-size:.88rem;overflow-wrap:anywhere}.scene-inspector-v2-compact-list li::before{content:"";display:inline-block;width:5px;height:5px;margin-right:7px;border-radius:999px;background:rgba(47,111,99,.42);vertical-align:middle}.scene-inspector-v2-compact-list a{color:var(--plotline-accent-dark);font-weight:700}.scene-inspector-v2-suggestion-strip,.scene-inspector-v2-good-state,.scene-inspector-v2-warning-state{border-radius:8px;padding:8px 10px}.scene-inspector-v2-suggestion-strip{display:flex;align-items:center;gap:8px;border:1px solid rgba(197,139,43,.24);background:rgba(197,139,43,.1)}.scene-inspector-v2-suggestion-strip strong{color:#805815;font-size:1rem}.scene-inspector-v2-suggestion-strip span{color:var(--plotline-muted);font-size:.86rem;font-weight:700}.scene-inspector-v2-good-state{border:1px solid rgba(47,111,99,.16);background:rgba(47,111,99,.07);color:var(--plotline-accent-dark);font-weight:800}.scene-inspector-v2-good-state::before{content:"✓";margin-right:7px}.scene-inspector-v2-warning-state{border:1px solid rgba(179,95,59,.22);background:rgba(179,95,59,.1);color:var(--plotline-danger,#b35f3b);font-weight:800}.scene-inspector-v2-metric-row{display:grid;grid-template-columns:minmax(130px,180px) minmax(0,1fr) auto;align-items:center;gap:6px}.scene-inspector-v2-metric-row>span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.scene-inspector-v2-metric-track{display:flex;align-items:stretch;width:100%;height:8px;overflow:hidden;border:0;border-radius:999px;background:rgba(47,111,99,.12);padding:0}.scene-inspector-v2-metric-track i{display:block;width:var(--metric-percent);min-width:4px;border-radius:inherit;background:linear-gradient(90deg,#6fa99b,var(--plotline-accent-dark))}.scene-inspector-v2-callout{border-left:4px solid var(--plotline-warning,#c58b2b);border-radius:8px;background:rgba(197,139,43,.1);padding:10px 12px}.scene-overview-v2-header{align-items:flex-start}.scene-overview-v2-controls{display:flex;flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end;gap:6px}.scene-overview-v2-facts{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 10px}.scene-overview-v2-facts div:nth-child(3),.scene-overview-v2-summary{grid-column:1/-1}.scene-overview-v2-summary p{display:-webkit-box;overflow:hidden;-webkit-line-clamp:3;-webkit-box-orient:vertical}.scene-inspector-editor-overlay{position:absolute;inset:0;z-index:4;display:grid;grid-template-rows:auto minmax(0,1fr);gap:12px;max-height:100%;padding:16px;overflow:hidden;background:var(--plotline-panel)}.scene-inspector-editor-overlay[hidden]{display:none}.scene-inspector-v2-edit .scene-inspector-editor-overlay{position:static;inset:auto;z-index:1;min-width:0;height:100%;max-height:none}.scene-inspector-editor-resizer{display:none}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer{display:block;align-self:stretch;min-height:100%;border-radius:999px;cursor:col-resize;background:linear-gradient(180deg,rgba(47,111,99,.16),rgba(47,111,99,.04))}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer::before{content:"";display:block;width:2px;height:48px;margin:18px auto;border-radius:999px;background:var(--plotline-accent);opacity:.55}.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer:focus-visible,.scene-inspector-v2-edit.editor-overlay-open .scene-inspector-editor-resizer:hover{background:rgba(47,111,99,.16)}body.scene-inspector-editor-resizing{cursor:col-resize;user-select:none}.scene-inspector-editor-shell{position:sticky;top:0;z-index:2;display:flex;align-items:flex-start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--plotline-line);background:var(--plotline-panel);padding-bottom:12px}.scene-inspector-editor-shell h3{margin:0;font-size:1.1rem}.scene-inspector-editor-help{flex:0 0 auto}.scene-inspector-editor-empty{min-height:0;overflow:auto}.scene-inspector-editor-form{display:grid;grid-template-rows:minmax(0,1fr) auto;min-height:100%;gap:14px}.scene-inspector-editor-fields{display:grid;align-content:start;gap:14px;padding-right:4px}.scene-inspector-editor-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.scene-inspector-editor-fieldset{display:grid;gap:10px;min-width:0;margin:0;border:1px solid var(--plotline-line);border-radius:8px;padding:12px}.scene-inspector-editor-fieldset legend{float:none;width:auto;margin:0;padding:0 4px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-inspector-editor-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.scene-inspector-editor-checks label{display:flex;align-items:center;gap:8px;min-width:0;margin:0;border:1px solid rgba(47,111,99,.12);border-radius:8px;background:rgba(47,111,99,.05);padding:8px 10px}.scene-inspector-editor-checks span{overflow-wrap:anywhere}.scene-inspector-editor-footer{position:sticky;bottom:0;z-index:2;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid var(--plotline-line);background:var(--plotline-panel);padding-top:12px}.scene-inspector-editor-error{border:1px solid rgba(179,95,59,.28);border-radius:8px;background:rgba(179,95,59,.1);padding:10px 12px;color:var(--plotline-danger,#b35f3b);font-weight:700}.scene-inspector-editor-loading,.scene-inspector-editor-pending{border:1px dashed rgba(47,111,99,.24);border-radius:8px;background:rgba(47,111,99,.04);padding:16px;color:var(--plotline-muted)}.scene-inspector-editor-metric{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-inspector-editor-metric-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-inspector-editor-metric-heading h4{margin:0;font-size:.98rem}.scene-inspector-editor-metric-heading p{margin:3px 0 0;color:var(--plotline-muted);font-size:.88rem}.scene-inspector-editor-metric-heading output{min-width:42px;border-radius:8px;background:var(--plotline-accent);padding:5px 8px;color:#fff;font-weight:800;text-align:center}.scene-inspector-editor-range-labels{display:flex;justify-content:space-between;color:var(--plotline-muted);font-size:.78rem}.scene-character-editor-section{display:grid;gap:10px}.scene-character-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-character-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-character-pov-options{display:grid;gap:7px}.scene-character-pov-options label{display:flex;align-items:center;gap:8px;margin:0;font-weight:700}.scene-character-editor-list{display:grid;gap:10px}.scene-character-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-character-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-character-editor-card-header h4{margin:0;font-size:1rem}.scene-character-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-character-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-world-editor-section{display:grid;gap:10px}.scene-world-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-world-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-world-editor-list{display:grid;gap:10px}.scene-world-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-world-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-world-editor-card-header h4{margin:0;font-size:1rem}.scene-world-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-world-remove{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-writer-editor-section{display:grid;gap:10px}.scene-writer-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-writer-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-writer-editor-list{display:grid;gap:10px}.scene-writer-editor-card,.scene-writer-checklist-row{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-writer-editor-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-writer-editor-card-header h4{margin:0;font-size:1rem}.scene-writer-editor-card-header p{margin:2px 0 0;color:var(--plotline-muted);font-size:.86rem}.scene-writer-checklist-row{grid-template-columns:auto minmax(0,1fr) auto;align-items:center}.scene-writer-remove,.scene-writer-checklist-complete,.scene-writer-inline-check{display:inline-flex;align-items:center;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-attachment-editor-card{align-items:stretch}.scene-attachment-preview-row{display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:start}.scene-attachment-thumb{display:grid;place-items:center;width:72px;height:72px;overflow:hidden;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.06);color:var(--plotline-muted);font-size:.78rem;font-weight:800;text-align:center}.scene-attachment-thumb img{width:100%;height:100%;object-fit:cover}.scene-attachment-preview-copy{display:grid;gap:8px;min-width:0}.scene-attachment-preview-copy p{margin:0}.scene-attachment-editor-form,.scene-attachment-delete-form{display:grid;gap:10px}.scene-attachment-action-row{display:flex;justify-content:flex-end;gap:8px}.scene-structure-editor-section{display:grid;gap:10px}.scene-structure-editor-heading{display:flex;align-items:center;justify-content:space-between;gap:10px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.scene-structure-editor-heading strong{border-radius:999px;background:rgba(47,111,99,.1);padding:2px 8px;color:var(--plotline-accent-dark)}.scene-structure-editor-list,.scene-structure-editor-form,.scene-structure-delete-form{display:grid;gap:10px}.scene-structure-editor-card{display:grid;gap:10px;border:1px solid var(--plotline-line);border-radius:8px;background:rgba(47,111,99,.04);padding:12px}.scene-structure-card-header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}.scene-structure-card-header h4{margin:0;font-size:1rem}.scene-structure-card-header p,.scene-structure-editor-card p{margin:2px 0 0}.scene-structure-marker{flex:0 0 auto;border-radius:999px;background:var(--plot-colour,var(--plotline-accent));padding:3px 8px;color:#fff;font-size:.78rem;font-weight:800}.scene-structure-action-row{display:flex;justify-content:flex-end;gap:8px}.scene-structure-dependency-columns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.scene-structure-inline-check{display:inline-flex;align-items:center;align-self:end;gap:6px;margin:0;color:var(--plotline-muted);font-size:.82rem;font-weight:800;white-space:nowrap}.scene-inspector-v2-timeline .scene-inspector-v2-health{grid-template-columns:repeat(2,minmax(0,1fr))}.scene-inspector-v2-timeline .scene-inspector-v2-card{padding:14px}.scene-inspector-v2-timeline .scene-inspector-v2-card-header,.scene-inspector-v2-timeline .scene-inspector-v2-list li{align-items:stretch;flex-direction:column}.scene-inspector-v2-timeline .scene-inspector-v2-card-header .scene-inspector-v2-actions{justify-content:flex-start}.scene-inspector-v2-timeline .scene-inspector-v2-facts,.scene-inspector-v2-timeline .scene-inspector-v2-metrics,.scene-inspector-v2-timeline .scene-inspector-v2-counts{grid-template-columns:1fr}.scene-inspector-v2-timeline .scene-inspector-v2-metrics{grid-template-columns:1fr}.scene-inspector-v2-timeline .scene-inspector-v2-metric-track{height:7px}.scene-inspector-v2-timeline .scene-inspector-v2-metric-row{grid-template-columns:minmax(118px,150px) minmax(0,1fr) auto}@media(max-width:1100px){.scene-inspector-v2-edit.editor-overlay-open{grid-template-columns:minmax(0,1fr) 10px minmax(360px,min(var(--scene-editor-width),52%))}.scene-inspector-v2-grid,.scene-inspector-v2-health{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:1180px){.scene-inspector-v2-edit .scene-inspector-v2-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:720px){.scene-inspector-v2-grid,.scene-inspector-v2-health,.scene-inspector-v2-facts,.scene-inspector-v2-metrics,.scene-inspector-v2-counts{grid-template-columns:1fr}.scene-inspector-v2-card-header{flex-direction:column}.scene-inspector-editor-grid,.scene-inspector-editor-checks{grid-template-columns:1fr}.scene-writer-checklist-row{grid-template-columns:1fr;align-items:stretch}.scene-attachment-preview-row{grid-template-columns:1fr}.scene-structure-dependency-columns{grid-template-columns:1fr}}.floor-plan-toolbar-floor-group{flex:1 1 420px;min-width:min(100%,320px)}.floor-plan-active-floor{display:grid;gap:2px}.floor-plan-toolbar-control-group{flex:0 1 auto}.floor-plan-toolbar-action-group{flex:1 1 360px;justify-content:flex-end}.floor-plan-occupancy-scene-row{border-top:1px solid rgba(47,111,99,.12);padding-top:9px}.floor-plan-occupancy-scene-row[hidden]{display:none}.floor-plan-occupancy-scene-row .floor-plan-reference-control{flex:1 1 320px;min-width:min(100%,320px)}.floor-plan-occupancy-scene-row .form-select{width:100%}.floor-plan-occupancy-warning-panel{background:rgba(47,111,99,.05);border:1px solid rgba(47,111,99,.16);border-radius:8px;color:var(--plotline-ink,#1e252b);flex:1 1 100%;font-size:.82rem;padding:.55rem .7rem}.floor-plan-occupancy-warning-panel strong{display:block;font-size:.78rem;margin-bottom:.25rem;text-transform:uppercase}.floor-plan-occupancy-warning-panel p,.floor-plan-occupancy-warning-panel ul{margin:0}.floor-plan-occupancy-warning-panel ul{display:grid;gap:.25rem;list-style:none;padding:0}.floor-plan-occupancy-warning,.floor-plan-occupancy-warning-empty{border-radius:6px;font-weight:700;padding:.32rem .45rem}.floor-plan-occupancy-warning-empty{background:rgba(47,111,99,.08);color:var(--plotline-accent-dark,#22534a)}.floor-plan-occupancy-warning--warning{background:rgba(251,236,211,.78);color:#7b4b12}.floor-plan-occupancy-warning--info{background:rgba(233,243,248,.86);color:#245b78}.floor-plan-occupancy-warning[hidden],.floor-plan-occupancy-warning-empty[hidden]{display:none}.floor-plan-editor-toolbar .muted{display:block;font-size:.76rem;line-height:1.1}.floor-plan-toolbar-check,.floor-plan-reference-control{align-items:center;color:var(--muted-color,#6b756f);display:inline-flex;font-size:.82rem;font-weight:700;gap:6px}.floor-plan-reference-control{align-items:flex-start;flex-direction:column;gap:2px}.floor-plan-reference-control .form-select{min-width:180px}.floor-plan-save-status{border:1px solid rgba(47,111,99,.2);border-radius:999px;color:var(--plotline-accent-dark,#22534a);background:rgba(47,111,99,.08);font-size:.78rem;font-weight:800;padding:4px 9px}.floor-plan-save-status[data-save-state="dirty"]{border-color:rgba(184,118,43,.32);color:#7b4b12;background:rgba(251,236,211,.72)}.floor-plan-save-status[data-save-state="saving"]{border-color:rgba(51,117,155,.3);color:#245b78;background:rgba(233,243,248,.82)}.floor-plan-save-status[data-save-state="failed"]{border-color:rgba(163,61,61,.32);color:#8a3434;background:rgba(255,232,232,.9)}.floor-plan-floor{display:none}.floor-plan-floor.active{display:block}.floor-plan-stage{min-width:0}.floor-plan-grid-wrap{max-width:100%;max-height:calc(100vh - 250px);min-height:min(58vh,520px);overflow:auto;padding-bottom:8px}.floor-plan-grid{--cell-size:34px;background:linear-gradient(to right,rgba(93,111,101,.18) 1px,transparent 1px),linear-gradient(to bottom,rgba(93,111,101,.18) 1px,transparent 1px),var(--panel-bg,#fff);background-size:var(--cell-size) var(--cell-size),var(--cell-size) var(--cell-size),auto;border:1px solid var(--border-color,#d8ded9);border-radius:8px;height:calc(var(--grid-height)*var(--cell-size));min-width:calc(var(--grid-width)*var(--cell-size));position:relative;width:calc(var(--grid-width)*var(--cell-size))}.floor-plan-coordinate-label{color:rgba(33,61,55,.42);font-size:.62rem;font-weight:800;line-height:1;pointer-events:none;position:absolute;text-shadow:0 1px 0 rgba(255,255,255,.7);user-select:none;z-index:5}.floor-plan-coordinate-label--column{left:calc(var(--coord-x)*var(--cell-size) + 4px);top:3px}.floor-plan-coordinate-label--row{left:4px;top:calc(var(--coord-y)*var(--cell-size) + 4px)}.floor-plan-reference-overlay{inset:0;pointer-events:none;position:absolute;z-index:1}.floor-plan-reference-block{align-items:center;background:rgba(47,111,99,.08);border:1px dashed rgba(47,111,99,.34);border-radius:2px;color:rgba(27,55,49,.46);display:flex;font-size:.62rem;font-weight:800;height:calc(var(--h)*var(--cell-size));justify-content:center;left:calc(var(--x)*var(--cell-size));line-height:1.05;overflow:hidden;padding:3px;position:absolute;text-align:center;top:calc(var(--y)*var(--cell-size));width:calc(var(--w)*var(--cell-size))}.floor-plan-reference-warning{background:rgba(251,236,211,.92);border:1px solid rgba(184,118,43,.34);border-radius:999px;color:#7b4b12;font-size:.76rem;font-weight:800;left:10px;padding:4px 10px;pointer-events:none;position:absolute;top:10px;z-index:6}.floor-plan-background-image{height:auto;left:0;max-width:none;opacity:var(--bg-opacity,.35);pointer-events:none;position:absolute;top:0;transform:translate(var(--bg-offset-x,0),var(--bg-offset-y,0)) scale(var(--bg-scale,1));transform-origin:top left;user-select:none;width:100%;z-index:0}.floor-plan-background-image.is-locked{pointer-events:none}.floor-plan-block{align-items:center;--floor-plan-wall-color:rgba(44,84,75,.55);border:2px solid transparent;border-radius:2px;color:#12332c;cursor:grab;display:flex;font-size:.72rem;font-weight:700;height:calc(var(--h)*var(--cell-size));justify-content:center;left:calc(var(--x)*var(--cell-size));line-height:1.08;overflow:hidden;padding:4px;position:absolute;text-align:center;top:calc(var(--y)*var(--cell-size));touch-action:none;width:calc(var(--w)*var(--cell-size));z-index:2}.floor-plan-wall-segment{background:var(--floor-plan-wall-color);pointer-events:none;position:absolute;z-index:2}.floor-plan-wall-segment--north,.floor-plan-wall-segment--south{height:2px;left:var(--wall-start);width:var(--wall-length)}.floor-plan-wall-segment--north{top:0}.floor-plan-wall-segment--south{bottom:0}.floor-plan-wall-segment--east,.floor-plan-wall-segment--west{height:var(--wall-length);top:var(--wall-start);width:2px}.floor-plan-wall-segment--east{right:0}.floor-plan-wall-segment--west{left:0}.floor-plan-block-label{display:-webkit-box;max-width:100%;overflow:hidden;overflow-wrap:normal;text-overflow:ellipsis;-webkit-box-orient:vertical;-webkit-line-clamp:1}.floor-plan-block[style*="--h:2"] .floor-plan-block-label,.floor-plan-block[style*="--h:3"] .floor-plan-block-label,.floor-plan-block[style*="--h:4"] .floor-plan-block-label,.floor-plan-block[style*="--h:5"] .floor-plan-block-label,.floor-plan-block[style*="--h:6"] .floor-plan-block-label,.floor-plan-block[style*="--h:7"] .floor-plan-block-label,.floor-plan-block[style*="--h:8"] .floor-plan-block-label{-webkit-line-clamp:2}.floor-plan-block.selected{box-shadow:0 0 0 3px rgba(47,111,99,.28);outline:2px solid var(--bs-primary,#2f6f63);z-index:3}.floor-plan-block.overlap{border-color:#b45544;box-shadow:inset 0 0 0 2px rgba(180,85,68,.18)}.floor-plan-block.is-hidden-location{background-image:repeating-linear-gradient(135deg,rgba(18,51,44,.08) 0,rgba(18,51,44,.08) 3px,transparent 3px,transparent 9px);box-shadow:inset 0 0 0 1px rgba(43,54,49,.18)}.floor-plan-block.is-hidden-location.selected{box-shadow:inset 0 0 0 1px rgba(43,54,49,.18),0 0 0 3px rgba(47,111,99,.28)}.floor-plan-block.is-hidden-location.overlap{box-shadow:inset 0 0 0 2px rgba(180,85,68,.18),inset 0 0 0 1px rgba(43,54,49,.18)}.floor-plan-secret-route{border-top:2px dashed rgba(69,55,42,.58);height:0;left:calc(var(--route-x,0)*var(--cell-size));opacity:.72;pointer-events:none;position:absolute;top:calc(var(--route-y,0)*var(--cell-size));transform:rotate(var(--route-angle,0));transform-origin:0 50%;width:calc(var(--route-length,0)*var(--cell-size));z-index:3}.floor-plan-secret-route::after{background:rgba(255,250,242,.9);border:1px solid rgba(69,55,42,.5);border-radius:50%;content:"";height:7px;left:50%;position:absolute;top:-5px;transform:translateX(-50%);width:7px}.floor-plan-transition-marker{align-items:center;--transition-marker-ink:#12332c;--transition-marker-window:#246f9f;--transition-marker-blocked:#9b342b;background:rgba(255,250,242,.98);border:1px solid rgba(47,111,99,.55);border-radius:50%;box-shadow:0 2px 6px rgba(31,37,34,.16);color:var(--transition-marker-ink);display:flex;font-size:.72rem;font-weight:900;height:21px;justify-content:center;left:calc(var(--transition-x,0)*var(--cell-size));line-height:1;pointer-events:none;position:absolute;top:calc(var(--transition-y,0)*var(--cell-size));transform:translate(-50%,-50%);width:21px;z-index:4}.floor-plan-transition-marker svg{display:block;height:21px;overflow:visible;width:21px}.floor-plan-transition-marker.is-vertical svg{transform:rotate(90deg)}.floor-plan-transition-marker .marker-line,.floor-plan-transition-marker .marker-arc,.floor-plan-transition-marker .marker-window,.floor-plan-transition-marker .marker-blocked{fill:none;stroke:currentColor;stroke-linecap:round;stroke-linejoin:round;stroke-width:1.7}.floor-plan-transition-marker .marker-arc{stroke-width:1.35}.floor-plan-transition-marker .marker-window{stroke:var(--transition-marker-window)}.floor-plan-transition-marker .marker-dotted{opacity:.72;stroke-dasharray:1.4 2}.floor-plan-transition-marker .marker-blocked{stroke:var(--transition-marker-blocked);stroke-width:1.8}.floor-plan-transition-marker .marker-strong{stroke-width:2}.floor-plan-transition-marker .marker-track{opacity:.72}.floor-plan-transition-marker--window{background:rgba(239,249,255,.98);border-color:rgba(36,111,159,.48)}.floor-plan-transition-marker--sliding-door{background:rgba(248,252,249,.98);border-color:rgba(47,111,99,.58)}.floor-plan-transition-marker--french-door{background:rgba(255,252,246,.98);border-color:rgba(119,86,45,.5)}.floor-plan-transition-marker--secret-door{background:rgba(255,250,242,.88);border-style:dashed}.floor-plan-transition-marker--ladder{background:rgba(246,248,245,.98);border-color:rgba(77,91,67,.55)}.floor-plan-transition-marker--blocked-door{background:rgba(255,244,241,.98);border-color:rgba(155,52,43,.52)}.floor-plan-transition-marker--exterior-door{border-width:2px}.floor-plan-transition-marker.is-shared-edge{background:rgba(255,255,255,.98);border-color:rgba(47,111,99,.72)}.floor-plan-transition-marker--window.is-shared-edge{background:rgba(239,249,255,.98);border-color:rgba(36,111,159,.58)}.floor-plan-transition-marker--blocked-door.is-shared-edge{background:rgba(255,244,241,.98);border-color:rgba(155,52,43,.6)}.visual-card-heading{align-items:flex-start;display:flex;gap:12px}.visual-card-heading>div{min-width:0}.visual-avatar{align-items:center;aspect-ratio:1;background:linear-gradient(135deg,rgba(47,111,99,.16),rgba(212,154,98,.16));border:1px solid rgba(47,111,99,.22);border-radius:999px;color:var(--plotline-accent-dark,#22534a);display:inline-flex;flex:0 0 auto;font-weight:900;justify-content:center;letter-spacing:.02em;overflow:hidden;text-transform:uppercase}.visual-avatar img{height:100%;object-fit:cover;width:100%}.visual-avatar--sm{font-size:.72rem;width:32px}.visual-avatar--md{font-size:.9rem;width:48px}.visual-avatar--lg{font-size:1.3rem;width:96px}.visual-avatar--xl{font-size:1.6rem;width:128px}.visual-image-editor{align-items:center;background:rgba(47,111,99,.05);border:1px solid rgba(47,111,99,.14);border-radius:8px;display:flex;gap:18px;padding:14px}.visual-image-editor__controls{flex:1 1 auto;min-width:220px}.floor-plan-block--room{background:#d9eee7}.floor-plan-block--corridor{background:#e7e2f4}.floor-plan-block--openspace{background:#e5efd4}.floor-plan-block--exterior{background:#d9ecf3}.floor-plan-block--other{background:#ece9e1}.floor-plan-resize-handle{border-bottom:10px solid rgba(18,51,44,.45);border-left:10px solid transparent;bottom:4px;height:0;position:absolute;right:4px;width:0}.floor-plan-side-panel{align-self:start;position:sticky;top:82px}.floor-plan-side-panel h2{font-size:1.05rem;margin-bottom:8px}.floor-plan-side-panel h3{font-size:.92rem;margin:0 0 8px}.floor-plan-toolbox{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:8px;display:grid;grid-template-rows:auto minmax(0,1fr);max-height:calc(100vh - 250px);min-height:min(58vh,520px);overflow:hidden}.floor-plan-toolbox-tabs{border-bottom:1px solid var(--border-color,#d8ded9);display:flex;flex-wrap:wrap;gap:0}.floor-plan-toolbox-tab{background:transparent;border:0;border-right:1px solid var(--border-color,#d8ded9);border-bottom:1px solid var(--border-color,#d8ded9);color:inherit;flex:1 1 118px;font-size:.82rem;font-weight:800;min-width:112px;padding:10px 8px}.floor-plan-toolbox-tab:last-child,.floor-plan-toolbox-tab.active:last-child{border-right:0}.floor-plan-toolbox-tab.active{background:rgba(47,111,99,.1);border-bottom-color:var(--plotline-accent,#2f6f63);color:var(--plotline-accent-dark,#22534a)}.floor-plan-toolbox-body{min-height:0;overflow:auto}.floor-plan-tool-card{background:var(--panel-bg,#fff);border:1px solid var(--border-color,#d8ded9);border-radius:8px;padding:14px}.floor-plan-toolbox .floor-plan-tool-card{background:transparent;border:0;border-radius:0}.floor-plan-tool-card[hidden]{display:none}.floor-plan-tool-card p{margin-bottom:10px}.floor-plan-tool-subsection{border-top:1px solid var(--border-color,#d8ded9);margin-top:12px;padding-top:12px}.floor-plan-tool-subsection:first-of-type{border-top:0;margin-top:0;padding-top:0}.floor-plan-background-file{border:1px solid rgba(47,111,99,.16);border-radius:6px;font-size:.86rem;padding:8px 10px}.floor-plan-background-range{align-items:center;display:grid;gap:10px;grid-template-columns:minmax(0,1fr) 44px}.floor-plan-background-range span{color:var(--muted-text,#5d6f65);font-size:.8rem;font-variant-numeric:tabular-nums;text-align:right}.floor-plan-transition-list{display:grid;gap:8px}.floor-plan-transition-item{border:1px solid rgba(47,111,99,.14);border-radius:6px;display:grid;gap:8px;padding:8px}.floor-plan-transition-item strong,.floor-plan-transition-item span{display:block;font-size:.84rem}.floor-plan-transition-item span{color:var(--muted-text,#5d6f65)}.floor-plan-editor--occupancy .floor-plan-block{cursor:default;touch-action:auto}.floor-plan-editor--occupancy .floor-plan-resize-handle{display:none}.floor-plan-editor--occupancy .floor-plan-side-panel{display:none}.floor-plan-occupancy-tray{position:absolute;z-index:14;height:calc(var(--h)*var(--cell-size));left:calc(var(--x)*var(--cell-size));top:calc(var(--y)*var(--cell-size));width:calc(var(--w)*var(--cell-size));display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:.18rem;padding:0 0 .25rem;pointer-events:auto}.floor-plan-occupancy-tray[hidden]{display:none}.floor-plan-occupancy-token{display:grid;place-items:center;width:1.8rem;height:1.8rem;overflow:hidden;border:2px solid #fff;border-radius:999px;color:#fff;background:var(--plotline-accent);box-shadow:0 4px 12px rgba(30,37,43,.18);font-size:.68rem;font-weight:800}.floor-plan-occupancy-token img{width:100%;height:100%;object-fit:cover}.floor-plan-occupancy-token--asset{width:1.45rem;height:1.45rem;background:#805c15;font-size:.58rem}.floor-plan-occupancy-more{border-radius:999px;padding:.15rem .36rem;color:var(--plotline-ink);background:rgba(255,255,255,.92);box-shadow:0 4px 12px rgba(30,37,43,.12);font-size:.72rem;font-weight:800}.floor-plan-occupancy-message{align-self:start;background:rgba(255,255,255,.94);border:1px solid rgba(47,111,99,.18);border-radius:8px;box-shadow:0 6px 16px rgba(30,37,43,.08);color:var(--muted-color,#6b756f);font-size:.82rem;font-weight:700;grid-column:1/-1;grid-row:1;justify-self:center;margin-top:.55rem;max-width:min(92%,520px);padding:.45rem .7rem;position:relative;z-index:16}.floor-plan-occupancy-message[hidden]{display:none}.floor-plan-transition-accordion .accordion-item{background:transparent;border-color:var(--border-color,#d8ded9)}.floor-plan-transition-accordion .accordion-button{background:rgba(47,111,99,.06);color:inherit;font-size:.88rem;font-weight:800;padding:10px 12px}.floor-plan-transition-accordion .accordion-button:not(.collapsed){background:rgba(47,111,99,.12);color:var(--plotline-accent-dark,#22534a);box-shadow:inset 0 -1px 0 var(--border-color,#d8ded9)}.floor-plan-transition-accordion .accordion-body{padding:12px}.floor-plan-checkbox{align-items:center;display:inline-flex;gap:6px;font-weight:700;margin-bottom:4px}.floor-plan-choice-row{display:grid;gap:4px;margin-bottom:10px}.floor-plan-choice-row label{align-items:center;display:flex;gap:6px;font-size:.88rem}.floor-plan-overlap-warning{background:rgba(180,85,68,.12);border:1px solid rgba(180,85,68,.35);border-radius:6px;color:#8f3f31;margin-bottom:10px;padding:8px 10px}[data-bs-theme="dark"] .floor-plan-grid,.dark .floor-plan-grid{background:linear-gradient(to right,rgba(214,224,218,.12) 1px,transparent 1px),linear-gradient(to bottom,rgba(214,224,218,.12) 1px,transparent 1px),#15201d;background-size:var(--cell-size) var(--cell-size),var(--cell-size) var(--cell-size),auto}[data-bs-theme="dark"] .floor-plan-editor-toolbar,.dark .floor-plan-editor-toolbar,[data-bs-theme="dark"] .floor-plan-toolbox,.dark .floor-plan-toolbox,[data-bs-theme="dark"] .floor-plan-tool-card,.dark .floor-plan-tool-card{background:var(--panel-bg,#1f2522)}[data-bs-theme="dark"] .floor-plan-toolbox .floor-plan-tool-card,.dark .floor-plan-toolbox .floor-plan-tool-card{background:transparent}[data-bs-theme="dark"] .floor-plan-toolbox-tab.active,.dark .floor-plan-toolbox-tab.active{background:rgba(212,154,98,.16);color:var(--plotline-accent-dark,#f0c99d)}[data-bs-theme="dark"] .floor-plan-block,.dark .floor-plan-block{--floor-plan-wall-color:rgba(212,154,98,.6);color:#f1f6f3}[data-bs-theme="dark"] .floor-plan-block.is-hidden-location,.dark .floor-plan-block.is-hidden-location{background-image:repeating-linear-gradient(135deg,rgba(244,234,220,.09) 0,rgba(244,234,220,.09) 3px,transparent 3px,transparent 9px);box-shadow:inset 0 0 0 1px rgba(244,234,220,.2)}[data-bs-theme="dark"] .floor-plan-secret-route,.dark .floor-plan-secret-route{border-top-color:rgba(244,204,160,.58);opacity:.76}[data-bs-theme="dark"] .floor-plan-secret-route::after,.dark .floor-plan-secret-route::after{background:rgba(42,35,30,.95);border-color:rgba(244,204,160,.55)}[data-bs-theme="dark"] .floor-plan-coordinate-label,.dark .floor-plan-coordinate-label{color:rgba(244,234,220,.46);text-shadow:0 1px 0 rgba(0,0,0,.55)}[data-bs-theme="dark"] .floor-plan-reference-block,.dark .floor-plan-reference-block{background:rgba(131,199,242,.08);border-color:rgba(131,199,242,.32);color:rgba(244,234,220,.46)}[data-bs-theme="dark"] .floor-plan-reference-warning,.dark .floor-plan-reference-warning{background:rgba(84,57,25,.92);border-color:rgba(244,177,100,.32);color:#ffd9a5}[data-bs-theme="dark"] .floor-plan-transition-marker,.dark .floor-plan-transition-marker{--transition-marker-ink:#f4eadc;--transition-marker-window:#83c7f2;--transition-marker-blocked:#f08a78;background:rgba(42,35,30,.98);border-color:rgba(212,154,98,.6)}[data-bs-theme="dark"] .floor-plan-transition-marker.is-shared-edge,.dark .floor-plan-transition-marker.is-shared-edge{background:rgba(48,39,32,.98);border-color:rgba(212,154,98,.78)}[data-bs-theme="dark"] .floor-plan-transition-marker--window,.dark .floor-plan-transition-marker--window,[data-bs-theme="dark"] .floor-plan-transition-marker--window.is-shared-edge,.dark .floor-plan-transition-marker--window.is-shared-edge{background:rgba(24,45,58,.98);border-color:rgba(131,199,242,.66)}[data-bs-theme="dark"] .floor-plan-transition-marker--sliding-door,.dark .floor-plan-transition-marker--sliding-door,[data-bs-theme="dark"] .floor-plan-transition-marker--french-door,.dark .floor-plan-transition-marker--french-door,[data-bs-theme="dark"] .floor-plan-transition-marker--ladder,.dark .floor-plan-transition-marker--ladder{background:rgba(39,43,37,.98);border-color:rgba(212,154,98,.58)}[data-bs-theme="dark"] .floor-plan-transition-marker--blocked-door,.dark .floor-plan-transition-marker--blocked-door,[data-bs-theme="dark"] .floor-plan-transition-marker--blocked-door.is-shared-edge,.dark .floor-plan-transition-marker--blocked-door.is-shared-edge{background:rgba(58,33,28,.98);border-color:rgba(240,138,120,.66)}[data-bs-theme="dark"] .visual-avatar,.dark .visual-avatar{background:linear-gradient(135deg,rgba(131,199,242,.14),rgba(212,154,98,.18));border-color:rgba(244,234,220,.18);color:#f4eadc}[data-bs-theme="dark"] .visual-image-editor,.dark .visual-image-editor{background:rgba(244,234,220,.04);border-color:rgba(244,234,220,.12)}[data-bs-theme="dark"] .floor-plan-transition-item,.dark .floor-plan-transition-item{border-color:rgba(212,154,98,.22)}[data-bs-theme="dark"] .floor-plan-occupancy-token,.dark .floor-plan-occupancy-token{border-color:#1f2630;box-shadow:0 4px 12px rgba(0,0,0,.28)}[data-bs-theme="dark"] .floor-plan-occupancy-more,.dark .floor-plan-occupancy-more{color:#f1e7dd;background:rgba(31,38,48,.92)}[data-bs-theme="dark"] .floor-plan-occupancy-message,.dark .floor-plan-occupancy-message{background:rgba(31,38,48,.94);border-color:rgba(212,154,98,.24);color:#d9c8b8}[data-bs-theme="dark"] .floor-plan-occupancy-warning-panel,.dark .floor-plan-occupancy-warning-panel{background:rgba(244,234,220,.04);border-color:rgba(212,154,98,.2);color:#f1e7dd}[data-bs-theme="dark"] .floor-plan-occupancy-warning-empty,.dark .floor-plan-occupancy-warning-empty{background:rgba(47,111,99,.18);color:#b8e2d7}[data-bs-theme="dark"] .floor-plan-occupancy-warning--warning,.dark .floor-plan-occupancy-warning--warning{background:rgba(84,57,25,.92);color:#ffd9a5}[data-bs-theme="dark"] .floor-plan-occupancy-warning--info,.dark .floor-plan-occupancy-warning--info{background:rgba(24,45,58,.92);color:#b9dcf3}[data-bs-theme="dark"] .floor-plan-transition-accordion .accordion-item,.dark .floor-plan-transition-accordion .accordion-item{border-color:rgba(212,154,98,.22)}[data-bs-theme="dark"] .floor-plan-transition-accordion .accordion-button,.dark .floor-plan-transition-accordion .accordion-button{background:rgba(212,154,98,.08);color:#f4eadc}[data-bs-theme="dark"] .floor-plan-transition-accordion .accordion-button:not(.collapsed),.dark .floor-plan-transition-accordion .accordion-button:not(.collapsed){background:rgba(212,154,98,.16);color:var(--plotline-accent-dark,#f0c99d);box-shadow:inset 0 -1px 0 rgba(212,154,98,.22)}[data-bs-theme="dark"] .floor-plan-block--room,.dark .floor-plan-block--room{background:#29584f}[data-bs-theme="dark"] .floor-plan-block--corridor,.dark .floor-plan-block--corridor{background:#514876}[data-bs-theme="dark"] .floor-plan-block--openspace,.dark .floor-plan-block--openspace{background:#4f6133}[data-bs-theme="dark"] .floor-plan-block--exterior,.dark .floor-plan-block--exterior{background:#315d6f}[data-bs-theme="dark"] .floor-plan-block--other,.dark .floor-plan-block--other{background:#5b564c}@media(max-width:1100px){.floor-plan-layout,.floor-plan-editor-toolbar{grid-template-columns:1fr}.floor-plan-grid-wrap{max-height:62vh}.floor-plan-side-panel{position:static}.floor-plan-toolbox{max-height:none}} \ No newline at end of file From 441fd2ebea8c37fef41e42a1520b2a197143dd10 Mon Sep 17 00:00:00 2001 From: Nick Beckley Date: Thu, 2 Jul 2026 20:48:29 +0100 Subject: [PATCH 2/4] =?UTF-8?q?Phase=2019A=20=E2=80=93=20Marketing=20Theme?= =?UTF-8?q?=20Refresh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- PlotLine/Views/Home/Index.cshtml | 2 +- PlotLine/Views/Public/About.cshtml | 2 +- PlotLine/Views/Public/Contact.cshtml | 2 +- PlotLine/wwwroot/css/plotline-theme.css | 1431 ++++++++++++++++++- PlotLine/wwwroot/css/plotline-theme.min.css | 422 +----- 5 files changed, 1433 insertions(+), 426 deletions(-) diff --git a/PlotLine/Views/Home/Index.cshtml b/PlotLine/Views/Home/Index.cshtml index 58306d1..0d9ec7d 100644 --- a/PlotLine/Views/Home/Index.cshtml +++ b/PlotLine/Views/Home/Index.cshtml @@ -3,7 +3,7 @@ ViewData["ShellClass"] = "marketing-shell"; } -
+
diff --git a/PlotLine/Views/Public/About.cshtml b/PlotLine/Views/Public/About.cshtml index c288ba1..35877c2 100644 --- a/PlotLine/Views/Public/About.cshtml +++ b/PlotLine/Views/Public/About.cshtml @@ -4,7 +4,7 @@ ViewData["ShellClass"] = "marketing-shell"; } -
+

About PlotDirector

diff --git a/PlotLine/Views/Public/Contact.cshtml b/PlotLine/Views/Public/Contact.cshtml index d7e7288..3049815 100644 --- a/PlotLine/Views/Public/Contact.cshtml +++ b/PlotLine/Views/Public/Contact.cshtml @@ -4,7 +4,7 @@ ViewData["ShellClass"] = "marketing-shell"; } -
+

Contact

diff --git a/PlotLine/wwwroot/css/plotline-theme.css b/PlotLine/wwwroot/css/plotline-theme.css index 4434ab6..9ca7e16 100644 --- a/PlotLine/wwwroot/css/plotline-theme.css +++ b/PlotLine/wwwroot/css/plotline-theme.css @@ -5143,13 +5143,1075 @@ a:focus-visible { line-height: 1.7; } +/* Phase 19A marketing refresh */ +.marketing-home { + --marketing-midnight: #071327; + --marketing-navy: #101f3f; + --marketing-indigo: #4655c7; + --marketing-purple: #7c3aed; + --marketing-purple-soft: #ede9ff; + --marketing-gold: #f3b86b; + --marketing-cream: #f7f8ff; + --marketing-offwhite: #fffdf8; + --marketing-ink: #111827; + --marketing-muted: #5f6775; + --marketing-rose: #b05f86; + --marketing-sage: #4a8279; + --marketing-line: rgba(16, 31, 63, 0.12); + --marketing-shadow: 0 34px 90px rgba(16, 31, 63, 0.18); + --marketing-card-shadow: 0 20px 52px rgba(16, 31, 63, 0.1); + background: + radial-gradient(circle at 84% 4%, rgba(124, 58, 237, 0.18), transparent 27rem), + radial-gradient(circle at 8% 18%, rgba(243, 184, 107, 0.18), transparent 28rem), + linear-gradient(180deg, #f8f9ff 0%, #fffdf8 36%, #eef1ff 100%); +} + +.marketing-home::selection { + color: #fff; + background: var(--marketing-purple); +} + +.marketing-eyebrow { + color: var(--marketing-purple); +} + +.marketing-home h1, +.marketing-home h2, +.marketing-home h3 { + overflow-wrap: normal; + word-break: normal; +} + +.marketing-hero, +.features-hero, +.pricing-hero, +.public-hero { + overflow: hidden; + background: + radial-gradient(circle at 12% 16%, rgba(243, 184, 107, 0.22), transparent 24rem), + radial-gradient(circle at 86% 10%, rgba(124, 58, 237, 0.2), transparent 28rem), + linear-gradient(180deg, #f8f9ff 0%, #fffdf8 100%); +} + +.marketing-hero::after, +.features-hero::after, +.public-hero::after, +.pricing-hero::after, +.problem-stack::before, +.features-showcase::before { + content: ""; + position: absolute; + pointer-events: none; +} + +.marketing-hero::after, +.features-hero::after, +.public-hero::after, +.pricing-hero::after { + inset: auto 8% 2.5rem; + height: 7rem; + opacity: 0.45; + background: + radial-gradient(circle at 8% 50%, var(--marketing-purple) 0 4px, transparent 5px), + radial-gradient(circle at 38% 38%, var(--marketing-gold) 0 4px, transparent 5px), + radial-gradient(circle at 68% 58%, var(--marketing-indigo) 0 4px, transparent 5px), + radial-gradient(circle at 94% 42%, var(--marketing-purple) 0 4px, transparent 5px), + linear-gradient(100deg, transparent 7%, rgba(124, 58, 237, 0.3) 7.3% 38%, rgba(243, 184, 107, 0.28) 38.3% 68%, rgba(70, 85, 199, 0.24) 68.3% 94%, transparent 94.3%); + mask-image: linear-gradient(90deg, transparent, #000 12%, #000 88%, transparent); +} + +.marketing-hero__copy, +.features-hero__copy { + position: relative; + z-index: 1; +} + +.marketing-btn { + min-width: 9rem; + box-shadow: 0 10px 26px rgba(16, 31, 63, 0.08); +} + +.marketing-btn--primary { + border-color: rgba(124, 58, 237, 0.28); + background: linear-gradient(135deg, var(--marketing-midnight), #182a58 58%, var(--marketing-purple)); +} + +.marketing-btn--primary:hover, +.marketing-btn--primary:focus { + box-shadow: 0 22px 48px rgba(124, 58, 237, 0.26); +} + +.marketing-btn--secondary { + border-color: rgba(124, 58, 237, 0.22); + background: rgba(255, 255, 255, 0.78); + backdrop-filter: blur(12px); +} + +.hero-proof div, +.features-hero__highlights article, +.feature-icon-card, +.pricing-card, +.comparison-grid article, +.faq-grid article, +.public-card, +.testimonial-grid figure { + border-color: rgba(16, 31, 63, 0.11); + background: + linear-gradient(180deg, rgba(255, 255, 255, 0.96), rgba(248, 249, 255, 0.9)), + #fff; + box-shadow: var(--marketing-card-shadow); + transition: transform 0.2s ease, box-shadow 0.2s ease, border-color 0.2s ease; +} + +.features-hero__highlights article:hover, +.feature-icon-card:hover, +.pricing-card:hover, +.comparison-grid article:hover, +.faq-grid article:hover, +.public-card:hover, +.testimonial-grid figure:hover { + transform: translateY(-4px); + border-color: rgba(124, 58, 237, 0.24); + box-shadow: 0 28px 68px rgba(16, 31, 63, 0.15); +} + +.features-screenshot, +.home-image-card, +.problem-visual--image .home-feature-image { + border-color: rgba(16, 31, 63, 0.12); + border-radius: 28px; + background: linear-gradient(180deg, #ffffff, #f2f4ff); + box-shadow: var(--marketing-shadow); +} + +.features-screenshot img, +.home-image-card img, +.problem-visual--image .home-feature-image { + filter: saturate(1.03) contrast(1.01); +} + +.features-screenshot::before { + background: + radial-gradient(circle at 24px 50%, #ff7b72 0 5px, transparent 6px), + radial-gradient(circle at 44px 50%, #f3b86b 0 5px, transparent 6px), + radial-gradient(circle at 64px 50%, #7c3aed 0 5px, transparent 6px), + linear-gradient(90deg, #f6f7ff, #fff); +} + +.features-jump { + background: #fffdf8; +} + +.features-jump__grid a { + border-color: rgba(124, 58, 237, 0.16); + background: rgba(255, 255, 255, 0.82); +} + +.features-jump__grid a:hover, +.features-jump__grid a:focus { + border-color: rgba(124, 58, 237, 0.46); + box-shadow: 0 16px 34px rgba(124, 58, 237, 0.12); +} + +.features-section, +.pricing-plans, +.pricing-faq, +.social-proof, +.public-content-section { + background: #fffdf8; +} + +.features-section--soft, +.features-word, +.pricing-compare, +.public-content-section--soft, +.public-mission, +.founder-story { + background: + radial-gradient(circle at 8% 16%, rgba(124, 58, 237, 0.1), transparent 24rem), + radial-gradient(circle at 92% 22%, rgba(243, 184, 107, 0.16), transparent 24rem), + #f3f5ff; +} + +.features-showcase, +.final-cta { + background: + radial-gradient(circle at 10% 10%, rgba(124, 58, 237, 0.32), transparent 25rem), + radial-gradient(circle at 88% 20%, rgba(243, 184, 107, 0.18), transparent 26rem), + linear-gradient(135deg, var(--marketing-midnight), #111f40 56%, #241656); +} + +.features-showcase .feature-icon-card, +.final-cta__inner { + border-color: rgba(255, 255, 255, 0.16); + background: rgba(255, 255, 255, 0.09); + backdrop-filter: blur(14px); +} + +.features-showcase .features-showcase__intro h2, +.features-showcase .feature-icon-card h3, +.final-cta .marketing-eyebrow { + color: #f6c47d; +} + +.feature-icon-card > span { + width: 3.25rem; + height: 3.25rem; + color: #fff; + background: + radial-gradient(circle at 20% 15%, rgba(255, 255, 255, 0.34), transparent 34%), + linear-gradient(135deg, var(--marketing-purple), var(--marketing-indigo)); + box-shadow: 0 14px 30px rgba(124, 58, 237, 0.2); +} + +.pricing-card--featured { + border-color: rgba(124, 58, 237, 0.38); + box-shadow: 0 30px 74px rgba(124, 58, 237, 0.16); +} + +.pricing-badge, +.public-updated { + border-color: rgba(124, 58, 237, 0.24); + color: #4c1d95; + background: rgba(237, 233, 255, 0.82); +} + +.pricing-feature-list li::before, +.features-bullet-list li::before { + background: linear-gradient(135deg, var(--marketing-purple), var(--marketing-gold)); + box-shadow: 0 0 0 4px rgba(124, 58, 237, 0.12); +} + +.public-feature-panel { + border-color: rgba(124, 58, 237, 0.16); + background: + radial-gradient(circle at 50% 0%, rgba(124, 58, 237, 0.12), transparent 24rem), + rgba(255, 255, 255, 0.88); +} + +.public-policy { + max-width: 920px; +} + +.public-policy section { + border-bottom-color: rgba(16, 31, 63, 0.1); +} + +.public-footer { + background: + radial-gradient(circle at 20% 0%, rgba(124, 58, 237, 0.28), transparent 24rem), + var(--marketing-midnight, #071327); +} + +.public-footer__brand:hover, +.public-footer__brand:focus, +.public-footer__nav a:hover, +.public-footer__nav a:focus { + color: #f6c47d; +} + +/* Public help centre: related to marketing, quiet enough for reading. */ +.help-centre-shell { + max-width: 1180px; +} + +.help-centre-page { + --help-brand: #101f3f; + --help-purple: #7c3aed; + --help-soft: #f3f5ff; + --help-line: rgba(16, 31, 63, 0.12); + max-width: 1120px; + margin-inline: auto; +} + +.help-centre-page .breadcrumb-trail { + margin-top: 0.5rem; +} + +.help-centre-hero { + position: relative; + overflow: hidden; + margin-top: 1rem; + border: 1px solid var(--help-line); + border-radius: 18px; + padding: clamp(1.5rem, 4vw, 2.4rem); + background: + radial-gradient(circle at 88% 8%, rgba(124, 58, 237, 0.12), transparent 18rem), + linear-gradient(135deg, #fff, var(--help-soft)); + box-shadow: 0 18px 44px rgba(16, 31, 63, 0.08); +} + +.help-centre-hero::after { + content: ""; + position: absolute; + right: clamp(1rem, 4vw, 2.4rem); + bottom: 1.2rem; + width: min(36%, 18rem); + height: 0.25rem; + border-radius: 999px; + background: linear-gradient(90deg, transparent, rgba(124, 58, 237, 0.34), rgba(243, 184, 107, 0.42)); +} + +.help-centre-hero h1 { + color: var(--help-brand); +} + +.help-search-card, +.help-section, +.help-article-card, +.help-centre-page .plain-card { + border-color: var(--help-line); + border-radius: 14px; + background: rgba(255, 255, 255, 0.92); + box-shadow: 0 14px 34px rgba(16, 31, 63, 0.07); +} + +.help-centre-page .plain-card { + transition: transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease; +} + +.help-centre-page .asset-card-grid .plain-card:hover { + transform: translateY(-2px); + border-color: rgba(124, 58, 237, 0.22); + box-shadow: 0 20px 44px rgba(16, 31, 63, 0.1); +} + +.help-centre-page .btn-primary { + --bs-btn-bg: #101f3f; + --bs-btn-border-color: #101f3f; + --bs-btn-hover-bg: #7c3aed; + --bs-btn-hover-border-color: #7c3aed; +} + +.help-centre-page a { + color: #4c1d95; +} + +.help-centre-page .status-pill, +.help-centre-page .soft-count { + border-color: rgba(124, 58, 237, 0.18); + color: #4c1d95; + background: rgba(237, 233, 255, 0.82); +} + +/* Phase 19A experimental launch-page reimagining */ +.marketing-home { + --launch-night: #040713; + --launch-midnight: #070f24; + --launch-blue: #0e2a66; + --launch-electric: #8b5cf6; + --launch-violet: #c084fc; + --launch-gold: #ffcf72; + --launch-coral: #ff7a90; + --launch-paper: #fffaf0; + --launch-ink: #07111f; + --launch-muted: #667085; + --launch-glass: rgba(255, 255, 255, 0.1); + --launch-line: rgba(255, 255, 255, 0.18); + --launch-shadow: 0 44px 120px rgba(3, 7, 18, 0.34); + color: var(--launch-ink); + background: + radial-gradient(circle at 50% -8%, rgba(192, 132, 252, 0.42), transparent 34rem), + radial-gradient(circle at 6% 20%, rgba(255, 207, 114, 0.18), transparent 31rem), + radial-gradient(circle at 90% 18%, rgba(14, 42, 102, 0.34), transparent 38rem), + linear-gradient(180deg, #040713 0%, #071225 32%, #f8f4ff 32.1%, #fffaf0 100%); +} + +.marketing-home .marketing-eyebrow { + color: var(--launch-gold); + font-size: 0.82rem; + letter-spacing: 0.18em; +} + +.marketing-home h1, +.marketing-home h2, +.marketing-home h3 { + color: inherit; + font-family: Georgia, "Times New Roman", serif; + letter-spacing: 0; +} + +.marketing-home .marketing-lead { + color: rgba(255, 255, 255, 0.76); + font-size: clamp(1.08rem, 1.65vw, 1.32rem); + line-height: 1.62; +} + +.marketing-hero, +.features-hero, +.pricing-hero, +.public-about-page .public-hero, +.public-contact-page .public-hero { + position: relative; + isolation: isolate; + min-height: calc(100vh - 5rem); + padding: clamp(4rem, 7vw, 7rem) 0 clamp(5rem, 9vw, 8rem); + color: #fffaf7; + background: + linear-gradient(115deg, rgba(4, 7, 19, 0.96), rgba(7, 15, 36, 0.86) 46%, rgba(42, 16, 83, 0.8)), + radial-gradient(circle at 72% 22%, rgba(139, 92, 246, 0.58), transparent 25rem), + radial-gradient(circle at 18% 74%, rgba(255, 207, 114, 0.18), transparent 24rem), + #040713; +} + +.marketing-hero::before, +.features-hero::before, +.pricing-hero::before, +.public-about-page .public-hero::before, +.public-contact-page .public-hero::before { + content: ""; + position: absolute; + inset: 0; + z-index: -2; + opacity: 0.72; + background: + linear-gradient(105deg, transparent 0 34%, rgba(255, 255, 255, 0.09) 34.2% 34.9%, transparent 35.2%), + linear-gradient(72deg, transparent 0 56%, rgba(255, 207, 114, 0.12) 56.1% 56.8%, transparent 57%), + radial-gradient(circle at 18% 28%, rgba(255, 255, 255, 0.16) 0 1px, transparent 2px), + radial-gradient(circle at 84% 34%, rgba(255, 255, 255, 0.2) 0 1px, transparent 2px); + background-size: auto, auto, 94px 94px, 132px 132px; +} + +.marketing-hero::after, +.features-hero::after, +.pricing-hero::after, +.public-about-page .public-hero::after, +.public-contact-page .public-hero::after { + content: ""; + position: absolute; + inset: auto -8vw -6rem; + z-index: -1; + height: 15rem; + background: radial-gradient(ellipse at 50% 0%, rgba(255, 250, 240, 0.94), rgba(255, 250, 240, 0.74) 32%, transparent 70%); + pointer-events: none; +} + +.marketing-hero__grid, +.features-hero__grid { + grid-template-columns: minmax(0, 0.78fr) minmax(500px, 1.22fr); + perspective: 1600px; +} + +.marketing-hero__copy, +.features-hero__copy { + align-self: start; + z-index: 3; + padding-top: clamp(0.5rem, 4vw, 3rem); +} + +.marketing-home h1 { + max-width: 10.5ch; + font-size: clamp(4.1rem, 8vw, 8.8rem); + line-height: 0.86; + text-shadow: 0 20px 70px rgba(0, 0, 0, 0.34); +} + +.marketing-home-page h1 { + max-width: 13.5ch; + font-size: clamp(3.45rem, 5.5vw, 6.15rem); +} + +.pricing-hero h1, +.public-about-page .public-hero h1, +.public-contact-page .public-hero h1 { + max-width: 10ch; + color: #fffaf7; + font-size: clamp(4.2rem, 9vw, 9.6rem); + line-height: 0.86; +} + +.features-hero h1 { + max-width: 7.8ch; +} + +.marketing-actions { + gap: 0.9rem; +} + +.marketing-btn { + min-height: 3.35rem; + border-radius: 999px; + padding: 0.95rem 1.45rem; + backdrop-filter: blur(14px); +} + +.marketing-btn--primary { + color: #07111f; + border-color: rgba(255, 207, 114, 0.55); + background: linear-gradient(135deg, #fff6c7, var(--launch-gold) 54%, #ff9b7e); + box-shadow: 0 18px 48px rgba(255, 207, 114, 0.26), inset 0 1px 0 rgba(255, 255, 255, 0.7); +} + +.marketing-btn--primary:hover, +.marketing-btn--primary:focus { + color: #07111f; + box-shadow: 0 26px 64px rgba(255, 207, 114, 0.36), inset 0 1px 0 rgba(255, 255, 255, 0.7); +} + +.marketing-btn--secondary { + color: #fffaf7; + border-color: rgba(255, 255, 255, 0.24); + background: rgba(255, 255, 255, 0.09); +} + +.marketing-btn--secondary:hover, +.marketing-btn--secondary:focus { + color: #fffaf7; + border-color: rgba(255, 207, 114, 0.48); + background: rgba(255, 255, 255, 0.14); +} + +.hero-proof { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + max-width: 36rem; +} + +.hero-proof div { + max-width: none; + border: 1px solid rgba(255, 255, 255, 0.16); + border-radius: 24px; + padding: 1rem; + background: rgba(255, 255, 255, 0.08); + box-shadow: none; + backdrop-filter: blur(16px); +} + +.hero-proof dt { + color: var(--launch-gold); +} + +.hero-proof dd { + color: rgba(255, 255, 255, 0.72); +} + +.home-image-card, +.features-screenshot { + position: relative; + border: 1px solid rgba(255, 255, 255, 0.2); + border-radius: 32px; + background: linear-gradient(180deg, rgba(255, 255, 255, 0.92), rgba(240, 237, 255, 0.86)); + box-shadow: var(--launch-shadow); + overflow: hidden; +} + +.home-hero-image, +.features-screenshot--hero { + z-index: 1; + transform: rotateX(9deg) rotateY(-14deg) rotateZ(2deg) translateY(1rem); + transform-origin: 50% 50%; + box-shadow: 0 64px 140px rgba(0, 0, 0, 0.48); + animation: launchFloat 8s ease-in-out infinite; +} + +.features-screenshot--hero { + margin-right: min(-6vw, -3rem); + margin-left: 0; +} + +.home-image-card::after, +.features-screenshot::after { + content: ""; + position: absolute; + inset: 0; + background: linear-gradient(120deg, rgba(255, 255, 255, 0.42), transparent 30%, transparent 70%, rgba(139, 92, 246, 0.12)); + pointer-events: none; +} + +.problem-intro, +.features-section__heading, +.section-heading { + text-align: left; +} + +.problem-intro { + position: relative; + margin-top: -3rem; + padding: clamp(5rem, 9vw, 8rem) 0 1rem; + color: var(--launch-ink); +} + +.problem-intro .marketing-container { + display: grid; + gap: 1rem; +} + +.problem-intro h2, +.section-heading h2 { + margin-inline: 0; +} + +.problem-section { + position: relative; + grid-template-columns: minmax(280px, 0.82fr) minmax(0, 1.18fr); + gap: clamp(2rem, 7vw, 7rem); + min-height: 560px; + padding: clamp(4rem, 9vw, 8rem) 0; +} + +.problem-section--reverse { + grid-template-columns: minmax(0, 1.18fr) minmax(280px, 0.82fr); +} + +.problem-section:nth-child(even)::before, +.features-section:nth-of-type(odd)::before { + content: ""; + position: absolute; + inset: 7% -7vw; + z-index: -1; + border-radius: 44px; + background: + radial-gradient(circle at 78% 10%, rgba(139, 92, 246, 0.14), transparent 22rem), + linear-gradient(135deg, rgba(7, 15, 36, 0.04), rgba(255, 207, 114, 0.08)); + transform: rotate(-1.4deg); +} + +.problem-copy h3, +.features-section__heading h2, +.features-showcase__intro h2, +.features-word h2, +.founder-story h2, +.section-heading h2 { + max-width: 12ch; + font-size: clamp(3rem, 6vw, 6.5rem); + line-height: 0.9; +} + +.problem-copy p, +.features-section__heading p, +.features-showcase__intro p, +.features-word p, +.public-narrative p, +.public-card p, +.comparison-grid p, +.faq-grid p { + max-width: 42rem; + font-size: clamp(1rem, 1.4vw, 1.18rem); +} + +.problem-visual { + min-height: 420px; + border-radius: 34px; + box-shadow: 0 34px 90px rgba(7, 17, 31, 0.17); +} + +.problem-visual--image { + padding: 1rem; + background: + linear-gradient(135deg, rgba(255, 255, 255, 0.96), rgba(236, 232, 255, 0.86)), + #fff; +} + +.problem-visual--image .home-feature-image { + border-radius: 24px; + box-shadow: 0 30px 72px rgba(7, 17, 31, 0.2); +} + +.features-jump { + margin-top: -3.4rem; + padding: 0 0 clamp(3rem, 6vw, 5rem); + background: transparent; +} + +.features-jump__grid { + border: 1px solid rgba(255, 255, 255, 0.18); + border-radius: 30px; + padding: 0.8rem; + background: rgba(7, 15, 36, 0.72); + box-shadow: 0 26px 70px rgba(3, 7, 18, 0.22); + backdrop-filter: blur(18px); +} + +.features-jump__grid a { + color: #fffaf7; + border-color: rgba(255, 255, 255, 0.12); + background: rgba(255, 255, 255, 0.08); +} + +.features-jump__grid a:hover, +.features-jump__grid a:focus { + color: #07111f; + background: var(--launch-gold); +} + +.features-section, +.features-word, +.pricing-plans, +.pricing-compare, +.pricing-faq, +.social-proof, +.public-about-page .public-content-section, +.public-contact-page .public-content-section { + position: relative; + padding: clamp(5rem, 10vw, 9rem) 0; + background: var(--launch-paper); +} + +.features-section--soft, +.features-word, +.pricing-compare, +.public-contact-page .public-content-section--soft, +.founder-story { + background: + radial-gradient(circle at 20% 15%, rgba(255, 207, 114, 0.14), transparent 28rem), + radial-gradient(circle at 88% 20%, rgba(139, 92, 246, 0.12), transparent 30rem), + #f4f0ff; +} + +.features-showcase, +.final-cta { + position: relative; + overflow: hidden; + color: #fffaf7; + background: + radial-gradient(circle at 16% 18%, rgba(255, 207, 114, 0.2), transparent 26rem), + radial-gradient(circle at 88% 12%, rgba(139, 92, 246, 0.38), transparent 30rem), + linear-gradient(135deg, #040713, #071225 58%, #25104d); +} + +.features-showcase h2, +.features-showcase h3, +.features-showcase .marketing-eyebrow, +.final-cta h2, +.final-cta .marketing-eyebrow { + color: #fffaf7; +} + +.features-showcase .features-showcase__intro h2, +.final-cta .marketing-eyebrow { + color: var(--launch-gold); +} + +.features-preview-pair, +.features-collage { + gap: clamp(1.5rem, 4vw, 3rem); +} + +.features-preview-pair .features-screenshot:nth-child(1), +.features-collage .features-screenshot:nth-child(1) { + transform: rotate(-1.5deg) translateY(1.4rem); +} + +.features-preview-pair .features-screenshot:nth-child(2), +.features-collage .features-screenshot:nth-child(2) { + transform: rotate(1.5deg) translateY(-1.4rem); +} + +.feature-icon-card, +.pricing-card, +.comparison-grid article, +.faq-grid article, +.public-card, +.testimonial-grid figure { + border: 1px solid rgba(7, 17, 31, 0.12); + border-radius: 30px; + padding: clamp(1.35rem, 3vw, 2rem); + background: + linear-gradient(145deg, rgba(255, 255, 255, 0.96), rgba(246, 240, 255, 0.78)), + #fff; + box-shadow: 0 24px 70px rgba(7, 17, 31, 0.1); +} + +.feature-icon-card:hover, +.pricing-card:hover, +.comparison-grid article:hover, +.faq-grid article:hover, +.public-card:hover, +.testimonial-grid figure:hover { + transform: translateY(-8px) rotate(-0.3deg); + box-shadow: 0 36px 94px rgba(7, 17, 31, 0.17); +} + +.feature-icon-card > span { + width: 4.4rem; + height: 4.4rem; + margin-bottom: 1.25rem; + border-radius: 24px; + color: #fff; + font-size: 1.02rem; + background: + radial-gradient(circle at 20% 15%, rgba(255, 255, 255, 0.5), transparent 36%), + linear-gradient(135deg, var(--launch-electric), #2737d7 54%, var(--launch-coral)); + box-shadow: 0 20px 46px rgba(139, 92, 246, 0.28); +} + +.features-showcase .feature-icon-card { + border-color: rgba(255, 255, 255, 0.15); + background: rgba(255, 255, 255, 0.1); + box-shadow: 0 28px 80px rgba(0, 0, 0, 0.24); + backdrop-filter: blur(16px); +} + +.pricing-card-grid { + gap: clamp(1rem, 2.6vw, 2rem); +} + +.pricing-card { + overflow: hidden; +} + +.pricing-card::after { + content: ""; + position: absolute; + inset: auto -20% -35% 28%; + height: 12rem; + background: radial-gradient(circle, rgba(139, 92, 246, 0.18), transparent 68%); +} + +.pricing-card--featured { + transform: translateY(-1.3rem); + border-color: rgba(139, 92, 246, 0.45); + box-shadow: 0 42px 110px rgba(139, 92, 246, 0.18); +} + +.pricing-badge, +.pricing-badge--trial { + color: #07111f; + border-color: rgba(255, 207, 114, 0.5); + background: linear-gradient(135deg, #fff4bd, var(--launch-gold)); +} + +.public-about-page .public-narrative { + max-width: 1020px; +} + +.public-about-page .public-narrative p { + max-width: 52rem; +} + +.public-about-page .public-narrative p:nth-child(2), +.public-about-page .public-narrative p:nth-child(4) { + margin-left: auto; +} + +.public-about-page .public-narrative strong { + display: block; + max-width: 12ch; + color: var(--launch-ink); + font-size: clamp(3.8rem, 8vw, 8rem); + line-height: 0.9; +} + +.public-about-page .public-feature-panel { + color: #fffaf7; + border-color: rgba(255, 255, 255, 0.15); + background: + radial-gradient(circle at 50% 0%, rgba(255, 207, 114, 0.2), transparent 28rem), + linear-gradient(135deg, #040713, #20104b); +} + +.public-about-page .public-feature-panel h2 { + color: #fffaf7; +} + +.public-contact-page .public-card-grid { + align-items: stretch; + gap: clamp(1rem, 3vw, 2rem); +} + +.public-contact-page .public-card:nth-child(2) { + transform: translateY(-2rem); +} + +.public-contact-page .faq-grid article { + background: rgba(255, 255, 255, 0.88); +} + +.public-footer { + background: + radial-gradient(circle at 16% 0%, rgba(139, 92, 246, 0.3), transparent 22rem), + linear-gradient(135deg, #040713, #071225); +} + +/* Phase 19A readability and warmer-section correction */ +.marketing-home { + --launch-paper: #fffaf0; + --launch-paper-warm: #f7efe2; + --launch-paper-soft: #fff6e8; + --launch-dark-text: #fffaf7; + --launch-dark-muted: #d9e1f2; + --launch-dark-subtle: #bfcbe0; + --launch-link-bright: #ffe19a; + background: + radial-gradient(circle at 50% -8%, rgba(255, 207, 114, 0.2), transparent 32rem), + radial-gradient(circle at 92% 18%, rgba(14, 42, 102, 0.3), transparent 36rem), + linear-gradient(180deg, #040713 0%, #071225 32%, var(--launch-paper) 32.1%, var(--launch-paper) 100%); +} + +.marketing-home .marketing-eyebrow, +.marketing-hero .marketing-eyebrow, +.features-hero .marketing-eyebrow, +.pricing-hero .marketing-eyebrow, +.public-about-page .public-hero .marketing-eyebrow, +.public-contact-page .public-hero .marketing-eyebrow, +.features-showcase .marketing-eyebrow, +.final-cta .marketing-eyebrow { + color: var(--launch-link-bright); +} + +.marketing-hero, +.features-hero, +.pricing-hero, +.public-about-page .public-hero, +.public-contact-page .public-hero, +.features-showcase, +.final-cta { + color: var(--launch-dark-text); +} + +.marketing-hero h1, +.features-hero h1, +.pricing-hero h1, +.public-about-page .public-hero h1, +.public-contact-page .public-hero h1, +.features-showcase h2, +.features-showcase h3, +.final-cta h2 { + color: var(--launch-dark-text); + text-shadow: 0 18px 56px rgba(0, 0, 0, 0.42); +} + +.marketing-hero .marketing-lead, +.features-hero .marketing-lead, +.pricing-hero .marketing-lead, +.public-about-page .public-hero .marketing-lead, +.public-contact-page .public-hero .marketing-lead, +.features-showcase__intro p, +.features-showcase .feature-icon-card p, +.features-did-you-know p, +.final-cta p, +.features-page .final-cta small { + color: var(--launch-dark-muted); +} + +.features-showcase a, +.final-cta a { + color: var(--launch-link-bright); +} + +.marketing-btn--secondary { + color: var(--launch-dark-text); + border-color: rgba(255, 250, 247, 0.42); + background: rgba(255, 250, 247, 0.13); +} + +.marketing-btn--secondary:hover, +.marketing-btn--secondary:focus { + color: #07111f; + border-color: rgba(255, 225, 154, 0.9); + background: var(--launch-link-bright); +} + +.features-showcase .feature-icon-card, +.final-cta__inner { + border-color: rgba(255, 250, 247, 0.2); + background: rgba(255, 250, 247, 0.11); +} + +.features-showcase .feature-icon-card h3, +.features-showcase .features-showcase__intro h2 { + color: var(--launch-dark-text); +} + +.features-did-you-know { + border-color: rgba(255, 225, 154, 0.45); + background: rgba(255, 250, 247, 0.11); +} + +.features-did-you-know strong { + color: var(--launch-link-bright); +} + +.home-image-card, +.features-screenshot { + background: linear-gradient(180deg, rgba(255, 252, 245, 0.96), rgba(247, 239, 226, 0.9)); +} + +.features-section, +.features-word, +.pricing-plans, +.pricing-compare, +.pricing-faq, +.social-proof, +.public-about-page .public-content-section, +.public-contact-page .public-content-section { + background: var(--launch-paper); +} + +.features-section--soft, +.features-word, +.pricing-compare, +.public-contact-page .public-content-section--soft, +.founder-story { + background: + radial-gradient(circle at 18% 12%, rgba(255, 207, 114, 0.15), transparent 28rem), + radial-gradient(circle at 88% 22%, rgba(7, 18, 37, 0.06), transparent 30rem), + var(--launch-paper-warm); +} + +.problem-section:nth-child(even)::before, +.features-section:nth-of-type(odd)::before { + background: + radial-gradient(circle at 78% 10%, rgba(255, 207, 114, 0.12), transparent 22rem), + linear-gradient(135deg, rgba(7, 15, 36, 0.045), rgba(255, 207, 114, 0.08)); +} + +.problem-visual--image, +.feature-icon-card, +.pricing-card, +.comparison-grid article, +.faq-grid article, +.public-card, +.testimonial-grid figure { + background: + linear-gradient(145deg, rgba(255, 253, 248, 0.98), rgba(247, 239, 226, 0.88)), + #fffaf0; +} + +.feature-icon-card p, +.pricing-card__heading p, +.pricing-price span, +.pricing-price small, +.comparison-grid p, +.faq-grid p, +.public-card p, +.public-narrative p { + color: #53606f; +} + +.features-section__heading h2, +.features-word h2, +.problem-copy h3, +.section-heading h2, +.pricing-card h3, +.comparison-grid h3, +.faq-grid h3, +.public-card h2, +.public-about-page .public-narrative strong { + color: var(--launch-ink); +} + +@keyframes launchFloat { + 0%, 100% { + transform: rotateX(9deg) rotateY(-14deg) rotateZ(2deg) translateY(1rem); + } + + 50% { + transform: rotateX(7deg) rotateY(-11deg) rotateZ(1deg) translateY(-0.5rem); + } +} + .reveal-section { opacity: 0; transform: translateY(24px); transition: opacity 0.72s ease, transform 0.72s ease; } -.marketing-hero.reveal-section { +.marketing-hero.reveal-section, +.features-hero.reveal-section, +.pricing-hero.reveal-section, +.public-hero.reveal-section, +.help-centre-hero.reveal-section { opacity: 1; transform: none; } @@ -5171,7 +6233,14 @@ a:focus-visible { @media (prefers-reduced-motion: reduce) { .hero-product, - .reveal-section { + .reveal-section, + .feature-icon-card, + .pricing-card, + .comparison-grid article, + .faq-grid article, + .public-card, + .testimonial-grid figure, + .help-centre-page .plain-card { animation: none; transition: none; } @@ -5184,6 +6253,11 @@ a:focus-visible { @media (max-width: 1060px) { .marketing-hero__grid, + .features-hero__grid, + .features-word__grid, + .features-split, + .features-preview-pair, + .features-collage, .problem-section, .founder-story__grid { grid-template-columns: 1fr; @@ -5440,3 +6514,356 @@ a:focus-visible { } } + +/* Final guardrail: explicit readable text on public marketing dark sections. */ +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta), +.public-about-page .public-hero, +.public-contact-page .public-hero, +.public-footer { + color: #fffaf7; +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) :where(h1, h2, h3, h4), +.public-about-page .public-hero :where(h1, h2, h3, h4), +.public-contact-page .public-hero :where(h1, h2, h3, h4), +.public-footer :where(h1, h2, h3, h4, .public-footer__brand) { + color: #fffaf7 !important; +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) :where(p, li, dd), +.public-about-page .public-hero :where(p, li), +.public-contact-page .public-hero :where(p, li), +.public-footer :where(p, li, span) { + color: rgba(255, 255, 255, 0.82) !important; +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) :where(small, figcaption), +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) :where(.muted, .marketing-lead), +.public-about-page .public-hero :where(.marketing-lead, small, .muted), +.public-contact-page .public-hero :where(.marketing-lead, small, .muted), +.public-footer__nav a { + color: rgba(255, 255, 255, 0.72) !important; +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) .marketing-eyebrow, +.public-about-page .public-hero .marketing-eyebrow, +.public-contact-page .public-hero .marketing-eyebrow { + color: #ffe19a !important; +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) a:not(.marketing-btn), +.public-about-page .public-hero a:not(.marketing-btn), +.public-contact-page .public-hero a:not(.marketing-btn), +.public-footer a { + color: #ffe19a; + text-decoration-color: rgba(255, 225, 154, 0.55); +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) a:not(.marketing-btn):hover, +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) a:not(.marketing-btn):focus, +.public-about-page .public-hero a:not(.marketing-btn):hover, +.public-about-page .public-hero a:not(.marketing-btn):focus, +.public-contact-page .public-hero a:not(.marketing-btn):hover, +.public-contact-page .public-hero a:not(.marketing-btn):focus, +.public-footer a:hover, +.public-footer a:focus { + color: #ffffff; + text-decoration-color: rgba(255, 255, 255, 0.72); +} + +.features-showcase .feature-icon-card h3, +.features-showcase .feature-icon-card strong, +.features-showcase .features-did-you-know strong, +.final-cta__inner h2 { + color: #fffaf7 !important; +} + +.features-showcase .feature-icon-card p, +.features-showcase .feature-icon-card span, +.features-showcase .features-did-you-know p, +.final-cta__inner p, +.final-cta__inner small { + color: rgba(255, 255, 255, 0.76) !important; +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) .marketing-btn--secondary { + color: #fffaf7; + border-color: rgba(255, 255, 255, 0.44); + background: rgba(255, 255, 255, 0.14); +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) .marketing-btn--secondary:hover, +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) .marketing-btn--secondary:focus { + color: #07111f; + border-color: #ffe19a; + background: #ffe19a; +} + +.features-hero .features-hero__highlights article { + border-color: rgba(255, 255, 255, 0.2); + background: rgba(255, 255, 255, 0.12); +} + +.features-hero .features-hero__highlights article strong, +.features-hero .features-hero__highlights article h3, +.features-hero .features-hero__highlights article h4 { + color: #ffffff !important; +} + +.features-hero .features-hero__highlights article span, +.features-hero .features-hero__highlights article p, +.features-hero .features-hero__highlights article small { + color: rgba(255, 255, 255, 0.78) !important; +} + +.marketing-home-page .problem-intro, +.marketing-home-page .problem-stack, +.marketing-home-page .problem-section, +.marketing-home-page .problem-copy { + color: #ffffff; +} + +.marketing-home-page .problem-intro :where(h1, h2, h3, h4), +.marketing-home-page .problem-stack :where(h1, h2, h3, h4), +.marketing-home-page .problem-section :where(h1, h2, h3, h4), +.marketing-home-page .problem-copy :where(h1, h2, h3, h4) { + color: #ffffff !important; +} + +.marketing-home-page .problem-intro :where(p, li, span), +.marketing-home-page .problem-stack :where(p, li, span), +.marketing-home-page .problem-section :where(p, li, span), +.marketing-home-page .problem-copy :where(p, li, span), +.marketing-home-page .problem-copy p:not(.marketing-eyebrow) { + color: rgba(255, 255, 255, 0.84) !important; +} + +.marketing-home-page .problem-intro :where(small, .muted), +.marketing-home-page .problem-stack :where(small, .muted), +.marketing-home-page .problem-section :where(small, .muted), +.marketing-home-page .problem-copy :where(small, .muted) { + color: rgba(255, 255, 255, 0.7) !important; +} + +.marketing-home-page .problem-intro .marketing-eyebrow, +.marketing-home-page .problem-stack .marketing-eyebrow, +.marketing-home-page .problem-section .marketing-eyebrow, +.marketing-home-page .problem-copy .marketing-eyebrow { + color: #ffe19a !important; +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero) .marketing-lead, +.features-hero .features-hero__highlights article span, +.marketing-home :where(.features-showcase, .final-cta) p:not(.marketing-eyebrow), +.features-showcase .features-showcase__intro p:not(.marketing-eyebrow), +.features-showcase .feature-icon-card p, +.final-cta__inner p, +.marketing-home-page .problem-copy p:not(.marketing-eyebrow), +.marketing-home-page .problem-intro p:not(.marketing-eyebrow) { + color: rgba(255, 255, 255, 0.84) !important; +} + +.marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .features-showcase, .final-cta) small, +.features-page .final-cta small, +.final-cta__inner small { + color: rgba(255, 255, 255, 0.7) !important; +} + +/* Homepage problem journey sections sit on light/warm paper, not dark panels. */ +.marketing-home-page :where(.problem-intro, .problem-stack, .problem-section, .problem-copy) { + color: #07111f; +} + +.marketing-home-page :where(.problem-intro, .problem-stack, .problem-section, .problem-copy) :where(h1, h2, h3, h4) { + color: #07111f !important; +} + +.marketing-home-page :where(.problem-intro, .problem-stack, .problem-section, .problem-copy) :where(p, li, span), +.marketing-home-page .problem-copy p:not(.marketing-eyebrow), +.marketing-home-page .problem-intro p:not(.marketing-eyebrow) { + color: #53606f !important; +} + +.marketing-home-page :where(.problem-intro, .problem-stack, .problem-section, .problem-copy) :where(small, .muted) { + color: #667085 !important; +} + +.marketing-home-page :where(.problem-intro, .problem-stack, .problem-section, .problem-copy) .marketing-eyebrow { + color: #7b4b13 !important; +} + +.marketing-home-page .problem-intro h1, +.marketing-home-page .problem-intro h2, +.marketing-home-page .problem-intro h3, +.marketing-home-page .problem-stack .problem-copy h1, +.marketing-home-page .problem-stack .problem-copy h2, +.marketing-home-page .problem-stack .problem-copy h3, +.marketing-home-page .problem-stack .problem-copy h4, +.marketing-home-page .problem-section .problem-copy h1, +.marketing-home-page .problem-section .problem-copy h2, +.marketing-home-page .problem-section .problem-copy h3, +.marketing-home-page .problem-section .problem-copy h4 { + color: #07111f !important; +} + +.marketing-home-page .problem-intro .marketing-eyebrow, +.marketing-home-page .problem-stack .problem-copy .marketing-eyebrow, +.marketing-home-page .problem-section .problem-copy .marketing-eyebrow { + color: #7b4b13 !important; +} + +/* The homepage problem journey starts on the dark hero backdrop, then moves to paper. */ +.marketing-home-page .problem-intro h1, +.marketing-home-page .problem-intro h2, +.marketing-home-page .problem-intro h3, +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy h1, +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy h2, +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy h3, +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy h4 { + color: #ffffff !important; +} + +.marketing-home-page .problem-intro p:not(.marketing-eyebrow), +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy p:not(.marketing-eyebrow) { + color: rgba(255, 255, 255, 0.84) !important; +} + +.marketing-home-page .problem-intro .marketing-eyebrow, +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy .marketing-eyebrow { + color: #ffe19a !important; +} + +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-visual span, +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-visual strong, +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-visual p, +.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-visual small { + color: #07111f !important; +} + +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy h1, +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy h2, +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy h3, +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy h4 { + color: #07111f !important; +} + +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy p:not(.marketing-eyebrow) { + color: #53606f !important; +} + +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy .marketing-eyebrow { + color: #7b4b13 !important; +} + +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-visual span, +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-visual strong, +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-visual p, +.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-visual small { + color: #07111f !important; +} + +/* Public marketing light surfaces need the warmer brown eyebrow treatment. */ +.marketing-home :where( + .features-jump, + .features-section, + .features-word, + .features-faq, + .pricing-plans, + .pricing-compare, + .pricing-faq, + .founder-story, + .social-proof, + .public-content-section, + .public-mission +) .marketing-eyebrow { + color: #7b4b13 !important; +} + +/* Public marketing heading scale and containment. */ +.marketing-home :where(h1, h2, h3) { + max-width: 100%; + overflow-wrap: break-word; + text-wrap: balance; +} + +.marketing-home :where(.marketing-hero, .features-hero) h1 { + font-size: clamp(3.25rem, 5.8vw, 5.9rem); + line-height: 0.92; +} + +.marketing-home-page .marketing-hero h1 { + max-width: 12.5ch; + font-size: clamp(3.1rem, 4.8vw, 5.25rem); +} + +.features-hero h1 { + max-width: 9.5ch; +} + +.pricing-hero h1, +.public-hero h1 { + max-width: 13ch; + font-size: clamp(3.2rem, 6.4vw, 6.7rem); + line-height: 0.9; +} + +.problem-intro h2, +.problem-copy h3, +.features-section__heading h2, +.features-word h2, +.section-heading h2, +.public-mission h2 { + font-size: clamp(2.35rem, 4.3vw, 4.7rem); + line-height: 0.94; +} + +.features-split__copy h3, +.pricing-card h3, +.comparison-grid h3, +.faq-grid h3, +.public-card h2, +.public-policy h2 { + font-size: clamp(1.45rem, 2vw, 1.9rem); + line-height: 1.08; +} + +.marketing-home .feature-icon-card h3 { + font-size: clamp(1.02rem, 1.2vw, 1.18rem); + line-height: 1.16; + overflow-wrap: anywhere; + text-wrap: wrap; +} + +@media (max-width: 1060px) { + .marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .public-hero) h1 { + max-width: 12ch; + font-size: clamp(3rem, 9vw, 5rem); + } + + .problem-intro h2, + .problem-copy h3, + .features-section__heading h2, + .features-word h2, + .section-heading h2, + .public-mission h2 { + font-size: clamp(2.25rem, 7vw, 4.2rem); + } +} + +@media (max-width: 760px) { + .marketing-home :where(.marketing-hero, .features-hero, .pricing-hero, .public-hero) h1 { + max-width: 11ch; + font-size: clamp(2.65rem, 12vw, 3.7rem); + line-height: 0.96; + } + + .problem-intro h2, + .problem-copy h3, + .features-section__heading h2, + .features-word h2, + .section-heading h2, + .public-mission h2 { + font-size: clamp(2rem, 10vw, 3.2rem); + line-height: 0.98; + } +} diff --git a/PlotLine/wwwroot/css/plotline-theme.min.css b/PlotLine/wwwroot/css/plotline-theme.min.css index b69c9f3..efc8e42 100644 --- a/PlotLine/wwwroot/css/plotline-theme.min.css +++ b/PlotLine/wwwroot/css/plotline-theme.min.css @@ -1,421 +1 @@ -:root{--plotline-bg:#f4efe6;--plotline-bg-warm:#fbf8f0;--plotline-surface:rgba(255,252,246,.94);--plotline-surface-elevated:#fffdf8;--plotline-border-soft:rgba(84,68,48,.14);--plotline-text:#241f1b;--plotline-text-muted:#74695d;--plotline-accent:#7a4d2c;--plotline-accent-dark:#59371f;--plotline-accent-soft:#f2e2cf;--plotline-secondary:#315f67;--plotline-secondary-soft:#dfecef;--plotline-danger:#963f36;--plotline-warning:#b8762b;--plotline-success:#4d7654;--plotline-timeline-bg:#ede2d3;--plotline-shadow-card:0 14px 32px rgba(62,45,28,.08);--plotline-shadow-subtle:0 8px 20px rgba(62,45,28,.06);--plotline-radius:12px;--plotline-radius-sm:9px;--plotline-ink:var(--plotline-text);--plotline-muted:var(--plotline-text-muted);--plotline-paper:var(--plotline-bg-warm);--plotline-panel:var(--plotline-surface);--plotline-line:var(--plotline-border-soft);--plotline-soft:var(--plotline-accent-soft);--app-bg:var(--plotline-bg);--app-surface:var(--plotline-surface);--app-surface-alt:var(--plotline-surface-elevated);--app-text:var(--plotline-text);--app-text-muted:var(--plotline-text-muted);--app-border:var(--plotline-border-soft);--app-link:var(--plotline-accent-dark);--app-input-bg:rgba(255,253,248,.9);--app-input-text:var(--plotline-text);--app-card-bg:var(--plotline-surface);--app-timeline-bg:var(--plotline-timeline-bg)}.features-page{scroll-behavior:smooth}.features-hero{position:relative;overflow:hidden;padding:clamp(3.5rem,7vw,7.4rem) 0 clamp(3rem,6vw,5.25rem);background:radial-gradient(circle at 12% 18%,rgba(212,165,116,.2),transparent 26rem),radial-gradient(circle at 88% 8%,rgba(95,120,108,.18),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.features-hero__grid,.features-word__grid{display:grid;grid-template-columns:minmax(320px,.72fr) minmax(560px,1.28fr);align-items:center;gap:clamp(2rem,4vw,4.25rem)}.features-hero__copy{max-width:620px}.features-hero__highlights{display:grid;gap:.9rem;margin-top:1.75rem}.features-hero__highlights article{display:grid;gap:.15rem;padding:1rem 1.1rem;border:1px solid var(--marketing-line);border-radius:18px;background:rgba(255,255,255,.72);box-shadow:0 18px 46px rgba(31,42,68,.08)}.features-hero__highlights strong{color:var(--marketing-navy);font-size:1rem}.features-hero__highlights span,.features-section__heading p,.features-showcase__intro p,.features-word p,.features-bullet-list,.feature-icon-card p,.features-split__copy p,.features-faq p{color:var(--marketing-muted)}.features-screenshot{position:relative;margin:0;overflow:hidden;border:1px solid rgba(31,42,68,.14);border-radius:28px;background:linear-gradient(180deg,#fffdf8,#f7f0e8);box-shadow:var(--marketing-shadow)}.features-screenshot::before{content:"";display:block;height:38px;background:radial-gradient(circle at 24px 50%,#d77a68 0 5px,transparent 6px),radial-gradient(circle at 44px 50%,#e2bc72 0 5px,transparent 6px),radial-gradient(circle at 64px 50%,#79a286 0 5px,transparent 6px),linear-gradient(90deg,#f5efe7,#fff)}.features-screenshot img{display:block;width:100%;height:auto;object-fit:contain;background:#f8f3ec}.features-screenshot--hero{margin-right:min(-3vw,-1.5rem)}.features-screenshot--product,.features-screenshot--wide{box-shadow:0 28px 70px rgba(31,42,68,.14)}.features-screenshot--showcase{margin-bottom:1.35rem;border-color:rgba(255,255,255,.18);background:rgba(255,255,255,.92)}.features-screenshot--wide{max-width:1180px;margin-bottom:1.35rem}.features-screenshot figcaption,.feature-icon-card span{color:var(--marketing-rose);font-size:.78rem;font-weight:800;letter-spacing:.09em;text-transform:uppercase}.features-screenshot figcaption{padding:.8rem 1rem 1rem;background:#fff}.features-jump{padding:2rem 0;background:var(--marketing-offwhite)}.features-jump__grid{display:flex;flex-wrap:wrap;gap:.75rem}.features-jump__grid a{display:inline-flex;align-items:center;min-height:44px;padding:.65rem 1rem;border:1px solid rgba(31,42,68,.14);border-radius:999px;background:#fff;color:var(--marketing-navy);font-weight:800;text-decoration:none;box-shadow:0 10px 24px rgba(31,42,68,.07)}.features-jump__grid a:hover,.features-jump__grid a:focus{border-color:rgba(212,165,116,.8);color:var(--marketing-navy);transform:translateY(-1px)}.features-section,.features-showcase,.features-word,.features-faq{padding:clamp(4rem,8vw,7rem) 0}.features-section--soft,.features-word{background:linear-gradient(135deg,rgba(212,165,116,.18),transparent 38%),var(--marketing-cream)}.features-section__heading,.features-showcase__intro{max-width:880px;margin-bottom:clamp(2rem,4vw,3.25rem)}.features-section__heading h2,.features-showcase__intro h2,.features-word h2{max-width:780px}.features-preview-pair,.features-collage{display:grid;gap:clamp(1.25rem,3vw,2rem);margin-bottom:clamp(1.5rem,4vw,2.5rem)}.features-preview-pair{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}.features-collage{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.features-split{display:grid;grid-template-columns:minmax(0,1.42fr) minmax(300px,.58fr);align-items:center;gap:clamp(1.5rem,4vw,3rem);margin-bottom:clamp(1.5rem,4vw,2.5rem)}.features-split__copy{padding:clamp(1.4rem,3vw,2rem)}.features-split__copy h3{font-size:clamp(1.7rem,3vw,2.35rem)}.features-icon-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1rem}.features-icon-grid--five{grid-template-columns:repeat(5,minmax(0,1fr))}.features-icon-grid--three{grid-template-columns:repeat(3,minmax(0,1fr))}.features-icon-grid--showcase{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}.features-icon-grid--publish{grid-template-columns:repeat(5,minmax(0,1fr))}.feature-icon-card{min-height:100%;padding:clamp(1.1rem,2.5vw,1.5rem);border:1px solid rgba(31,42,68,.12);border-radius:22px;background:rgba(255,255,255,.88);box-shadow:0 18px 46px rgba(31,42,68,.09)}.feature-icon-card>span{display:inline-grid;place-items:center;width:3rem;height:3rem;margin-bottom:1rem;border-radius:16px;background:linear-gradient(135deg,rgba(212,165,116,.22),rgba(95,120,108,.16)),#fffaf2;color:var(--marketing-navy);letter-spacing:0}.feature-icon-card--large{padding:clamp(1.25rem,3vw,1.8rem);background:linear-gradient(145deg,rgba(255,255,255,.94),rgba(250,248,245,.88)),#fff}.feature-icon-card h3{margin:0 0 .55rem;overflow-wrap:anywhere;font-size:clamp(1rem,1.35vw,1.18rem);line-height:1.18}.feature-icon-card p{margin:0}.features-showcase{position:relative;overflow:hidden;background:linear-gradient(135deg,rgba(31,42,68,.96),rgba(49,66,99,.96)),var(--marketing-navy)}.features-showcase .marketing-eyebrow,.features-showcase h2,.features-showcase h3{color:#fff}.features-showcase__intro p,.features-showcase .feature-icon-card p{color:rgba(255,255,255,.72)}.features-showcase .features-showcase__intro h2,.features-showcase .feature-icon-card h3{color:#f0c995}.features-showcase .feature-icon-card{border-color:rgba(255,255,255,.15);background:rgba(255,255,255,.1);box-shadow:0 24px 60px rgba(0,0,0,.18)}.features-showcase .feature-icon-card>span{background:rgba(255,255,255,.13);color:#f0c995}.features-did-you-know{margin-top:1.4rem;padding:clamp(1.35rem,3vw,2rem);border:1px solid rgba(212,165,116,.42);border-radius:24px;background:rgba(255,255,255,.11);color:#fff}.features-did-you-know strong{display:block;margin-bottom:.35rem;color:#f0c995;font-size:1.1rem}.features-did-you-know p{max-width:920px;margin:0;color:rgba(255,255,255,.78)}.features-word{border-top:1px solid rgba(31,42,68,.08);border-bottom:1px solid rgba(31,42,68,.08)}.features-word__grid{grid-template-columns:minmax(300px,.62fr) minmax(560px,1.38fr)}.features-bullet-list{display:grid;gap:.7rem;margin:1.4rem 0 0;padding:0;list-style:none}.features-bullet-list li{position:relative;padding-left:1.7rem}.features-bullet-list li::before{content:"";position:absolute;left:0;top:.45rem;width:.75rem;height:.75rem;border-radius:50%;background:linear-gradient(135deg,var(--marketing-gold),var(--marketing-rose))}.features-faq{background:var(--marketing-offwhite)}.features-page .final-cta small{display:block;margin-top:1rem;color:rgba(255,255,255,.72)}@media(max-width:980px){.features-hero__grid,.features-word__grid,.features-split,.features-preview-pair,.features-collage{grid-template-columns:1fr}.features-screenshot--hero{margin-right:0}.features-icon-grid,.features-icon-grid--three{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:680px){.features-hero{padding-top:2.4rem}.features-icon-grid,.features-icon-grid--three,.features-icon-grid--publish{grid-template-columns:1fr}.features-jump__grid a{width:100%;justify-content:center}.features-screenshot,.feature-icon-card{border-radius:18px}.features-screenshot::before{height:30px}}[data-theme="dark"]{color-scheme:dark;--plotline-bg:#14110f;--plotline-bg-warm:#1c1714;--plotline-surface:rgba(35,29,25,.96);--plotline-surface-elevated:#2a231e;--plotline-border-soft:rgba(231,214,190,.16);--plotline-text:#f1e7d8;--plotline-text-muted:#b9aa99;--plotline-accent:#d49a62;--plotline-accent-dark:#f0c99d;--plotline-accent-soft:#3a2a20;--plotline-secondary:#78b9c2;--plotline-secondary-soft:#21383d;--plotline-danger:#ee8e83;--plotline-warning:#e0ad65;--plotline-success:#91c99a;--plotline-timeline-bg:#211b17;--plotline-shadow-card:0 16px 38px rgba(0,0,0,.34);--plotline-shadow-subtle:0 10px 26px rgba(0,0,0,.24);--plotline-ink:var(--plotline-text);--plotline-muted:var(--plotline-text-muted);--plotline-paper:var(--plotline-bg-warm);--plotline-panel:var(--plotline-surface);--plotline-line:var(--plotline-border-soft);--plotline-soft:var(--plotline-accent-soft);--app-bg:#14110f;--app-surface:rgba(35,29,25,.96);--app-surface-alt:#2a231e;--app-text:#f4eadc;--app-text-muted:#cdbba7;--app-border:rgba(231,214,190,.2);--app-link:#f1c38f;--app-input-bg:#211b17;--app-input-text:#f4eadc;--app-card-bg:rgba(35,29,25,.96);--app-timeline-bg:#211b17;--bs-body-bg:var(--app-bg);--bs-body-color:var(--app-text);--bs-secondary-color:var(--app-text-muted);--bs-tertiary-color:#a99886;--bs-border-color:var(--app-border);--bs-link-color:var(--app-link);--bs-link-hover-color:#ffd5a6;--bs-card-bg:var(--app-card-bg);--bs-card-color:var(--app-text);--bs-modal-bg:var(--app-surface-alt);--bs-modal-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-color:var(--app-text);--bs-list-group-bg:var(--app-surface);--bs-list-group-color:var(--app-text);--bs-table-color:var(--app-text);--bs-table-bg:transparent}body{color:var(--plotline-text);background:radial-gradient(circle at top left,rgba(185,134,83,.18),transparent 34rem),linear-gradient(135deg,var(--plotline-bg-warm),var(--plotline-bg) 52%,#efe6d8);font-family:"Segoe UI","Aptos",system-ui,-apple-system,BlinkMacSystemFont,sans-serif}h1,h2,h3,.navbar-brand,.context-title strong{font-family:Georgia,"Times New Roman",serif;letter-spacing:.01em}a{color:var(--plotline-accent-dark);text-decoration-color:rgba(122,77,44,.28);text-underline-offset:.18em}a:hover{color:var(--plotline-secondary)}.plotline-nav{position:relative;z-index:1030;background:rgba(255,251,243,.9)!important;border-bottom:1px solid rgba(84,68,48,.13)!important;box-shadow:0 8px 28px rgba(62,45,28,.06)}.navbar-brand{color:var(--plotline-accent-dark)!important;font-size:1.35rem}.plotline-nav .nav-link{border-radius:999px;color:var(--plotline-text-muted)!important;font-weight:650;padding-inline:.82rem}.plotline-nav .nav-link:hover,.plotline-nav .nav-link:focus{color:var(--plotline-accent-dark)!important;background:rgba(122,77,44,.1)}.page-heading h1,.workspace-heading h1{color:#201a16;text-wrap:balance}.eyebrow{color:var(--plotline-accent);font-size:.72rem;letter-spacing:.11em}.lead-text,.muted{color:var(--plotline-text-muted)!important}.plain-card,.empty-panel,.edit-panel,.list-section,.story-bible-section,.story-bible-card,.archive-item-card,.warning-card,.warning-mini-card,.scenario-chapter,.drag-drop-panel,.import-tree-book,.import-confirmation,.import-docs details{background:var(--plotline-surface);border-color:var(--plotline-border-soft);border-radius:var(--plotline-radius);box-shadow:var(--plotline-shadow-subtle)}.plain-card,.story-bible-card,.archive-item-card,.timeline-scene-card,.inspector-section{transition:box-shadow .18s ease,transform .18s ease,border-color .18s ease}.plain-card:hover,.story-bible-card:hover,.archive-item-card:hover{border-color:rgba(122,77,44,.24);box-shadow:var(--plotline-shadow-card)}.empty-panel{background:linear-gradient(135deg,rgba(255,253,248,.96),rgba(244,229,209,.72)),var(--plotline-surface)}.btn{border-radius:999px;font-weight:700;letter-spacing:.01em;box-shadow:none}.btn-primary{--bs-btn-bg:var(--plotline-accent);--bs-btn-border-color:var(--plotline-accent);--bs-btn-hover-bg:var(--plotline-accent-dark);--bs-btn-hover-border-color:var(--plotline-accent-dark);--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:var(--plotline-accent-dark)}.btn-outline-primary,.btn-outline-secondary{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-border-color:rgba(122,77,44,.26);--bs-btn-hover-color:var(--plotline-accent-dark);--bs-btn-hover-bg:rgba(122,77,44,.12);--bs-btn-hover-border-color:rgba(122,77,44,.38);background:rgba(255,252,246,.72)}.btn-outline-danger{--bs-btn-color:var(--plotline-danger);--bs-btn-border-color:rgba(150,63,54,.34);--bs-btn-hover-bg:var(--plotline-danger);--bs-btn-hover-border-color:var(--plotline-danger)}.status-pill,.purpose-chip,.location-badge,.archived-badge,.severity-pill,.overview-chip,.story-bible-card-title span{border:1px solid rgba(84,68,48,.13);border-radius:999px;background:rgba(255,250,241,.82);color:var(--plotline-text-muted);box-shadow:inset 0 1px 0 rgba(255,255,255,.75);font-weight:750;letter-spacing:.02em}.status-pill{background:var(--plotline-secondary-soft);color:#284f56}.purpose-chip{background:var(--plotline-accent-soft);color:var(--plotline-accent-dark)}.severity-pill.warning,.warning-placeholder.active{background:#fbecd3;color:#7b4b13;border-color:rgba(184,118,43,.28)}.context-header{background:rgba(255,251,243,.78);border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);box-shadow:var(--plotline-shadow-subtle)}.context-nav a{border-radius:999px;color:var(--plotline-text-muted);font-weight:700}.context-nav a:hover,.context-nav a:focus{background:rgba(122,77,44,.1);color:var(--plotline-accent-dark)}.pw-page-heading{align-items:center;gap:clamp(.85rem,2vw,1.35rem);margin-bottom:1rem}.pw-page-heading>div:first-child{min-width:min(100%,26rem)}.pw-page-heading .lead-text{max-width:52rem}.pw-project-nav{display:grid;gap:.55rem;margin:0 0 1.1rem;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);padding:.7rem .75rem;background:linear-gradient(135deg,rgba(255,253,248,.9),rgba(242,226,207,.55)),var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle)}.pw-project-nav__label{color:var(--plotline-accent);font-size:.68rem;font-weight:850;letter-spacing:.1em;line-height:1;text-transform:uppercase}.pw-project-nav__links,.pw-character-nav{display:flex;flex-wrap:wrap;gap:.42rem;align-items:center}.pw-project-nav__link,.pw-character-nav__link{display:inline-flex;align-items:center;justify-content:center;min-height:2rem;border:1px solid rgba(84,68,48,.16);border-radius:999px;padding:.32rem .68rem;color:var(--plotline-accent-dark);background:rgba(255,250,241,.82);box-shadow:inset 0 1px 0 rgba(255,255,255,.72);font-size:.8rem;font-weight:780;line-height:1.1;text-decoration:none;transition:background-color .16s ease,border-color .16s ease,color .16s ease,box-shadow .16s ease}.pw-project-nav__link:hover,.pw-project-nav__link:focus,.pw-character-nav__link:hover,.pw-character-nav__link:focus{color:var(--plotline-accent-dark);border-color:rgba(122,77,44,.32);background:rgba(122,77,44,.11);box-shadow:inset 0 1px 0 rgba(255,255,255,.62),0 5px 12px rgba(62,45,28,.06)}.pw-project-nav__link.active,.pw-character-nav__link.active{color:#fff8ec;border-color:var(--plotline-accent);background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 6px 14px rgba(62,45,28,.16)}.pw-character-nav{margin:0 0 1rem;border-bottom:1px solid rgba(84,68,48,.11);padding-bottom:.65rem}.pw-actions{flex:0 0 auto}.pw-actions__toggle{--bs-btn-color:var(--plotline-accent-dark);--bs-btn-bg:rgba(255,250,241,.86);--bs-btn-border-color:rgba(122,77,44,.32);--bs-btn-hover-color:#fff8ec;--bs-btn-hover-bg:var(--plotline-accent);--bs-btn-hover-border-color:var(--plotline-accent);--bs-btn-active-color:#fff8ec;--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:var(--plotline-accent-dark);min-height:2.35rem;padding-inline:1rem;box-shadow:var(--plotline-shadow-subtle)}.pw-actions .dropdown-menu{--bs-dropdown-bg:var(--plotline-surface-elevated);--bs-dropdown-color:var(--plotline-text);--bs-dropdown-border-color:var(--plotline-border-soft);--bs-dropdown-link-color:var(--plotline-text);--bs-dropdown-link-hover-color:var(--plotline-accent-dark);--bs-dropdown-link-hover-bg:rgba(122,77,44,.1);--bs-dropdown-divider-bg:rgba(84,68,48,.13);border-radius:var(--plotline-radius-sm);box-shadow:var(--plotline-shadow-card)}.pw-actions .dropdown-item{font-weight:650}.pw-actions .dropdown-item.text-danger{color:var(--plotline-danger)!important}.pw-actions .dropdown-item.text-danger:hover,.pw-actions .dropdown-item.text-danger:focus{color:#fff8ec!important;background:var(--plotline-danger)}.project-gallery{display:grid;gap:1rem}.project-tabs{gap:.45rem;padding:.35rem;border:1px solid var(--plotline-border-soft);border-radius:999px;background:rgba(255,250,241,.72);box-shadow:var(--plotline-shadow-subtle);width:fit-content;max-width:100%}.project-tabs .nav-link{border-radius:999px;color:var(--plotline-text-muted);font-weight:800;padding:.48rem .9rem}.project-tabs .nav-link:hover,.project-tabs .nav-link:focus{color:var(--plotline-accent-dark);background:rgba(122,77,44,.1)}.project-tabs .nav-link.active{color:#fff8ec;background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 8px 16px rgba(62,45,28,.14)}.project-tab-content{min-width:0}.project-card-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,22rem),1fr));gap:1rem}.project-card{display:grid;grid-template-rows:auto 1fr auto;overflow:hidden;min-height:100%;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius);background:var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle);transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}.project-card:hover{border-color:rgba(122,77,44,.24);box-shadow:var(--plotline-shadow-card);transform:translateY(-1px)}.project-card--archived{opacity:.88}.project-card__visual{position:relative;display:grid;place-items:center;min-height:11rem;overflow:hidden;background:radial-gradient(circle at 26% 22%,rgba(255,255,255,.64),transparent 11rem),linear-gradient(135deg,rgba(242,226,207,.94),rgba(223,236,239,.78))}.project-card--archived .project-card__visual{filter:saturate(.55)}.project-card__body{display:grid;gap:.75rem;padding:1rem 1rem .85rem}.project-card__heading{display:flex;justify-content:space-between;gap:.8rem}.project-card__heading h2{margin:0;font-size:1.35rem;line-height:1.1}.project-card__heading h2 a{color:var(--plotline-text);text-decoration-color:rgba(122,77,44,.28)}.project-card__description{display:-webkit-box;min-height:3.2rem;margin:0;overflow:hidden;color:var(--plotline-text-muted);-webkit-box-orient:vertical;-webkit-line-clamp:3}.project-card__stats{display:flex;flex-wrap:wrap;gap:.45rem}.project-card__stats span{display:inline-flex;align-items:baseline;gap:.25rem;border:1px solid rgba(84,68,48,.12);border-radius:999px;padding:.28rem .6rem;color:var(--plotline-text-muted);background:rgba(255,250,241,.74);font-size:.82rem;font-weight:700}.project-card__stats strong{color:var(--plotline-accent-dark)}.project-card__actions{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;border-top:1px solid rgba(84,68,48,.1);padding:.85rem 1rem 1rem}.project-card__actions form{display:inline-flex;margin:0}.project-cover-stack{position:relative;width:min(11.5rem,70%);height:9.4rem}.project-cover-stack__cover{position:absolute;top:50%;left:50%;width:4.65rem;aspect-ratio:2/3;border:3px solid rgba(255,253,248,.86);border-radius:.45rem;background:var(--plotline-soft);box-shadow:0 12px 28px rgba(62,45,28,.22);object-fit:cover}.project-cover-stack__cover--0{z-index:3;transform:translate(-50%,-50%) rotate(-1deg) scale(1.08)}.project-cover-stack__cover--1{z-index:2;transform:translate(-88%,-47%) rotate(-8deg) scale(.94)}.project-cover-stack__cover--2{z-index:1;transform:translate(-12%,-47%) rotate(8deg) scale(.94)}.project-cover-fallback{display:grid;place-items:center;width:min(9.5rem,62%);aspect-ratio:2/3;border:1px solid rgba(84,68,48,.18);border-radius:.8rem;background:linear-gradient(180deg,rgba(255,253,248,.34),transparent 32%),linear-gradient(135deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow:0 14px 30px rgba(62,45,28,.2);color:#fff8ec}.project-cover-fallback span{font-family:Georgia,"Times New Roman",serif;font-size:clamp(2.2rem,7vw,3.2rem);font-weight:700;letter-spacing:.02em}.project-empty-state{margin:0}.character-gallery-upload{display:grid;grid-template-columns:minmax(14rem,1fr) minmax(14rem,1fr) auto;gap:.75rem;align-items:end;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,250,241,.56)}.character-relationship-editor{gap:.85rem}.character-relationship-read{display:grid;gap:.75rem}.character-relationship-edit-form{width:100%;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,250,241,.56)}.character-gallery-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,14rem),1fr));gap:.9rem}.character-gallery-card{overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);background:rgba(255,253,248,.72);box-shadow:var(--plotline-shadow-subtle)}.character-gallery-card>img{display:block;width:100%;aspect-ratio:4/3;background:var(--plotline-soft);object-fit:cover}.character-gallery-card__body{display:grid;gap:.3rem;padding:.75rem}.character-gallery-card__actions{border-top:1px solid rgba(84,68,48,.1);padding:0 .75rem .75rem}.character-avatar-crop-layout{display:grid;grid-template-columns:minmax(0,1fr) minmax(12rem,16rem);gap:1rem;align-items:start}.character-avatar-crop-stage{position:relative;display:grid;place-items:center;min-height:24rem;overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:var(--plotline-radius-sm);background:var(--plotline-soft)}.character-avatar-crop-stage img{display:block;max-width:100%;max-height:70vh;user-select:none}.character-avatar-crop-box{position:absolute;cursor:move;touch-action:none;border:2px solid #fff8ec;box-shadow:0 0 0 9999px rgba(20,17,15,.42),0 0 0 1px rgba(0,0,0,.18)}.character-avatar-crop-box span{position:absolute;right:.35rem;bottom:.35rem;width:.75rem;height:.75rem;border-right:2px solid #fff8ec;border-bottom:2px solid #fff8ec}.character-avatar-crop-side{display:grid;gap:.75rem}.character-avatar-preview{width:min(100%,12rem);aspect-ratio:1;overflow:hidden;border:1px solid var(--plotline-border-soft);border-radius:999px;background:var(--plotline-soft);box-shadow:var(--plotline-shadow-subtle)}.character-avatar-preview img{display:block;max-width:none;transform-origin:top left}@media(max-width:767.98px){.pw-page-heading{align-items:stretch}.pw-page-heading .pw-actions,.pw-page-heading .pw-actions__toggle{width:100%}.pw-project-nav{padding:.65rem}.project-tabs{width:100%;border-radius:var(--plotline-radius)}.project-tabs .nav-item,.project-tabs .nav-link{flex:1 1 auto}.project-card__actions .btn,.project-card__actions .dropdown{flex:1 1 auto}.character-gallery-upload,.character-avatar-crop-layout{grid-template-columns:1fr}}.timeline-workspace{background:linear-gradient(180deg,rgba(255,251,244,.84),rgba(237,226,211,.66)),var(--plotline-timeline-bg);border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius);box-shadow:0 18px 44px rgba(62,45,28,.1)}.timeline-chapter{background:rgba(255,250,242,.68);border-color:rgba(84,68,48,.15);border-radius:var(--plotline-radius)}.timeline-chapter-title,.lane-board-heading,.plot-lane-board-heading,.lane-group-heading{background:linear-gradient(135deg,rgba(255,252,246,.96),rgba(244,229,209,.86));border-color:rgba(84,68,48,.16);color:var(--plotline-accent-dark)}.timeline-scene-card{background:linear-gradient(180deg,#fffdf8,#fbf3e8);border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius-sm);box-shadow:0 10px 24px rgba(62,45,28,.08)}.timeline-scene-card:hover,.timeline-scene-card.selected,.timeline-scene-card.focus-match,.timeline-scene-card.keyboard-focus{border-color:rgba(122,77,44,.42);box-shadow:0 0 0 3px rgba(122,77,44,.11),0 16px 30px rgba(62,45,28,.12);transform:translateY(-1px)}.plot-lane-label,.asset-lane-label,.character-lane-label,.plot-lane-slot,.asset-lane-slot,.character-lane-slot{background:rgba(255,251,244,.74);border-color:rgba(84,68,48,.14)}.thread-marker,.asset-marker,.character-appearance-pill{box-shadow:0 4px 12px rgba(62,45,28,.12)}.scene-inspector-panel{background:rgba(255,251,243,.72)}.form-control,.form-select{border-color:rgba(84,68,48,.2);border-radius:10px;background-color:rgba(255,253,248,.9)}.form-control:focus,.form-select:focus,.btn:focus-visible,a:focus-visible{border-color:rgba(122,77,44,.56);box-shadow:0 0 0 .22rem rgba(122,77,44,.17);outline:0}.auth-page-heading{justify-content:center;max-width:560px;margin-right:auto;margin-left:auto;text-align:center}.auth-page-heading>div{width:100%}.auth-page-heading .lead-text{margin-right:auto;margin-left:auto;text-align:center}.auth-card{max-width:560px;margin:0 auto;padding:clamp(1.75rem,4vw,2.5rem)}.auth-form{display:flex;flex-direction:column;gap:1.35rem;border-top:0;padding-top:0}.auth-form .alert{margin-bottom:0}.auth-field-stack{display:grid;gap:1rem}.auth-field-stack .form-label{font-weight:650}.auth-field-stack .form-check{display:inline-flex;align-items:center;gap:.45rem;margin-bottom:0;color:var(--plotline-text-muted);font-weight:650}.auth-actions{display:flex;justify-content:center;gap:.75rem;flex-wrap:wrap}.auth-actions .btn{min-width:8.75rem}.auth-help{margin:0;text-align:center;font-size:.95rem}.auth-help a{font-weight:650}.two-factor-card{max-width:560px;margin:0 auto;padding:clamp(1.75rem,4vw,2.5rem)}.two-factor-body{display:flex;flex-direction:column;align-items:center;text-align:center;gap:1.5rem;border-top:0;padding-top:0}.two-factor-body .alert{width:100%;margin-bottom:0}.two-factor-code-group{display:grid;justify-items:center;gap:.75rem;width:100%}.two-factor-label{margin-bottom:0;font-weight:700;color:var(--plotline-text)}.two-factor-inputs{display:flex;justify-content:center;gap:.75rem;width:100%}.two-factor-digit{width:3.5rem;height:3.5rem;padding:0;text-align:center;font-size:1.6rem;font-weight:760;line-height:1;border-radius:.75rem;border-color:rgba(122,77,44,.28);background:var(--plotline-surface-elevated);color:var(--plotline-text)}.two-factor-digit:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .22rem rgba(122,77,44,.2),0 10px 22px rgba(62,45,28,.1)}.two-factor-actions{display:flex;justify-content:center;gap:.75rem;flex-wrap:wrap}.two-factor-actions .btn{min-width:8.75rem}.two-factor-help{display:grid;justify-items:center;gap:.2rem;margin:0;font-size:.95rem;color:var(--plotline-text-muted)}.two-factor-help a{font-weight:650}.two-factor-code-group .text-danger{min-height:1.4rem}@media(max-width:576px){.two-factor-card{padding:1.35rem}.two-factor-inputs{gap:.4rem}.two-factor-digit{width:3rem;height:3rem;font-size:1.45rem}.two-factor-actions{flex-direction:column;width:100%}.two-factor-actions .btn{width:100%}.auth-card{padding:1.35rem}.auth-actions{flex-direction:column;width:100%}.auth-actions .btn{width:100%}}.plotline-confirm-modal{background:#fffaf2;border:1px solid rgba(84,68,48,.16);border-radius:var(--plotline-radius);box-shadow:0 24px 60px rgba(38,30,22,.2)}.plotline-confirm-modal .modal-header,.plotline-confirm-modal .modal-footer{border-color:rgba(84,68,48,.12)}.alert-info,.alert-warning{border-color:rgba(84,68,48,.16);border-radius:var(--plotline-radius-sm);background:rgba(255,250,241,.92);color:var(--plotline-text)}.trial-status-panel,.trial-dashboard-banner{border-color:rgba(84,68,48,.16);background:linear-gradient(135deg,rgba(255,253,248,.96),rgba(242,226,207,.56)),var(--plotline-surface);box-shadow:var(--plotline-shadow-subtle)}.trial-status-panel--signup{border-color:rgba(49,95,103,.22);background:linear-gradient(135deg,rgba(223,236,239,.72),rgba(255,253,248,.92)),var(--plotline-surface)}.trial-status-panel h2,.trial-status-panel h3,.trial-dashboard-banner h2{color:var(--plotline-text)}.trial-progress{box-shadow:inset 0 1px 2px rgba(62,45,28,.08)}.trial-progress__bar{background:linear-gradient(90deg,var(--plotline-secondary),var(--plotline-accent))}.trial-status--fourteen-days{border-color:rgba(184,118,43,.28)}.trial-status--seven-days,.trial-status--three-days,.trial-status--one-day{border-color:rgba(184,118,43,.38);background:linear-gradient(135deg,rgba(251,236,211,.84),rgba(255,253,248,.92)),var(--plotline-surface)}.table{--bs-table-bg:transparent;--bs-table-color:var(--plotline-text);--bs-table-border-color:rgba(84,68,48,.12)}.page-heading,.workspace-heading{row-gap:.8rem}.page-heading h1,.workspace-heading h1{color:#211915}.lead-text{line-height:1.55}.btn-sm{padding:.28rem .72rem;font-size:.8rem}.button-row{gap:.55rem}.button-row .btn,.story-bible-actions a,.timeline-preset-panel .btn,.timeline-filter-actions .btn{white-space:nowrap}.badge,.soft-count,.attachment-kind,.preset-chip,.story-bible-meta span{border-radius:999px;font-weight:780;letter-spacing:.015em}.badge.text-bg-light,.story-bible-meta span,.soft-count{border:1px solid rgba(84,68,48,.13);background:rgba(255,250,241,.78)!important;color:var(--plotline-text-muted)!important}.badge.text-bg-warning,.warning-placeholder.active{border:1px solid rgba(184,118,43,.28);background:#fbecd3!important;color:#7b4b13!important}.badge.text-bg-success{background:rgba(77,118,84,.13)!important;color:#315936!important}.empty-panel,.future-lane-placeholder,.inspector-empty{position:relative;overflow:hidden}.empty-panel::before,.future-lane-placeholder::before,.inspector-empty::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:linear-gradient(180deg,var(--plotline-accent),var(--plotline-secondary));opacity:.42}.timeline-workspace{padding:.35rem}.timeline-shell{border-color:rgba(84,68,48,.14);background:linear-gradient(90deg,rgba(84,68,48,.05) 1px,transparent 1px) 0 0/calc(var(--timeline-scene-width) + var(--timeline-grid-gap)) 100%,linear-gradient(180deg,rgba(255,252,246,.94),rgba(244,235,221,.86))}.timeline-project-title,.timeline-book-title{border:1px solid rgba(45,33,23,.12);background:linear-gradient(135deg,rgba(49,95,103,.96),rgba(89,55,31,.94));box-shadow:8px 0 24px rgba(62,45,28,.1)}.timeline-book{padding:.15rem}.timeline-book-title{min-height:58px;align-content:center}.timeline-chapter{border:1px solid rgba(84,68,48,.13);background:linear-gradient(180deg,rgba(255,252,246,.78),rgba(242,226,207,.42));outline:0;box-shadow:inset 0 0 0 1px rgba(255,255,255,.6)}.timeline-chapter-title{min-height:52px;border-bottom:1px solid rgba(84,68,48,.13);border-radius:var(--plotline-radius-sm) var(--plotline-radius-sm) 0 0;backdrop-filter:blur(10px)}.timeline-chapter-title strong,.timeline-book-title strong{font-size:.96rem}.timeline-scenes{padding:.65rem}.timeline-scene-card,.timeline-empty-scene{border-radius:11px}.timeline-scene-card{position:relative;min-height:176px;border-color:rgba(84,68,48,.15);background:linear-gradient(180deg,rgba(255,253,248,.98),rgba(251,243,232,.95));box-shadow:0 10px 22px rgba(62,45,28,.08)}.timeline-scene-card::after{content:"";position:absolute;inset:0;border-radius:inherit;pointer-events:none;box-shadow:inset 0 1px 0 rgba(255,255,255,.85)}.timeline-scene-card strong{color:#221a15;font-size:.98rem;line-height:1.2}.scene-summary{color:var(--plotline-text-muted);line-height:1.38}.location-pill,.scene-pov-label,.metric-mini-summary,.dependency-placeholder,.warning-placeholder{border:1px solid rgba(84,68,48,.13);box-shadow:inset 0 1px 0 rgba(255,255,255,.68)}.timeline-placeholder-scene,.timeline-placeholder-cell{border-color:rgba(84,68,48,.18);color:rgba(84,68,48,.58);background:repeating-linear-gradient(-45deg,rgba(122,77,44,.06) 0 8px,rgba(255,255,255,.18) 8px 16px),rgba(255,252,246,.52)}.timeline-scene-card:hover,.timeline-scene-card.selected,.timeline-scene-card.focus-match,.timeline-scene-card.keyboard-focus,.timeline-scene-card.search-hit{z-index:3}.timeline-scene-card.selected::before,.timeline-scene-card.focus-match::before,.timeline-scene-card.keyboard-focus::before,.timeline-scene-card.search-hit::before{content:"";position:absolute;left:.65rem;right:.65rem;top:0;height:3px;border-radius:999px;background:linear-gradient(90deg,var(--plotline-accent),var(--plotline-secondary))}.timeline-section-header,.lane-board-heading,.pacing-heading{border:1px solid rgba(84,68,48,.13);backdrop-filter:blur(10px)}.plot-lane-board,.asset-lane-board,.character-lane-board{border-top-color:rgba(84,68,48,.12)}.plot-lane-label,.asset-lane-label,.character-lane-label{border-radius:10px;background:rgba(255,252,246,.94);box-shadow:6px 0 18px rgba(62,45,28,.06)}.character-lane-label{display:flex;align-items:center;gap:.55rem}.character-lane-label>span{display:grid;gap:.1rem;min-width:0}.character-lane-label small{color:var(--plotline-muted);font-size:.75rem;font-weight:700}.plot-lane-slot,.asset-lane-slot,.character-lane-slot{min-height:50px;border-radius:10px}.thread-marker,.asset-marker,.character-marker,.character-appearance-pill{min-height:24px;font-size:.7rem}.thread-marker{border-color:color-mix(in srgb,var(--plot-colour),#241f1b 18%)}.asset-marker{border-radius:8px;background:#eeeaf8}.character-marker{display:inline-flex;align-items:center;justify-content:center;background:#fff4d9}.drag-chip,[draggable="true"]{transition:transform .12s ease,box-shadow .12s ease,opacity .12s ease}.drag-chip.character{display:inline-flex;align-items:center;gap:.4rem}.drag-chip .visual-avatar,.character-lane-label .visual-avatar{flex:0 0 auto}.drag-chip:hover,[draggable="true"]:hover{transform:translateY(-1px)}.is-dragging{opacity:.55;box-shadow:0 0 0 3px rgba(49,95,103,.14)}.drop-target-active{outline-color:rgba(49,95,103,.34);background-color:rgba(223,236,239,.55)}.timeline-control-panel,.timeline-drag-palette,.drag-drop-panel{background:rgba(255,251,243,.82);backdrop-filter:blur(10px)}.timeline-filter-drawer,.timeline-control-group{border-color:rgba(84,68,48,.13);box-shadow:inset 0 1px 0 rgba(255,255,255,.75)}.scene-inspector-panel{border-color:rgba(84,68,48,.14);box-shadow:-14px 0 36px rgba(62,45,28,.07)}.inspector-header{border-bottom:1px solid rgba(84,68,48,.12);margin-bottom:.75rem;padding-bottom:.7rem}.inspector-header h2,.inspector-empty h2{color:#211915}.writer-mini-card{border-color:rgba(84,68,48,.13);background:rgba(255,253,248,.78)}.writer-mini-card[open]{box-shadow:0 10px 24px rgba(62,45,28,.07)}.writer-add-form,.writer-edit-form{gap:.5rem}.attachment-card-list{gap:.65rem}.attachment-summary{align-items:center}.attachment-kind{display:inline-flex;align-items:center;border:1px solid rgba(49,95,103,.18);padding:2px 8px;background:var(--plotline-secondary-soft);color:#284f56;font-size:.72rem;text-transform:uppercase}.attachment-preview-row{display:grid;grid-template-columns:96px minmax(0,1fr);gap:.75rem;align-items:start}.attachment-thumb{display:flex;align-items:center;justify-content:center;width:96px;aspect-ratio:4/3;overflow:hidden;border:1px solid rgba(84,68,48,.14);border-radius:10px;background:rgba(255,250,241,.88);text-decoration:none}.attachment-thumb img{width:100%;height:100%;object-fit:cover;transition:transform .18s ease}.attachment-thumb:hover img{transform:scale(1.04)}.attachment-thumb-fallback span{color:var(--plotline-text-muted);font-size:.76rem;font-weight:850;letter-spacing:.06em;text-transform:uppercase}.attachment-preview-copy{display:grid;gap:.45rem;min-width:0}.attachment-preview-copy p{margin:0}.attachment-add-card summary{color:var(--plotline-accent-dark)}.story-bible-section,.writer-dashboard-panel{border-color:rgba(84,68,48,.14);background:rgba(255,251,243,.8)}.writer-dashboard-panel:first-child{border-color:rgba(49,95,103,.22);background:linear-gradient(135deg,rgba(223,236,239,.56),rgba(255,251,243,.9));box-shadow:0 18px 38px rgba(49,95,103,.09)}.writer-queue-list{display:grid;gap:.75rem}.writer-queue-card{border-color:rgba(84,68,48,.13);background:rgba(255,253,248,.86)}.writer-dashboard-panel:first-child .writer-queue-card:first-child{border-left:4px solid var(--plotline-secondary)}.writer-queue-card h3{line-height:1.25}.story-bible-nav{background:rgba(255,251,243,.78);border:1px solid rgba(84,68,48,.12);border-radius:var(--plotline-radius);padding:.45rem}.story-bible-card{background:rgba(255,253,248,.9)}.story-bible-card h3{color:#211915}.story-bible-card-title{gap:.8rem}.story-bible-facts{border-top:1px solid rgba(84,68,48,.1);padding-top:.65rem}.story-bible-actions a{border-color:rgba(122,77,44,.2);background:rgba(255,250,241,.75)}.story-bible-actions a:hover{background:rgba(122,77,44,.1)}.timeline-settings-form{display:grid;gap:1rem;max-width:1180px}.timeline-settings-section{display:grid;gap:.85rem}.timeline-settings-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:.75rem}.timeline-setting-card{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.72rem;align-items:start;min-height:92px;border:1px solid rgba(84,68,48,.13);border-radius:var(--plotline-radius-sm);padding:.85rem;background:rgba(255,253,248,.82);box-shadow:var(--plotline-shadow-subtle);cursor:pointer}.timeline-setting-card input{margin-top:.25rem;accent-color:var(--plotline-secondary)}.timeline-setting-card strong,.timeline-setting-card small{display:block}.timeline-setting-card strong{color:#211915}.timeline-setting-card small{margin-top:.25rem;color:var(--plotline-text-muted);line-height:1.4}.timeline-setting-card:has(input:checked){border-color:rgba(49,95,103,.25);background:linear-gradient(135deg,rgba(223,236,239,.52),rgba(255,253,248,.92))}.plotline-confirm-modal .modal-title{font-family:Georgia,"Times New Roman",serif}.plotline-confirm-modal .modal-body{color:var(--plotline-text-muted);line-height:1.55}.theme-switcher{flex:0 0 auto}.theme-switcher .btn{--bs-btn-color:var(--plotline-text-muted);--bs-btn-border-color:var(--plotline-border-soft);--bs-btn-hover-color:var(--plotline-accent-dark);--bs-btn-hover-bg:rgba(122,77,44,.1);--bs-btn-hover-border-color:rgba(122,77,44,.28);--bs-btn-active-color:#fff;--bs-btn-active-bg:var(--plotline-accent);--bs-btn-active-border-color:var(--plotline-accent);font-weight:700}[data-theme="dark"] body{color:var(--app-text);background:radial-gradient(circle at top left,rgba(212,154,98,.12),transparent 34rem),linear-gradient(135deg,var(--plotline-bg-warm),var(--plotline-bg) 52%,#0f0d0c)}[data-theme="dark"] a:not(.btn){color:var(--app-link);text-decoration-color:rgba(241,195,143,.36)}[data-theme="dark"] a:not(.btn):hover,[data-theme="dark"] a:not(.btn):focus{color:var(--bs-link-hover-color)}[data-theme="dark"] .text-muted,[data-theme="dark"] .form-text,[data-theme="dark"] .lead-text,[data-theme="dark"] .scene-summary,[data-theme="dark"] .timeline-chapter-title span,[data-theme="dark"] .timeline-book-title span,[data-theme="dark"] .plotline-nav .nav-link,[data-theme="dark"] .plotline-nav .navbar-text,[data-theme="dark"] .plain-card p,[data-theme="dark"] .inspector-empty,[data-theme="dark"] .plotline-confirm-modal .modal-body,[data-theme="dark"] .timeline-setting-card small{color:var(--app-text-muted)!important}[data-theme="dark"] .plotline-nav{background:rgba(29,23,20,.92)!important;border-bottom-color:var(--plotline-border-soft)!important;box-shadow:0 8px 28px rgba(0,0,0,.24)}[data-theme="dark"] .plotline-nav .nav-link:hover,[data-theme="dark"] .plotline-nav .nav-link:focus,[data-theme="dark"] .plotline-nav .nav-link.active{color:var(--app-link)!important}[data-theme="dark"] .navbar-toggler{border-color:var(--plotline-border-soft)}[data-theme="dark"] h1,[data-theme="dark"] h2,[data-theme="dark"] h3,[data-theme="dark"] h4,[data-theme="dark"] h5,[data-theme="dark"] h6,[data-theme="dark"] .page-heading h1,[data-theme="dark"] .workspace-heading h1,[data-theme="dark"] .timeline-scene-card strong,[data-theme="dark"] .timeline-chapter-title strong,[data-theme="dark"] .timeline-book-title strong,[data-theme="dark"] .plain-card h2,[data-theme="dark"] .plain-card h3,[data-theme="dark"] .context-title strong,[data-theme="dark"] .asset-card h2,[data-theme="dark"] .character-card h2,[data-theme="dark"] .inspector-header h2,[data-theme="dark"] .inspector-empty h2,[data-theme="dark"] .inspector-section h3,[data-theme="dark"] .story-bible-card h3,[data-theme="dark"] .timeline-setting-card strong{color:var(--app-text)}[data-theme="dark"] .plain-card,[data-theme="dark"] .card,[data-theme="dark"] .empty-panel,[data-theme="dark"] .edit-panel,[data-theme="dark"] .list-section,[data-theme="dark"] .list-group-item,[data-theme="dark"] .asset-card,[data-theme="dark"] .story-bible-section,[data-theme="dark"] .story-bible-card,[data-theme="dark"] .story-bible-nav,[data-theme="dark"] .attention-list article,[data-theme="dark"] .warning-filter-panel,[data-theme="dark"] .validation-summary,[data-theme="dark"] .analytics-section,[data-theme="dark"] .metric-shape-chart,[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .analytics-list-item,[data-theme="dark"] .analytics-count-row,[data-theme="dark"] .purpose-stat-row,[data-theme="dark"] .archive-item-card,[data-theme="dark"] .warning-card,[data-theme="dark"] .warning-mini-card,[data-theme="dark"] .scenario-chapter,[data-theme="dark"] .drag-drop-panel,[data-theme="dark"] .import-tree-book,[data-theme="dark"] .import-confirmation,[data-theme="dark"] .import-docs details,[data-theme="dark"] .scene-inspector-panel,[data-theme="dark"] .pacing-panel,[data-theme="dark"] .timeline-control-panel,[data-theme="dark"] .timeline-drag-palette,[data-theme="dark"] .timeline-filter-drawer,[data-theme="dark"] .timeline-control-group,[data-theme="dark"] .timeline-visibility-panel,[data-theme="dark"] .timeline-jump-panel,[data-theme="dark"] .timeline-preset-panel,[data-theme="dark"] .attachment-card,[data-theme="dark"] .attachment-preview-row,[data-theme="dark"] .attachment-thumb,[data-theme="dark"] .asset-mini-item,[data-theme="dark"] .archive-empty,[data-theme="dark"] .writer-dashboard-panel,[data-theme="dark"] .writer-dashboard-panel:first-child,[data-theme="dark"] .writer-queue-card,[data-theme="dark"] .writer-mini-card,[data-theme="dark"] .timeline-setting-card,[data-theme="dark"] .timeline-setting-card:has(input:checked),[data-theme="dark"] .thread-event-item,[data-theme="dark"] .asset-event-item,[data-theme="dark"] .story-asset-event-item{color:var(--app-text);background:var(--app-surface);border-color:var(--app-border);box-shadow:var(--plotline-shadow-subtle)}[data-theme="dark"] .asset-card{border-left-color:rgba(241,195,143,.42)}[data-theme="dark"] .asset-card h2 a,[data-theme="dark"] .story-bible-card a,[data-theme="dark"] .analytics-link-row,[data-theme="dark"] .health-kpi-grid strong{color:#ffe2bd}[data-theme="dark"] .asset-card h2 a:hover,[data-theme="dark"] .story-bible-card a:hover,[data-theme="dark"] .analytics-link-row:hover{color:#fff4e8}[data-theme="dark"] .asset-card p,[data-theme="dark"] .asset-card-footer,[data-theme="dark"] .asset-card .muted,[data-theme="dark"] .warning-filter-panel .form-label,[data-theme="dark"] .warning-filter-panel .form-check-label,[data-theme="dark"] .validation-summary,[data-theme="dark"] .story-bible-card p,[data-theme="dark"] .story-bible-card h4,[data-theme="dark"] .story-bible-facts dt,[data-theme="dark"] .story-bible-link-list span,[data-theme="dark"] .story-bible-scene-summary span,[data-theme="dark"] .attention-list p,[data-theme="dark"] .analytics-section-heading span,[data-theme="dark"] .analytics-list-item p,[data-theme="dark"] .analytics-link-row span,[data-theme="dark"] .analytics-count-row span,[data-theme="dark"] .purpose-stat-row span,[data-theme="dark"] .health-kpi-grid span{color:var(--app-text-muted)!important}[data-theme="dark"] .asset-card-footer .btn,[data-theme="dark"] .warning-actions .btn{box-shadow:none}[data-theme="dark"] .story-bible-link-list li,[data-theme="dark"] .story-bible-facts,[data-theme="dark"] .story-bible-chapter-summary,[data-theme="dark"] .story-bible-scene-summary,[data-theme="dark"] .metric-raw-details,[data-theme="dark"] .analytics-list-item,[data-theme="dark"] .analytics-link-row,[data-theme="dark"] .analytics-count-row,[data-theme="dark"] .purpose-stat-row{border-color:rgba(241,195,143,.18)}[data-theme="dark"] .story-bible-actions a,[data-theme="dark"] .story-bible-nav a{color:#f1dcc4;background:rgba(241,195,143,.1);border:1px solid rgba(241,195,143,.26)}[data-theme="dark"] .story-bible-actions a:hover,[data-theme="dark"] .story-bible-nav a:hover,[data-theme="dark"] .story-bible-nav a:focus,[data-theme="dark"] .story-bible-actions a:focus{color:#21160f;background:#f1c38f;border-color:#ffd5a6}[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .attention-list article{background:#211b17}[data-theme="dark"] .purpose-stat-bar{background:rgba(231,214,190,.12)}[data-theme="dark"] .purpose-stat-bar span{background:var(--plotline-accent-dark)}[data-theme="dark"] .thread-event-item,[data-theme="dark"] .asset-event-item,[data-theme="dark"] .story-asset-event-item{color:var(--app-text);background:#211b17;border-color:rgba(241,195,143,.24)}[data-theme="dark"] .thread-event-item p,[data-theme="dark"] .asset-event-item p,[data-theme="dark"] .story-asset-event-item p,[data-theme="dark"] .thread-event-item .muted,[data-theme="dark"] .asset-event-item .muted,[data-theme="dark"] .story-asset-event-item .muted{color:var(--app-text-muted)!important}[data-theme="dark"] .thread-event-marker,[data-theme="dark"] .asset-event-marker{color:#21160f;background:#d49a62;border-color:rgba(255,213,166,.72)}[data-theme="dark"] .timeline-workspace,[data-theme="dark"] .timeline-shell{background:linear-gradient(180deg,rgba(42,35,30,.96),rgba(29,24,21,.96)),var(--app-timeline-bg);border-color:var(--app-border)}[data-theme="dark"] .timeline-section-header,[data-theme="dark"] .metric-lane-label,[data-theme="dark"] .metric-shape-controls,[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .lane-board-heading,[data-theme="dark"] .plot-lane-board-heading,[data-theme="dark"] .pacing-heading,[data-theme="dark"] .lane-group-heading,[data-theme="dark"] .timeline-chapter-title,[data-theme="dark"] .timeline-book-title{color:var(--app-link);background:rgba(37,31,27,.96);border-color:var(--app-border)}[data-theme="dark"] .timeline-project-title{background:#352318}[data-theme="dark"] .timeline-chapter,[data-theme="dark"] .timeline-scene-card,[data-theme="dark"] .timeline-empty-scene,[data-theme="dark"] .plot-lane-label,[data-theme="dark"] .asset-lane-label,[data-theme="dark"] .character-lane-label,[data-theme="dark"] .plot-lane-slot,[data-theme="dark"] .asset-lane-slot,[data-theme="dark"] .character-lane-slot,[data-theme="dark"] .timeline-placeholder-scene,[data-theme="dark"] .timeline-placeholder-cell,[data-theme="dark"] .metric-graph-points,[data-theme="dark"] .timeline-minimap{color:var(--app-text);background:rgba(42,35,30,.9);border-color:var(--app-border)}[data-theme="dark"] .timeline-scene-card,[data-theme="dark"] .timeline-empty-scene{box-shadow:0 8px 18px rgba(0,0,0,.22)}[data-theme="dark"] .timeline-scene-card:hover,[data-theme="dark"] .timeline-scene-card.selected,[data-theme="dark"] .timeline-scene-card.focus-match,[data-theme="dark"] .timeline-scene-card.keyboard-focus,[data-theme="dark"] .timeline-scene-card.search-hit{border-color:rgba(212,154,98,.62);box-shadow:0 12px 28px rgba(0,0,0,.28)}[data-theme="dark"] .timeline-minimap button{color:var(--plotline-accent-dark);background:linear-gradient(180deg,#332920 0%,#241d18 100%);border-color:var(--plotline-border-soft)}[data-theme="dark"] .timeline-minimap button.is-active{color:#1c120d;background:linear-gradient(180deg,var(--plotline-accent-dark) 0%,var(--plotline-accent) 100%)}[data-theme="dark"] .drag-chip,[data-theme="dark"] .purpose-chip,[data-theme="dark"] .metric-mini-summary,[data-theme="dark"] .scene-pov-label,[data-theme="dark"] .location-pill,[data-theme="dark"] .archive-pill,[data-theme="dark"] .badge,[data-theme="dark"] .badge.text-bg-light,[data-theme="dark"] .status-pill,[data-theme="dark"] .archived-badge,[data-theme="dark"] .overview-chip,[data-theme="dark"] .breadcrumb-trail a,[data-theme="dark"] .breadcrumb-trail span,[data-theme="dark"] .scenario-tag,[data-theme="dark"] .plain-preview,[data-theme="dark"] .soft-count,[data-theme="dark"] .attachment-kind,[data-theme="dark"] .preset-chip,[data-theme="dark"] .story-bible-meta span{color:#f4eadc!important;background:rgba(212,154,98,.18)!important;border-color:rgba(241,195,143,.36)!important;box-shadow:none}[data-theme="dark"] .badge.text-bg-light,[data-theme="dark"] .soft-count,[data-theme="dark"] .status-pill,[data-theme="dark"] .archived-badge{color:#ead8c4!important;background:rgba(205,187,167,.16)!important;border-color:rgba(231,214,190,.36)!important}[data-theme="dark"] .badge.text-bg-warning,[data-theme="dark"] .badge.bg-warning,[data-theme="dark"] .warning-placeholder.active{color:#f6d8a6!important;background:rgba(187,126,54,.24)!important;border-color:rgba(224,173,101,.34)}[data-theme="dark"] .badge.bg-secondary,[data-theme="dark"] .badge.text-bg-secondary{color:#ead8c4!important;background:rgba(205,187,167,.16)!important;border-color:rgba(231,214,190,.34)}[data-theme="dark"] .badge.text-bg-success{color:#bddfc3!important;background:rgba(91,143,101,.22)!important;border-color:rgba(145,201,154,.3)}[data-theme="dark"] .badge.text-bg-danger,[data-theme="dark"] .badge.bg-danger{color:#f0b8b2!important;background:rgba(151,62,54,.3)!important;border-color:rgba(238,142,131,.35)}[data-theme="dark"] .badge.text-bg-info,[data-theme="dark"] .badge.bg-info{color:#b8dfe5!important;background:rgba(62,125,136,.28)!important;border-color:rgba(120,185,194,.34)}[data-theme="dark"] .severity-pill.info{color:#b8dfe5;background:rgba(62,125,136,.24);border-color:rgba(120,185,194,.34)}[data-theme="dark"] .severity-pill.warning{color:#f6d8a6;background:rgba(187,126,54,.24);border-color:rgba(224,173,101,.34)}[data-theme="dark"] .severity-pill.error{color:#f0b8b2;background:rgba(151,62,54,.3);border-color:rgba(238,142,131,.35)}[data-theme="dark"] .form-control,[data-theme="dark"] .form-select,[data-theme="dark"] textarea,[data-theme="dark"] input,[data-theme="dark"] select{color:var(--app-input-text);background-color:var(--app-input-bg);border-color:var(--app-border)}[data-theme="dark"] .form-control::placeholder,[data-theme="dark"] textarea::placeholder,[data-theme="dark"] input::placeholder{color:#a99886;opacity:1}[data-theme="dark"] .form-control:focus,[data-theme="dark"] .form-select:focus,[data-theme="dark"] .form-check-input:focus{border-color:var(--plotline-accent);box-shadow:0 0 0 .2rem rgba(212,154,98,.2)}[data-theme="dark"] .form-control:disabled,[data-theme="dark"] .form-select:disabled,[data-theme="dark"] input:disabled,[data-theme="dark"] select:disabled,[data-theme="dark"] textarea:disabled{color:#a99886;background-color:#1b1613;border-color:rgba(231,214,190,.12);opacity:1}[data-theme="dark"] .table{--bs-table-color:var(--app-text);--bs-table-bg:transparent;--bs-table-border-color:var(--app-border);--bs-table-striped-color:var(--app-text);--bs-table-striped-bg:rgba(255,255,255,.035);--bs-table-hover-color:var(--app-text);--bs-table-hover-bg:rgba(212,154,98,.1)}[data-theme="dark"] .modal-content,[data-theme="dark"] .plotline-confirm-modal{color:var(--app-text);background:var(--app-surface-alt);border-color:var(--app-border)}[data-theme="dark"] .modal-header,[data-theme="dark"] .modal-footer{border-color:var(--app-border)}[data-theme="dark"] .btn-close{filter:invert(1) grayscale(1) brightness(1.6)}[data-theme="dark"] .dropdown-menu{--bs-dropdown-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-border-color:var(--app-border);--bs-dropdown-link-color:var(--app-text);--bs-dropdown-link-hover-color:var(--app-link);--bs-dropdown-link-hover-bg:rgba(212,154,98,.12);--bs-dropdown-link-active-color:#1c120d;--bs-dropdown-link-active-bg:var(--plotline-accent-dark);--bs-dropdown-link-disabled-color:#8f8172}[data-theme="dark"] .btn-outline-primary,[data-theme="dark"] .btn-outline-info{--bs-btn-color:#ffd5a6;--bs-btn-border-color:rgba(241,195,143,.58);--bs-btn-bg:rgba(241,195,143,.08);--bs-btn-hover-color:#fff4e8;--bs-btn-hover-bg:rgba(241,195,143,.18);--bs-btn-hover-border-color:rgba(255,213,166,.72);--bs-btn-active-color:#fff4e8;--bs-btn-active-bg:rgba(241,195,143,.24);--bs-btn-active-border-color:rgba(255,213,166,.82);--bs-btn-disabled-color:#9c8d7d;--bs-btn-disabled-border-color:rgba(231,214,190,.18);background-color:var(--bs-btn-bg)}[data-theme="dark"] .btn-outline-secondary,[data-theme="dark"] .btn-outline-dark,[data-theme="dark"] .btn-outline-light{--bs-btn-color:#ead8c4;--bs-btn-border-color:rgba(231,214,190,.46);--bs-btn-bg:rgba(231,214,190,.08);--bs-btn-hover-color:#fff4e8;--bs-btn-hover-bg:rgba(231,214,190,.16);--bs-btn-hover-border-color:rgba(241,220,196,.68);--bs-btn-active-color:#fff4e8;--bs-btn-active-bg:rgba(231,214,190,.22);--bs-btn-active-border-color:rgba(241,220,196,.64);--bs-btn-disabled-color:#8f8172;--bs-btn-disabled-border-color:rgba(231,214,190,.16);background-color:var(--bs-btn-bg)}[data-theme="dark"] .btn-outline-danger{--bs-btn-color:#ffb2aa;--bs-btn-border-color:rgba(238,142,131,.5);--bs-btn-hover-color:#2a1210;--bs-btn-hover-bg:#ffb2aa;--bs-btn-hover-border-color:#ffb2aa}[data-theme="dark"] .btn-outline-success{--bs-btn-color:#bddfc3;--bs-btn-border-color:rgba(145,201,154,.46);--bs-btn-bg:rgba(91,143,101,.12);--bs-btn-hover-color:#102016;--bs-btn-hover-bg:#bddfc3;--bs-btn-hover-border-color:#d2efd6;--bs-btn-active-color:#102016;--bs-btn-active-bg:#a8d7b0;--bs-btn-active-border-color:#d2efd6;--bs-btn-disabled-color:#8aa58e;--bs-btn-disabled-border-color:rgba(145,201,154,.2);background-color:var(--bs-btn-bg)}[data-theme="dark"] .nav-tabs{--bs-nav-tabs-border-color:var(--app-border);--bs-nav-tabs-link-hover-border-color:rgba(241,195,143,.28);--bs-nav-tabs-link-active-color:var(--app-text);--bs-nav-tabs-link-active-bg:var(--app-surface);--bs-nav-tabs-link-active-border-color:var(--app-border)}[data-theme="dark"] .context-header{color:var(--app-text);background:rgba(35,29,25,.94);border-color:rgba(241,195,143,.2)}[data-theme="dark"] .context-header .eyebrow{color:#dfc6aa}[data-theme="dark"] .context-title strong,[data-theme="dark"] .context-title strong span{color:#fff0df}[data-theme="dark"] .context-nav a{color:#f1dcc4;background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.28)}[data-theme="dark"] .context-nav a:hover,[data-theme="dark"] .context-nav a:focus{color:#21160f;background:#f1c38f;border-color:#ffd5a6}[data-theme="dark"] .pw-project-nav{color:var(--app-text);border-color:rgba(241,195,143,.18);background:linear-gradient(135deg,rgba(42,35,30,.96),rgba(58,42,32,.58)),var(--app-surface);box-shadow:var(--plotline-shadow-subtle)}[data-theme="dark"] .pw-project-nav__label{color:#dfc6aa}[data-theme="dark"] .pw-character-nav{border-bottom-color:rgba(241,195,143,.16)}[data-theme="dark"] .pw-project-nav__link,[data-theme="dark"] .pw-character-nav__link{color:#f1dcc4;border-color:rgba(241,195,143,.26);background:rgba(241,195,143,.1);box-shadow:none}[data-theme="dark"] .pw-project-nav__link:hover,[data-theme="dark"] .pw-project-nav__link:focus,[data-theme="dark"] .pw-character-nav__link:hover,[data-theme="dark"] .pw-character-nav__link:focus{color:#21160f;border-color:#ffd5a6;background:#f1c38f;box-shadow:0 6px 14px rgba(0,0,0,.24)}[data-theme="dark"] .pw-project-nav__link.active,[data-theme="dark"] .pw-character-nav__link.active{color:#21160f;border-color:#ffd5a6;background:linear-gradient(180deg,#f1c38f,var(--plotline-accent));box-shadow:0 8px 18px rgba(0,0,0,.28)}[data-theme="dark"] .pw-actions__toggle{--bs-btn-color:#f1dcc4;--bs-btn-bg:rgba(241,195,143,.1);--bs-btn-border-color:rgba(241,195,143,.3);--bs-btn-hover-color:#21160f;--bs-btn-hover-bg:#f1c38f;--bs-btn-hover-border-color:#ffd5a6;--bs-btn-active-color:#21160f;--bs-btn-active-bg:var(--plotline-accent-dark);--bs-btn-active-border-color:#ffd5a6}[data-theme="dark"] .pw-actions .dropdown-menu{--bs-dropdown-color:var(--app-text);--bs-dropdown-bg:var(--app-surface-alt);--bs-dropdown-border-color:rgba(241,195,143,.22);--bs-dropdown-link-color:var(--app-text);--bs-dropdown-link-hover-color:#21160f;--bs-dropdown-link-hover-bg:#f1c38f;--bs-dropdown-divider-bg:rgba(241,195,143,.18)}[data-theme="dark"] .pw-actions .dropdown-item.text-danger{color:#ffb2aa!important}[data-theme="dark"] .project-tabs{border-color:rgba(241,195,143,.18);background:rgba(35,29,25,.88)}[data-theme="dark"] .project-tabs .nav-link{color:#ead8c4}[data-theme="dark"] .project-tabs .nav-link:hover,[data-theme="dark"] .project-tabs .nav-link:focus{color:#ffd5a6;background:rgba(241,195,143,.12)}[data-theme="dark"] .project-tabs .nav-link.active{color:#21160f;background:linear-gradient(180deg,#f1c38f,var(--plotline-accent))}[data-theme="dark"] .project-card{color:var(--app-text);border-color:var(--app-border);background:var(--app-surface)}[data-theme="dark"] .project-card:hover{border-color:rgba(241,195,143,.34)}[data-theme="dark"] .project-card__visual{background:radial-gradient(circle at 28% 24%,rgba(241,195,143,.22),transparent 11rem),linear-gradient(135deg,rgba(58,42,32,.96),rgba(33,56,61,.72))}[data-theme="dark"] .project-card__heading h2,[data-theme="dark"] .project-card__heading h2 a{color:var(--app-text)}[data-theme="dark"] .project-card__description{color:var(--app-text-muted)}[data-theme="dark"] .project-card__stats span{color:#ead8c4;border-color:rgba(231,214,190,.2);background:rgba(231,214,190,.08)}[data-theme="dark"] .project-card__stats strong{color:#ffd5a6}[data-theme="dark"] .project-card__actions{border-top-color:rgba(231,214,190,.14)}[data-theme="dark"] .project-cover-stack__cover{border-color:rgba(42,35,30,.92);box-shadow:0 14px 30px rgba(0,0,0,.38)}[data-theme="dark"] .project-cover-fallback{color:#21160f;border-color:rgba(241,195,143,.34);background:linear-gradient(180deg,rgba(255,244,232,.3),transparent 32%),linear-gradient(135deg,#f1c38f,var(--plotline-accent));box-shadow:0 14px 30px rgba(0,0,0,.34)}[data-theme="dark"] .character-gallery-upload,[data-theme="dark"] .character-relationship-edit-form,[data-theme="dark"] .character-gallery-card,[data-theme="dark"] .character-avatar-crop-stage,[data-theme="dark"] .character-avatar-preview{color:var(--app-text);border-color:var(--app-border);background:rgba(42,35,30,.9)}[data-theme="dark"] .character-gallery-card__actions{border-top-color:rgba(231,214,190,.14)}[data-theme="dark"] .character-gallery-card>img,[data-theme="dark"] .character-avatar-crop-stage,[data-theme="dark"] .character-avatar-preview{background:#211b17}[data-theme="dark"] .timeline-filter,[data-theme="dark"] .workspace-heading .button-row,[data-theme="dark"] .timeline-control-panel{color:var(--app-text)}[data-theme="dark"] .timeline-filter .form-select,[data-theme="dark"] .timeline-control-panel .form-control,[data-theme="dark"] .timeline-control-panel .form-select,[data-theme="dark"] .timeline-control-select .form-select{color:#fff0df;background-color:#251d18;border-color:rgba(241,195,143,.3)}[data-theme="dark"] .timeline-control-select,[data-theme="dark"] .timeline-control-panel .form-label,[data-theme="dark"] .timeline-filter-checks,[data-theme="dark"] .timeline-visibility-panel label,[data-theme="dark"] .timeline-preset-panel,[data-theme="dark"] .preset-chip,[data-theme="dark"] .metric-shape-intro,[data-theme="dark"] .metric-raw-details summary{color:#dfc6aa}[data-theme="dark"] .timeline-filter-drawer summary,[data-theme="dark"] .timeline-control-group summary,[data-theme="dark"] .timeline-drag-palette summary{color:#ffe2bd;background:rgba(241,195,143,.1)}[data-theme="dark"] .timeline-filter-drawer[open] summary,[data-theme="dark"] .timeline-control-group[open] summary,[data-theme="dark"] .timeline-drag-palette[open] summary{color:#fff4e8;background:rgba(241,195,143,.16)}[data-theme="dark"] .timeline-filter-drawer summary::after,[data-theme="dark"] .timeline-control-group summary::after,[data-theme="dark"] .timeline-drag-palette summary::after{color:#f1c38f}[data-theme="dark"] .timeline-visibility-panel label,[data-theme="dark"] .preset-chip{background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.24)}[data-theme="dark"] .timeline-visibility-panel label:has(input:checked),[data-theme="dark"] .preset-chip:hover{color:#fff0df;background:rgba(241,195,143,.18);border-color:rgba(241,195,143,.38)}[data-theme="dark"] .metric-toggle-pill{color:#f1dcc4;background:rgba(241,195,143,.1);border-color:rgba(241,195,143,.24)}[data-theme="dark"] .metric-toggle-pill::before{border:1px solid rgba(255,244,232,.7);box-shadow:0 0 0 2px rgba(0,0,0,.2)}[data-theme="dark"] .metric-toggle-pill:has(input:checked){color:#fff4e8;background:rgba(241,195,143,.18);border-color:rgba(241,195,143,.42)}[data-theme="dark"] .metric-toggle-pill:hover,[data-theme="dark"] .metric-toggle-pill:focus-within{color:#fff;border-color:rgba(255,213,166,.58)}[data-theme="dark"] .character-marker,[data-theme="dark"] .character-appearance-pill{color:#24160d;background:#ffdca6;border-color:#fff0c9;box-shadow:0 0 0 1px rgba(36,22,13,.32),0 4px 10px rgba(0,0,0,.28)}[data-theme="dark"] .character-marker:hover,[data-theme="dark"] .character-appearance-pill:hover{color:#160d07;background:#fff0c9;border-color:#fff8df}[data-theme="dark"] .alert-info{--bs-alert-color:#c7e5ea;--bs-alert-bg:#142e34;--bs-alert-border-color:rgba(120,185,194,.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme="dark"] .alert-success{--bs-alert-color:#c8e7ce;--bs-alert-bg:#1b321f;--bs-alert-border-color:rgba(145,201,154,.32);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme="dark"] .alert-warning,[data-theme="dark"] .validation-summary-errors{--bs-alert-color:#f4d9a9;--bs-alert-bg:#352514;--bs-alert-border-color:rgba(224,173,101,.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme="dark"] .alert-danger{--bs-alert-color:#f0b8b2;--bs-alert-bg:#371b18;--bs-alert-border-color:rgba(238,142,131,.34);color:var(--bs-alert-color);background:var(--bs-alert-bg);border-color:var(--bs-alert-border-color)}[data-theme="dark"] .text-danger,[data-theme="dark"] .field-validation-error,[data-theme="dark"] .validation-summary-errors,[data-theme="dark"] .validation-summary-errors li{color:#e7a09a!important}[data-theme="dark"] .popover,.popover[data-theme="dark"],.popover.theme-audit-dark-popover{--bs-popover-bg:var(--app-surface-alt);--bs-popover-border-color:rgba(231,214,190,.18);--bs-popover-header-bg:rgba(241,195,143,.08);--bs-popover-header-color:#fff0df;--bs-popover-body-color:var(--app-text);color:var(--app-text);box-shadow:0 18px 42px rgba(0,0,0,.38)}[data-theme="dark"] .popover .popover-arrow::before,.popover[data-theme="dark"] .popover-arrow::before,.popover.theme-audit-dark-popover .popover-arrow::before{border-color:var(--bs-popover-border-color)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after,[data-theme="dark"] .bs-popover-top>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-top>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-top>.popover-arrow::after{border-top-color:var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after,[data-theme="dark"] .bs-popover-end>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-end>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-end>.popover-arrow::after{border-right-color:var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after,[data-theme="dark"] .bs-popover-bottom>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-bottom>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-bottom>.popover-arrow::after{border-bottom-color:var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after,[data-theme="dark"] .bs-popover-start>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after,.popover[data-theme="dark"].bs-popover-start>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-start>.popover-arrow::after{border-left-color:var(--bs-popover-bg)}[data-theme="dark"] .plotline-help-popover .popover-header,.popover[data-theme="dark"] .popover-header,.popover.theme-audit-dark-popover .popover-header{color:#fff0df;background:rgba(241,195,143,.08);border-bottom-color:rgba(231,214,190,.16)}[data-theme="dark"] .plotline-help-more,.popover[data-theme="dark"] .plotline-help-more,.popover.theme-audit-dark-popover .plotline-help-more,[data-theme="dark"] .popover a,.popover[data-theme="dark"] a,.popover.theme-audit-dark-popover a{color:var(--app-link)}[data-theme="dark"] .plotline-help-more:hover,.popover[data-theme="dark"] .plotline-help-more:hover,.popover.theme-audit-dark-popover .plotline-help-more:hover,[data-theme="dark"] .popover a:hover,.popover[data-theme="dark"] a:hover,.popover.theme-audit-dark-popover a:hover{color:#ffd5a6}[data-theme="dark"] .accordion{--bs-accordion-color:var(--app-text);--bs-accordion-bg:var(--app-surface);--bs-accordion-border-color:rgba(231,214,190,.16);--bs-accordion-btn-color:#f1dcc4;--bs-accordion-btn-bg:#211b17;--bs-accordion-active-color:#fff0df;--bs-accordion-active-bg:rgba(212,154,98,.13);--bs-accordion-btn-focus-border-color:rgba(241,195,143,.42);--bs-accordion-btn-focus-box-shadow:0 0 0 .2rem rgba(212,154,98,.18);--bs-accordion-icon-color:#f1dcc4;--bs-accordion-icon-active-color:#fff0df}[data-theme="dark"] .accordion-button::after{filter:invert(91%) sepia(12%) saturate(676%) hue-rotate(340deg) brightness(103%) contrast(89%)}[data-theme="dark"] .pagination{--bs-pagination-color:#f1dcc4;--bs-pagination-bg:#211b17;--bs-pagination-border-color:rgba(231,214,190,.18);--bs-pagination-hover-color:#ffd5a6;--bs-pagination-hover-bg:rgba(212,154,98,.12);--bs-pagination-hover-border-color:rgba(241,195,143,.34);--bs-pagination-focus-color:#ffd5a6;--bs-pagination-focus-bg:rgba(212,154,98,.14);--bs-pagination-focus-box-shadow:0 0 0 .2rem rgba(212,154,98,.18);--bs-pagination-active-color:#21160f;--bs-pagination-active-bg:#d49a62;--bs-pagination-active-border-color:#d49a62;--bs-pagination-disabled-color:#8f8172;--bs-pagination-disabled-bg:rgba(35,29,25,.72);--bs-pagination-disabled-border-color:rgba(231,214,190,.11)}.plotline-help-layout{--help-drawer-width:25%;display:flex;align-items:stretch;width:100%;min-width:0;transition:gap .18s ease}.plotline-help-main{flex:1 1 auto;min-width:0;transition:flex-basis .18s ease}.plotline-help-splitter,.plotline-help-drawer{display:none}.plotline-help-layout.help-open .plotline-help-splitter{display:block;flex:0 0 8px;cursor:col-resize;background:linear-gradient(90deg,transparent,rgba(107,114,128,.22),transparent)}.plotline-help-layout.help-open .plotline-help-drawer{display:block;flex:0 0 clamp(20%,var(--help-drawer-width),50%);min-width:20%;max-width:50%;border-left:1px solid rgba(107,114,128,.22);background:rgba(255,253,248,.96);transition:flex-basis .18s ease}.plotline-help-layout.help-collapsed .plotline-help-splitter{display:none}.plotline-help-layout.help-collapsed .plotline-help-drawer{flex-basis:2.35rem;min-width:2.35rem;max-width:2.35rem}.plotline-help-layout.help-collapsed .plotline-help-drawer-panel{display:none}.plotline-help-collapsed-strip{display:none}.plotline-help-layout.help-collapsed .plotline-help-collapsed-strip{display:flex;align-items:center;justify-content:center;width:2.35rem;min-height:calc(100vh - 5rem);color:#5f6875;font-size:.78rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;writing-mode:vertical-rl;cursor:pointer}.plotline-help-drawer-panel{position:sticky;top:0;display:flex;flex-direction:column;max-height:calc(100vh - 1rem)}.plotline-help-drawer-header{display:flex;justify-content:space-between;gap:.75rem;align-items:flex-start;padding:1rem;border-bottom:1px solid rgba(107,114,128,.18)}.plotline-help-drawer-content{min-height:12rem;padding:1rem;overflow:auto}.help-drawer-article h2{margin-bottom:.5rem}.help-markdown-body{display:grid;gap:.75rem}.help-markdown-body h1,.help-markdown-body h2,.help-markdown-body h3,.help-markdown-body h4{margin:.5rem 0 0}.help-markdown-body p,.help-markdown-body ul{margin-bottom:0}.help-article-image{display:block;max-width:100%;height:auto;border:1px solid rgba(107,114,128,.18);border-radius:.45rem}.help-related-section{margin-top:1.25rem;padding-top:1rem;border-top:1px solid rgba(107,114,128,.18)}.help-related-section button{padding:0;color:#2f6f63;background:none;border:0;font-weight:700;text-align:left}.help-markdown-body .help-markdown-table{margin-bottom:0}.help-resizing{cursor:col-resize;user-select:none}.plotline-help-icon{display:inline-flex;align-items:center;justify-content:center;width:1.15rem;height:1.15rem;margin-left:.35rem;padding:0;color:#5f6875;font-size:.78rem;font-weight:800;line-height:1;background:transparent;border:1px solid rgba(95,104,117,.42);border-radius:999px;vertical-align:text-top}.plotline-help-icon-wrapper{display:inline-flex;vertical-align:text-top}.plotline-help-icon-wrapper-inline .plotline-help-icon{width:1rem;height:1rem;margin-left:.25rem;font-size:.68rem}.plotline-help-icon:hover,.plotline-help-icon:focus{color:#2f6f63;border-color:#2f6f63;outline:0}.plotline-help-popover{max-width:350px}.plotline-help-popover .popover-header{font-weight:800}.plotline-help-more{font-weight:700;text-decoration:none}[data-theme="dark"] .plotline-help-icon{color:#d8d0c4;border-color:rgba(216,208,196,.45)}[data-theme="dark"] .plotline-help-icon:hover,[data-theme="dark"] .plotline-help-icon:focus{color:#f1c38f;border-color:#f1c38f}[data-theme="dark"] .plotline-help-layout.help-open .plotline-help-drawer{border-left-color:rgba(255,255,255,.12);background:rgba(22,22,27,.97)}[data-theme="dark"] .plotline-help-drawer-header,[data-theme="dark"] .help-related-section{border-color:rgba(255,255,255,.12)}[data-theme="dark"] .plotline-help-collapsed-strip{color:#d8d0c4}.relationship-map-controls{display:grid;grid-template-columns:repeat(4,minmax(150px,1fr)) auto auto auto;gap:.75rem;align-items:end;margin-bottom:1rem}.relationship-map-check{display:flex;gap:.45rem;align-items:center;min-height:2rem;margin:0;white-space:nowrap}.relationship-map-legend{display:grid;grid-template-columns:minmax(160px,max-content) 1fr;gap:.9rem 1.2rem;align-items:center;margin:0 0 1rem}.relationship-map-legend h2{margin:0;font-size:1rem}.relationship-map-legend-grid{display:flex;flex-wrap:wrap;gap:.45rem .8rem;align-items:center}.relationship-map-legend-item{display:inline-flex;gap:.45rem;align-items:center;padding:.28rem .45rem;color:inherit;background:transparent;border:1px solid transparent;border-radius:999px;font-size:.85rem;font-weight:650}.relationship-map-legend-line{display:inline-block;width:2.15rem;height:0;border-top:4px solid currentColor;border-radius:999px}.relationship-map-detail-badges .status-pill,.relationship-map-list-item .status-pill{border:1px solid transparent}.relationship-map-workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);gap:1rem;align-items:stretch}.relationship-map-canvas{min-height:660px;overflow:hidden}.relationship-map-toolbar{display:flex;justify-content:flex-end;gap:.4rem;margin-bottom:.6rem;padding-bottom:.45rem;border-bottom:1px solid rgba(107,114,128,.12)}.relationship-map-graph{width:100%;min-height:620px;border:1px solid rgba(107,114,128,.16);border-radius:.75rem;background:radial-gradient(circle at 20% 20%,rgba(196,124,44,.08),transparent 28rem),linear-gradient(180deg,rgba(255,253,248,.95),rgba(248,250,252,.86))}.relationship-map-details{position:sticky;top:1rem;align-self:start;max-height:calc(100vh - 2rem);overflow:auto}.relationship-map-detail-heading{display:flex;align-items:center;gap:.75rem}.relationship-map-detail-heading h2{margin-bottom:0}.relationship-map-detail-badges{display:flex;flex-wrap:wrap;gap:.35rem;margin:.4rem 0 .8rem}.relationship-map-detail-list{display:grid;grid-template-columns:max-content minmax(0,1fr);gap:.25rem .75rem;margin:1rem 0}.relationship-map-detail-list dt{color:var(--muted-text,#667085);font-weight:600}.relationship-map-detail-list dd{margin:0}.relationship-map-history{display:grid;gap:.45rem;padding-left:1.1rem}.relationship-map-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:.6rem}.relationship-map-list-item{display:grid;gap:.25rem;padding:.8rem;text-align:left;color:inherit;background:var(--surface,#fff);border:1px solid rgba(107,114,128,.22);border-radius:.6rem;box-shadow:0 8px 20px rgba(31,41,55,.06)}.relationship-map-list-item:hover,.relationship-map-list-item:focus,.relationship-map-list-item.is-selected{border-color:#c47c2c;outline:0}.relationship-category-family{color:#7c3f12;border-color:#d89a5e;background:#fff1df}.relationship-category-friendship{color:#14532d;border-color:#7cc69a;background:#e7f8ed}.relationship-category-romantic{color:#831843;border-color:#efa3c1;background:#fde7f0}.relationship-category-hostile{color:#7f1d1d;border-color:#ee8f8f;background:#fee6e6}.relationship-category-professional{color:#1e3a8a;border-color:#93b4ef;background:#e8f0ff}.relationship-category-other{color:#374151;border-color:#bac2cf;background:#f2f4f7}[data-theme="dark"] .relationship-map-list-item{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.12)}[data-theme="dark"] .relationship-map-graph{border-color:rgba(255,255,255,.12);background:radial-gradient(circle at 20% 20%,rgba(241,195,143,.08),transparent 28rem),linear-gradient(180deg,rgba(33,32,38,.96),rgba(22,22,27,.92))}[data-theme="dark"] .relationship-map-toolbar{border-bottom-color:rgba(255,255,255,.1)}[data-theme="dark"] .relationship-category-family{color:#ffd2a5;background:rgba(184,101,34,.17);border-color:rgba(255,210,165,.3)}[data-theme="dark"] .relationship-category-friendship{color:#a8e8bf;background:rgba(47,158,95,.16);border-color:rgba(168,232,191,.3)}[data-theme="dark"] .relationship-category-romantic{color:#f8b5cf;background:rgba(217,70,127,.16);border-color:rgba(248,181,207,.3)}[data-theme="dark"] .relationship-category-hostile{color:#ffb4b4;background:rgba(220,63,63,.16);border-color:rgba(255,180,180,.3)}[data-theme="dark"] .relationship-category-professional{color:#b7cdf7;background:rgba(79,127,216,.16);border-color:rgba(183,205,247,.3)}[data-theme="dark"] .relationship-category-other{color:#d0d6df;background:rgba(122,135,150,.15);border-color:rgba(208,214,223,.28)}.marketing-shell{max-width:none;padding-right:0;padding-left:0}.marketing-shell main{padding-bottom:0!important}.marketing-home{--marketing-navy:#1f2a44;--marketing-gold:#d4a574;--marketing-cream:#faf8f5;--marketing-offwhite:#fcfbf9;--marketing-ink:#201a16;--marketing-muted:#6f655c;--marketing-rose:#9f5f55;--marketing-sage:#5f786c;--marketing-line:rgba(31,42,68,.12);--marketing-shadow:0 28px 70px rgba(31,42,68,.15);overflow:hidden;margin-top:-1rem;color:var(--marketing-ink);background:radial-gradient(circle at 88% 8%,rgba(212,165,116,.2),transparent 26rem),linear-gradient(180deg,var(--marketing-cream) 0%,var(--marketing-offwhite) 42%,#f6efe6 100%)}.marketing-container{width:min(1180px,calc(100% - 32px));margin-inline:auto}.marketing-eyebrow{margin:0 0 .8rem;color:#8b612e;font-size:.76rem;font-weight:850;letter-spacing:.12em;text-transform:uppercase}.marketing-home h1,.marketing-home h2,.marketing-home h3{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;letter-spacing:0;text-wrap:balance}.marketing-home h1{max-width:11ch;margin:0;font-size:clamp(3.2rem,7vw,6.35rem);line-height:.95}.marketing-home h2{margin:0;font-size:clamp(2.1rem,4.4vw,4rem);line-height:1.02}.marketing-home h3{margin:0;font-size:clamp(1.7rem,3vw,2.7rem);line-height:1.08}.marketing-lead,.problem-copy p,.founder-story p,.final-cta p,.section-heading p{color:var(--marketing-muted);font-size:clamp(1rem,1.5vw,1.18rem);line-height:1.7}.marketing-hero{position:relative;padding:clamp(2rem,5vw,3.75rem) 0 clamp(3.5rem,7vw,6rem)}.marketing-hero::before{content:"";position:absolute;inset:0 0 auto;height:54%;pointer-events:none;background:linear-gradient(115deg,rgba(31,42,68,.08),transparent 42%),radial-gradient(circle at 12% 20%,rgba(212,165,116,.22),transparent 24rem)}.marketing-hero__grid{position:relative;display:grid;grid-template-columns:minmax(0,.86fr) minmax(440px,1.14fr);gap:clamp(2rem,5vw,5rem);align-items:center}.marketing-hero__copy{display:grid;gap:1.35rem;align-content:center}.marketing-lead{max-width:42rem;margin:0}.marketing-actions{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.marketing-btn{display:inline-flex;align-items:center;justify-content:center;min-height:3.2rem;border:1px solid transparent;border-radius:999px;padding:.85rem 1.35rem;font-weight:800;line-height:1.1;text-decoration:none;transition:transform .18s ease,box-shadow .18s ease,background-color .18s ease,border-color .18s ease}.marketing-btn:hover,.marketing-btn:focus{transform:translateY(-1px)}.marketing-btn--primary{color:#fffaf2;background:linear-gradient(135deg,var(--marketing-navy),#26375e);box-shadow:0 16px 32px rgba(31,42,68,.22)}.marketing-btn--primary:hover,.marketing-btn--primary:focus{color:#fffaf2;box-shadow:0 20px 42px rgba(31,42,68,.28)}.marketing-btn--secondary{color:var(--marketing-navy);border-color:rgba(31,42,68,.18);background:rgba(255,255,255,.68);box-shadow:inset 0 1px 0 rgba(255,255,255,.88)}.marketing-btn--secondary:hover,.marketing-btn--secondary:focus{color:var(--marketing-navy);border-color:rgba(31,42,68,.3);background:#fffdf9}.hero-proof{display:flex;flex-wrap:wrap;gap:1rem;margin:0}.hero-proof div{display:grid;grid-template-columns:auto minmax(0,1fr);gap:.55rem;align-items:center;max-width:18rem}.hero-proof dt{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:2.35rem;font-weight:700;line-height:1}.hero-proof dd{margin:0;color:var(--marketing-muted);font-weight:650;line-height:1.25}.browser-frame{border:1px solid rgba(31,42,68,.13);border-radius:22px;background:rgba(252,251,249,.72);box-shadow:var(--marketing-shadow);overflow:hidden}.hero-product{transform:rotate(1deg);animation:productFloat 7s ease-in-out infinite}.home-image-card{border:1px solid rgba(31,42,68,.13);border-radius:24px;background:rgba(252,251,249,.72);box-shadow:var(--marketing-shadow);overflow:hidden}.home-image-card img,.home-feature-image{display:block;max-width:100%;width:100%;height:auto}.home-hero-image img{background:#f8f1e7}@media(min-width:1061px){.marketing-hero{display:flex;align-items:center;min-height:calc(100vh - 5.5rem);padding-top:clamp(1.5rem,3vw,2.75rem);padding-bottom:clamp(1.5rem,3vw,2.75rem)}.home-hero-image{align-self:center;margin-top:clamp(-8rem,-8vw,-4rem)}}.writer-workspace{position:relative;min-height:560px;border:1px solid rgba(31,42,68,.13);border-radius:24px;padding:clamp(1rem,2.4vw,1.6rem);background:linear-gradient(135deg,rgba(255,253,249,.9),rgba(248,239,227,.76)),url("/images/home/hero-writing-workspace.webp") center/cover no-repeat,#f8f1e7;box-shadow:var(--marketing-shadow);overflow:hidden}.writer-workspace::before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 16% 12%,rgba(212,165,116,.2),transparent 18rem),radial-gradient(circle at 92% 82%,rgba(95,120,108,.18),transparent 18rem);pointer-events:none}.workspace-manuscript,.workspace-card,.workspace-progress{position:absolute;z-index:1;border:1px solid rgba(31,42,68,.11);background:rgba(255,253,249,.94);box-shadow:0 18px 42px rgba(31,42,68,.12)}.workspace-manuscript{left:7%;top:8%;width:min(68%,460px);min-height:370px;border-radius:16px;padding:clamp(1.25rem,2vw,1.7rem)}.workspace-label,.workspace-card span{margin:0;color:#8b612e;font-size:.72rem;font-weight:850;letter-spacing:.1em;text-transform:uppercase}.workspace-manuscript h2{margin:.45rem 0 1.2rem;font-size:clamp(1.6rem,2.5vw,2.35rem)}.workspace-manuscript p:not(.workspace-label){margin:0 0 1rem;color:#4f4b45;font-family:Georgia,"Times New Roman",serif;font-size:1.05rem;line-height:1.75}.workspace-card{display:grid;gap:.35rem;width:min(45%,260px);border-radius:16px;padding:1rem}.workspace-card strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.18rem;line-height:1.15}.workspace-card small{color:var(--marketing-muted);font-size:.88rem;line-height:1.45}.workspace-character{right:6%;top:13%;border-left:5px solid var(--marketing-sage)}.workspace-thread{right:11%;top:40%;border-left:5px solid var(--marketing-gold)}.workspace-warning{right:5%;bottom:18%;border-left:5px solid var(--marketing-rose)}.workspace-progress{top:auto;left:13%;right:10%;bottom:4%;display:flex;gap:.55rem;height:3.75rem;border-radius:999px;padding:.65rem}.workspace-progress span{flex:1 1 0;border-radius:999px;padding:.58rem .7rem;color:#2a2119;background:rgba(212,165,116,.22);font-size:.82rem;font-weight:850;text-align:center}.workspace-progress span:nth-child(2){background:rgba(95,120,108,.2)}.workspace-progress span:nth-child(3){color:#fffaf2;background:var(--marketing-navy)}.browser-frame__chrome{display:flex;gap:.45rem;align-items:center;height:2.55rem;border-bottom:1px solid rgba(31,42,68,.1);padding:0 1rem;background:linear-gradient(180deg,#fffdf9,#f5efe7)}.browser-frame__chrome span{width:.72rem;height:.72rem;border-radius:999px;background:#d8cabf}.browser-frame__chrome span:nth-child(2){background:var(--marketing-gold)}.browser-frame__chrome span:nth-child(3){background:var(--marketing-sage)}.product-mockup{display:grid;grid-template-columns:170px minmax(0,1fr);min-height:470px;background:linear-gradient(135deg,rgba(255,255,255,.86),rgba(250,248,245,.92)),var(--marketing-offwhite)}.product-sidebar{display:grid;align-content:start;gap:.5rem;border-right:1px solid rgba(31,42,68,.1);padding:1.1rem;background:rgba(31,42,68,.96);color:rgba(255,250,242,.72)}.product-sidebar strong{margin-bottom:.8rem;color:#fffaf2;font-family:Georgia,"Times New Roman",serif;font-size:1.05rem}.product-sidebar span{border-radius:999px;padding:.5rem .7rem;font-size:.84rem;font-weight:750}.product-sidebar .is-active{color:#241b12;background:var(--marketing-gold)}.product-main{display:grid;gap:1rem;align-content:start;padding:clamp(1rem,2vw,1.45rem)}.product-topline{display:flex;justify-content:space-between;gap:1rem;align-items:start}.product-topline small,.mock-label{color:var(--marketing-muted);font-size:.78rem;font-weight:820;letter-spacing:.04em;text-transform:uppercase}.product-topline h2{margin-top:.25rem;font-size:clamp(1.5rem,2.4vw,2.15rem)}.product-topline>span{flex:0 0 auto;border-radius:999px;padding:.38rem .7rem;color:#294a35;background:#e5f1e8;font-size:.78rem;font-weight:800}.product-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,.9fr);gap:.85rem}.product-panel{display:grid;gap:.75rem;min-height:150px;border:1px solid rgba(31,42,68,.1);border-radius:16px;padding:1rem;background:rgba(255,253,249,.92);box-shadow:0 16px 30px rgba(31,42,68,.07)}.product-panel--wide{grid-row:span 2}.product-panel p{margin:0;color:var(--marketing-muted)}.mock-chart{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:.55rem;align-items:end;min-height:220px;padding-top:1rem}.mock-chart span{height:var(--height);min-height:2.2rem;border-radius:999px 999px 8px 8px;background:linear-gradient(180deg,var(--marketing-gold),#8f5d3b);box-shadow:inset 0 1px 0 rgba(255,255,255,.45)}.thread-list{display:grid;gap:.55rem}.thread-list span{border-left:4px solid var(--marketing-gold);border-radius:10px;padding:.55rem .65rem;color:var(--marketing-navy);background:rgba(212,165,116,.13);font-weight:760}.problem-intro{padding:clamp(3rem,7vw,6rem) 0 1rem;text-align:center}.problem-intro h2,.section-heading h2{max-width:850px;margin-inline:auto}.problem-stack{padding:1rem 0 clamp(4rem,8vw,7rem)}.problem-section{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:clamp(1.5rem,5vw,5rem);align-items:center;min-height:460px;padding:clamp(2.5rem,6vw,5rem) 0}.problem-section--reverse .problem-visual{order:2}.problem-copy{display:grid;gap:1rem}.problem-copy p{max-width:36rem;margin:0}.problem-visual{position:relative;min-height:320px;border:1px solid rgba(31,42,68,.11);border-radius:24px;background:linear-gradient(135deg,rgba(255,253,249,.96),rgba(242,230,215,.88)),var(--marketing-offwhite);box-shadow:0 22px 56px rgba(31,42,68,.1);overflow:hidden}.problem-visual--image{display:grid;align-items:center;min-height:0;padding:.75rem;background:linear-gradient(135deg,rgba(255,253,249,.96),rgba(242,230,215,.88)),var(--marketing-offwhite)}.problem-visual--image::before,.problem-visual--image::after{display:none}.problem-visual--image .home-feature-image{grid-column:1/-1;justify-self:center;border-radius:18px;box-shadow:0 18px 42px rgba(31,42,68,.12)}.visual-plot{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(242,232,217,.82)),url("/images/home/plot-thread-map.webp") center/cover no-repeat,#f2e8d9}.visual-warning{background:linear-gradient(135deg,rgba(255,253,249,.94),rgba(242,230,215,.84)),url("/images/home/manuscript-continuity.webp") center/cover no-repeat,#f8f1e7}.visual-relationships{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(232,238,229,.82)),url("/images/home/character-relationship-board.webp") center/cover no-repeat,#eef3eb}.visual-flow{background:linear-gradient(135deg,rgba(255,253,249,.92),rgba(242,230,215,.82)),url("/images/home/story-timeline.webp") center/cover no-repeat,#f8f1e7}.visual-series{background:linear-gradient(135deg,rgba(255,253,249,.9),rgba(242,230,215,.8)),url("/images/home/series-dashboard.webp") center/cover no-repeat,#f8f1e7}.visual-notes span,.visual-docs span,.visual-series span,.visual-threads span,.visual-warning span{position:absolute;border:1px solid rgba(31,42,68,.1);border-radius:14px;padding:.75rem .9rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 14px 28px rgba(31,42,68,.08);font-weight:760}.visual-notes span:nth-child(1){top:14%;left:12%;transform:rotate(-5deg)}.visual-notes span:nth-child(2){top:28%;right:10%;transform:rotate(4deg)}.visual-notes span:nth-child(3){bottom:22%;left:16%;transform:rotate(3deg)}.visual-notes span:nth-child(4){bottom:13%;right:18%;transform:rotate(-4deg)}.visual-plot{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;align-content:center;padding:2rem}.visual-plot::before{content:"";position:absolute;left:11%;right:11%;top:50%;height:.28rem;border-radius:999px;background:rgba(31,42,68,.16)}.visual-plot span{position:relative;display:grid;place-items:center;min-height:6.5rem;border:1px solid rgba(31,42,68,.1);border-radius:14px;padding:.75rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 14px 28px rgba(31,42,68,.08);font-weight:800;text-align:center}.visual-plot span:nth-child(1),.visual-threads span:nth-child(1){border-top:5px solid var(--marketing-sage)}.visual-plot span:nth-child(2),.visual-threads span:nth-child(2){border-top:5px solid var(--marketing-gold)}.visual-plot span:nth-child(3),.visual-threads span:nth-child(3){border-top:5px solid var(--marketing-rose)}.visual-plot span:nth-child(4),.visual-threads span:nth-child(4){border-top:5px solid var(--marketing-navy)}.visual-warning{display:grid;gap:.75rem;align-content:center;padding:2rem}.visual-warning strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.6rem}.visual-warning span{position:static;border-left:4px solid var(--marketing-gold)}.visual-next{display:grid;align-content:center;gap:.8rem;padding:2rem}.visual-next small{color:#8b612e;font-weight:850;letter-spacing:.1em;text-transform:uppercase}.visual-next strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(2rem,4vw,3.5rem);line-height:1}.visual-next p{max-width:22rem;margin:0;color:var(--marketing-muted);font-size:1.1rem;line-height:1.6}.visual-next p+p{border-top:1px solid rgba(31,42,68,.11);padding-top:.75rem}.visual-docs span:nth-child(1){top:13%;left:12%}.visual-docs span:nth-child(2){top:23%;right:12%}.visual-docs span:nth-child(3){top:45%;left:23%}.visual-docs span:nth-child(4){bottom:18%;left:12%}.visual-docs span:nth-child(5){bottom:14%;right:15%}.visual-relationships::before,.visual-relationships::after{content:"";position:absolute;inset:22% 18%;border:2px solid rgba(31,42,68,.16);border-radius:50%}.visual-relationships::after{inset:34% 22%;border-color:rgba(212,165,116,.44);transform:rotate(22deg)}.person{position:absolute;z-index:1;display:grid;place-items:center;width:5rem;height:5rem;border:.4rem solid #fffaf2;border-radius:999px;color:#fffaf2;background:var(--marketing-navy);box-shadow:0 16px 30px rgba(31,42,68,.18);font-weight:850}.person-a{top:13%;left:18%}.person-b{top:21%;right:18%;background:var(--marketing-rose)}.person-c{bottom:17%;left:24%;background:var(--marketing-sage)}.person-d{right:24%;bottom:13%;background:var(--marketing-gold);color:#2a2119}.relationship-label{position:absolute;z-index:2;border-radius:999px;padding:.42rem .65rem;color:var(--marketing-navy);background:#fffdf9;box-shadow:0 12px 24px rgba(31,42,68,.1);font-size:.78rem;font-weight:850}.rel-trust{top:23%;left:43%}.rel-secret{top:47%;right:25%}.rel-threat{bottom:33%;left:34%}.rel-sister{bottom:23%;right:38%}.visual-threads{display:grid;grid-template-columns:repeat(4,1fr);gap:.85rem;align-content:center;padding:2rem}.visual-threads::before{content:"";position:absolute;left:11%;right:11%;top:50%;height:.32rem;border-radius:999px;background:rgba(31,42,68,.14)}.visual-threads span{position:relative;display:grid;place-items:center;min-height:6.5rem;text-align:center}.visual-series{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;align-content:center;padding:2rem}.visual-series span{position:static;display:grid;place-items:center;min-height:10.5rem;border-radius:12px 12px 18px 18px;color:#fffaf2;background:linear-gradient(180deg,var(--marketing-navy),#314263);text-align:center}.visual-series span:nth-child(2){background:linear-gradient(180deg,#75503a,#533424)}.visual-series span:nth-child(3){background:linear-gradient(180deg,#5f786c,#3d564b)}.visual-series span:nth-child(4){color:#2a2119;background:linear-gradient(180deg,#e1bd8e,var(--marketing-gold))}.visual-flow{display:grid;align-items:center;padding:2rem}.flow-line{position:absolute;left:8%;right:8%;top:50%;height:8rem;border-bottom:.38rem solid var(--marketing-gold);border-radius:0 0 50% 50%;transform:translateY(-54%)}.visual-flow span{position:absolute;left:var(--pos);bottom:26%;border-radius:999px;padding:.55rem .8rem;color:var(--marketing-navy);background:#fffaf2;box-shadow:0 12px 26px rgba(31,42,68,.1);font-weight:800}.social-proof{padding:clamp(4rem,8vw,7rem) 0;background:var(--marketing-offwhite)}.section-heading{display:grid;gap:.7rem;margin-bottom:clamp(1.5rem,4vw,3rem);text-align:center}.testimonial-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.testimonial-grid figure{display:grid;align-content:space-between;min-height:250px;margin:0;border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.25rem,2.3vw,1.75rem);background:linear-gradient(180deg,rgba(255,253,249,.96),rgba(250,248,245,.88)),#fff;box-shadow:0 18px 42px rgba(31,42,68,.08)}.testimonial-grid blockquote{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:1.32rem;line-height:1.4}.testimonial-grid figcaption{margin-top:1.35rem;color:#8b612e;font-weight:820}.founder-story{padding:clamp(4rem,8vw,7rem) 0;background:radial-gradient(circle at 10% 20%,rgba(212,165,116,.18),transparent 22rem),var(--marketing-cream)}.founder-story__grid{display:grid;grid-template-columns:minmax(180px,.35fr) minmax(0,.65fr);gap:clamp(1.5rem,5vw,4rem);align-items:center}.founder-mark{display:grid;place-items:center;aspect-ratio:1;border:1px solid rgba(31,42,68,.12);border-radius:28px;color:#fffaf2;background:linear-gradient(135deg,rgba(212,165,116,.3),transparent),var(--marketing-navy);box-shadow:var(--marketing-shadow);font-family:Georgia,"Times New Roman",serif;font-size:clamp(3rem,8vw,6rem)}.founder-story h2{margin-bottom:1rem}.founder-story p{max-width:48rem;margin:0 0 1rem}.final-cta{padding:clamp(4rem,8vw,7rem) 0;background:var(--marketing-navy)}.final-cta__inner{display:grid;justify-items:center;gap:1rem;border:1px solid rgba(255,250,242,.14);border-radius:28px;padding:clamp(2.25rem,6vw,5rem) clamp(1rem,5vw,4rem);background:radial-gradient(circle at 50% 0%,rgba(212,165,116,.28),transparent 26rem),linear-gradient(135deg,rgba(255,255,255,.06),transparent);text-align:center;box-shadow:0 28px 70px rgba(10,16,29,.2)}.final-cta h2{color:#fffaf2}.final-cta p{max-width:42rem;margin:0 0 .75rem;color:rgba(255,250,242,.78)}.final-cta .marketing-eyebrow{color:var(--marketing-gold)}.final-cta .marketing-btn--primary{color:#241b12;background:linear-gradient(135deg,#e3bd8e,var(--marketing-gold));box-shadow:0 16px 34px rgba(0,0,0,.22)}.final-cta .marketing-btn--primary:hover,.final-cta .marketing-btn--primary:focus{color:#241b12}.pricing-page{margin-top:-1rem}.pricing-hero{padding:clamp(2rem,5vw,3.75rem) 0 clamp(2.5rem,6vw,4.5rem);background:radial-gradient(circle at 18% 20%,rgba(212,165,116,.2),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.pricing-hero__inner{display:grid;justify-items:center;gap:1.1rem;text-align:center}.pricing-hero h1{max-width:12ch}.pricing-hero .marketing-lead{max-width:46rem}.pricing-message{border:1px solid rgba(31,42,68,.12);border-radius:16px;padding:1rem 1.1rem;margin:1rem 0 0;color:var(--marketing-navy);background:rgba(255,253,249,.9);box-shadow:0 14px 32px rgba(31,42,68,.08);font-weight:750}.pricing-plans,.pricing-compare,.pricing-faq{padding:clamp(3.5rem,7vw,6rem) 0}.pricing-plans{background:var(--marketing-offwhite)}.pricing-compare{background:radial-gradient(circle at 90% 20%,rgba(95,120,108,.12),transparent 24rem),var(--marketing-cream)}.pricing-faq{background:var(--marketing-offwhite)}.pricing-empty{border:1px solid rgba(31,42,68,.11);border-radius:22px;padding:clamp(1.5rem,4vw,2.5rem);background:rgba(255,253,249,.92);box-shadow:0 18px 42px rgba(31,42,68,.08);text-align:center}.pricing-empty p{margin:.75rem auto 0;max-width:42rem;color:var(--marketing-muted);line-height:1.7}.pricing-card-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:1rem;align-items:stretch}.pricing-card{position:relative;display:grid;gap:1.25rem;align-content:start;min-height:100%;border:1px solid rgba(31,42,68,.11);border-radius:22px;padding:clamp(1.2rem,2.4vw,1.65rem);background:linear-gradient(180deg,rgba(255,253,249,.98),rgba(250,248,245,.9)),#fff;box-shadow:0 18px 42px rgba(31,42,68,.08)}.pricing-card::before{content:"";display:block;height:1.9rem}.pricing-card--featured{border-color:rgba(212,165,116,.7);box-shadow:0 26px 58px rgba(31,42,68,.13)}.pricing-card--trial{border-color:rgba(95,120,108,.52);background:linear-gradient(180deg,rgba(255,253,249,.98),rgba(235,241,237,.9)),#fff;box-shadow:0 24px 54px rgba(31,42,68,.11);min-width:0}.pricing-card--trial .pricing-card__heading,.pricing-card--trial .pricing-price,.pricing-card--trial .pricing-feature-list,.pricing-card--trial .pricing-card__actions{min-width:0}.pricing-badge{position:absolute;top:clamp(1.2rem,2.4vw,1.65rem);right:clamp(1.2rem,2.4vw,1.65rem);width:fit-content;margin:0;border:1px solid rgba(212,165,116,.55);border-radius:999px;padding:.38rem .7rem;color:#634019;background:rgba(212,165,116,.22);font-size:.76rem;font-weight:850;letter-spacing:.08em;text-transform:uppercase}.pricing-badge--trial{border-color:rgba(95,120,108,.48);color:#314b42;background:rgba(95,120,108,.18)}.pricing-card__heading{display:grid;gap:.5rem;min-height:6.85rem;align-content:start}.pricing-card h3,.comparison-grid h3,.faq-grid h3{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.35rem,2vw,1.75rem);line-height:1.12}.pricing-card__heading p{margin:0;color:var(--marketing-muted);line-height:1.55}.pricing-price{display:grid;gap:.2rem;border-top:1px solid rgba(31,42,68,.1);border-bottom:1px solid rgba(31,42,68,.1);padding:1rem 0}.pricing-price strong{display:inline-flex;gap:.35rem;align-items:baseline;width:fit-content;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(2.15rem,4vw,3rem);line-height:1;white-space:nowrap}.pricing-price span,.pricing-price small{color:var(--marketing-muted);font-weight:720}.pricing-price small{font-size:.88rem}.pricing-price strong small{color:var(--marketing-muted);font-family:"Segoe UI","Aptos",system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size:.88rem;font-weight:800;line-height:1;white-space:nowrap}.pricing-price .pricing-price__value{color:var(--marketing-navy);white-space:nowrap}.pricing-price>small{white-space:nowrap}.pricing-card--trial .pricing-price>small{white-space:normal;overflow-wrap:anywhere}.public-info-page{margin-top:-1rem}.public-hero{padding:clamp(2rem,5vw,3.75rem) 0 clamp(2.5rem,6vw,4.5rem);background:radial-gradient(circle at 18% 20%,rgba(212,165,116,.2),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.public-hero__inner{display:grid;justify-items:center;gap:1.05rem;text-align:center}.public-hero h1{max-width:13ch}.public-hero .marketing-lead{max-width:50rem}.public-updated{margin:0;border:1px solid rgba(31,42,68,.12);border-radius:999px;padding:.45rem .85rem;color:var(--marketing-muted);background:rgba(255,253,249,.78);font-weight:760}.public-content-section,.public-mission{padding:clamp(3.5rem,7vw,6rem) 0}.public-content-section{background:var(--marketing-offwhite)}.public-content-section--soft,.public-mission{background:radial-gradient(circle at 90% 20%,rgba(95,120,108,.12),transparent 24rem),var(--marketing-cream)}.public-narrative,.public-policy{max-width:860px}.public-narrative{display:grid;gap:1rem}.public-narrative p,.public-policy p,.public-policy li,.public-card p{color:var(--marketing-muted);font-size:clamp(1rem,1.45vw,1.13rem);line-height:1.75}.public-narrative p{margin:0}.public-narrative strong{color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.7rem,3vw,2.45rem);line-height:1.15}.public-feature-panel{border:1px solid rgba(31,42,68,.11);border-radius:28px;padding:clamp(2rem,5vw,4rem);background:rgba(255,253,249,.9);box-shadow:0 22px 56px rgba(31,42,68,.1);text-align:center}.public-feature-panel h2{max-width:860px;margin:0 auto;font-size:clamp(2rem,4vw,3.6rem)}.public-card-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1rem}.public-card{border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.1rem,2.2vw,1.5rem);background:linear-gradient(180deg,rgba(255,253,249,.96),rgba(250,248,245,.88)),#fff;box-shadow:0 16px 36px rgba(31,42,68,.07)}.public-card h2,.public-policy h2{margin:0;color:var(--marketing-navy);font-family:Georgia,"Times New Roman",serif;font-size:clamp(1.35rem,2.1vw,1.85rem)}.public-card p{margin:.7rem 0 0}.public-policy{display:grid;gap:clamp(1.4rem,3vw,2.1rem)}.public-policy section{border-bottom:1px solid rgba(31,42,68,.1);padding-bottom:clamp(1.2rem,2.6vw,1.8rem)}.public-policy p{margin:.65rem 0 0}.public-policy ul{display:grid;gap:.55rem;margin:.75rem 0 0;padding-left:1.25rem}.public-policy a,.public-card a{color:var(--marketing-navy);font-weight:820}.public-disclaimer{border:1px solid rgba(212,165,116,.38);border-radius:18px;padding:1rem 1.1rem;background:rgba(212,165,116,.13)}.public-disclaimer p{margin:0;color:#6b4a22;font-size:.96rem;font-weight:720}.public-footer{border-top:1px solid rgba(255,250,242,.12);background:#1f2a44}.public-footer__inner{display:flex;justify-content:space-between;gap:1rem;align-items:center;padding-top:1.25rem;padding-bottom:1.25rem}.public-footer__brand{color:#fffaf2;font-family:Georgia,"Times New Roman",serif;font-size:1.25rem;font-weight:700;text-decoration:none}.public-footer__brand:hover,.public-footer__brand:focus{color:#d4a574}.public-footer__nav{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:.55rem 1rem}.public-footer__nav a{color:rgba(255,250,242,.76);font-size:.92rem;font-weight:760;text-decoration:none}.public-footer__nav a:hover,.public-footer__nav a:focus{color:#d4a574}.pricing-feature-list{display:grid;gap:.65rem;margin:0;padding:0;list-style:none}.pricing-feature-list li{position:relative;padding-left:1.35rem;color:var(--marketing-navy);font-weight:740;line-height:1.35}.pricing-feature-list li::before{content:"";position:absolute;left:0;top:.44rem;width:.58rem;height:.58rem;border-radius:999px;background:var(--marketing-gold);box-shadow:0 0 0 4px rgba(212,165,116,.18)}.pricing-card__actions{display:grid;gap:.7rem;margin-top:auto}.pricing-card__actions .marketing-btn{width:100%}.pricing-card--trial .pricing-card__actions .marketing-btn{box-sizing:border-box;max-width:100%;padding-inline:.95rem;text-align:center;white-space:normal}.pricing-link{display:inline-flex;justify-content:center;color:var(--marketing-navy);font-weight:820;text-decoration-color:rgba(31,42,68,.24)}.pricing-link:hover,.pricing-link:focus{color:#8b612e}.comparison-grid,.faq-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem}.comparison-grid article,.faq-grid article{border:1px solid rgba(31,42,68,.1);border-radius:18px;padding:clamp(1.1rem,2.2vw,1.5rem);background:rgba(255,253,249,.9);box-shadow:0 16px 36px rgba(31,42,68,.07)}.comparison-grid p,.faq-grid p{margin:.7rem 0 0;color:var(--marketing-muted);line-height:1.7}.reveal-section{opacity:0;transform:translateY(24px);transition:opacity .72s ease,transform .72s ease}.marketing-hero.reveal-section{opacity:1;transform:none}.reveal-section.is-visible{opacity:1;transform:translateY(0)}@keyframes productFloat{0%,100%{transform:rotate(1deg) translateY(0)}50%{transform:rotate(1deg) translateY(-12px)}}@media(prefers-reduced-motion:reduce){.hero-product,.reveal-section{animation:none;transition:none}.reveal-section{opacity:1;transform:none}}@media(max-width:1060px){.marketing-hero__grid,.problem-section,.founder-story__grid{grid-template-columns:1fr}.marketing-home h1{max-width:13ch}.hero-product{transform:none;animation:none}.problem-section--reverse .problem-visual{order:0}.testimonial-grid{grid-template-columns:1fr}.comparison-grid,.faq-grid,.public-card-grid{grid-template-columns:1fr}}@media(max-width:760px){.marketing-container{width:min(100% - 24px,1180px)}.marketing-home{margin-top:-.75rem}.marketing-hero{padding-top:1.8rem}.marketing-actions,.marketing-actions .marketing-btn{width:100%}.product-mockup{grid-template-columns:1fr;min-height:0}.product-sidebar{display:flex;gap:.4rem;overflow-x:auto;border-right:0;border-bottom:1px solid rgba(31,42,68,.1)}.product-sidebar strong{flex:0 0 auto;margin:0 .4rem 0 0}.product-sidebar span{flex:0 0 auto}.product-topline,.hero-proof{display:grid}.hero-proof{grid-template-columns:repeat(2,minmax(0,1fr));gap:.65rem}.hero-proof div{display:block}.hero-proof dt{font-size:1.8rem}.hero-proof dd{font-size:.86rem}.product-grid{grid-template-columns:1fr}.writer-workspace{display:grid;gap:.75rem;min-height:0;transform:none;animation:none}.writer-workspace::before{display:none}.workspace-manuscript,.workspace-card,.workspace-progress{position:relative;inset:auto;width:auto}.workspace-manuscript{min-height:0}.workspace-progress{flex-direction:column;height:auto;border-radius:18px}.mock-chart{min-height:145px}.problem-section{min-height:0;padding:2.25rem 0}.problem-visual{min-height:260px;border-radius:18px}.visual-plot,.visual-series,.visual-threads{grid-template-columns:repeat(2,1fr);padding:1rem}.visual-series span{min-height:7.5rem}.visual-docs span,.visual-notes span{max-width:12rem;font-size:.88rem}.founder-mark{max-width:220px}.pricing-hero{padding-top:1.8rem}.pricing-card-grid{grid-template-columns:1fr}.public-hero{padding-top:1.8rem}.public-footer__inner{align-items:flex-start;flex-direction:column}.public-footer__nav{justify-content:flex-start}}@media(max-width:520px){.marketing-home h1{font-size:clamp(2.7rem,13vw,3.55rem);line-height:1}.browser-frame{border-radius:16px}.product-sidebar span:not(.is-active){display:none}.visual-flow span{font-size:.78rem}.person{width:4.3rem;height:4.3rem}}@media(max-width:1200px){.timeline-filter-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.timeline-control-panel{align-items:stretch}.relationship-map-controls{grid-template-columns:repeat(2,minmax(150px,1fr))}.relationship-map-workspace{grid-template-columns:1fr}.relationship-map-details{position:static;max-height:none}}@media(max-width:760px){.workspace-heading,.page-heading,.context-header{align-items:stretch;flex-direction:column}.button-row{align-items:stretch}.button-row .btn,.button-row form{width:100%}.attachment-preview-row{grid-template-columns:1fr}.attachment-thumb{width:100%;max-width:260px}} -/* Public features page */ -.features-page { - scroll-behavior: smooth; -} - -.features-hero { - position: relative; - overflow: hidden; - padding: clamp(3.5rem, 7vw, 7.4rem) 0 clamp(3rem, 6vw, 5.25rem); - background: - radial-gradient(circle at 12% 18%, rgba(212, 165, 116, 0.2), transparent 26rem), - radial-gradient(circle at 88% 8%, rgba(95, 120, 108, 0.18), transparent 24rem), - linear-gradient(180deg, var(--marketing-cream), var(--marketing-offwhite)); -} - -.features-hero__grid, -.features-word__grid { - display: grid; - grid-template-columns: minmax(320px, 0.72fr) minmax(560px, 1.28fr); - align-items: center; - gap: clamp(2rem, 4vw, 4.25rem); -} - -.features-hero__copy { - max-width: 620px; -} - -.features-hero__highlights { - display: grid; - gap: 0.9rem; - margin-top: 1.75rem; -} - -.features-hero__highlights article { - display: grid; - gap: 0.15rem; - padding: 1rem 1.1rem; - border: 1px solid var(--marketing-line); - border-radius: 18px; - background: rgba(255, 255, 255, 0.72); - box-shadow: 0 18px 46px rgba(31, 42, 68, 0.08); -} - -.features-hero__highlights strong { - color: var(--marketing-navy); - font-size: 1rem; -} - -.features-hero__highlights span, -.features-section__heading p, -.features-showcase__intro p, -.features-word p, -.features-bullet-list, -.feature-icon-card p, -.features-split__copy p, -.features-faq p { - color: var(--marketing-muted); -} - -.features-screenshot { - position: relative; - margin: 0; - overflow: hidden; - border: 1px solid rgba(31, 42, 68, 0.14); - border-radius: 28px; - background: linear-gradient(180deg, #fffdf8, #f7f0e8); - box-shadow: var(--marketing-shadow); -} - -.features-screenshot::before { - content: ""; - display: block; - height: 38px; - background: - radial-gradient(circle at 24px 50%, #d77a68 0 5px, transparent 6px), - radial-gradient(circle at 44px 50%, #e2bc72 0 5px, transparent 6px), - radial-gradient(circle at 64px 50%, #79a286 0 5px, transparent 6px), - linear-gradient(90deg, #f5efe7, #fff); -} - -.features-screenshot img { - display: block; - width: 100%; - height: auto; - object-fit: contain; - background: #f8f3ec; -} - -.features-screenshot--hero { - margin-right: min(-3vw, -1.5rem); -} - -.features-screenshot--product, -.features-screenshot--wide { - box-shadow: 0 28px 70px rgba(31, 42, 68, 0.14); -} - -.features-screenshot--showcase { - margin-bottom: 1.35rem; - border-color: rgba(255, 255, 255, 0.18); - background: rgba(255, 255, 255, 0.92); -} - -.features-screenshot--wide { - max-width: 1180px; - margin-bottom: 1.35rem; -} - -.features-screenshot figcaption, -.feature-icon-card span { - color: var(--marketing-rose); - font-size: 0.78rem; - font-weight: 800; - letter-spacing: 0.09em; - text-transform: uppercase; -} - -.features-screenshot figcaption { - padding: 0.8rem 1rem 1rem; - background: #fff; -} - -.features-jump { - padding: 2rem 0; - background: var(--marketing-offwhite); -} - -.features-jump__grid { - display: flex; - flex-wrap: wrap; - gap: 0.75rem; -} - -.features-jump__grid a { - display: inline-flex; - align-items: center; - min-height: 44px; - padding: 0.65rem 1rem; - border: 1px solid rgba(31, 42, 68, 0.14); - border-radius: 999px; - background: #fff; - color: var(--marketing-navy); - font-weight: 800; - text-decoration: none; - box-shadow: 0 10px 24px rgba(31, 42, 68, 0.07); -} - -.features-jump__grid a:hover, -.features-jump__grid a:focus { - border-color: rgba(212, 165, 116, 0.8); - color: var(--marketing-navy); - transform: translateY(-1px); -} - -.features-section, -.features-showcase, -.features-word, -.features-faq { - padding: clamp(4rem, 8vw, 7rem) 0; -} - -.features-section--soft, -.features-word { - background: - linear-gradient(135deg, rgba(212, 165, 116, 0.18), transparent 38%), - var(--marketing-cream); -} - -.features-section__heading, -.features-showcase__intro { - max-width: 880px; - margin-bottom: clamp(2rem, 4vw, 3.25rem); -} - -.features-section__heading h2, -.features-showcase__intro h2, -.features-word h2 { - max-width: 780px; -} - -.features-preview-pair, -.features-collage { - display: grid; - gap: clamp(1.25rem, 3vw, 2rem); - margin-bottom: clamp(1.5rem, 4vw, 2.5rem); -} - -.features-preview-pair { - grid-template-columns: repeat(2, minmax(0, 1fr)); - align-items: start; -} - -.features-collage { - grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); -} - -.features-split { - display: grid; - grid-template-columns: minmax(0, 1.42fr) minmax(300px, 0.58fr); - align-items: center; - gap: clamp(1.5rem, 4vw, 3rem); - margin-bottom: clamp(1.5rem, 4vw, 2.5rem); -} - -.features-split__copy { - padding: clamp(1.4rem, 3vw, 2rem); -} - -.features-split__copy h3 { - font-size: clamp(1.7rem, 3vw, 2.35rem); -} - -.features-icon-grid { - display: grid; - grid-template-columns: repeat(4, minmax(0, 1fr)); - gap: 1rem; -} - -.features-icon-grid--five { - grid-template-columns: repeat(5, minmax(0, 1fr)); -} - -.features-icon-grid--three { - grid-template-columns: repeat(3, minmax(0, 1fr)); -} - -.features-icon-grid--showcase { - grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); -} - -.features-icon-grid--publish { - grid-template-columns: repeat(5, minmax(0, 1fr)); -} - -.feature-icon-card { - min-height: 100%; - padding: clamp(1.1rem, 2.5vw, 1.5rem); - border: 1px solid rgba(31, 42, 68, 0.12); - border-radius: 22px; - background: rgba(255, 255, 255, 0.88); - box-shadow: 0 18px 46px rgba(31, 42, 68, 0.09); -} - -.feature-icon-card > span { - display: inline-grid; - place-items: center; - width: 3rem; - height: 3rem; - margin-bottom: 1rem; - border-radius: 16px; - background: - linear-gradient(135deg, rgba(212, 165, 116, 0.22), rgba(95, 120, 108, 0.16)), - #fffaf2; - color: var(--marketing-navy); - letter-spacing: 0; -} - -.feature-icon-card--large { - padding: clamp(1.25rem, 3vw, 1.8rem); - background: - linear-gradient(145deg, rgba(255, 255, 255, 0.94), rgba(250, 248, 245, 0.88)), - #fff; -} - -.feature-icon-card h3 { - margin: 0 0 0.55rem; - overflow-wrap: anywhere; - font-size: clamp(1rem, 1.35vw, 1.18rem); - line-height: 1.18; -} - -.feature-icon-card p { - margin: 0; -} - -.features-showcase { - position: relative; - overflow: hidden; - background: - linear-gradient(135deg, rgba(31, 42, 68, 0.96), rgba(49, 66, 99, 0.96)), - var(--marketing-navy); -} - -.features-showcase .marketing-eyebrow, -.features-showcase h2, -.features-showcase h3 { - color: #fff; -} - -.features-showcase__intro p, -.features-showcase .feature-icon-card p { - color: rgba(255, 255, 255, 0.72); -} - -.features-showcase .features-showcase__intro h2, -.features-showcase .feature-icon-card h3 { - color: #f0c995; -} - -.features-showcase .feature-icon-card { - border-color: rgba(255, 255, 255, 0.15); - background: rgba(255, 255, 255, 0.1); - box-shadow: 0 24px 60px rgba(0, 0, 0, 0.18); -} - -.features-showcase .feature-icon-card > span { - background: rgba(255, 255, 255, 0.13); - color: #f0c995; -} - -.features-did-you-know { - margin-top: 1.4rem; - padding: clamp(1.35rem, 3vw, 2rem); - border: 1px solid rgba(212, 165, 116, 0.42); - border-radius: 24px; - background: rgba(255, 255, 255, 0.11); - color: #fff; -} - -.features-did-you-know strong { - display: block; - margin-bottom: 0.35rem; - color: #f0c995; - font-size: 1.1rem; -} - -.features-did-you-know p { - max-width: 920px; - margin: 0; - color: rgba(255, 255, 255, 0.78); -} - -.features-word { - border-top: 1px solid rgba(31, 42, 68, 0.08); - border-bottom: 1px solid rgba(31, 42, 68, 0.08); -} - -.features-word__grid { - grid-template-columns: minmax(300px, 0.62fr) minmax(560px, 1.38fr); -} - -.features-bullet-list { - display: grid; - gap: 0.7rem; - margin: 1.4rem 0 0; - padding: 0; - list-style: none; -} - -.features-bullet-list li { - position: relative; - padding-left: 1.7rem; -} - -.features-bullet-list li::before { - content: ""; - position: absolute; - left: 0; - top: 0.45rem; - width: 0.75rem; - height: 0.75rem; - border-radius: 50%; - background: linear-gradient(135deg, var(--marketing-gold), var(--marketing-rose)); -} - -.features-faq { - background: var(--marketing-offwhite); -} - -.features-page .final-cta small { - display: block; - margin-top: 1rem; - color: rgba(255, 255, 255, 0.72); -} - -@media (max-width: 980px) { - .features-hero__grid, - .features-word__grid, - .features-split, - .features-preview-pair, - .features-collage { - grid-template-columns: 1fr; - } - - .features-screenshot--hero { - margin-right: 0; - } - - .features-icon-grid, - .features-icon-grid--three { - grid-template-columns: repeat(2, minmax(0, 1fr)); - } -} - -@media (max-width: 680px) { - .features-hero { - padding-top: 2.4rem; - } - - .features-icon-grid, - .features-icon-grid--three, - .features-icon-grid--publish { - grid-template-columns: 1fr; - } - - .features-jump__grid a { - width: 100%; - justify-content: center; - } - - .features-screenshot, - .feature-icon-card { - border-radius: 18px; - } - - .features-screenshot::before { - height: 30px; - } -} - +:root{--plotline-bg: #f4efe6;--plotline-bg-warm: #fbf8f0;--plotline-surface: rgba(255,252,246,0.94);--plotline-surface-elevated: #fffdf8;--plotline-border-soft: rgba(84,68,48,0.14);--plotline-text: #241f1b;--plotline-text-muted: #74695d;--plotline-accent: #7a4d2c;--plotline-accent-dark: #59371f;--plotline-accent-soft: #f2e2cf;--plotline-secondary: #315f67;--plotline-secondary-soft: #dfecef;--plotline-danger: #963f36;--plotline-warning: #b8762b;--plotline-success: #4d7654;--plotline-timeline-bg: #ede2d3;--plotline-shadow-card: 0 14px 32px rgba(62,45,28,0.08);--plotline-shadow-subtle: 0 8px 20px rgba(62,45,28,0.06);--plotline-radius: 12px;--plotline-radius-sm: 9px;--plotline-ink: var(--plotline-text);--plotline-muted: var(--plotline-text-muted);--plotline-paper: var(--plotline-bg-warm);--plotline-panel: var(--plotline-surface);--plotline-line: var(--plotline-border-soft);--plotline-soft: var(--plotline-accent-soft);--app-bg: var(--plotline-bg);--app-surface: var(--plotline-surface);--app-surface-alt: var(--plotline-surface-elevated);--app-text: var(--plotline-text);--app-text-muted: var(--plotline-text-muted);--app-border: var(--plotline-border-soft);--app-link: var(--plotline-accent-dark);--app-input-bg: rgba(255,253,248,0.9);--app-input-text: var(--plotline-text);--app-card-bg: var(--plotline-surface);--app-timeline-bg: var(--plotline-timeline-bg)}.features-page{scroll-behavior: smooth}.features-hero{position: relative;overflow: hidden;padding: clamp(3.5rem,7vw,7.4rem) 0 clamp(3rem,6vw,5.25rem);background: radial-gradient(circle at 12% 18%,rgba(212,165,116,0.2),transparent 26rem),radial-gradient(circle at 88% 8%,rgba(95,120,108,0.18),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.features-hero__grid,.features-word__grid{display: grid;grid-template-columns: minmax(320px,0.72fr) minmax(560px,1.28fr);align-items: center;gap: clamp(2rem,4vw,4.25rem)}.features-hero__copy{max-width: 620px}.features-hero__highlights{display: grid;gap: 0.9rem;margin-top: 1.75rem}.features-hero__highlights article{display: grid;gap: 0.15rem;padding: 1rem 1.1rem;border: 1px solid var(--marketing-line);border-radius: 18px;background: rgba(255,255,255,0.72);box-shadow: 0 18px 46px rgba(31,42,68,0.08)}.features-hero__highlights strong{color: var(--marketing-navy);font-size: 1rem}.features-hero__highlights span,.features-section__heading p,.features-showcase__intro p,.features-word p,.features-bullet-list,.feature-icon-card p,.features-split__copy p,.features-faq p{color: var(--marketing-muted)}.features-screenshot{position: relative;margin: 0;overflow: hidden;border: 1px solid rgba(31,42,68,0.14);border-radius: 28px;background: linear-gradient(180deg,#fffdf8,#f7f0e8);box-shadow: var(--marketing-shadow)}.features-screenshot::before{content: "";display: block;height: 38px;background: radial-gradient(circle at 24px 50%,#d77a68 0 5px,transparent 6px),radial-gradient(circle at 44px 50%,#e2bc72 0 5px,transparent 6px),radial-gradient(circle at 64px 50%,#79a286 0 5px,transparent 6px),linear-gradient(90deg,#f5efe7,#fff)}.features-screenshot img{display: block;width: 100%;height: auto;object-fit: contain;background: #f8f3ec}.features-screenshot--hero{margin-right: min(-3vw,-1.5rem)}.features-screenshot--product,.features-screenshot--wide{box-shadow: 0 28px 70px rgba(31,42,68,0.14)}.features-screenshot--showcase{margin-bottom: 1.35rem;border-color: rgba(255,255,255,0.18);background: rgba(255,255,255,0.92)}.features-screenshot--wide{max-width: 1180px;margin-bottom: 1.35rem}.features-screenshot figcaption,.feature-icon-card span{color: var(--marketing-rose);font-size: 0.78rem;font-weight: 800;letter-spacing: 0.09em;text-transform: uppercase}.features-screenshot figcaption{padding: 0.8rem 1rem 1rem;background: #fff}.features-jump{padding: 2rem 0;background: var(--marketing-offwhite)}.features-jump__grid{display: flex;flex-wrap: wrap;gap: 0.75rem}.features-jump__grid a{display: inline-flex;align-items: center;min-height: 44px;padding: 0.65rem 1rem;border: 1px solid rgba(31,42,68,0.14);border-radius: 999px;background: #fff;color: var(--marketing-navy);font-weight: 800;text-decoration: none;box-shadow: 0 10px 24px rgba(31,42,68,0.07)}.features-jump__grid a:hover,.features-jump__grid a:focus{border-color: rgba(212,165,116,0.8);color: var(--marketing-navy);transform: translateY(-1px)}.features-section,.features-showcase,.features-word,.features-faq{padding: clamp(4rem,8vw,7rem) 0}.features-section--soft,.features-word{background: linear-gradient(135deg,rgba(212,165,116,0.18),transparent 38%),var(--marketing-cream)}.features-section__heading,.features-showcase__intro{max-width: 880px;margin-bottom: clamp(2rem,4vw,3.25rem)}.features-section__heading h2,.features-showcase__intro h2,.features-word h2{max-width: 780px}.features-preview-pair,.features-collage{display: grid;gap: clamp(1.25rem,3vw,2rem);margin-bottom: clamp(1.5rem,4vw,2.5rem)}.features-preview-pair{grid-template-columns: repeat(2,minmax(0,1fr));align-items: start}.features-collage{grid-template-columns: minmax(0,1fr) minmax(0,1fr)}.features-split{display: grid;grid-template-columns: minmax(0,1.42fr) minmax(300px,0.58fr);align-items: center;gap: clamp(1.5rem,4vw,3rem);margin-bottom: clamp(1.5rem,4vw,2.5rem)}.features-split__copy{padding: clamp(1.4rem,3vw,2rem)}.features-split__copy h3{font-size: clamp(1.7rem,3vw,2.35rem)}.features-icon-grid{display: grid;grid-template-columns: repeat(4,minmax(0,1fr));gap: 1rem}.features-icon-grid--five{grid-template-columns: repeat(5,minmax(0,1fr))}.features-icon-grid--three{grid-template-columns: repeat(3,minmax(0,1fr))}.features-icon-grid--showcase{grid-template-columns: repeat(auto-fit,minmax(210px,1fr))}.features-icon-grid--publish{grid-template-columns: repeat(5,minmax(0,1fr))}.feature-icon-card{min-height: 100%;padding: clamp(1.1rem,2.5vw,1.5rem);border: 1px solid rgba(31,42,68,0.12);border-radius: 22px;background: rgba(255,255,255,0.88);box-shadow: 0 18px 46px rgba(31,42,68,0.09)}.feature-icon-card > span{display: inline-grid;place-items: center;width: 3rem;height: 3rem;margin-bottom: 1rem;border-radius: 16px;background: linear-gradient(135deg,rgba(212,165,116,0.22),rgba(95,120,108,0.16)),#fffaf2;color: var(--marketing-navy);letter-spacing: 0}.feature-icon-card--large{padding: clamp(1.25rem,3vw,1.8rem);background: linear-gradient(145deg,rgba(255,255,255,0.94),rgba(250,248,245,0.88)),#fff}.feature-icon-card h3{margin: 0 0 0.55rem;overflow-wrap: anywhere;font-size: clamp(1rem,1.35vw,1.18rem);line-height: 1.18}.feature-icon-card p{margin: 0}.features-showcase{position: relative;overflow: hidden;background: linear-gradient(135deg,rgba(31,42,68,0.96),rgba(49,66,99,0.96)),var(--marketing-navy)}.features-showcase .marketing-eyebrow,.features-showcase h2,.features-showcase h3{color: #fff}.features-showcase__intro p,.features-showcase .feature-icon-card p{color: rgba(255,255,255,0.72)}.features-showcase .features-showcase__intro h2,.features-showcase .feature-icon-card h3{color: #f0c995}.features-showcase .feature-icon-card{border-color: rgba(255,255,255,0.15);background: rgba(255,255,255,0.1);box-shadow: 0 24px 60px rgba(0,0,0,0.18)}.features-showcase .feature-icon-card > span{background: rgba(255,255,255,0.13);color: #f0c995}.features-did-you-know{margin-top: 1.4rem;padding: clamp(1.35rem,3vw,2rem);border: 1px solid rgba(212,165,116,0.42);border-radius: 24px;background: rgba(255,255,255,0.11);color: #fff}.features-did-you-know strong{display: block;margin-bottom: 0.35rem;color: #f0c995;font-size: 1.1rem}.features-did-you-know p{max-width: 920px;margin: 0;color: rgba(255,255,255,0.78)}.features-word{border-top: 1px solid rgba(31,42,68,0.08);border-bottom: 1px solid rgba(31,42,68,0.08)}.features-word__grid{grid-template-columns: minmax(300px,0.62fr) minmax(560px,1.38fr)}.features-bullet-list{display: grid;gap: 0.7rem;margin: 1.4rem 0 0;padding: 0;list-style: none}.features-bullet-list li{position: relative;padding-left: 1.7rem}.features-bullet-list li::before{content: "";position: absolute;left: 0;top: 0.45rem;width: 0.75rem;height: 0.75rem;border-radius: 50%;background: linear-gradient(135deg,var(--marketing-gold),var(--marketing-rose))}.features-faq{background: var(--marketing-offwhite)}.features-page .final-cta small{display: block;margin-top: 1rem;color: rgba(255,255,255,0.72)}@media (max-width: 980px){.features-hero__grid,.features-word__grid,.features-split,.features-preview-pair,.features-collage{grid-template-columns: 1fr}.features-screenshot--hero{margin-right: 0}.features-icon-grid,.features-icon-grid--three{grid-template-columns: repeat(2,minmax(0,1fr))}}@media (max-width: 680px){.features-hero{padding-top: 2.4rem}.features-icon-grid,.features-icon-grid--three,.features-icon-grid--publish{grid-template-columns: 1fr}.features-jump__grid a{width: 100%;justify-content: center}.features-screenshot,.feature-icon-card{border-radius: 18px}.features-screenshot::before{height: 30px}}[data-theme="dark"]{color-scheme: dark;--plotline-bg: #14110f;--plotline-bg-warm: #1c1714;--plotline-surface: rgba(35,29,25,0.96);--plotline-surface-elevated: #2a231e;--plotline-border-soft: rgba(231,214,190,0.16);--plotline-text: #f1e7d8;--plotline-text-muted: #b9aa99;--plotline-accent: #d49a62;--plotline-accent-dark: #f0c99d;--plotline-accent-soft: #3a2a20;--plotline-secondary: #78b9c2;--plotline-secondary-soft: #21383d;--plotline-danger: #ee8e83;--plotline-warning: #e0ad65;--plotline-success: #91c99a;--plotline-timeline-bg: #211b17;--plotline-shadow-card: 0 16px 38px rgba(0,0,0,0.34);--plotline-shadow-subtle: 0 10px 26px rgba(0,0,0,0.24);--plotline-ink: var(--plotline-text);--plotline-muted: var(--plotline-text-muted);--plotline-paper: var(--plotline-bg-warm);--plotline-panel: var(--plotline-surface);--plotline-line: var(--plotline-border-soft);--plotline-soft: var(--plotline-accent-soft);--app-bg: #14110f;--app-surface: rgba(35,29,25,0.96);--app-surface-alt: #2a231e;--app-text: #f4eadc;--app-text-muted: #cdbba7;--app-border: rgba(231,214,190,0.2);--app-link: #f1c38f;--app-input-bg: #211b17;--app-input-text: #f4eadc;--app-card-bg: rgba(35,29,25,0.96);--app-timeline-bg: #211b17;--bs-body-bg: var(--app-bg);--bs-body-color: var(--app-text);--bs-secondary-color: var(--app-text-muted);--bs-tertiary-color: #a99886;--bs-border-color: var(--app-border);--bs-link-color: var(--app-link);--bs-link-hover-color: #ffd5a6;--bs-card-bg: var(--app-card-bg);--bs-card-color: var(--app-text);--bs-modal-bg: var(--app-surface-alt);--bs-modal-color: var(--app-text);--bs-dropdown-bg: var(--app-surface-alt);--bs-dropdown-color: var(--app-text);--bs-list-group-bg: var(--app-surface);--bs-list-group-color: var(--app-text);--bs-table-color: var(--app-text);--bs-table-bg: transparent}body{color: var(--plotline-text);background: radial-gradient(circle at top left,rgba(185,134,83,0.18),transparent 34rem),linear-gradient(135deg,var(--plotline-bg-warm),var(--plotline-bg) 52%,#efe6d8);font-family: "Segoe UI","Aptos",system-ui,-apple-system,BlinkMacSystemFont,sans-serif}h1,h2,h3,.navbar-brand,.context-title strong{font-family: Georgia,"Times New Roman",serif;letter-spacing: 0.01em}a{color: var(--plotline-accent-dark);text-decoration-color: rgba(122,77,44,0.28);text-underline-offset: 0.18em}a:hover{color: var(--plotline-secondary)}.plotline-nav{position: relative;z-index: 1030;background: rgba(255,251,243,0.9) !important;border-bottom: 1px solid rgba(84,68,48,0.13) !important;box-shadow: 0 8px 28px rgba(62,45,28,0.06)}.navbar-brand{color: var(--plotline-accent-dark) !important;font-size: 1.35rem}.plotline-nav .nav-link{border-radius: 999px;color: var(--plotline-text-muted) !important;font-weight: 650;padding-inline: 0.82rem}.plotline-nav .nav-link:hover,.plotline-nav .nav-link:focus{color: var(--plotline-accent-dark) !important;background: rgba(122,77,44,0.1)}.page-heading h1,.workspace-heading h1{color: #201a16;text-wrap: balance}.eyebrow{color: var(--plotline-accent);font-size: 0.72rem;letter-spacing: 0.11em}.lead-text,.muted{color: var(--plotline-text-muted) !important}.plain-card,.empty-panel,.edit-panel,.list-section,.story-bible-section,.story-bible-card,.archive-item-card,.warning-card,.warning-mini-card,.scenario-chapter,.drag-drop-panel,.import-tree-book,.import-confirmation,.import-docs details{background: var(--plotline-surface);border-color: var(--plotline-border-soft);border-radius: var(--plotline-radius);box-shadow: var(--plotline-shadow-subtle)}.plain-card,.story-bible-card,.archive-item-card,.timeline-scene-card,.inspector-section{transition: box-shadow 0.18s ease,transform 0.18s ease,border-color 0.18s ease}.plain-card:hover,.story-bible-card:hover,.archive-item-card:hover{border-color: rgba(122,77,44,0.24);box-shadow: var(--plotline-shadow-card)}.empty-panel{background: linear-gradient(135deg,rgba(255,253,248,0.96),rgba(244,229,209,0.72)),var(--plotline-surface)}.btn{border-radius: 999px;font-weight: 700;letter-spacing: 0.01em;box-shadow: none}.btn-primary{--bs-btn-bg: var(--plotline-accent);--bs-btn-border-color: var(--plotline-accent);--bs-btn-hover-bg: var(--plotline-accent-dark);--bs-btn-hover-border-color: var(--plotline-accent-dark);--bs-btn-active-bg: var(--plotline-accent-dark);--bs-btn-active-border-color: var(--plotline-accent-dark)}.btn-outline-primary,.btn-outline-secondary{--bs-btn-color: var(--plotline-accent-dark);--bs-btn-border-color: rgba(122,77,44,0.26);--bs-btn-hover-color: var(--plotline-accent-dark);--bs-btn-hover-bg: rgba(122,77,44,0.12);--bs-btn-hover-border-color: rgba(122,77,44,0.38);background: rgba(255,252,246,0.72)}.btn-outline-danger{--bs-btn-color: var(--plotline-danger);--bs-btn-border-color: rgba(150,63,54,0.34);--bs-btn-hover-bg: var(--plotline-danger);--bs-btn-hover-border-color: var(--plotline-danger)}.status-pill,.purpose-chip,.location-badge,.archived-badge,.severity-pill,.overview-chip,.story-bible-card-title span{border: 1px solid rgba(84,68,48,0.13);border-radius: 999px;background: rgba(255,250,241,0.82);color: var(--plotline-text-muted);box-shadow: inset 0 1px 0 rgba(255,255,255,0.75);font-weight: 750;letter-spacing: 0.02em}.status-pill{background: var(--plotline-secondary-soft);color: #284f56}.purpose-chip{background: var(--plotline-accent-soft);color: var(--plotline-accent-dark)}.severity-pill.warning,.warning-placeholder.active{background: #fbecd3;color: #7b4b13;border-color: rgba(184,118,43,0.28)}.context-header{background: rgba(255,251,243,0.78);border: 1px solid var(--plotline-border-soft);border-radius: var(--plotline-radius);box-shadow: var(--plotline-shadow-subtle)}.context-nav a{border-radius: 999px;color: var(--plotline-text-muted);font-weight: 700}.context-nav a:hover,.context-nav a:focus{background: rgba(122,77,44,0.1);color: var(--plotline-accent-dark)}.pw-page-heading{align-items: center;gap: clamp(0.85rem,2vw,1.35rem);margin-bottom: 1rem}.pw-page-heading > div:first-child{min-width: min(100%,26rem)}.pw-page-heading .lead-text{max-width: 52rem}.pw-project-nav{display: grid;gap: 0.55rem;margin: 0 0 1.1rem;border: 1px solid var(--plotline-border-soft);border-radius: var(--plotline-radius);padding: 0.7rem 0.75rem;background: linear-gradient(135deg,rgba(255,253,248,0.9),rgba(242,226,207,0.55)),var(--plotline-surface);box-shadow: var(--plotline-shadow-subtle)}.pw-project-nav__label{color: var(--plotline-accent);font-size: 0.68rem;font-weight: 850;letter-spacing: 0.1em;line-height: 1;text-transform: uppercase}.pw-project-nav__links,.pw-character-nav{display: flex;flex-wrap: wrap;gap: 0.42rem;align-items: center}.pw-project-nav__link,.pw-character-nav__link{display: inline-flex;align-items: center;justify-content: center;min-height: 2rem;border: 1px solid rgba(84,68,48,0.16);border-radius: 999px;padding: 0.32rem 0.68rem;color: var(--plotline-accent-dark);background: rgba(255,250,241,0.82);box-shadow: inset 0 1px 0 rgba(255,255,255,0.72);font-size: 0.8rem;font-weight: 780;line-height: 1.1;text-decoration: none;transition: background-color 0.16s ease,border-color 0.16s ease,color 0.16s ease,box-shadow 0.16s ease}.pw-project-nav__link:hover,.pw-project-nav__link:focus,.pw-character-nav__link:hover,.pw-character-nav__link:focus{color: var(--plotline-accent-dark);border-color: rgba(122,77,44,0.32);background: rgba(122,77,44,0.11);box-shadow: inset 0 1px 0 rgba(255,255,255,0.62),0 5px 12px rgba(62,45,28,0.06)}.pw-project-nav__link.active,.pw-character-nav__link.active{color: #fff8ec;border-color: var(--plotline-accent);background: linear-gradient(180deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow: 0 6px 14px rgba(62,45,28,0.16)}.pw-character-nav{margin: 0 0 1rem;border-bottom: 1px solid rgba(84,68,48,0.11);padding-bottom: 0.65rem}.pw-actions{flex: 0 0 auto}.pw-actions__toggle{--bs-btn-color: var(--plotline-accent-dark);--bs-btn-bg: rgba(255,250,241,0.86);--bs-btn-border-color: rgba(122,77,44,0.32);--bs-btn-hover-color: #fff8ec;--bs-btn-hover-bg: var(--plotline-accent);--bs-btn-hover-border-color: var(--plotline-accent);--bs-btn-active-color: #fff8ec;--bs-btn-active-bg: var(--plotline-accent-dark);--bs-btn-active-border-color: var(--plotline-accent-dark);min-height: 2.35rem;padding-inline: 1rem;box-shadow: var(--plotline-shadow-subtle)}.pw-actions .dropdown-menu{--bs-dropdown-bg: var(--plotline-surface-elevated);--bs-dropdown-color: var(--plotline-text);--bs-dropdown-border-color: var(--plotline-border-soft);--bs-dropdown-link-color: var(--plotline-text);--bs-dropdown-link-hover-color: var(--plotline-accent-dark);--bs-dropdown-link-hover-bg: rgba(122,77,44,0.1);--bs-dropdown-divider-bg: rgba(84,68,48,0.13);border-radius: var(--plotline-radius-sm);box-shadow: var(--plotline-shadow-card)}.pw-actions .dropdown-item{font-weight: 650}.pw-actions .dropdown-item.text-danger{color: var(--plotline-danger) !important}.pw-actions .dropdown-item.text-danger:hover,.pw-actions .dropdown-item.text-danger:focus{color: #fff8ec !important;background: var(--plotline-danger)}.project-gallery{display: grid;gap: 1rem}.project-tabs{gap: 0.45rem;padding: 0.35rem;border: 1px solid var(--plotline-border-soft);border-radius: 999px;background: rgba(255,250,241,0.72);box-shadow: var(--plotline-shadow-subtle);width: fit-content;max-width: 100%}.project-tabs .nav-link{border-radius: 999px;color: var(--plotline-text-muted);font-weight: 800;padding: 0.48rem 0.9rem}.project-tabs .nav-link:hover,.project-tabs .nav-link:focus{color: var(--plotline-accent-dark);background: rgba(122,77,44,0.1)}.project-tabs .nav-link.active{color: #fff8ec;background: linear-gradient(180deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow: 0 8px 16px rgba(62,45,28,0.14)}.project-tab-content{min-width: 0}.project-card-grid{display: grid;grid-template-columns: repeat(auto-fill,minmax(min(100%,22rem),1fr));gap: 1rem}.project-card{display: grid;grid-template-rows: auto 1fr auto;overflow: hidden;min-height: 100%;border: 1px solid var(--plotline-border-soft);border-radius: var(--plotline-radius);background: var(--plotline-surface);box-shadow: var(--plotline-shadow-subtle);transition: border-color 0.18s ease,box-shadow 0.18s ease,transform 0.18s ease}.project-card:hover{border-color: rgba(122,77,44,0.24);box-shadow: var(--plotline-shadow-card);transform: translateY(-1px)}.project-card--archived{opacity: 0.88}.project-card__visual{position: relative;display: grid;place-items: center;min-height: 11rem;overflow: hidden;background: radial-gradient(circle at 26% 22%,rgba(255,255,255,0.64),transparent 11rem),linear-gradient(135deg,rgba(242,226,207,0.94),rgba(223,236,239,0.78))}.project-card--archived .project-card__visual{filter: saturate(0.55)}.project-card__body{display: grid;gap: 0.75rem;padding: 1rem 1rem 0.85rem}.project-card__heading{display: flex;justify-content: space-between;gap: 0.8rem}.project-card__heading h2{margin: 0;font-size: 1.35rem;line-height: 1.1}.project-card__heading h2 a{color: var(--plotline-text);text-decoration-color: rgba(122,77,44,0.28)}.project-card__description{display: -webkit-box;min-height: 3.2rem;margin: 0;overflow: hidden;color: var(--plotline-text-muted);-webkit-box-orient: vertical;-webkit-line-clamp: 3}.project-card__stats{display: flex;flex-wrap: wrap;gap: 0.45rem}.project-card__stats span{display: inline-flex;align-items: baseline;gap: 0.25rem;border: 1px solid rgba(84,68,48,0.12);border-radius: 999px;padding: 0.28rem 0.6rem;color: var(--plotline-text-muted);background: rgba(255,250,241,0.74);font-size: 0.82rem;font-weight: 700}.project-card__stats strong{color: var(--plotline-accent-dark)}.project-card__actions{display: flex;flex-wrap: wrap;align-items: center;gap: 0.45rem;border-top: 1px solid rgba(84,68,48,0.1);padding: 0.85rem 1rem 1rem}.project-card__actions form{display: inline-flex;margin: 0}.project-cover-stack{position: relative;width: min(11.5rem,70%);height: 9.4rem}.project-cover-stack__cover{position: absolute;top: 50%;left: 50%;width: 4.65rem;aspect-ratio: 2 / 3;border: 3px solid rgba(255,253,248,0.86);border-radius: 0.45rem;background: var(--plotline-soft);box-shadow: 0 12px 28px rgba(62,45,28,0.22);object-fit: cover}.project-cover-stack__cover--0{z-index: 3;transform: translate(-50%,-50%) rotate(-1deg) scale(1.08)}.project-cover-stack__cover--1{z-index: 2;transform: translate(-88%,-47%) rotate(-8deg) scale(0.94)}.project-cover-stack__cover--2{z-index: 1;transform: translate(-12%,-47%) rotate(8deg) scale(0.94)}.project-cover-fallback{display: grid;place-items: center;width: min(9.5rem,62%);aspect-ratio: 2 / 3;border: 1px solid rgba(84,68,48,0.18);border-radius: 0.8rem;background: linear-gradient(180deg,rgba(255,253,248,0.34),transparent 32%),linear-gradient(135deg,var(--plotline-accent),var(--plotline-accent-dark));box-shadow: 0 14px 30px rgba(62,45,28,0.2);color: #fff8ec}.project-cover-fallback span{font-family: Georgia,"Times New Roman",serif;font-size: clamp(2.2rem,7vw,3.2rem);font-weight: 700;letter-spacing: 0.02em}.project-empty-state{margin: 0}.character-gallery-upload{display: grid;grid-template-columns: minmax(14rem,1fr) minmax(14rem,1fr) auto;gap: 0.75rem;align-items: end;border: 1px solid var(--plotline-border-soft);border-radius: var(--plotline-radius-sm);padding: 0.85rem;background: rgba(255,250,241,0.56)}.character-relationship-editor{gap: 0.85rem}.character-relationship-read{display: grid;gap: 0.75rem}.character-relationship-edit-form{width: 100%;border: 1px solid var(--plotline-border-soft);border-radius: var(--plotline-radius-sm);padding: 0.85rem;background: rgba(255,250,241,0.56)}.character-gallery-grid{display: grid;grid-template-columns: repeat(auto-fill,minmax(min(100%,14rem),1fr));gap: 0.9rem}.character-gallery-card{overflow: hidden;border: 1px solid var(--plotline-border-soft);border-radius: var(--plotline-radius-sm);background: rgba(255,253,248,0.72);box-shadow: var(--plotline-shadow-subtle)}.character-gallery-card > img{display: block;width: 100%;aspect-ratio: 4 / 3;background: var(--plotline-soft);object-fit: cover}.character-gallery-card__body{display: grid;gap: 0.3rem;padding: 0.75rem}.character-gallery-card__actions{border-top: 1px solid rgba(84,68,48,0.1);padding: 0 0.75rem 0.75rem}.character-avatar-crop-layout{display: grid;grid-template-columns: minmax(0,1fr) minmax(12rem,16rem);gap: 1rem;align-items: start}.character-avatar-crop-stage{position: relative;display: grid;place-items: center;min-height: 24rem;overflow: hidden;border: 1px solid var(--plotline-border-soft);border-radius: var(--plotline-radius-sm);background: var(--plotline-soft)}.character-avatar-crop-stage img{display: block;max-width: 100%;max-height: 70vh;user-select: none}.character-avatar-crop-box{position: absolute;cursor: move;touch-action: none;border: 2px solid #fff8ec;box-shadow: 0 0 0 9999px rgba(20,17,15,0.42),0 0 0 1px rgba(0,0,0,0.18)}.character-avatar-crop-box span{position: absolute;right: 0.35rem;bottom: 0.35rem;width: 0.75rem;height: 0.75rem;border-right: 2px solid #fff8ec;border-bottom: 2px solid #fff8ec}.character-avatar-crop-side{display: grid;gap: 0.75rem}.character-avatar-preview{width: min(100%,12rem);aspect-ratio: 1;overflow: hidden;border: 1px solid var(--plotline-border-soft);border-radius: 999px;background: var(--plotline-soft);box-shadow: var(--plotline-shadow-subtle)}.character-avatar-preview img{display: block;max-width: none;transform-origin: top left}@media (max-width: 767.98px){.pw-page-heading{align-items: stretch}.pw-page-heading .pw-actions,.pw-page-heading .pw-actions__toggle{width: 100%}.pw-project-nav{padding: 0.65rem}.project-tabs{width: 100%;border-radius: var(--plotline-radius)}.project-tabs .nav-item,.project-tabs .nav-link{flex: 1 1 auto}.project-card__actions .btn,.project-card__actions .dropdown{flex: 1 1 auto}.character-gallery-upload,.character-avatar-crop-layout{grid-template-columns: 1fr}}.timeline-workspace{background: linear-gradient(180deg,rgba(255,251,244,0.84),rgba(237,226,211,0.66)),var(--plotline-timeline-bg);border: 1px solid rgba(84,68,48,0.16);border-radius: var(--plotline-radius);box-shadow: 0 18px 44px rgba(62,45,28,0.1)}.timeline-chapter{background: rgba(255,250,242,0.68);border-color: rgba(84,68,48,0.15);border-radius: var(--plotline-radius)}.timeline-chapter-title,.lane-board-heading,.plot-lane-board-heading,.lane-group-heading{background: linear-gradient(135deg,rgba(255,252,246,0.96),rgba(244,229,209,0.86));border-color: rgba(84,68,48,0.16);color: var(--plotline-accent-dark)}.timeline-scene-card{background: linear-gradient(180deg,#fffdf8,#fbf3e8);border: 1px solid rgba(84,68,48,0.16);border-radius: var(--plotline-radius-sm);box-shadow: 0 10px 24px rgba(62,45,28,0.08)}.timeline-scene-card:hover,.timeline-scene-card.selected,.timeline-scene-card.focus-match,.timeline-scene-card.keyboard-focus{border-color: rgba(122,77,44,0.42);box-shadow: 0 0 0 3px rgba(122,77,44,0.11),0 16px 30px rgba(62,45,28,0.12);transform: translateY(-1px)}.plot-lane-label,.asset-lane-label,.character-lane-label,.plot-lane-slot,.asset-lane-slot,.character-lane-slot{background: rgba(255,251,244,0.74);border-color: rgba(84,68,48,0.14)}.thread-marker,.asset-marker,.character-appearance-pill{box-shadow: 0 4px 12px rgba(62,45,28,0.12)}.scene-inspector-panel{background: rgba(255,251,243,0.72)}.form-control,.form-select{border-color: rgba(84,68,48,0.2);border-radius: 10px;background-color: rgba(255,253,248,0.9)}.form-control:focus,.form-select:focus,.btn:focus-visible,a:focus-visible{border-color: rgba(122,77,44,0.56);box-shadow: 0 0 0 0.22rem rgba(122,77,44,0.17);outline: none}.auth-page-heading{justify-content: center;max-width: 560px;margin-right: auto;margin-left: auto;text-align: center}.auth-page-heading > div{width: 100%}.auth-page-heading .lead-text{margin-right: auto;margin-left: auto;text-align: center}.auth-card{max-width: 560px;margin: 0 auto;padding: clamp(1.75rem,4vw,2.5rem)}.auth-form{display: flex;flex-direction: column;gap: 1.35rem;border-top: 0;padding-top: 0}.auth-form .alert{margin-bottom: 0}.auth-field-stack{display: grid;gap: 1rem}.auth-field-stack .form-label{font-weight: 650}.auth-field-stack .form-check{display: inline-flex;align-items: center;gap: 0.45rem;margin-bottom: 0;color: var(--plotline-text-muted);font-weight: 650}.auth-actions{display: flex;justify-content: center;gap: 0.75rem;flex-wrap: wrap}.auth-actions .btn{min-width: 8.75rem}.auth-help{margin: 0;text-align: center;font-size: 0.95rem}.auth-help a{font-weight: 650}.two-factor-card{max-width: 560px;margin: 0 auto;padding: clamp(1.75rem,4vw,2.5rem)}.two-factor-body{display: flex;flex-direction: column;align-items: center;text-align: center;gap: 1.5rem;border-top: 0;padding-top: 0}.two-factor-body .alert{width: 100%;margin-bottom: 0}.two-factor-code-group{display: grid;justify-items: center;gap: 0.75rem;width: 100%}.two-factor-label{margin-bottom: 0;font-weight: 700;color: var(--plotline-text)}.two-factor-inputs{display: flex;justify-content: center;gap: 0.75rem;width: 100%}.two-factor-digit{width: 3.5rem;height: 3.5rem;padding: 0;text-align: center;font-size: 1.6rem;font-weight: 760;line-height: 1;border-radius: 0.75rem;border-color: rgba(122,77,44,0.28);background: var(--plotline-surface-elevated);color: var(--plotline-text)}.two-factor-digit:focus{border-color: var(--plotline-accent);box-shadow: 0 0 0 0.22rem rgba(122,77,44,0.2),0 10px 22px rgba(62,45,28,0.1)}.two-factor-actions{display: flex;justify-content: center;gap: 0.75rem;flex-wrap: wrap}.two-factor-actions .btn{min-width: 8.75rem}.two-factor-help{display: grid;justify-items: center;gap: 0.2rem;margin: 0;font-size: 0.95rem;color: var(--plotline-text-muted)}.two-factor-help a{font-weight: 650}.two-factor-code-group .text-danger{min-height: 1.4rem}@media (max-width: 576px){.two-factor-card{padding: 1.35rem}.two-factor-inputs{gap: 0.4rem}.two-factor-digit{width: 3rem;height: 3rem;font-size: 1.45rem}.two-factor-actions{flex-direction: column;width: 100%}.two-factor-actions .btn{width: 100%}.auth-card{padding: 1.35rem}.auth-actions{flex-direction: column;width: 100%}.auth-actions .btn{width: 100%}}.plotline-confirm-modal{background: #fffaf2;border: 1px solid rgba(84,68,48,0.16);border-radius: var(--plotline-radius);box-shadow: 0 24px 60px rgba(38,30,22,0.2)}.plotline-confirm-modal .modal-header,.plotline-confirm-modal .modal-footer{border-color: rgba(84,68,48,0.12)}.alert-info,.alert-warning{border-color: rgba(84,68,48,0.16);border-radius: var(--plotline-radius-sm);background: rgba(255,250,241,0.92);color: var(--plotline-text)}.trial-status-panel,.trial-dashboard-banner{border-color: rgba(84,68,48,0.16);background: linear-gradient(135deg,rgba(255,253,248,0.96),rgba(242,226,207,0.56)),var(--plotline-surface);box-shadow: var(--plotline-shadow-subtle)}.trial-status-panel--signup{border-color: rgba(49,95,103,0.22);background: linear-gradient(135deg,rgba(223,236,239,0.72),rgba(255,253,248,0.92)),var(--plotline-surface)}.trial-status-panel h2,.trial-status-panel h3,.trial-dashboard-banner h2{color: var(--plotline-text)}.trial-progress{box-shadow: inset 0 1px 2px rgba(62,45,28,0.08)}.trial-progress__bar{background: linear-gradient(90deg,var(--plotline-secondary),var(--plotline-accent))}.trial-status--fourteen-days{border-color: rgba(184,118,43,0.28)}.trial-status--seven-days,.trial-status--three-days,.trial-status--one-day{border-color: rgba(184,118,43,0.38);background: linear-gradient(135deg,rgba(251,236,211,0.84),rgba(255,253,248,0.92)),var(--plotline-surface)}.table{--bs-table-bg: transparent;--bs-table-color: var(--plotline-text);--bs-table-border-color: rgba(84,68,48,0.12)}.page-heading,.workspace-heading{row-gap: 0.8rem}.page-heading h1,.workspace-heading h1{color: #211915}.lead-text{line-height: 1.55}.btn-sm{padding: 0.28rem 0.72rem;font-size: 0.8rem}.button-row{gap: 0.55rem}.button-row .btn,.story-bible-actions a,.timeline-preset-panel .btn,.timeline-filter-actions .btn{white-space: nowrap}.badge,.soft-count,.attachment-kind,.preset-chip,.story-bible-meta span{border-radius: 999px;font-weight: 780;letter-spacing: 0.015em}.badge.text-bg-light,.story-bible-meta span,.soft-count{border: 1px solid rgba(84,68,48,0.13);background: rgba(255,250,241,0.78) !important;color: var(--plotline-text-muted) !important}.badge.text-bg-warning,.warning-placeholder.active{border: 1px solid rgba(184,118,43,0.28);background: #fbecd3 !important;color: #7b4b13 !important}.badge.text-bg-success{background: rgba(77,118,84,0.13) !important;color: #315936 !important}.empty-panel,.future-lane-placeholder,.inspector-empty{position: relative;overflow: hidden}.empty-panel::before,.future-lane-placeholder::before,.inspector-empty::before{content: "";position: absolute;inset: 0 auto 0 0;width: 4px;background: linear-gradient(180deg,var(--plotline-accent),var(--plotline-secondary));opacity: 0.42}.timeline-workspace{padding: 0.35rem}.timeline-shell{border-color: rgba(84,68,48,0.14);background: linear-gradient(90deg,rgba(84,68,48,0.05) 1px,transparent 1px) 0 0 / calc(var(--timeline-scene-width) + var(--timeline-grid-gap)) 100%,linear-gradient(180deg,rgba(255,252,246,0.94),rgba(244,235,221,0.86))}.timeline-project-title,.timeline-book-title{border: 1px solid rgba(45,33,23,0.12);background: linear-gradient(135deg,rgba(49,95,103,0.96),rgba(89,55,31,0.94));box-shadow: 8px 0 24px rgba(62,45,28,0.1)}.timeline-book{padding: 0.15rem}.timeline-book-title{min-height: 58px;align-content: center}.timeline-chapter{border: 1px solid rgba(84,68,48,0.13);background: linear-gradient(180deg,rgba(255,252,246,0.78),rgba(242,226,207,0.42));outline: 0;box-shadow: inset 0 0 0 1px rgba(255,255,255,0.6)}.timeline-chapter-title{min-height: 52px;border-bottom: 1px solid rgba(84,68,48,0.13);border-radius: var(--plotline-radius-sm) var(--plotline-radius-sm) 0 0;backdrop-filter: blur(10px)}.timeline-chapter-title strong,.timeline-book-title strong{font-size: 0.96rem}.timeline-scenes{padding: 0.65rem}.timeline-scene-card,.timeline-empty-scene{border-radius: 11px}.timeline-scene-card{position: relative;min-height: 176px;border-color: rgba(84,68,48,0.15);background: linear-gradient(180deg,rgba(255,253,248,0.98),rgba(251,243,232,0.95));box-shadow: 0 10px 22px rgba(62,45,28,0.08)}.timeline-scene-card::after{content: "";position: absolute;inset: 0;border-radius: inherit;pointer-events: none;box-shadow: inset 0 1px 0 rgba(255,255,255,0.85)}.timeline-scene-card strong{color: #221a15;font-size: 0.98rem;line-height: 1.2}.scene-summary{color: var(--plotline-text-muted);line-height: 1.38}.location-pill,.scene-pov-label,.metric-mini-summary,.dependency-placeholder,.warning-placeholder{border: 1px solid rgba(84,68,48,0.13);box-shadow: inset 0 1px 0 rgba(255,255,255,0.68)}.timeline-placeholder-scene,.timeline-placeholder-cell{border-color: rgba(84,68,48,0.18);color: rgba(84,68,48,0.58);background: repeating-linear-gradient(-45deg,rgba(122,77,44,0.06) 0 8px,rgba(255,255,255,0.18) 8px 16px),rgba(255,252,246,0.52)}.timeline-scene-card:hover,.timeline-scene-card.selected,.timeline-scene-card.focus-match,.timeline-scene-card.keyboard-focus,.timeline-scene-card.search-hit{z-index: 3}.timeline-scene-card.selected::before,.timeline-scene-card.focus-match::before,.timeline-scene-card.keyboard-focus::before,.timeline-scene-card.search-hit::before{content: "";position: absolute;left: 0.65rem;right: 0.65rem;top: 0;height: 3px;border-radius: 999px;background: linear-gradient(90deg,var(--plotline-accent),var(--plotline-secondary))}.timeline-section-header,.lane-board-heading,.pacing-heading{border: 1px solid rgba(84,68,48,0.13);backdrop-filter: blur(10px)}.plot-lane-board,.asset-lane-board,.character-lane-board{border-top-color: rgba(84,68,48,0.12)}.plot-lane-label,.asset-lane-label,.character-lane-label{border-radius: 10px;background: rgba(255,252,246,0.94);box-shadow: 6px 0 18px rgba(62,45,28,0.06)}.character-lane-label{display: flex;align-items: center;gap: 0.55rem}.character-lane-label > span{display: grid;gap: 0.1rem;min-width: 0}.character-lane-label small{color: var(--plotline-muted);font-size: 0.75rem;font-weight: 700}.plot-lane-slot,.asset-lane-slot,.character-lane-slot{min-height: 50px;border-radius: 10px}.thread-marker,.asset-marker,.character-marker,.character-appearance-pill{min-height: 24px;font-size: 0.7rem}.thread-marker{border-color: color-mix(in srgb,var(--plot-colour),#241f1b 18%)}.asset-marker{border-radius: 8px;background: #eeeaf8}.character-marker{display: inline-flex;align-items: center;justify-content: center;background: #fff4d9}.drag-chip,[draggable="true"]{transition: transform 0.12s ease,box-shadow 0.12s ease,opacity 0.12s ease}.drag-chip.character{display: inline-flex;align-items: center;gap: 0.4rem}.drag-chip .visual-avatar,.character-lane-label .visual-avatar{flex: 0 0 auto}.drag-chip:hover,[draggable="true"]:hover{transform: translateY(-1px)}.is-dragging{opacity: 0.55;box-shadow: 0 0 0 3px rgba(49,95,103,0.14)}.drop-target-active{outline-color: rgba(49,95,103,0.34);background-color: rgba(223,236,239,0.55)}.timeline-control-panel,.timeline-drag-palette,.drag-drop-panel{background: rgba(255,251,243,0.82);backdrop-filter: blur(10px)}.timeline-filter-drawer,.timeline-control-group{border-color: rgba(84,68,48,0.13);box-shadow: inset 0 1px 0 rgba(255,255,255,0.75)}.scene-inspector-panel{border-color: rgba(84,68,48,0.14);box-shadow: -14px 0 36px rgba(62,45,28,0.07)}.inspector-header{border-bottom: 1px solid rgba(84,68,48,0.12);margin-bottom: 0.75rem;padding-bottom: 0.7rem}.inspector-header h2,.inspector-empty h2{color: #211915}.writer-mini-card{border-color: rgba(84,68,48,0.13);background: rgba(255,253,248,0.78)}.writer-mini-card[open]{box-shadow: 0 10px 24px rgba(62,45,28,0.07)}.writer-add-form,.writer-edit-form{gap: 0.5rem}.attachment-card-list{gap: 0.65rem}.attachment-summary{align-items: center}.attachment-kind{display: inline-flex;align-items: center;border: 1px solid rgba(49,95,103,0.18);padding: 2px 8px;background: var(--plotline-secondary-soft);color: #284f56;font-size: 0.72rem;text-transform: uppercase}.attachment-preview-row{display: grid;grid-template-columns: 96px minmax(0,1fr);gap: 0.75rem;align-items: start}.attachment-thumb{display: flex;align-items: center;justify-content: center;width: 96px;aspect-ratio: 4 / 3;overflow: hidden;border: 1px solid rgba(84,68,48,0.14);border-radius: 10px;background: rgba(255,250,241,0.88);text-decoration: none}.attachment-thumb img{width: 100%;height: 100%;object-fit: cover;transition: transform 0.18s ease}.attachment-thumb:hover img{transform: scale(1.04)}.attachment-thumb-fallback span{color: var(--plotline-text-muted);font-size: 0.76rem;font-weight: 850;letter-spacing: 0.06em;text-transform: uppercase}.attachment-preview-copy{display: grid;gap: 0.45rem;min-width: 0}.attachment-preview-copy p{margin: 0}.attachment-add-card summary{color: var(--plotline-accent-dark)}.story-bible-section,.writer-dashboard-panel{border-color: rgba(84,68,48,0.14);background: rgba(255,251,243,0.8)}.writer-dashboard-panel:first-child{border-color: rgba(49,95,103,0.22);background: linear-gradient(135deg,rgba(223,236,239,0.56),rgba(255,251,243,0.9));box-shadow: 0 18px 38px rgba(49,95,103,0.09)}.writer-queue-list{display: grid;gap: 0.75rem}.writer-queue-card{border-color: rgba(84,68,48,0.13);background: rgba(255,253,248,0.86)}.writer-dashboard-panel:first-child .writer-queue-card:first-child{border-left: 4px solid var(--plotline-secondary)}.writer-queue-card h3{line-height: 1.25}.story-bible-nav{background: rgba(255,251,243,0.78);border: 1px solid rgba(84,68,48,0.12);border-radius: var(--plotline-radius);padding: 0.45rem}.story-bible-card{background: rgba(255,253,248,0.9)}.story-bible-card h3{color: #211915}.story-bible-card-title{gap: 0.8rem}.story-bible-facts{border-top: 1px solid rgba(84,68,48,0.1);padding-top: 0.65rem}.story-bible-actions a{border-color: rgba(122,77,44,0.2);background: rgba(255,250,241,0.75)}.story-bible-actions a:hover{background: rgba(122,77,44,0.1)}.timeline-settings-form{display: grid;gap: 1rem;max-width: 1180px}.timeline-settings-section{display: grid;gap: 0.85rem}.timeline-settings-grid{display: grid;grid-template-columns: repeat(auto-fit,minmax(260px,1fr));gap: 0.75rem}.timeline-setting-card{display: grid;grid-template-columns: auto minmax(0,1fr);gap: 0.72rem;align-items: start;min-height: 92px;border: 1px solid rgba(84,68,48,0.13);border-radius: var(--plotline-radius-sm);padding: 0.85rem;background: rgba(255,253,248,0.82);box-shadow: var(--plotline-shadow-subtle);cursor: pointer}.timeline-setting-card input{margin-top: 0.25rem;accent-color: var(--plotline-secondary)}.timeline-setting-card strong,.timeline-setting-card small{display: block}.timeline-setting-card strong{color: #211915}.timeline-setting-card small{margin-top: 0.25rem;color: var(--plotline-text-muted);line-height: 1.4}.timeline-setting-card:has(input:checked){border-color: rgba(49,95,103,0.25);background: linear-gradient(135deg,rgba(223,236,239,0.52),rgba(255,253,248,0.92))}.plotline-confirm-modal .modal-title{font-family: Georgia,"Times New Roman",serif}.plotline-confirm-modal .modal-body{color: var(--plotline-text-muted);line-height: 1.55}.theme-switcher{flex: 0 0 auto}.theme-switcher .btn{--bs-btn-color: var(--plotline-text-muted);--bs-btn-border-color: var(--plotline-border-soft);--bs-btn-hover-color: var(--plotline-accent-dark);--bs-btn-hover-bg: rgba(122,77,44,0.1);--bs-btn-hover-border-color: rgba(122,77,44,0.28);--bs-btn-active-color: #ffffff;--bs-btn-active-bg: var(--plotline-accent);--bs-btn-active-border-color: var(--plotline-accent);font-weight: 700}[data-theme="dark"] body{color: var(--app-text);background: radial-gradient(circle at top left,rgba(212,154,98,0.12),transparent 34rem),linear-gradient(135deg,var(--plotline-bg-warm),var(--plotline-bg) 52%,#0f0d0c)}[data-theme="dark"] a:not(.btn){color: var(--app-link);text-decoration-color: rgba(241,195,143,0.36)}[data-theme="dark"] a:not(.btn):hover,[data-theme="dark"] a:not(.btn):focus{color: var(--bs-link-hover-color)}[data-theme="dark"] .text-muted,[data-theme="dark"] .form-text,[data-theme="dark"] .lead-text,[data-theme="dark"] .scene-summary,[data-theme="dark"] .timeline-chapter-title span,[data-theme="dark"] .timeline-book-title span,[data-theme="dark"] .plotline-nav .nav-link,[data-theme="dark"] .plotline-nav .navbar-text,[data-theme="dark"] .plain-card p,[data-theme="dark"] .inspector-empty,[data-theme="dark"] .plotline-confirm-modal .modal-body,[data-theme="dark"] .timeline-setting-card small{color: var(--app-text-muted) !important}[data-theme="dark"] .plotline-nav{background: rgba(29,23,20,0.92) !important;border-bottom-color: var(--plotline-border-soft) !important;box-shadow: 0 8px 28px rgba(0,0,0,0.24)}[data-theme="dark"] .plotline-nav .nav-link:hover,[data-theme="dark"] .plotline-nav .nav-link:focus,[data-theme="dark"] .plotline-nav .nav-link.active{color: var(--app-link) !important}[data-theme="dark"] .navbar-toggler{border-color: var(--plotline-border-soft)}[data-theme="dark"] h1,[data-theme="dark"] h2,[data-theme="dark"] h3,[data-theme="dark"] h4,[data-theme="dark"] h5,[data-theme="dark"] h6,[data-theme="dark"] .page-heading h1,[data-theme="dark"] .workspace-heading h1,[data-theme="dark"] .timeline-scene-card strong,[data-theme="dark"] .timeline-chapter-title strong,[data-theme="dark"] .timeline-book-title strong,[data-theme="dark"] .plain-card h2,[data-theme="dark"] .plain-card h3,[data-theme="dark"] .context-title strong,[data-theme="dark"] .asset-card h2,[data-theme="dark"] .character-card h2,[data-theme="dark"] .inspector-header h2,[data-theme="dark"] .inspector-empty h2,[data-theme="dark"] .inspector-section h3,[data-theme="dark"] .story-bible-card h3,[data-theme="dark"] .timeline-setting-card strong{color: var(--app-text)}[data-theme="dark"] .plain-card,[data-theme="dark"] .card,[data-theme="dark"] .empty-panel,[data-theme="dark"] .edit-panel,[data-theme="dark"] .list-section,[data-theme="dark"] .list-group-item,[data-theme="dark"] .asset-card,[data-theme="dark"] .story-bible-section,[data-theme="dark"] .story-bible-card,[data-theme="dark"] .story-bible-nav,[data-theme="dark"] .attention-list article,[data-theme="dark"] .warning-filter-panel,[data-theme="dark"] .validation-summary,[data-theme="dark"] .analytics-section,[data-theme="dark"] .metric-shape-chart,[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .analytics-list-item,[data-theme="dark"] .analytics-count-row,[data-theme="dark"] .purpose-stat-row,[data-theme="dark"] .archive-item-card,[data-theme="dark"] .warning-card,[data-theme="dark"] .warning-mini-card,[data-theme="dark"] .scenario-chapter,[data-theme="dark"] .drag-drop-panel,[data-theme="dark"] .import-tree-book,[data-theme="dark"] .import-confirmation,[data-theme="dark"] .import-docs details,[data-theme="dark"] .scene-inspector-panel,[data-theme="dark"] .pacing-panel,[data-theme="dark"] .timeline-control-panel,[data-theme="dark"] .timeline-drag-palette,[data-theme="dark"] .timeline-filter-drawer,[data-theme="dark"] .timeline-control-group,[data-theme="dark"] .timeline-visibility-panel,[data-theme="dark"] .timeline-jump-panel,[data-theme="dark"] .timeline-preset-panel,[data-theme="dark"] .attachment-card,[data-theme="dark"] .attachment-preview-row,[data-theme="dark"] .attachment-thumb,[data-theme="dark"] .asset-mini-item,[data-theme="dark"] .archive-empty,[data-theme="dark"] .writer-dashboard-panel,[data-theme="dark"] .writer-dashboard-panel:first-child,[data-theme="dark"] .writer-queue-card,[data-theme="dark"] .writer-mini-card,[data-theme="dark"] .timeline-setting-card,[data-theme="dark"] .timeline-setting-card:has(input:checked),[data-theme="dark"] .thread-event-item,[data-theme="dark"] .asset-event-item,[data-theme="dark"] .story-asset-event-item{color: var(--app-text);background: var(--app-surface);border-color: var(--app-border);box-shadow: var(--plotline-shadow-subtle)}[data-theme="dark"] .asset-card{border-left-color: rgba(241,195,143,0.42)}[data-theme="dark"] .asset-card h2 a,[data-theme="dark"] .story-bible-card a,[data-theme="dark"] .analytics-link-row,[data-theme="dark"] .health-kpi-grid strong{color: #ffe2bd}[data-theme="dark"] .asset-card h2 a:hover,[data-theme="dark"] .story-bible-card a:hover,[data-theme="dark"] .analytics-link-row:hover{color: #fff4e8}[data-theme="dark"] .asset-card p,[data-theme="dark"] .asset-card-footer,[data-theme="dark"] .asset-card .muted,[data-theme="dark"] .warning-filter-panel .form-label,[data-theme="dark"] .warning-filter-panel .form-check-label,[data-theme="dark"] .validation-summary,[data-theme="dark"] .story-bible-card p,[data-theme="dark"] .story-bible-card h4,[data-theme="dark"] .story-bible-facts dt,[data-theme="dark"] .story-bible-link-list span,[data-theme="dark"] .story-bible-scene-summary span,[data-theme="dark"] .attention-list p,[data-theme="dark"] .analytics-section-heading span,[data-theme="dark"] .analytics-list-item p,[data-theme="dark"] .analytics-link-row span,[data-theme="dark"] .analytics-count-row span,[data-theme="dark"] .purpose-stat-row span,[data-theme="dark"] .health-kpi-grid span{color: var(--app-text-muted) !important}[data-theme="dark"] .asset-card-footer .btn,[data-theme="dark"] .warning-actions .btn{box-shadow: none}[data-theme="dark"] .story-bible-link-list li,[data-theme="dark"] .story-bible-facts,[data-theme="dark"] .story-bible-chapter-summary,[data-theme="dark"] .story-bible-scene-summary,[data-theme="dark"] .metric-raw-details,[data-theme="dark"] .analytics-list-item,[data-theme="dark"] .analytics-link-row,[data-theme="dark"] .analytics-count-row,[data-theme="dark"] .purpose-stat-row{border-color: rgba(241,195,143,0.18)}[data-theme="dark"] .story-bible-actions a,[data-theme="dark"] .story-bible-nav a{color: #f1dcc4;background: rgba(241,195,143,0.1);border: 1px solid rgba(241,195,143,0.26)}[data-theme="dark"] .story-bible-actions a:hover,[data-theme="dark"] .story-bible-nav a:hover,[data-theme="dark"] .story-bible-nav a:focus,[data-theme="dark"] .story-bible-actions a:focus{color: #21160f;background: #f1c38f;border-color: #ffd5a6}[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .attention-list article{background: #211b17}[data-theme="dark"] .purpose-stat-bar{background: rgba(231,214,190,0.12)}[data-theme="dark"] .purpose-stat-bar span{background: var(--plotline-accent-dark)}[data-theme="dark"] .thread-event-item,[data-theme="dark"] .asset-event-item,[data-theme="dark"] .story-asset-event-item{color: var(--app-text);background: #211b17;border-color: rgba(241,195,143,0.24)}[data-theme="dark"] .thread-event-item p,[data-theme="dark"] .asset-event-item p,[data-theme="dark"] .story-asset-event-item p,[data-theme="dark"] .thread-event-item .muted,[data-theme="dark"] .asset-event-item .muted,[data-theme="dark"] .story-asset-event-item .muted{color: var(--app-text-muted) !important}[data-theme="dark"] .thread-event-marker,[data-theme="dark"] .asset-event-marker{color: #21160f;background: #d49a62;border-color: rgba(255,213,166,0.72)}[data-theme="dark"] .timeline-workspace,[data-theme="dark"] .timeline-shell{background: linear-gradient(180deg,rgba(42,35,30,0.96),rgba(29,24,21,0.96)),var(--app-timeline-bg);border-color: var(--app-border)}[data-theme="dark"] .timeline-section-header,[data-theme="dark"] .metric-lane-label,[data-theme="dark"] .metric-shape-controls,[data-theme="dark"] .metric-chart-frame,[data-theme="dark"] .lane-board-heading,[data-theme="dark"] .plot-lane-board-heading,[data-theme="dark"] .pacing-heading,[data-theme="dark"] .lane-group-heading,[data-theme="dark"] .timeline-chapter-title,[data-theme="dark"] .timeline-book-title{color: var(--app-link);background: rgba(37,31,27,0.96);border-color: var(--app-border)}[data-theme="dark"] .timeline-project-title{background: #352318}[data-theme="dark"] .timeline-chapter,[data-theme="dark"] .timeline-scene-card,[data-theme="dark"] .timeline-empty-scene,[data-theme="dark"] .plot-lane-label,[data-theme="dark"] .asset-lane-label,[data-theme="dark"] .character-lane-label,[data-theme="dark"] .plot-lane-slot,[data-theme="dark"] .asset-lane-slot,[data-theme="dark"] .character-lane-slot,[data-theme="dark"] .timeline-placeholder-scene,[data-theme="dark"] .timeline-placeholder-cell,[data-theme="dark"] .metric-graph-points,[data-theme="dark"] .timeline-minimap{color: var(--app-text);background: rgba(42,35,30,0.9);border-color: var(--app-border)}[data-theme="dark"] .timeline-scene-card,[data-theme="dark"] .timeline-empty-scene{box-shadow: 0 8px 18px rgba(0,0,0,0.22)}[data-theme="dark"] .timeline-scene-card:hover,[data-theme="dark"] .timeline-scene-card.selected,[data-theme="dark"] .timeline-scene-card.focus-match,[data-theme="dark"] .timeline-scene-card.keyboard-focus,[data-theme="dark"] .timeline-scene-card.search-hit{border-color: rgba(212,154,98,0.62);box-shadow: 0 12px 28px rgba(0,0,0,0.28)}[data-theme="dark"] .timeline-minimap button{color: var(--plotline-accent-dark);background: linear-gradient(180deg,#332920 0%,#241d18 100%);border-color: var(--plotline-border-soft)}[data-theme="dark"] .timeline-minimap button.is-active{color: #1c120d;background: linear-gradient(180deg,var(--plotline-accent-dark) 0%,var(--plotline-accent) 100%)}[data-theme="dark"] .drag-chip,[data-theme="dark"] .purpose-chip,[data-theme="dark"] .metric-mini-summary,[data-theme="dark"] .scene-pov-label,[data-theme="dark"] .location-pill,[data-theme="dark"] .archive-pill,[data-theme="dark"] .badge,[data-theme="dark"] .badge.text-bg-light,[data-theme="dark"] .status-pill,[data-theme="dark"] .archived-badge,[data-theme="dark"] .overview-chip,[data-theme="dark"] .breadcrumb-trail a,[data-theme="dark"] .breadcrumb-trail span,[data-theme="dark"] .scenario-tag,[data-theme="dark"] .plain-preview,[data-theme="dark"] .soft-count,[data-theme="dark"] .attachment-kind,[data-theme="dark"] .preset-chip,[data-theme="dark"] .story-bible-meta span{color: #f4eadc !important;background: rgba(212,154,98,0.18) !important;border-color: rgba(241,195,143,0.36) !important;box-shadow: none}[data-theme="dark"] .badge.text-bg-light,[data-theme="dark"] .soft-count,[data-theme="dark"] .status-pill,[data-theme="dark"] .archived-badge{color: #ead8c4 !important;background: rgba(205,187,167,0.16) !important;border-color: rgba(231,214,190,0.36) !important}[data-theme="dark"] .badge.text-bg-warning,[data-theme="dark"] .badge.bg-warning,[data-theme="dark"] .warning-placeholder.active{color: #f6d8a6 !important;background: rgba(187,126,54,0.24) !important;border-color: rgba(224,173,101,0.34)}[data-theme="dark"] .badge.bg-secondary,[data-theme="dark"] .badge.text-bg-secondary{color: #ead8c4 !important;background: rgba(205,187,167,0.16) !important;border-color: rgba(231,214,190,0.34)}[data-theme="dark"] .badge.text-bg-success{color: #bddfc3 !important;background: rgba(91,143,101,0.22) !important;border-color: rgba(145,201,154,0.3)}[data-theme="dark"] .badge.text-bg-danger,[data-theme="dark"] .badge.bg-danger{color: #f0b8b2 !important;background: rgba(151,62,54,0.3) !important;border-color: rgba(238,142,131,0.35)}[data-theme="dark"] .badge.text-bg-info,[data-theme="dark"] .badge.bg-info{color: #b8dfe5 !important;background: rgba(62,125,136,0.28) !important;border-color: rgba(120,185,194,0.34)}[data-theme="dark"] .severity-pill.info{color: #b8dfe5;background: rgba(62,125,136,0.24);border-color: rgba(120,185,194,0.34)}[data-theme="dark"] .severity-pill.warning{color: #f6d8a6;background: rgba(187,126,54,0.24);border-color: rgba(224,173,101,0.34)}[data-theme="dark"] .severity-pill.error{color: #f0b8b2;background: rgba(151,62,54,0.3);border-color: rgba(238,142,131,0.35)}[data-theme="dark"] .form-control,[data-theme="dark"] .form-select,[data-theme="dark"] textarea,[data-theme="dark"] input,[data-theme="dark"] select{color: var(--app-input-text);background-color: var(--app-input-bg);border-color: var(--app-border)}[data-theme="dark"] .form-control::placeholder,[data-theme="dark"] textarea::placeholder,[data-theme="dark"] input::placeholder{color: #a99886;opacity: 1}[data-theme="dark"] .form-control:focus,[data-theme="dark"] .form-select:focus,[data-theme="dark"] .form-check-input:focus{border-color: var(--plotline-accent);box-shadow: 0 0 0 0.2rem rgba(212,154,98,0.2)}[data-theme="dark"] .form-control:disabled,[data-theme="dark"] .form-select:disabled,[data-theme="dark"] input:disabled,[data-theme="dark"] select:disabled,[data-theme="dark"] textarea:disabled{color: #a99886;background-color: #1b1613;border-color: rgba(231,214,190,0.12);opacity: 1}[data-theme="dark"] .table{--bs-table-color: var(--app-text);--bs-table-bg: transparent;--bs-table-border-color: var(--app-border);--bs-table-striped-color: var(--app-text);--bs-table-striped-bg: rgba(255,255,255,0.035);--bs-table-hover-color: var(--app-text);--bs-table-hover-bg: rgba(212,154,98,0.1)}[data-theme="dark"] .modal-content,[data-theme="dark"] .plotline-confirm-modal{color: var(--app-text);background: var(--app-surface-alt);border-color: var(--app-border)}[data-theme="dark"] .modal-header,[data-theme="dark"] .modal-footer{border-color: var(--app-border)}[data-theme="dark"] .btn-close{filter: invert(1) grayscale(1) brightness(1.6)}[data-theme="dark"] .dropdown-menu{--bs-dropdown-color: var(--app-text);--bs-dropdown-bg: var(--app-surface-alt);--bs-dropdown-border-color: var(--app-border);--bs-dropdown-link-color: var(--app-text);--bs-dropdown-link-hover-color: var(--app-link);--bs-dropdown-link-hover-bg: rgba(212,154,98,0.12);--bs-dropdown-link-active-color: #1c120d;--bs-dropdown-link-active-bg: var(--plotline-accent-dark);--bs-dropdown-link-disabled-color: #8f8172}[data-theme="dark"] .btn-outline-primary,[data-theme="dark"] .btn-outline-info{--bs-btn-color: #ffd5a6;--bs-btn-border-color: rgba(241,195,143,0.58);--bs-btn-bg: rgba(241,195,143,0.08);--bs-btn-hover-color: #fff4e8;--bs-btn-hover-bg: rgba(241,195,143,0.18);--bs-btn-hover-border-color: rgba(255,213,166,0.72);--bs-btn-active-color: #fff4e8;--bs-btn-active-bg: rgba(241,195,143,0.24);--bs-btn-active-border-color: rgba(255,213,166,0.82);--bs-btn-disabled-color: #9c8d7d;--bs-btn-disabled-border-color: rgba(231,214,190,0.18);background-color: var(--bs-btn-bg)}[data-theme="dark"] .btn-outline-secondary,[data-theme="dark"] .btn-outline-dark,[data-theme="dark"] .btn-outline-light{--bs-btn-color: #ead8c4;--bs-btn-border-color: rgba(231,214,190,0.46);--bs-btn-bg: rgba(231,214,190,0.08);--bs-btn-hover-color: #fff4e8;--bs-btn-hover-bg: rgba(231,214,190,0.16);--bs-btn-hover-border-color: rgba(241,220,196,0.68);--bs-btn-active-color: #fff4e8;--bs-btn-active-bg: rgba(231,214,190,0.22);--bs-btn-active-border-color: rgba(241,220,196,0.64);--bs-btn-disabled-color: #8f8172;--bs-btn-disabled-border-color: rgba(231,214,190,0.16);background-color: var(--bs-btn-bg)}[data-theme="dark"] .btn-outline-danger{--bs-btn-color: #ffb2aa;--bs-btn-border-color: rgba(238,142,131,0.5);--bs-btn-hover-color: #2a1210;--bs-btn-hover-bg: #ffb2aa;--bs-btn-hover-border-color: #ffb2aa}[data-theme="dark"] .btn-outline-success{--bs-btn-color: #bddfc3;--bs-btn-border-color: rgba(145,201,154,0.46);--bs-btn-bg: rgba(91,143,101,0.12);--bs-btn-hover-color: #102016;--bs-btn-hover-bg: #bddfc3;--bs-btn-hover-border-color: #d2efd6;--bs-btn-active-color: #102016;--bs-btn-active-bg: #a8d7b0;--bs-btn-active-border-color: #d2efd6;--bs-btn-disabled-color: #8aa58e;--bs-btn-disabled-border-color: rgba(145,201,154,0.2);background-color: var(--bs-btn-bg)}[data-theme="dark"] .nav-tabs{--bs-nav-tabs-border-color: var(--app-border);--bs-nav-tabs-link-hover-border-color: rgba(241,195,143,0.28);--bs-nav-tabs-link-active-color: var(--app-text);--bs-nav-tabs-link-active-bg: var(--app-surface);--bs-nav-tabs-link-active-border-color: var(--app-border)}[data-theme="dark"] .context-header{color: var(--app-text);background: rgba(35,29,25,0.94);border-color: rgba(241,195,143,0.2)}[data-theme="dark"] .context-header .eyebrow{color: #dfc6aa}[data-theme="dark"] .context-title strong,[data-theme="dark"] .context-title strong span{color: #fff0df}[data-theme="dark"] .context-nav a{color: #f1dcc4;background: rgba(241,195,143,0.1);border-color: rgba(241,195,143,0.28)}[data-theme="dark"] .context-nav a:hover,[data-theme="dark"] .context-nav a:focus{color: #21160f;background: #f1c38f;border-color: #ffd5a6}[data-theme="dark"] .pw-project-nav{color: var(--app-text);border-color: rgba(241,195,143,0.18);background: linear-gradient(135deg,rgba(42,35,30,0.96),rgba(58,42,32,0.58)),var(--app-surface);box-shadow: var(--plotline-shadow-subtle)}[data-theme="dark"] .pw-project-nav__label{color: #dfc6aa}[data-theme="dark"] .pw-character-nav{border-bottom-color: rgba(241,195,143,0.16)}[data-theme="dark"] .pw-project-nav__link,[data-theme="dark"] .pw-character-nav__link{color: #f1dcc4;border-color: rgba(241,195,143,0.26);background: rgba(241,195,143,0.1);box-shadow: none}[data-theme="dark"] .pw-project-nav__link:hover,[data-theme="dark"] .pw-project-nav__link:focus,[data-theme="dark"] .pw-character-nav__link:hover,[data-theme="dark"] .pw-character-nav__link:focus{color: #21160f;border-color: #ffd5a6;background: #f1c38f;box-shadow: 0 6px 14px rgba(0,0,0,0.24)}[data-theme="dark"] .pw-project-nav__link.active,[data-theme="dark"] .pw-character-nav__link.active{color: #21160f;border-color: #ffd5a6;background: linear-gradient(180deg,#f1c38f,var(--plotline-accent));box-shadow: 0 8px 18px rgba(0,0,0,0.28)}[data-theme="dark"] .pw-actions__toggle{--bs-btn-color: #f1dcc4;--bs-btn-bg: rgba(241,195,143,0.1);--bs-btn-border-color: rgba(241,195,143,0.3);--bs-btn-hover-color: #21160f;--bs-btn-hover-bg: #f1c38f;--bs-btn-hover-border-color: #ffd5a6;--bs-btn-active-color: #21160f;--bs-btn-active-bg: var(--plotline-accent-dark);--bs-btn-active-border-color: #ffd5a6}[data-theme="dark"] .pw-actions .dropdown-menu{--bs-dropdown-color: var(--app-text);--bs-dropdown-bg: var(--app-surface-alt);--bs-dropdown-border-color: rgba(241,195,143,0.22);--bs-dropdown-link-color: var(--app-text);--bs-dropdown-link-hover-color: #21160f;--bs-dropdown-link-hover-bg: #f1c38f;--bs-dropdown-divider-bg: rgba(241,195,143,0.18)}[data-theme="dark"] .pw-actions .dropdown-item.text-danger{color: #ffb2aa !important}[data-theme="dark"] .project-tabs{border-color: rgba(241,195,143,0.18);background: rgba(35,29,25,0.88)}[data-theme="dark"] .project-tabs .nav-link{color: #ead8c4}[data-theme="dark"] .project-tabs .nav-link:hover,[data-theme="dark"] .project-tabs .nav-link:focus{color: #ffd5a6;background: rgba(241,195,143,0.12)}[data-theme="dark"] .project-tabs .nav-link.active{color: #21160f;background: linear-gradient(180deg,#f1c38f,var(--plotline-accent))}[data-theme="dark"] .project-card{color: var(--app-text);border-color: var(--app-border);background: var(--app-surface)}[data-theme="dark"] .project-card:hover{border-color: rgba(241,195,143,0.34)}[data-theme="dark"] .project-card__visual{background: radial-gradient(circle at 28% 24%,rgba(241,195,143,0.22),transparent 11rem),linear-gradient(135deg,rgba(58,42,32,0.96),rgba(33,56,61,0.72))}[data-theme="dark"] .project-card__heading h2,[data-theme="dark"] .project-card__heading h2 a{color: var(--app-text)}[data-theme="dark"] .project-card__description{color: var(--app-text-muted)}[data-theme="dark"] .project-card__stats span{color: #ead8c4;border-color: rgba(231,214,190,0.2);background: rgba(231,214,190,0.08)}[data-theme="dark"] .project-card__stats strong{color: #ffd5a6}[data-theme="dark"] .project-card__actions{border-top-color: rgba(231,214,190,0.14)}[data-theme="dark"] .project-cover-stack__cover{border-color: rgba(42,35,30,0.92);box-shadow: 0 14px 30px rgba(0,0,0,0.38)}[data-theme="dark"] .project-cover-fallback{color: #21160f;border-color: rgba(241,195,143,0.34);background: linear-gradient(180deg,rgba(255,244,232,0.3),transparent 32%),linear-gradient(135deg,#f1c38f,var(--plotline-accent));box-shadow: 0 14px 30px rgba(0,0,0,0.34)}[data-theme="dark"] .character-gallery-upload,[data-theme="dark"] .character-relationship-edit-form,[data-theme="dark"] .character-gallery-card,[data-theme="dark"] .character-avatar-crop-stage,[data-theme="dark"] .character-avatar-preview{color: var(--app-text);border-color: var(--app-border);background: rgba(42,35,30,0.9)}[data-theme="dark"] .character-gallery-card__actions{border-top-color: rgba(231,214,190,0.14)}[data-theme="dark"] .character-gallery-card > img,[data-theme="dark"] .character-avatar-crop-stage,[data-theme="dark"] .character-avatar-preview{background: #211b17}[data-theme="dark"] .timeline-filter,[data-theme="dark"] .workspace-heading .button-row,[data-theme="dark"] .timeline-control-panel{color: var(--app-text)}[data-theme="dark"] .timeline-filter .form-select,[data-theme="dark"] .timeline-control-panel .form-control,[data-theme="dark"] .timeline-control-panel .form-select,[data-theme="dark"] .timeline-control-select .form-select{color: #fff0df;background-color: #251d18;border-color: rgba(241,195,143,0.3)}[data-theme="dark"] .timeline-control-select,[data-theme="dark"] .timeline-control-panel .form-label,[data-theme="dark"] .timeline-filter-checks,[data-theme="dark"] .timeline-visibility-panel label,[data-theme="dark"] .timeline-preset-panel,[data-theme="dark"] .preset-chip,[data-theme="dark"] .metric-shape-intro,[data-theme="dark"] .metric-raw-details summary{color: #dfc6aa}[data-theme="dark"] .timeline-filter-drawer summary,[data-theme="dark"] .timeline-control-group summary,[data-theme="dark"] .timeline-drag-palette summary{color: #ffe2bd;background: rgba(241,195,143,0.1)}[data-theme="dark"] .timeline-filter-drawer[open] summary,[data-theme="dark"] .timeline-control-group[open] summary,[data-theme="dark"] .timeline-drag-palette[open] summary{color: #fff4e8;background: rgba(241,195,143,0.16)}[data-theme="dark"] .timeline-filter-drawer summary::after,[data-theme="dark"] .timeline-control-group summary::after,[data-theme="dark"] .timeline-drag-palette summary::after{color: #f1c38f}[data-theme="dark"] .timeline-visibility-panel label,[data-theme="dark"] .preset-chip{background: rgba(241,195,143,0.1);border-color: rgba(241,195,143,0.24)}[data-theme="dark"] .timeline-visibility-panel label:has(input:checked),[data-theme="dark"] .preset-chip:hover{color: #fff0df;background: rgba(241,195,143,0.18);border-color: rgba(241,195,143,0.38)}[data-theme="dark"] .metric-toggle-pill{color: #f1dcc4;background: rgba(241,195,143,0.1);border-color: rgba(241,195,143,0.24)}[data-theme="dark"] .metric-toggle-pill::before{border: 1px solid rgba(255,244,232,0.7);box-shadow: 0 0 0 2px rgba(0,0,0,0.2)}[data-theme="dark"] .metric-toggle-pill:has(input:checked){color: #fff4e8;background: rgba(241,195,143,0.18);border-color: rgba(241,195,143,0.42)}[data-theme="dark"] .metric-toggle-pill:hover,[data-theme="dark"] .metric-toggle-pill:focus-within{color: #ffffff;border-color: rgba(255,213,166,0.58)}[data-theme="dark"] .character-marker,[data-theme="dark"] .character-appearance-pill{color: #24160d;background: #ffdca6;border-color: #fff0c9;box-shadow: 0 0 0 1px rgba(36,22,13,0.32),0 4px 10px rgba(0,0,0,0.28)}[data-theme="dark"] .character-marker:hover,[data-theme="dark"] .character-appearance-pill:hover{color: #160d07;background: #fff0c9;border-color: #fff8df}[data-theme="dark"] .alert-info{--bs-alert-color: #c7e5ea;--bs-alert-bg: #142e34;--bs-alert-border-color: rgba(120,185,194,0.34);color: var(--bs-alert-color);background: var(--bs-alert-bg);border-color: var(--bs-alert-border-color)}[data-theme="dark"] .alert-success{--bs-alert-color: #c8e7ce;--bs-alert-bg: #1b321f;--bs-alert-border-color: rgba(145,201,154,0.32);color: var(--bs-alert-color);background: var(--bs-alert-bg);border-color: var(--bs-alert-border-color)}[data-theme="dark"] .alert-warning,[data-theme="dark"] .validation-summary-errors{--bs-alert-color: #f4d9a9;--bs-alert-bg: #352514;--bs-alert-border-color: rgba(224,173,101,0.34);color: var(--bs-alert-color);background: var(--bs-alert-bg);border-color: var(--bs-alert-border-color)}[data-theme="dark"] .alert-danger{--bs-alert-color: #f0b8b2;--bs-alert-bg: #371b18;--bs-alert-border-color: rgba(238,142,131,0.34);color: var(--bs-alert-color);background: var(--bs-alert-bg);border-color: var(--bs-alert-border-color)}[data-theme="dark"] .text-danger,[data-theme="dark"] .field-validation-error,[data-theme="dark"] .validation-summary-errors,[data-theme="dark"] .validation-summary-errors li{color: #e7a09a !important}[data-theme="dark"] .popover,.popover[data-theme="dark"],.popover.theme-audit-dark-popover{--bs-popover-bg: var(--app-surface-alt);--bs-popover-border-color: rgba(231,214,190,0.18);--bs-popover-header-bg: rgba(241,195,143,0.08);--bs-popover-header-color: #fff0df;--bs-popover-body-color: var(--app-text);color: var(--app-text);box-shadow: 0 18px 42px rgba(0,0,0,0.38)}[data-theme="dark"] .popover .popover-arrow::before,.popover[data-theme="dark"] .popover-arrow::before,.popover.theme-audit-dark-popover .popover-arrow::before{border-color: var(--bs-popover-border-color)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after,[data-theme="dark"] .bs-popover-top > .popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after,.popover[data-theme="dark"].bs-popover-top > .popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="top"] > .popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-top > .popover-arrow::after{border-top-color: var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after,[data-theme="dark"] .bs-popover-end > .popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after,.popover[data-theme="dark"].bs-popover-end > .popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="right"] > .popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-end > .popover-arrow::after{border-right-color: var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after,[data-theme="dark"] .bs-popover-bottom > .popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after,.popover[data-theme="dark"].bs-popover-bottom > .popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="bottom"] > .popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-bottom > .popover-arrow::after{border-bottom-color: var(--bs-popover-bg)}[data-theme="dark"] .bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after,[data-theme="dark"] .bs-popover-start > .popover-arrow::after,.popover[data-theme="dark"].bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after,.popover[data-theme="dark"].bs-popover-start > .popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-auto[data-popper-placement^="left"] > .popover-arrow::after,.popover.theme-audit-dark-popover.bs-popover-start > .popover-arrow::after{border-left-color: var(--bs-popover-bg)}[data-theme="dark"] .plotline-help-popover .popover-header,.popover[data-theme="dark"] .popover-header,.popover.theme-audit-dark-popover .popover-header{color: #fff0df;background: rgba(241,195,143,0.08);border-bottom-color: rgba(231,214,190,0.16)}[data-theme="dark"] .plotline-help-more,.popover[data-theme="dark"] .plotline-help-more,.popover.theme-audit-dark-popover .plotline-help-more,[data-theme="dark"] .popover a,.popover[data-theme="dark"] a,.popover.theme-audit-dark-popover a{color: var(--app-link)}[data-theme="dark"] .plotline-help-more:hover,.popover[data-theme="dark"] .plotline-help-more:hover,.popover.theme-audit-dark-popover .plotline-help-more:hover,[data-theme="dark"] .popover a:hover,.popover[data-theme="dark"] a:hover,.popover.theme-audit-dark-popover a:hover{color: #ffd5a6}[data-theme="dark"] .accordion{--bs-accordion-color: var(--app-text);--bs-accordion-bg: var(--app-surface);--bs-accordion-border-color: rgba(231,214,190,0.16);--bs-accordion-btn-color: #f1dcc4;--bs-accordion-btn-bg: #211b17;--bs-accordion-active-color: #fff0df;--bs-accordion-active-bg: rgba(212,154,98,0.13);--bs-accordion-btn-focus-border-color: rgba(241,195,143,0.42);--bs-accordion-btn-focus-box-shadow: 0 0 0 0.2rem rgba(212,154,98,0.18);--bs-accordion-icon-color: #f1dcc4;--bs-accordion-icon-active-color: #fff0df}[data-theme="dark"] .accordion-button::after{filter: invert(91%) sepia(12%) saturate(676%) hue-rotate(340deg) brightness(103%) contrast(89%)}[data-theme="dark"] .pagination{--bs-pagination-color: #f1dcc4;--bs-pagination-bg: #211b17;--bs-pagination-border-color: rgba(231,214,190,0.18);--bs-pagination-hover-color: #ffd5a6;--bs-pagination-hover-bg: rgba(212,154,98,0.12);--bs-pagination-hover-border-color: rgba(241,195,143,0.34);--bs-pagination-focus-color: #ffd5a6;--bs-pagination-focus-bg: rgba(212,154,98,0.14);--bs-pagination-focus-box-shadow: 0 0 0 0.2rem rgba(212,154,98,0.18);--bs-pagination-active-color: #21160f;--bs-pagination-active-bg: #d49a62;--bs-pagination-active-border-color: #d49a62;--bs-pagination-disabled-color: #8f8172;--bs-pagination-disabled-bg: rgba(35,29,25,0.72);--bs-pagination-disabled-border-color: rgba(231,214,190,0.11)}.plotline-help-layout{--help-drawer-width: 25%;display: flex;align-items: stretch;width: 100%;min-width: 0;transition: gap 0.18s ease}.plotline-help-main{flex: 1 1 auto;min-width: 0;transition: flex-basis 0.18s ease}.plotline-help-splitter,.plotline-help-drawer{display: none}.plotline-help-layout.help-open .plotline-help-splitter{display: block;flex: 0 0 8px;cursor: col-resize;background: linear-gradient(90deg,transparent,rgba(107,114,128,0.22),transparent)}.plotline-help-layout.help-open .plotline-help-drawer{display: block;flex: 0 0 clamp(20%,var(--help-drawer-width),50%);min-width: 20%;max-width: 50%;border-left: 1px solid rgba(107,114,128,0.22);background: rgba(255,253,248,0.96);transition: flex-basis 0.18s ease}.plotline-help-layout.help-collapsed .plotline-help-splitter{display: none}.plotline-help-layout.help-collapsed .plotline-help-drawer{flex-basis: 2.35rem;min-width: 2.35rem;max-width: 2.35rem}.plotline-help-layout.help-collapsed .plotline-help-drawer-panel{display: none}.plotline-help-collapsed-strip{display: none}.plotline-help-layout.help-collapsed .plotline-help-collapsed-strip{display: flex;align-items: center;justify-content: center;width: 2.35rem;min-height: calc(100vh - 5rem);color: #5f6875;font-size: 0.78rem;font-weight: 800;letter-spacing: 0.08em;text-transform: uppercase;writing-mode: vertical-rl;cursor: pointer}.plotline-help-drawer-panel{position: sticky;top: 0;display: flex;flex-direction: column;max-height: calc(100vh - 1rem)}.plotline-help-drawer-header{display: flex;justify-content: space-between;gap: 0.75rem;align-items: flex-start;padding: 1rem;border-bottom: 1px solid rgba(107,114,128,0.18)}.plotline-help-drawer-content{min-height: 12rem;padding: 1rem;overflow: auto}.help-drawer-article h2{margin-bottom: 0.5rem}.help-markdown-body{display: grid;gap: 0.75rem}.help-markdown-body h1,.help-markdown-body h2,.help-markdown-body h3,.help-markdown-body h4{margin: 0.5rem 0 0}.help-markdown-body p,.help-markdown-body ul{margin-bottom: 0}.help-article-image{display: block;max-width: 100%;height: auto;border: 1px solid rgba(107,114,128,0.18);border-radius: 0.45rem}.help-related-section{margin-top: 1.25rem;padding-top: 1rem;border-top: 1px solid rgba(107,114,128,0.18)}.help-related-section button{padding: 0;color: #2f6f63;background: none;border: 0;font-weight: 700;text-align: left}.help-markdown-body .help-markdown-table{margin-bottom: 0}.help-resizing{cursor: col-resize;user-select: none}.plotline-help-icon{display: inline-flex;align-items: center;justify-content: center;width: 1.15rem;height: 1.15rem;margin-left: 0.35rem;padding: 0;color: #5f6875;font-size: 0.78rem;font-weight: 800;line-height: 1;background: transparent;border: 1px solid rgba(95,104,117,0.42);border-radius: 999px;vertical-align: text-top}.plotline-help-icon-wrapper{display: inline-flex;vertical-align: text-top}.plotline-help-icon-wrapper-inline .plotline-help-icon{width: 1rem;height: 1rem;margin-left: 0.25rem;font-size: 0.68rem}.plotline-help-icon:hover,.plotline-help-icon:focus{color: #2f6f63;border-color: #2f6f63;outline: none}.plotline-help-popover{max-width: 350px}.plotline-help-popover .popover-header{font-weight: 800}.plotline-help-more{font-weight: 700;text-decoration: none}[data-theme="dark"] .plotline-help-icon{color: #d8d0c4;border-color: rgba(216,208,196,0.45)}[data-theme="dark"] .plotline-help-icon:hover,[data-theme="dark"] .plotline-help-icon:focus{color: #f1c38f;border-color: #f1c38f}[data-theme="dark"] .plotline-help-layout.help-open .plotline-help-drawer{border-left-color: rgba(255,255,255,0.12);background: rgba(22,22,27,0.97)}[data-theme="dark"] .plotline-help-drawer-header,[data-theme="dark"] .help-related-section{border-color: rgba(255,255,255,0.12)}[data-theme="dark"] .plotline-help-collapsed-strip{color: #d8d0c4}.relationship-map-controls{display: grid;grid-template-columns: repeat(4,minmax(150px,1fr)) auto auto auto;gap: 0.75rem;align-items: end;margin-bottom: 1rem}.relationship-map-check{display: flex;gap: 0.45rem;align-items: center;min-height: 2rem;margin: 0;white-space: nowrap}.relationship-map-legend{display: grid;grid-template-columns: minmax(160px,max-content) 1fr;gap: 0.9rem 1.2rem;align-items: center;margin: 0 0 1rem}.relationship-map-legend h2{margin: 0;font-size: 1rem}.relationship-map-legend-grid{display: flex;flex-wrap: wrap;gap: 0.45rem 0.8rem;align-items: center}.relationship-map-legend-item{display: inline-flex;gap: 0.45rem;align-items: center;padding: 0.28rem 0.45rem;color: inherit;background: transparent;border: 1px solid transparent;border-radius: 999px;font-size: 0.85rem;font-weight: 650}.relationship-map-legend-line{display: inline-block;width: 2.15rem;height: 0;border-top: 4px solid currentColor;border-radius: 999px}.relationship-map-detail-badges .status-pill,.relationship-map-list-item .status-pill{border: 1px solid transparent}.relationship-map-workspace{display: grid;grid-template-columns: minmax(0,1fr) minmax(280px,360px);gap: 1rem;align-items: stretch}.relationship-map-canvas{min-height: 660px;overflow: hidden}.relationship-map-toolbar{display: flex;justify-content: flex-end;gap: 0.4rem;margin-bottom: 0.6rem;padding-bottom: 0.45rem;border-bottom: 1px solid rgba(107,114,128,0.12)}.relationship-map-graph{width: 100%;min-height: 620px;border: 1px solid rgba(107,114,128,0.16);border-radius: 0.75rem;background: radial-gradient(circle at 20% 20%,rgba(196,124,44,0.08),transparent 28rem),linear-gradient(180deg,rgba(255,253,248,0.95),rgba(248,250,252,0.86))}.relationship-map-details{position: sticky;top: 1rem;align-self: start;max-height: calc(100vh - 2rem);overflow: auto}.relationship-map-detail-heading{display: flex;align-items: center;gap: 0.75rem}.relationship-map-detail-heading h2{margin-bottom: 0}.relationship-map-detail-badges{display: flex;flex-wrap: wrap;gap: 0.35rem;margin: 0.4rem 0 0.8rem}.relationship-map-detail-list{display: grid;grid-template-columns: max-content minmax(0,1fr);gap: 0.25rem 0.75rem;margin: 1rem 0}.relationship-map-detail-list dt{color: var(--muted-text,#667085);font-weight: 600}.relationship-map-detail-list dd{margin: 0}.relationship-map-history{display: grid;gap: 0.45rem;padding-left: 1.1rem}.relationship-map-list{display: grid;grid-template-columns: repeat(auto-fit,minmax(240px,1fr));gap: 0.6rem}.relationship-map-list-item{display: grid;gap: 0.25rem;padding: 0.8rem;text-align: left;color: inherit;background: var(--surface,#fff);border: 1px solid rgba(107,114,128,0.22);border-radius: 0.6rem;box-shadow: 0 8px 20px rgba(31,41,55,0.06)}.relationship-map-list-item:hover,.relationship-map-list-item:focus,.relationship-map-list-item.is-selected{border-color: #c47c2c;outline: none}.relationship-category-family{color: #7c3f12;border-color: #d89a5e;background: #fff1df}.relationship-category-friendship{color: #14532d;border-color: #7cc69a;background: #e7f8ed}.relationship-category-romantic{color: #831843;border-color: #efa3c1;background: #fde7f0}.relationship-category-hostile{color: #7f1d1d;border-color: #ee8f8f;background: #fee6e6}.relationship-category-professional{color: #1e3a8a;border-color: #93b4ef;background: #e8f0ff}.relationship-category-other{color: #374151;border-color: #bac2cf;background: #f2f4f7}[data-theme="dark"] .relationship-map-list-item{background: rgba(255,255,255,0.04);border-color: rgba(255,255,255,0.12)}[data-theme="dark"] .relationship-map-graph{border-color: rgba(255,255,255,0.12);background: radial-gradient(circle at 20% 20%,rgba(241,195,143,0.08),transparent 28rem),linear-gradient(180deg,rgba(33,32,38,0.96),rgba(22,22,27,0.92))}[data-theme="dark"] .relationship-map-toolbar{border-bottom-color: rgba(255,255,255,0.1)}[data-theme="dark"] .relationship-category-family{color: #ffd2a5;background: rgba(184,101,34,0.17);border-color: rgba(255,210,165,0.3)}[data-theme="dark"] .relationship-category-friendship{color: #a8e8bf;background: rgba(47,158,95,0.16);border-color: rgba(168,232,191,0.3)}[data-theme="dark"] .relationship-category-romantic{color: #f8b5cf;background: rgba(217,70,127,0.16);border-color: rgba(248,181,207,0.3)}[data-theme="dark"] .relationship-category-hostile{color: #ffb4b4;background: rgba(220,63,63,0.16);border-color: rgba(255,180,180,0.3)}[data-theme="dark"] .relationship-category-professional{color: #b7cdf7;background: rgba(79,127,216,0.16);border-color: rgba(183,205,247,0.3)}[data-theme="dark"] .relationship-category-other{color: #d0d6df;background: rgba(122,135,150,0.15);border-color: rgba(208,214,223,0.28)}.marketing-shell{max-width: none;padding-right: 0;padding-left: 0}.marketing-shell main{padding-bottom: 0 !important}.marketing-home{--marketing-navy: #1f2a44;--marketing-gold: #d4a574;--marketing-cream: #faf8f5;--marketing-offwhite: #fcfbf9;--marketing-ink: #201a16;--marketing-muted: #6f655c;--marketing-rose: #9f5f55;--marketing-sage: #5f786c;--marketing-line: rgba(31,42,68,0.12);--marketing-shadow: 0 28px 70px rgba(31,42,68,0.15);overflow: hidden;margin-top: -1rem;color: var(--marketing-ink);background: radial-gradient(circle at 88% 8%,rgba(212,165,116,0.2),transparent 26rem),linear-gradient(180deg,var(--marketing-cream) 0%,var(--marketing-offwhite) 42%,#f6efe6 100%)}.marketing-container{width: min(1180px,calc(100% - 32px));margin-inline: auto}.marketing-eyebrow{margin: 0 0 0.8rem;color: #8b612e;font-size: 0.76rem;font-weight: 850;letter-spacing: 0.12em;text-transform: uppercase}.marketing-home h1,.marketing-home h2,.marketing-home h3{color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;letter-spacing: 0;text-wrap: balance}.marketing-home h1{max-width: 11ch;margin: 0;font-size: clamp(3.2rem,7vw,6.35rem);line-height: 0.95}.marketing-home h2{margin: 0;font-size: clamp(2.1rem,4.4vw,4rem);line-height: 1.02}.marketing-home h3{margin: 0;font-size: clamp(1.7rem,3vw,2.7rem);line-height: 1.08}.marketing-lead,.problem-copy p,.founder-story p,.final-cta p,.section-heading p{color: var(--marketing-muted);font-size: clamp(1rem,1.5vw,1.18rem);line-height: 1.7}.marketing-hero{position: relative;padding: clamp(2rem,5vw,3.75rem) 0 clamp(3.5rem,7vw,6rem)}.marketing-hero::before{content: "";position: absolute;inset: 0 0 auto;height: 54%;pointer-events: none;background: linear-gradient(115deg,rgba(31,42,68,0.08),transparent 42%),radial-gradient(circle at 12% 20%,rgba(212,165,116,0.22),transparent 24rem)}.marketing-hero__grid{position: relative;display: grid;grid-template-columns: minmax(0,0.86fr) minmax(440px,1.14fr);gap: clamp(2rem,5vw,5rem);align-items: center}.marketing-hero__copy{display: grid;gap: 1.35rem;align-content: center}.marketing-lead{max-width: 42rem;margin: 0}.marketing-actions{display: flex;flex-wrap: wrap;gap: 0.75rem;align-items: center}.marketing-btn{display: inline-flex;align-items: center;justify-content: center;min-height: 3.2rem;border: 1px solid transparent;border-radius: 999px;padding: 0.85rem 1.35rem;font-weight: 800;line-height: 1.1;text-decoration: none;transition: transform 0.18s ease,box-shadow 0.18s ease,background-color 0.18s ease,border-color 0.18s ease}.marketing-btn:hover,.marketing-btn:focus{transform: translateY(-1px)}.marketing-btn--primary{color: #fffaf2;background: linear-gradient(135deg,var(--marketing-navy),#26375e);box-shadow: 0 16px 32px rgba(31,42,68,0.22)}.marketing-btn--primary:hover,.marketing-btn--primary:focus{color: #fffaf2;box-shadow: 0 20px 42px rgba(31,42,68,0.28)}.marketing-btn--secondary{color: var(--marketing-navy);border-color: rgba(31,42,68,0.18);background: rgba(255,255,255,0.68);box-shadow: inset 0 1px 0 rgba(255,255,255,0.88)}.marketing-btn--secondary:hover,.marketing-btn--secondary:focus{color: var(--marketing-navy);border-color: rgba(31,42,68,0.3);background: #fffdf9}.hero-proof{display: flex;flex-wrap: wrap;gap: 1rem;margin: 0}.hero-proof div{display: grid;grid-template-columns: auto minmax(0,1fr);gap: 0.55rem;align-items: center;max-width: 18rem}.hero-proof dt{color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: 2.35rem;font-weight: 700;line-height: 1}.hero-proof dd{margin: 0;color: var(--marketing-muted);font-weight: 650;line-height: 1.25}.browser-frame{border: 1px solid rgba(31,42,68,0.13);border-radius: 22px;background: rgba(252,251,249,0.72);box-shadow: var(--marketing-shadow);overflow: hidden}.hero-product{transform: rotate(1deg);animation: productFloat 7s ease-in-out infinite}.home-image-card{border: 1px solid rgba(31,42,68,0.13);border-radius: 24px;background: rgba(252,251,249,0.72);box-shadow: var(--marketing-shadow);overflow: hidden}.home-image-card img,.home-feature-image{display: block;max-width: 100%;width: 100%;height: auto}.home-hero-image img{background: #f8f1e7}@media (min-width: 1061px){.marketing-hero{display: flex;align-items: center;min-height: calc(100vh - 5.5rem);padding-top: clamp(1.5rem,3vw,2.75rem);padding-bottom: clamp(1.5rem,3vw,2.75rem)}.home-hero-image{align-self: center;margin-top: clamp(-8rem,-8vw,-4rem)}}.writer-workspace{position: relative;min-height: 560px;border: 1px solid rgba(31,42,68,0.13);border-radius: 24px;padding: clamp(1rem,2.4vw,1.6rem);background: linear-gradient(135deg,rgba(255,253,249,0.9),rgba(248,239,227,0.76)),url("/images/home/hero-writing-workspace.webp") center / cover no-repeat,#f8f1e7;box-shadow: var(--marketing-shadow);overflow: hidden}.writer-workspace::before{content: "";position: absolute;inset: 0;background: radial-gradient(circle at 16% 12%,rgba(212,165,116,0.2),transparent 18rem),radial-gradient(circle at 92% 82%,rgba(95,120,108,0.18),transparent 18rem);pointer-events: none}.workspace-manuscript,.workspace-card,.workspace-progress{position: absolute;z-index: 1;border: 1px solid rgba(31,42,68,0.11);background: rgba(255,253,249,0.94);box-shadow: 0 18px 42px rgba(31,42,68,0.12)}.workspace-manuscript{left: 7%;top: 8%;width: min(68%,460px);min-height: 370px;border-radius: 16px;padding: clamp(1.25rem,2vw,1.7rem)}.workspace-label,.workspace-card span{margin: 0;color: #8b612e;font-size: 0.72rem;font-weight: 850;letter-spacing: 0.1em;text-transform: uppercase}.workspace-manuscript h2{margin: 0.45rem 0 1.2rem;font-size: clamp(1.6rem,2.5vw,2.35rem)}.workspace-manuscript p:not(.workspace-label){margin: 0 0 1rem;color: #4f4b45;font-family: Georgia,"Times New Roman",serif;font-size: 1.05rem;line-height: 1.75}.workspace-card{display: grid;gap: 0.35rem;width: min(45%,260px);border-radius: 16px;padding: 1rem}.workspace-card strong{color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: 1.18rem;line-height: 1.15}.workspace-card small{color: var(--marketing-muted);font-size: 0.88rem;line-height: 1.45}.workspace-character{right: 6%;top: 13%;border-left: 5px solid var(--marketing-sage)}.workspace-thread{right: 11%;top: 40%;border-left: 5px solid var(--marketing-gold)}.workspace-warning{right: 5%;bottom: 18%;border-left: 5px solid var(--marketing-rose)}.workspace-progress{top: auto;left: 13%;right: 10%;bottom: 4%;display: flex;gap: 0.55rem;height: 3.75rem;border-radius: 999px;padding: 0.65rem}.workspace-progress span{flex: 1 1 0;border-radius: 999px;padding: 0.58rem 0.7rem;color: #2a2119;background: rgba(212,165,116,0.22);font-size: 0.82rem;font-weight: 850;text-align: center}.workspace-progress span:nth-child(2){background: rgba(95,120,108,0.2)}.workspace-progress span:nth-child(3){color: #fffaf2;background: var(--marketing-navy)}.browser-frame__chrome{display: flex;gap: 0.45rem;align-items: center;height: 2.55rem;border-bottom: 1px solid rgba(31,42,68,0.1);padding: 0 1rem;background: linear-gradient(180deg,#fffdf9,#f5efe7)}.browser-frame__chrome span{width: 0.72rem;height: 0.72rem;border-radius: 999px;background: #d8cabf}.browser-frame__chrome span:nth-child(2){background: var(--marketing-gold)}.browser-frame__chrome span:nth-child(3){background: var(--marketing-sage)}.product-mockup{display: grid;grid-template-columns: 170px minmax(0,1fr);min-height: 470px;background: linear-gradient(135deg,rgba(255,255,255,0.86),rgba(250,248,245,0.92)),var(--marketing-offwhite)}.product-sidebar{display: grid;align-content: start;gap: 0.5rem;border-right: 1px solid rgba(31,42,68,0.1);padding: 1.1rem;background: rgba(31,42,68,0.96);color: rgba(255,250,242,0.72)}.product-sidebar strong{margin-bottom: 0.8rem;color: #fffaf2;font-family: Georgia,"Times New Roman",serif;font-size: 1.05rem}.product-sidebar span{border-radius: 999px;padding: 0.5rem 0.7rem;font-size: 0.84rem;font-weight: 750}.product-sidebar .is-active{color: #241b12;background: var(--marketing-gold)}.product-main{display: grid;gap: 1rem;align-content: start;padding: clamp(1rem,2vw,1.45rem)}.product-topline{display: flex;justify-content: space-between;gap: 1rem;align-items: start}.product-topline small,.mock-label{color: var(--marketing-muted);font-size: 0.78rem;font-weight: 820;letter-spacing: 0.04em;text-transform: uppercase}.product-topline h2{margin-top: 0.25rem;font-size: clamp(1.5rem,2.4vw,2.15rem)}.product-topline > span{flex: 0 0 auto;border-radius: 999px;padding: 0.38rem 0.7rem;color: #294a35;background: #e5f1e8;font-size: 0.78rem;font-weight: 800}.product-grid{display: grid;grid-template-columns: minmax(0,1.35fr) minmax(0,0.9fr);gap: 0.85rem}.product-panel{display: grid;gap: 0.75rem;min-height: 150px;border: 1px solid rgba(31,42,68,0.1);border-radius: 16px;padding: 1rem;background: rgba(255,253,249,0.92);box-shadow: 0 16px 30px rgba(31,42,68,0.07)}.product-panel--wide{grid-row: span 2}.product-panel p{margin: 0;color: var(--marketing-muted)}.mock-chart{display: grid;grid-template-columns: repeat(7,minmax(0,1fr));gap: 0.55rem;align-items: end;min-height: 220px;padding-top: 1rem}.mock-chart span{height: var(--height);min-height: 2.2rem;border-radius: 999px 999px 8px 8px;background: linear-gradient(180deg,var(--marketing-gold),#8f5d3b);box-shadow: inset 0 1px 0 rgba(255,255,255,0.45)}.thread-list{display: grid;gap: 0.55rem}.thread-list span{border-left: 4px solid var(--marketing-gold);border-radius: 10px;padding: 0.55rem 0.65rem;color: var(--marketing-navy);background: rgba(212,165,116,0.13);font-weight: 760}.problem-intro{padding: clamp(3rem,7vw,6rem) 0 1rem;text-align: center}.problem-intro h2,.section-heading h2{max-width: 850px;margin-inline: auto}.problem-stack{padding: 1rem 0 clamp(4rem,8vw,7rem)}.problem-section{display: grid;grid-template-columns: minmax(0,0.95fr) minmax(0,1.05fr);gap: clamp(1.5rem,5vw,5rem);align-items: center;min-height: 460px;padding: clamp(2.5rem,6vw,5rem) 0}.problem-section--reverse .problem-visual{order: 2}.problem-copy{display: grid;gap: 1rem}.problem-copy p{max-width: 36rem;margin: 0}.problem-visual{position: relative;min-height: 320px;border: 1px solid rgba(31,42,68,0.11);border-radius: 24px;background: linear-gradient(135deg,rgba(255,253,249,0.96),rgba(242,230,215,0.88)),var(--marketing-offwhite);box-shadow: 0 22px 56px rgba(31,42,68,0.1);overflow: hidden}.problem-visual--image{display: grid;align-items: center;min-height: 0;padding: 0.75rem;background: linear-gradient(135deg,rgba(255,253,249,0.96),rgba(242,230,215,0.88)),var(--marketing-offwhite)}.problem-visual--image::before,.problem-visual--image::after{display: none}.problem-visual--image .home-feature-image{grid-column: 1 / -1;justify-self: center;border-radius: 18px;box-shadow: 0 18px 42px rgba(31,42,68,0.12)}.visual-plot{background: linear-gradient(135deg,rgba(255,253,249,0.92),rgba(242,232,217,0.82)),url("/images/home/plot-thread-map.webp") center / cover no-repeat,#f2e8d9}.visual-warning{background: linear-gradient(135deg,rgba(255,253,249,0.94),rgba(242,230,215,0.84)),url("/images/home/manuscript-continuity.webp") center / cover no-repeat,#f8f1e7}.visual-relationships{background: linear-gradient(135deg,rgba(255,253,249,0.92),rgba(232,238,229,0.82)),url("/images/home/character-relationship-board.webp") center / cover no-repeat,#eef3eb}.visual-flow{background: linear-gradient(135deg,rgba(255,253,249,0.92),rgba(242,230,215,0.82)),url("/images/home/story-timeline.webp") center / cover no-repeat,#f8f1e7}.visual-series{background: linear-gradient(135deg,rgba(255,253,249,0.9),rgba(242,230,215,0.8)),url("/images/home/series-dashboard.webp") center / cover no-repeat,#f8f1e7}.visual-notes span,.visual-docs span,.visual-series span,.visual-threads span,.visual-warning span{position: absolute;border: 1px solid rgba(31,42,68,0.1);border-radius: 14px;padding: 0.75rem 0.9rem;color: var(--marketing-navy);background: #fffdf9;box-shadow: 0 14px 28px rgba(31,42,68,0.08);font-weight: 760}.visual-notes span:nth-child(1){top: 14%;left: 12%;transform: rotate(-5deg)}.visual-notes span:nth-child(2){top: 28%;right: 10%;transform: rotate(4deg)}.visual-notes span:nth-child(3){bottom: 22%;left: 16%;transform: rotate(3deg)}.visual-notes span:nth-child(4){bottom: 13%;right: 18%;transform: rotate(-4deg)}.visual-plot{display: grid;grid-template-columns: repeat(4,minmax(0,1fr));gap: 0.8rem;align-content: center;padding: 2rem}.visual-plot::before{content: "";position: absolute;left: 11%;right: 11%;top: 50%;height: 0.28rem;border-radius: 999px;background: rgba(31,42,68,0.16)}.visual-plot span{position: relative;display: grid;place-items: center;min-height: 6.5rem;border: 1px solid rgba(31,42,68,0.1);border-radius: 14px;padding: 0.75rem;color: var(--marketing-navy);background: #fffdf9;box-shadow: 0 14px 28px rgba(31,42,68,0.08);font-weight: 800;text-align: center}.visual-plot span:nth-child(1),.visual-threads span:nth-child(1){border-top: 5px solid var(--marketing-sage)}.visual-plot span:nth-child(2),.visual-threads span:nth-child(2){border-top: 5px solid var(--marketing-gold)}.visual-plot span:nth-child(3),.visual-threads span:nth-child(3){border-top: 5px solid var(--marketing-rose)}.visual-plot span:nth-child(4),.visual-threads span:nth-child(4){border-top: 5px solid var(--marketing-navy)}.visual-warning{display: grid;gap: 0.75rem;align-content: center;padding: 2rem}.visual-warning strong{color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: 1.6rem}.visual-warning span{position: static;border-left: 4px solid var(--marketing-gold)}.visual-next{display: grid;align-content: center;gap: 0.8rem;padding: 2rem}.visual-next small{color: #8b612e;font-weight: 850;letter-spacing: 0.1em;text-transform: uppercase}.visual-next strong{color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: clamp(2rem,4vw,3.5rem);line-height: 1}.visual-next p{max-width: 22rem;margin: 0;color: var(--marketing-muted);font-size: 1.1rem;line-height: 1.6}.visual-next p + p{border-top: 1px solid rgba(31,42,68,0.11);padding-top: 0.75rem}.visual-docs span:nth-child(1){top: 13%;left: 12%}.visual-docs span:nth-child(2){top: 23%;right: 12%}.visual-docs span:nth-child(3){top: 45%;left: 23%}.visual-docs span:nth-child(4){bottom: 18%;left: 12%}.visual-docs span:nth-child(5){bottom: 14%;right: 15%}.visual-relationships::before,.visual-relationships::after{content: "";position: absolute;inset: 22% 18%;border: 2px solid rgba(31,42,68,0.16);border-radius: 50%}.visual-relationships::after{inset: 34% 22%;border-color: rgba(212,165,116,0.44);transform: rotate(22deg)}.person{position: absolute;z-index: 1;display: grid;place-items: center;width: 5rem;height: 5rem;border: 0.4rem solid #fffaf2;border-radius: 999px;color: #fffaf2;background: var(--marketing-navy);box-shadow: 0 16px 30px rgba(31,42,68,0.18);font-weight: 850}.person-a{top: 13%;left: 18%}.person-b{top: 21%;right: 18%;background: var(--marketing-rose)}.person-c{bottom: 17%;left: 24%;background: var(--marketing-sage)}.person-d{right: 24%;bottom: 13%;background: var(--marketing-gold);color: #2a2119}.relationship-label{position: absolute;z-index: 2;border-radius: 999px;padding: 0.42rem 0.65rem;color: var(--marketing-navy);background: #fffdf9;box-shadow: 0 12px 24px rgba(31,42,68,0.1);font-size: 0.78rem;font-weight: 850}.rel-trust{top: 23%;left: 43%}.rel-secret{top: 47%;right: 25%}.rel-threat{bottom: 33%;left: 34%}.rel-sister{bottom: 23%;right: 38%}.visual-threads{display: grid;grid-template-columns: repeat(4,1fr);gap: 0.85rem;align-content: center;padding: 2rem}.visual-threads::before{content: "";position: absolute;left: 11%;right: 11%;top: 50%;height: 0.32rem;border-radius: 999px;background: rgba(31,42,68,0.14)}.visual-threads span{position: relative;display: grid;place-items: center;min-height: 6.5rem;text-align: center}.visual-series{display: grid;grid-template-columns: repeat(4,minmax(0,1fr));gap: 0.8rem;align-content: center;padding: 2rem}.visual-series span{position: static;display: grid;place-items: center;min-height: 10.5rem;border-radius: 12px 12px 18px 18px;color: #fffaf2;background: linear-gradient(180deg,var(--marketing-navy),#314263);text-align: center}.visual-series span:nth-child(2){background: linear-gradient(180deg,#75503a,#533424)}.visual-series span:nth-child(3){background: linear-gradient(180deg,#5f786c,#3d564b)}.visual-series span:nth-child(4){color: #2a2119;background: linear-gradient(180deg,#e1bd8e,var(--marketing-gold))}.visual-flow{display: grid;align-items: center;padding: 2rem}.flow-line{position: absolute;left: 8%;right: 8%;top: 50%;height: 8rem;border-bottom: 0.38rem solid var(--marketing-gold);border-radius: 0 0 50% 50%;transform: translateY(-54%)}.visual-flow span{position: absolute;left: var(--pos);bottom: 26%;border-radius: 999px;padding: 0.55rem 0.8rem;color: var(--marketing-navy);background: #fffaf2;box-shadow: 0 12px 26px rgba(31,42,68,0.1);font-weight: 800}.social-proof{padding: clamp(4rem,8vw,7rem) 0;background: var(--marketing-offwhite)}.section-heading{display: grid;gap: 0.7rem;margin-bottom: clamp(1.5rem,4vw,3rem);text-align: center}.testimonial-grid{display: grid;grid-template-columns: repeat(3,minmax(0,1fr));gap: 1rem}.testimonial-grid figure{display: grid;align-content: space-between;min-height: 250px;margin: 0;border: 1px solid rgba(31,42,68,0.1);border-radius: 18px;padding: clamp(1.25rem,2.3vw,1.75rem);background: linear-gradient(180deg,rgba(255,253,249,0.96),rgba(250,248,245,0.88)),#fff;box-shadow: 0 18px 42px rgba(31,42,68,0.08)}.testimonial-grid blockquote{margin: 0;color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: 1.32rem;line-height: 1.4}.testimonial-grid figcaption{margin-top: 1.35rem;color: #8b612e;font-weight: 820}.founder-story{padding: clamp(4rem,8vw,7rem) 0;background: radial-gradient(circle at 10% 20%,rgba(212,165,116,0.18),transparent 22rem),var(--marketing-cream)}.founder-story__grid{display: grid;grid-template-columns: minmax(180px,0.35fr) minmax(0,0.65fr);gap: clamp(1.5rem,5vw,4rem);align-items: center}.founder-mark{display: grid;place-items: center;aspect-ratio: 1;border: 1px solid rgba(31,42,68,0.12);border-radius: 28px;color: #fffaf2;background: linear-gradient(135deg,rgba(212,165,116,0.3),transparent),var(--marketing-navy);box-shadow: var(--marketing-shadow);font-family: Georgia,"Times New Roman",serif;font-size: clamp(3rem,8vw,6rem)}.founder-story h2{margin-bottom: 1rem}.founder-story p{max-width: 48rem;margin: 0 0 1rem}.final-cta{padding: clamp(4rem,8vw,7rem) 0;background: var(--marketing-navy)}.final-cta__inner{display: grid;justify-items: center;gap: 1rem;border: 1px solid rgba(255,250,242,0.14);border-radius: 28px;padding: clamp(2.25rem,6vw,5rem) clamp(1rem,5vw,4rem);background: radial-gradient(circle at 50% 0%,rgba(212,165,116,0.28),transparent 26rem),linear-gradient(135deg,rgba(255,255,255,0.06),transparent);text-align: center;box-shadow: 0 28px 70px rgba(10,16,29,0.2)}.final-cta h2{color: #fffaf2}.final-cta p{max-width: 42rem;margin: 0 0 0.75rem;color: rgba(255,250,242,0.78)}.final-cta .marketing-eyebrow{color: var(--marketing-gold)}.final-cta .marketing-btn--primary{color: #241b12;background: linear-gradient(135deg,#e3bd8e,var(--marketing-gold));box-shadow: 0 16px 34px rgba(0,0,0,0.22)}.final-cta .marketing-btn--primary:hover,.final-cta .marketing-btn--primary:focus{color: #241b12}.pricing-page{margin-top: -1rem}.pricing-hero{padding: clamp(2rem,5vw,3.75rem) 0 clamp(2.5rem,6vw,4.5rem);background: radial-gradient(circle at 18% 20%,rgba(212,165,116,0.2),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.pricing-hero__inner{display: grid;justify-items: center;gap: 1.1rem;text-align: center}.pricing-hero h1{max-width: 12ch}.pricing-hero .marketing-lead{max-width: 46rem}.pricing-message{border: 1px solid rgba(31,42,68,0.12);border-radius: 16px;padding: 1rem 1.1rem;margin: 1rem 0 0;color: var(--marketing-navy);background: rgba(255,253,249,0.9);box-shadow: 0 14px 32px rgba(31,42,68,0.08);font-weight: 750}.pricing-plans,.pricing-compare,.pricing-faq{padding: clamp(3.5rem,7vw,6rem) 0}.pricing-plans{background: var(--marketing-offwhite)}.pricing-compare{background: radial-gradient(circle at 90% 20%,rgba(95,120,108,0.12),transparent 24rem),var(--marketing-cream)}.pricing-faq{background: var(--marketing-offwhite)}.pricing-empty{border: 1px solid rgba(31,42,68,0.11);border-radius: 22px;padding: clamp(1.5rem,4vw,2.5rem);background: rgba(255,253,249,0.92);box-shadow: 0 18px 42px rgba(31,42,68,0.08);text-align: center}.pricing-empty p{margin: 0.75rem auto 0;max-width: 42rem;color: var(--marketing-muted);line-height: 1.7}.pricing-card-grid{display: grid;grid-template-columns: repeat(auto-fit,minmax(250px,1fr));gap: 1rem;align-items: stretch}.pricing-card{position: relative;display: grid;gap: 1.25rem;align-content: start;min-height: 100%;border: 1px solid rgba(31,42,68,0.11);border-radius: 22px;padding: clamp(1.2rem,2.4vw,1.65rem);background: linear-gradient(180deg,rgba(255,253,249,0.98),rgba(250,248,245,0.9)),#fff;box-shadow: 0 18px 42px rgba(31,42,68,0.08)}.pricing-card::before{content: "";display: block;height: 1.9rem}.pricing-card--featured{border-color: rgba(212,165,116,0.7);box-shadow: 0 26px 58px rgba(31,42,68,0.13)}.pricing-card--trial{border-color: rgba(95,120,108,0.52);background: linear-gradient(180deg,rgba(255,253,249,0.98),rgba(235,241,237,0.9)),#fff;box-shadow: 0 24px 54px rgba(31,42,68,0.11);min-width: 0}.pricing-card--trial .pricing-card__heading,.pricing-card--trial .pricing-price,.pricing-card--trial .pricing-feature-list,.pricing-card--trial .pricing-card__actions{min-width: 0}.pricing-badge{position: absolute;top: clamp(1.2rem,2.4vw,1.65rem);right: clamp(1.2rem,2.4vw,1.65rem);width: fit-content;margin: 0;border: 1px solid rgba(212,165,116,0.55);border-radius: 999px;padding: 0.38rem 0.7rem;color: #634019;background: rgba(212,165,116,0.22);font-size: 0.76rem;font-weight: 850;letter-spacing: 0.08em;text-transform: uppercase}.pricing-badge--trial{border-color: rgba(95,120,108,0.48);color: #314b42;background: rgba(95,120,108,0.18)}.pricing-card__heading{display: grid;gap: 0.5rem;min-height: 6.85rem;align-content: start}.pricing-card h3,.comparison-grid h3,.faq-grid h3{margin: 0;color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: clamp(1.35rem,2vw,1.75rem);line-height: 1.12}.pricing-card__heading p{margin: 0;color: var(--marketing-muted);line-height: 1.55}.pricing-price{display: grid;gap: 0.2rem;border-top: 1px solid rgba(31,42,68,0.1);border-bottom: 1px solid rgba(31,42,68,0.1);padding: 1rem 0}.pricing-price strong{display: inline-flex;gap: 0.35rem;align-items: baseline;width: fit-content;color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: clamp(2.15rem,4vw,3rem);line-height: 1;white-space: nowrap}.pricing-price span,.pricing-price small{color: var(--marketing-muted);font-weight: 720}.pricing-price small{font-size: 0.88rem}.pricing-price strong small{color: var(--marketing-muted);font-family: "Segoe UI","Aptos",system-ui,-apple-system,BlinkMacSystemFont,sans-serif;font-size: 0.88rem;font-weight: 800;line-height: 1;white-space: nowrap}.pricing-price .pricing-price__value{color: var(--marketing-navy);white-space: nowrap}.pricing-price > small{white-space: nowrap}.pricing-card--trial .pricing-price > small{white-space: normal;overflow-wrap: anywhere}.public-info-page{margin-top: -1rem}.public-hero{padding: clamp(2rem,5vw,3.75rem) 0 clamp(2.5rem,6vw,4.5rem);background: radial-gradient(circle at 18% 20%,rgba(212,165,116,0.2),transparent 24rem),linear-gradient(180deg,var(--marketing-cream),var(--marketing-offwhite))}.public-hero__inner{display: grid;justify-items: center;gap: 1.05rem;text-align: center}.public-hero h1{max-width: 13ch}.public-hero .marketing-lead{max-width: 50rem}.public-updated{margin: 0;border: 1px solid rgba(31,42,68,0.12);border-radius: 999px;padding: 0.45rem 0.85rem;color: var(--marketing-muted);background: rgba(255,253,249,0.78);font-weight: 760}.public-content-section,.public-mission{padding: clamp(3.5rem,7vw,6rem) 0}.public-content-section{background: var(--marketing-offwhite)}.public-content-section--soft,.public-mission{background: radial-gradient(circle at 90% 20%,rgba(95,120,108,0.12),transparent 24rem),var(--marketing-cream)}.public-narrative,.public-policy{max-width: 860px}.public-narrative{display: grid;gap: 1rem}.public-narrative p,.public-policy p,.public-policy li,.public-card p{color: var(--marketing-muted);font-size: clamp(1rem,1.45vw,1.13rem);line-height: 1.75}.public-narrative p{margin: 0}.public-narrative strong{color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: clamp(1.7rem,3vw,2.45rem);line-height: 1.15}.public-feature-panel{border: 1px solid rgba(31,42,68,0.11);border-radius: 28px;padding: clamp(2rem,5vw,4rem);background: rgba(255,253,249,0.9);box-shadow: 0 22px 56px rgba(31,42,68,0.1);text-align: center}.public-feature-panel h2{max-width: 860px;margin: 0 auto;font-size: clamp(2rem,4vw,3.6rem)}.public-card-grid{display: grid;grid-template-columns: repeat(3,minmax(0,1fr));gap: 1rem}.public-card{border: 1px solid rgba(31,42,68,0.1);border-radius: 18px;padding: clamp(1.1rem,2.2vw,1.5rem);background: linear-gradient(180deg,rgba(255,253,249,0.96),rgba(250,248,245,0.88)),#fff;box-shadow: 0 16px 36px rgba(31,42,68,0.07)}.public-card h2,.public-policy h2{margin: 0;color: var(--marketing-navy);font-family: Georgia,"Times New Roman",serif;font-size: clamp(1.35rem,2.1vw,1.85rem)}.public-card p{margin: 0.7rem 0 0}.public-policy{display: grid;gap: clamp(1.4rem,3vw,2.1rem)}.public-policy section{border-bottom: 1px solid rgba(31,42,68,0.1);padding-bottom: clamp(1.2rem,2.6vw,1.8rem)}.public-policy p{margin: 0.65rem 0 0}.public-policy ul{display: grid;gap: 0.55rem;margin: 0.75rem 0 0;padding-left: 1.25rem}.public-policy a,.public-card a{color: var(--marketing-navy);font-weight: 820}.public-disclaimer{border: 1px solid rgba(212,165,116,0.38);border-radius: 18px;padding: 1rem 1.1rem;background: rgba(212,165,116,0.13)}.public-disclaimer p{margin: 0;color: #6b4a22;font-size: 0.96rem;font-weight: 720}.public-footer{border-top: 1px solid rgba(255,250,242,0.12);background: #1f2a44}.public-footer__inner{display: flex;justify-content: space-between;gap: 1rem;align-items: center;padding-top: 1.25rem;padding-bottom: 1.25rem}.public-footer__brand{color: #fffaf2;font-family: Georgia,"Times New Roman",serif;font-size: 1.25rem;font-weight: 700;text-decoration: none}.public-footer__brand:hover,.public-footer__brand:focus{color: #d4a574}.public-footer__nav{display: flex;flex-wrap: wrap;justify-content: flex-end;gap: 0.55rem 1rem}.public-footer__nav a{color: rgba(255,250,242,0.76);font-size: 0.92rem;font-weight: 760;text-decoration: none}.public-footer__nav a:hover,.public-footer__nav a:focus{color: #d4a574}.pricing-feature-list{display: grid;gap: 0.65rem;margin: 0;padding: 0;list-style: none}.pricing-feature-list li{position: relative;padding-left: 1.35rem;color: var(--marketing-navy);font-weight: 740;line-height: 1.35}.pricing-feature-list li::before{content: "";position: absolute;left: 0;top: 0.44rem;width: 0.58rem;height: 0.58rem;border-radius: 999px;background: var(--marketing-gold);box-shadow: 0 0 0 4px rgba(212,165,116,0.18)}.pricing-card__actions{display: grid;gap: 0.7rem;margin-top: auto}.pricing-card__actions .marketing-btn{width: 100%}.pricing-card--trial .pricing-card__actions .marketing-btn{box-sizing: border-box;max-width: 100%;padding-inline: 0.95rem;text-align: center;white-space: normal}.pricing-link{display: inline-flex;justify-content: center;color: var(--marketing-navy);font-weight: 820;text-decoration-color: rgba(31,42,68,0.24)}.pricing-link:hover,.pricing-link:focus{color: #8b612e}.comparison-grid,.faq-grid{display: grid;grid-template-columns: repeat(2,minmax(0,1fr));gap: 1rem}.comparison-grid article,.faq-grid article{border: 1px solid rgba(31,42,68,0.1);border-radius: 18px;padding: clamp(1.1rem,2.2vw,1.5rem);background: rgba(255,253,249,0.9);box-shadow: 0 16px 36px rgba(31,42,68,0.07)}.comparison-grid p,.faq-grid p{margin: 0.7rem 0 0;color: var(--marketing-muted);line-height: 1.7}.marketing-home{--marketing-midnight: #071327;--marketing-navy: #101f3f;--marketing-indigo: #4655c7;--marketing-purple: #7c3aed;--marketing-purple-soft: #ede9ff;--marketing-gold: #f3b86b;--marketing-cream: #f7f8ff;--marketing-offwhite: #fffdf8;--marketing-ink: #111827;--marketing-muted: #5f6775;--marketing-rose: #b05f86;--marketing-sage: #4a8279;--marketing-line: rgba(16,31,63,0.12);--marketing-shadow: 0 34px 90px rgba(16,31,63,0.18);--marketing-card-shadow: 0 20px 52px rgba(16,31,63,0.1);background: radial-gradient(circle at 84% 4%,rgba(124,58,237,0.18),transparent 27rem),radial-gradient(circle at 8% 18%,rgba(243,184,107,0.18),transparent 28rem),linear-gradient(180deg,#f8f9ff 0%,#fffdf8 36%,#eef1ff 100%)}.marketing-home::selection{color: #fff;background: var(--marketing-purple)}.marketing-eyebrow{color: var(--marketing-purple)}.marketing-home h1,.marketing-home h2,.marketing-home h3{overflow-wrap: normal;word-break: normal}.marketing-hero,.features-hero,.pricing-hero,.public-hero{overflow: hidden;background: radial-gradient(circle at 12% 16%,rgba(243,184,107,0.22),transparent 24rem),radial-gradient(circle at 86% 10%,rgba(124,58,237,0.2),transparent 28rem),linear-gradient(180deg,#f8f9ff 0%,#fffdf8 100%)}.marketing-hero::after,.features-hero::after,.public-hero::after,.pricing-hero::after,.problem-stack::before,.features-showcase::before{content: "";position: absolute;pointer-events: none}.marketing-hero::after,.features-hero::after,.public-hero::after,.pricing-hero::after{inset: auto 8% 2.5rem;height: 7rem;opacity: 0.45;background: radial-gradient(circle at 8% 50%,var(--marketing-purple) 0 4px,transparent 5px),radial-gradient(circle at 38% 38%,var(--marketing-gold) 0 4px,transparent 5px),radial-gradient(circle at 68% 58%,var(--marketing-indigo) 0 4px,transparent 5px),radial-gradient(circle at 94% 42%,var(--marketing-purple) 0 4px,transparent 5px),linear-gradient(100deg,transparent 7%,rgba(124,58,237,0.3) 7.3% 38%,rgba(243,184,107,0.28) 38.3% 68%,rgba(70,85,199,0.24) 68.3% 94%,transparent 94.3%);mask-image: linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}.marketing-hero__copy,.features-hero__copy{position: relative;z-index: 1}.marketing-btn{min-width: 9rem;box-shadow: 0 10px 26px rgba(16,31,63,0.08)}.marketing-btn--primary{border-color: rgba(124,58,237,0.28);background: linear-gradient(135deg,var(--marketing-midnight),#182a58 58%,var(--marketing-purple))}.marketing-btn--primary:hover,.marketing-btn--primary:focus{box-shadow: 0 22px 48px rgba(124,58,237,0.26)}.marketing-btn--secondary{border-color: rgba(124,58,237,0.22);background: rgba(255,255,255,0.78);backdrop-filter: blur(12px)}.hero-proof div,.features-hero__highlights article,.feature-icon-card,.pricing-card,.comparison-grid article,.faq-grid article,.public-card,.testimonial-grid figure{border-color: rgba(16,31,63,0.11);background: linear-gradient(180deg,rgba(255,255,255,0.96),rgba(248,249,255,0.9)),#fff;box-shadow: var(--marketing-card-shadow);transition: transform 0.2s ease,box-shadow 0.2s ease,border-color 0.2s ease}.features-hero__highlights article:hover,.feature-icon-card:hover,.pricing-card:hover,.comparison-grid article:hover,.faq-grid article:hover,.public-card:hover,.testimonial-grid figure:hover{transform: translateY(-4px);border-color: rgba(124,58,237,0.24);box-shadow: 0 28px 68px rgba(16,31,63,0.15)}.features-screenshot,.home-image-card,.problem-visual--image .home-feature-image{border-color: rgba(16,31,63,0.12);border-radius: 28px;background: linear-gradient(180deg,#ffffff,#f2f4ff);box-shadow: var(--marketing-shadow)}.features-screenshot img,.home-image-card img,.problem-visual--image .home-feature-image{filter: saturate(1.03) contrast(1.01)}.features-screenshot::before{background: radial-gradient(circle at 24px 50%,#ff7b72 0 5px,transparent 6px),radial-gradient(circle at 44px 50%,#f3b86b 0 5px,transparent 6px),radial-gradient(circle at 64px 50%,#7c3aed 0 5px,transparent 6px),linear-gradient(90deg,#f6f7ff,#fff)}.features-jump{background: #fffdf8}.features-jump__grid a{border-color: rgba(124,58,237,0.16);background: rgba(255,255,255,0.82)}.features-jump__grid a:hover,.features-jump__grid a:focus{border-color: rgba(124,58,237,0.46);box-shadow: 0 16px 34px rgba(124,58,237,0.12)}.features-section,.pricing-plans,.pricing-faq,.social-proof,.public-content-section{background: #fffdf8}.features-section--soft,.features-word,.pricing-compare,.public-content-section--soft,.public-mission,.founder-story{background: radial-gradient(circle at 8% 16%,rgba(124,58,237,0.1),transparent 24rem),radial-gradient(circle at 92% 22%,rgba(243,184,107,0.16),transparent 24rem),#f3f5ff}.features-showcase,.final-cta{background: radial-gradient(circle at 10% 10%,rgba(124,58,237,0.32),transparent 25rem),radial-gradient(circle at 88% 20%,rgba(243,184,107,0.18),transparent 26rem),linear-gradient(135deg,var(--marketing-midnight),#111f40 56%,#241656)}.features-showcase .feature-icon-card,.final-cta__inner{border-color: rgba(255,255,255,0.16);background: rgba(255,255,255,0.09);backdrop-filter: blur(14px)}.features-showcase .features-showcase__intro h2,.features-showcase .feature-icon-card h3,.final-cta .marketing-eyebrow{color: #f6c47d}.feature-icon-card > span{width: 3.25rem;height: 3.25rem;color: #fff;background: radial-gradient(circle at 20% 15%,rgba(255,255,255,0.34),transparent 34%),linear-gradient(135deg,var(--marketing-purple),var(--marketing-indigo));box-shadow: 0 14px 30px rgba(124,58,237,0.2)}.pricing-card--featured{border-color: rgba(124,58,237,0.38);box-shadow: 0 30px 74px rgba(124,58,237,0.16)}.pricing-badge,.public-updated{border-color: rgba(124,58,237,0.24);color: #4c1d95;background: rgba(237,233,255,0.82)}.pricing-feature-list li::before,.features-bullet-list li::before{background: linear-gradient(135deg,var(--marketing-purple),var(--marketing-gold));box-shadow: 0 0 0 4px rgba(124,58,237,0.12)}.public-feature-panel{border-color: rgba(124,58,237,0.16);background: radial-gradient(circle at 50% 0%,rgba(124,58,237,0.12),transparent 24rem),rgba(255,255,255,0.88)}.public-policy{max-width: 920px}.public-policy section{border-bottom-color: rgba(16,31,63,0.1)}.public-footer{background: radial-gradient(circle at 20% 0%,rgba(124,58,237,0.28),transparent 24rem),var(--marketing-midnight,#071327)}.public-footer__brand:hover,.public-footer__brand:focus,.public-footer__nav a:hover,.public-footer__nav a:focus{color: #f6c47d}.help-centre-shell{max-width: 1180px}.help-centre-page{--help-brand: #101f3f;--help-purple: #7c3aed;--help-soft: #f3f5ff;--help-line: rgba(16,31,63,0.12);max-width: 1120px;margin-inline: auto}.help-centre-page .breadcrumb-trail{margin-top: 0.5rem}.help-centre-hero{position: relative;overflow: hidden;margin-top: 1rem;border: 1px solid var(--help-line);border-radius: 18px;padding: clamp(1.5rem,4vw,2.4rem);background: radial-gradient(circle at 88% 8%,rgba(124,58,237,0.12),transparent 18rem),linear-gradient(135deg,#fff,var(--help-soft));box-shadow: 0 18px 44px rgba(16,31,63,0.08)}.help-centre-hero::after{content: "";position: absolute;right: clamp(1rem,4vw,2.4rem);bottom: 1.2rem;width: min(36%,18rem);height: 0.25rem;border-radius: 999px;background: linear-gradient(90deg,transparent,rgba(124,58,237,0.34),rgba(243,184,107,0.42))}.help-centre-hero h1{color: var(--help-brand)}.help-search-card,.help-section,.help-article-card,.help-centre-page .plain-card{border-color: var(--help-line);border-radius: 14px;background: rgba(255,255,255,0.92);box-shadow: 0 14px 34px rgba(16,31,63,0.07)}.help-centre-page .plain-card{transition: transform 0.18s ease,box-shadow 0.18s ease,border-color 0.18s ease}.help-centre-page .asset-card-grid .plain-card:hover{transform: translateY(-2px);border-color: rgba(124,58,237,0.22);box-shadow: 0 20px 44px rgba(16,31,63,0.1)}.help-centre-page .btn-primary{--bs-btn-bg: #101f3f;--bs-btn-border-color: #101f3f;--bs-btn-hover-bg: #7c3aed;--bs-btn-hover-border-color: #7c3aed}.help-centre-page a{color: #4c1d95}.help-centre-page .status-pill,.help-centre-page .soft-count{border-color: rgba(124,58,237,0.18);color: #4c1d95;background: rgba(237,233,255,0.82)}.marketing-home{--launch-night: #040713;--launch-midnight: #070f24;--launch-blue: #0e2a66;--launch-electric: #8b5cf6;--launch-violet: #c084fc;--launch-gold: #ffcf72;--launch-coral: #ff7a90;--launch-paper: #fffaf0;--launch-ink: #07111f;--launch-muted: #667085;--launch-glass: rgba(255,255,255,0.1);--launch-line: rgba(255,255,255,0.18);--launch-shadow: 0 44px 120px rgba(3,7,18,0.34);color: var(--launch-ink);background: radial-gradient(circle at 50% -8%,rgba(192,132,252,0.42),transparent 34rem),radial-gradient(circle at 6% 20%,rgba(255,207,114,0.18),transparent 31rem),radial-gradient(circle at 90% 18%,rgba(14,42,102,0.34),transparent 38rem),linear-gradient(180deg,#040713 0%,#071225 32%,#f8f4ff 32.1%,#fffaf0 100%)}.marketing-home .marketing-eyebrow{color: var(--launch-gold);font-size: 0.82rem;letter-spacing: 0.18em}.marketing-home h1,.marketing-home h2,.marketing-home h3{color: inherit;font-family: Georgia,"Times New Roman",serif;letter-spacing: 0}.marketing-home .marketing-lead{color: rgba(255,255,255,0.76);font-size: clamp(1.08rem,1.65vw,1.32rem);line-height: 1.62}.marketing-hero,.features-hero,.pricing-hero,.public-about-page .public-hero,.public-contact-page .public-hero{position: relative;isolation: isolate;min-height: calc(100vh - 5rem);padding: clamp(4rem,7vw,7rem) 0 clamp(5rem,9vw,8rem);color: #fffaf7;background: linear-gradient(115deg,rgba(4,7,19,0.96),rgba(7,15,36,0.86) 46%,rgba(42,16,83,0.8)),radial-gradient(circle at 72% 22%,rgba(139,92,246,0.58),transparent 25rem),radial-gradient(circle at 18% 74%,rgba(255,207,114,0.18),transparent 24rem),#040713}.marketing-hero::before,.features-hero::before,.pricing-hero::before,.public-about-page .public-hero::before,.public-contact-page .public-hero::before{content: "";position: absolute;inset: 0;z-index: -2;opacity: 0.72;background: linear-gradient(105deg,transparent 0 34%,rgba(255,255,255,0.09) 34.2% 34.9%,transparent 35.2%),linear-gradient(72deg,transparent 0 56%,rgba(255,207,114,0.12) 56.1% 56.8%,transparent 57%),radial-gradient(circle at 18% 28%,rgba(255,255,255,0.16) 0 1px,transparent 2px),radial-gradient(circle at 84% 34%,rgba(255,255,255,0.2) 0 1px,transparent 2px);background-size: auto,auto,94px 94px,132px 132px}.marketing-hero::after,.features-hero::after,.pricing-hero::after,.public-about-page .public-hero::after,.public-contact-page .public-hero::after{content: "";position: absolute;inset: auto -8vw -6rem;z-index: -1;height: 15rem;background: radial-gradient(ellipse at 50% 0%,rgba(255,250,240,0.94),rgba(255,250,240,0.74) 32%,transparent 70%);pointer-events: none}.marketing-hero__grid,.features-hero__grid{grid-template-columns: minmax(0,0.78fr) minmax(500px,1.22fr);perspective: 1600px}.marketing-hero__copy,.features-hero__copy{align-self: start;z-index: 3;padding-top: clamp(0.5rem,4vw,3rem)}.marketing-home h1{max-width: 10.5ch;font-size: clamp(4.1rem,8vw,8.8rem);line-height: 0.86;text-shadow: 0 20px 70px rgba(0,0,0,0.34)}.marketing-home-page h1{max-width: 13.5ch;font-size: clamp(3.45rem,5.5vw,6.15rem)}.pricing-hero h1,.public-about-page .public-hero h1,.public-contact-page .public-hero h1{max-width: 10ch;color: #fffaf7;font-size: clamp(4.2rem,9vw,9.6rem);line-height: 0.86}.features-hero h1{max-width: 7.8ch}.marketing-actions{gap: 0.9rem}.marketing-btn{min-height: 3.35rem;border-radius: 999px;padding: 0.95rem 1.45rem;backdrop-filter: blur(14px)}.marketing-btn--primary{color: #07111f;border-color: rgba(255,207,114,0.55);background: linear-gradient(135deg,#fff6c7,var(--launch-gold) 54%,#ff9b7e);box-shadow: 0 18px 48px rgba(255,207,114,0.26),inset 0 1px 0 rgba(255,255,255,0.7)}.marketing-btn--primary:hover,.marketing-btn--primary:focus{color: #07111f;box-shadow: 0 26px 64px rgba(255,207,114,0.36),inset 0 1px 0 rgba(255,255,255,0.7)}.marketing-btn--secondary{color: #fffaf7;border-color: rgba(255,255,255,0.24);background: rgba(255,255,255,0.09)}.marketing-btn--secondary:hover,.marketing-btn--secondary:focus{color: #fffaf7;border-color: rgba(255,207,114,0.48);background: rgba(255,255,255,0.14)}.hero-proof{display: grid;grid-template-columns: repeat(2,minmax(0,1fr));max-width: 36rem}.hero-proof div{max-width: none;border: 1px solid rgba(255,255,255,0.16);border-radius: 24px;padding: 1rem;background: rgba(255,255,255,0.08);box-shadow: none;backdrop-filter: blur(16px)}.hero-proof dt{color: var(--launch-gold)}.hero-proof dd{color: rgba(255,255,255,0.72)}.home-image-card,.features-screenshot{position: relative;border: 1px solid rgba(255,255,255,0.2);border-radius: 32px;background: linear-gradient(180deg,rgba(255,255,255,0.92),rgba(240,237,255,0.86));box-shadow: var(--launch-shadow);overflow: hidden}.home-hero-image,.features-screenshot--hero{z-index: 1;transform: rotateX(9deg) rotateY(-14deg) rotateZ(2deg) translateY(1rem);transform-origin: 50% 50%;box-shadow: 0 64px 140px rgba(0,0,0,0.48);animation: launchFloat 8s ease-in-out infinite}.features-screenshot--hero{margin-right: min(-6vw,-3rem);margin-left: 0}.home-image-card::after,.features-screenshot::after{content: "";position: absolute;inset: 0;background: linear-gradient(120deg,rgba(255,255,255,0.42),transparent 30%,transparent 70%,rgba(139,92,246,0.12));pointer-events: none}.problem-intro,.features-section__heading,.section-heading{text-align: left}.problem-intro{position: relative;margin-top: -3rem;padding: clamp(5rem,9vw,8rem) 0 1rem;color: var(--launch-ink)}.problem-intro .marketing-container{display: grid;gap: 1rem}.problem-intro h2,.section-heading h2{margin-inline: 0}.problem-section{position: relative;grid-template-columns: minmax(280px,0.82fr) minmax(0,1.18fr);gap: clamp(2rem,7vw,7rem);min-height: 560px;padding: clamp(4rem,9vw,8rem) 0}.problem-section--reverse{grid-template-columns: minmax(0,1.18fr) minmax(280px,0.82fr)}.problem-section:nth-child(even)::before,.features-section:nth-of-type(odd)::before{content: "";position: absolute;inset: 7% -7vw;z-index: -1;border-radius: 44px;background: radial-gradient(circle at 78% 10%,rgba(139,92,246,0.14),transparent 22rem),linear-gradient(135deg,rgba(7,15,36,0.04),rgba(255,207,114,0.08));transform: rotate(-1.4deg)}.problem-copy h3,.features-section__heading h2,.features-showcase__intro h2,.features-word h2,.founder-story h2,.section-heading h2{max-width: 12ch;font-size: clamp(3rem,6vw,6.5rem);line-height: 0.9}.problem-copy p,.features-section__heading p,.features-showcase__intro p,.features-word p,.public-narrative p,.public-card p,.comparison-grid p,.faq-grid p{max-width: 42rem;font-size: clamp(1rem,1.4vw,1.18rem)}.problem-visual{min-height: 420px;border-radius: 34px;box-shadow: 0 34px 90px rgba(7,17,31,0.17)}.problem-visual--image{padding: 1rem;background: linear-gradient(135deg,rgba(255,255,255,0.96),rgba(236,232,255,0.86)),#fff}.problem-visual--image .home-feature-image{border-radius: 24px;box-shadow: 0 30px 72px rgba(7,17,31,0.2)}.features-jump{margin-top: -3.4rem;padding: 0 0 clamp(3rem,6vw,5rem);background: transparent}.features-jump__grid{border: 1px solid rgba(255,255,255,0.18);border-radius: 30px;padding: 0.8rem;background: rgba(7,15,36,0.72);box-shadow: 0 26px 70px rgba(3,7,18,0.22);backdrop-filter: blur(18px)}.features-jump__grid a{color: #fffaf7;border-color: rgba(255,255,255,0.12);background: rgba(255,255,255,0.08)}.features-jump__grid a:hover,.features-jump__grid a:focus{color: #07111f;background: var(--launch-gold)}.features-section,.features-word,.pricing-plans,.pricing-compare,.pricing-faq,.social-proof,.public-about-page .public-content-section,.public-contact-page .public-content-section{position: relative;padding: clamp(5rem,10vw,9rem) 0;background: var(--launch-paper)}.features-section--soft,.features-word,.pricing-compare,.public-contact-page .public-content-section--soft,.founder-story{background: radial-gradient(circle at 20% 15%,rgba(255,207,114,0.14),transparent 28rem),radial-gradient(circle at 88% 20%,rgba(139,92,246,0.12),transparent 30rem),#f4f0ff}.features-showcase,.final-cta{position: relative;overflow: hidden;color: #fffaf7;background: radial-gradient(circle at 16% 18%,rgba(255,207,114,0.2),transparent 26rem),radial-gradient(circle at 88% 12%,rgba(139,92,246,0.38),transparent 30rem),linear-gradient(135deg,#040713,#071225 58%,#25104d)}.features-showcase h2,.features-showcase h3,.features-showcase .marketing-eyebrow,.final-cta h2,.final-cta .marketing-eyebrow{color: #fffaf7}.features-showcase .features-showcase__intro h2,.final-cta .marketing-eyebrow{color: var(--launch-gold)}.features-preview-pair,.features-collage{gap: clamp(1.5rem,4vw,3rem)}.features-preview-pair .features-screenshot:nth-child(1),.features-collage .features-screenshot:nth-child(1){transform: rotate(-1.5deg) translateY(1.4rem)}.features-preview-pair .features-screenshot:nth-child(2),.features-collage .features-screenshot:nth-child(2){transform: rotate(1.5deg) translateY(-1.4rem)}.feature-icon-card,.pricing-card,.comparison-grid article,.faq-grid article,.public-card,.testimonial-grid figure{border: 1px solid rgba(7,17,31,0.12);border-radius: 30px;padding: clamp(1.35rem,3vw,2rem);background: linear-gradient(145deg,rgba(255,255,255,0.96),rgba(246,240,255,0.78)),#fff;box-shadow: 0 24px 70px rgba(7,17,31,0.1)}.feature-icon-card:hover,.pricing-card:hover,.comparison-grid article:hover,.faq-grid article:hover,.public-card:hover,.testimonial-grid figure:hover{transform: translateY(-8px) rotate(-0.3deg);box-shadow: 0 36px 94px rgba(7,17,31,0.17)}.feature-icon-card > span{width: 4.4rem;height: 4.4rem;margin-bottom: 1.25rem;border-radius: 24px;color: #fff;font-size: 1.02rem;background: radial-gradient(circle at 20% 15%,rgba(255,255,255,0.5),transparent 36%),linear-gradient(135deg,var(--launch-electric),#2737d7 54%,var(--launch-coral));box-shadow: 0 20px 46px rgba(139,92,246,0.28)}.features-showcase .feature-icon-card{border-color: rgba(255,255,255,0.15);background: rgba(255,255,255,0.1);box-shadow: 0 28px 80px rgba(0,0,0,0.24);backdrop-filter: blur(16px)}.pricing-card-grid{gap: clamp(1rem,2.6vw,2rem)}.pricing-card{overflow: hidden}.pricing-card::after{content: "";position: absolute;inset: auto -20% -35% 28%;height: 12rem;background: radial-gradient(circle,rgba(139,92,246,0.18),transparent 68%)}.pricing-card--featured{transform: translateY(-1.3rem);border-color: rgba(139,92,246,0.45);box-shadow: 0 42px 110px rgba(139,92,246,0.18)}.pricing-badge,.pricing-badge--trial{color: #07111f;border-color: rgba(255,207,114,0.5);background: linear-gradient(135deg,#fff4bd,var(--launch-gold))}.public-about-page .public-narrative{max-width: 1020px}.public-about-page .public-narrative p{max-width: 52rem}.public-about-page .public-narrative p:nth-child(2),.public-about-page .public-narrative p:nth-child(4){margin-left: auto}.public-about-page .public-narrative strong{display: block;max-width: 12ch;color: var(--launch-ink);font-size: clamp(3.8rem,8vw,8rem);line-height: 0.9}.public-about-page .public-feature-panel{color: #fffaf7;border-color: rgba(255,255,255,0.15);background: radial-gradient(circle at 50% 0%,rgba(255,207,114,0.2),transparent 28rem),linear-gradient(135deg,#040713,#20104b)}.public-about-page .public-feature-panel h2{color: #fffaf7}.public-contact-page .public-card-grid{align-items: stretch;gap: clamp(1rem,3vw,2rem)}.public-contact-page .public-card:nth-child(2){transform: translateY(-2rem)}.public-contact-page .faq-grid article{background: rgba(255,255,255,0.88)}.public-footer{background: radial-gradient(circle at 16% 0%,rgba(139,92,246,0.3),transparent 22rem),linear-gradient(135deg,#040713,#071225)}.marketing-home{--launch-paper: #fffaf0;--launch-paper-warm: #f7efe2;--launch-paper-soft: #fff6e8;--launch-dark-text: #fffaf7;--launch-dark-muted: #d9e1f2;--launch-dark-subtle: #bfcbe0;--launch-link-bright: #ffe19a;background: radial-gradient(circle at 50% -8%,rgba(255,207,114,0.2),transparent 32rem),radial-gradient(circle at 92% 18%,rgba(14,42,102,0.3),transparent 36rem),linear-gradient(180deg,#040713 0%,#071225 32%,var(--launch-paper) 32.1%,var(--launch-paper) 100%)}.marketing-home .marketing-eyebrow,.marketing-hero .marketing-eyebrow,.features-hero .marketing-eyebrow,.pricing-hero .marketing-eyebrow,.public-about-page .public-hero .marketing-eyebrow,.public-contact-page .public-hero .marketing-eyebrow,.features-showcase .marketing-eyebrow,.final-cta .marketing-eyebrow{color: var(--launch-link-bright)}.marketing-hero,.features-hero,.pricing-hero,.public-about-page .public-hero,.public-contact-page .public-hero,.features-showcase,.final-cta{color: var(--launch-dark-text)}.marketing-hero h1,.features-hero h1,.pricing-hero h1,.public-about-page .public-hero h1,.public-contact-page .public-hero h1,.features-showcase h2,.features-showcase h3,.final-cta h2{color: var(--launch-dark-text);text-shadow: 0 18px 56px rgba(0,0,0,0.42)}.marketing-hero .marketing-lead,.features-hero .marketing-lead,.pricing-hero .marketing-lead,.public-about-page .public-hero .marketing-lead,.public-contact-page .public-hero .marketing-lead,.features-showcase__intro p,.features-showcase .feature-icon-card p,.features-did-you-know p,.final-cta p,.features-page .final-cta small{color: var(--launch-dark-muted)}.features-showcase a,.final-cta a{color: var(--launch-link-bright)}.marketing-btn--secondary{color: var(--launch-dark-text);border-color: rgba(255,250,247,0.42);background: rgba(255,250,247,0.13)}.marketing-btn--secondary:hover,.marketing-btn--secondary:focus{color: #07111f;border-color: rgba(255,225,154,0.9);background: var(--launch-link-bright)}.features-showcase .feature-icon-card,.final-cta__inner{border-color: rgba(255,250,247,0.2);background: rgba(255,250,247,0.11)}.features-showcase .feature-icon-card h3,.features-showcase .features-showcase__intro h2{color: var(--launch-dark-text)}.features-did-you-know{border-color: rgba(255,225,154,0.45);background: rgba(255,250,247,0.11)}.features-did-you-know strong{color: var(--launch-link-bright)}.home-image-card,.features-screenshot{background: linear-gradient(180deg,rgba(255,252,245,0.96),rgba(247,239,226,0.9))}.features-section,.features-word,.pricing-plans,.pricing-compare,.pricing-faq,.social-proof,.public-about-page .public-content-section,.public-contact-page .public-content-section{background: var(--launch-paper)}.features-section--soft,.features-word,.pricing-compare,.public-contact-page .public-content-section--soft,.founder-story{background: radial-gradient(circle at 18% 12%,rgba(255,207,114,0.15),transparent 28rem),radial-gradient(circle at 88% 22%,rgba(7,18,37,0.06),transparent 30rem),var(--launch-paper-warm)}.problem-section:nth-child(even)::before,.features-section:nth-of-type(odd)::before{background: radial-gradient(circle at 78% 10%,rgba(255,207,114,0.12),transparent 22rem),linear-gradient(135deg,rgba(7,15,36,0.045),rgba(255,207,114,0.08))}.problem-visual--image,.feature-icon-card,.pricing-card,.comparison-grid article,.faq-grid article,.public-card,.testimonial-grid figure{background: linear-gradient(145deg,rgba(255,253,248,0.98),rgba(247,239,226,0.88)),#fffaf0}.feature-icon-card p,.pricing-card__heading p,.pricing-price span,.pricing-price small,.comparison-grid p,.faq-grid p,.public-card p,.public-narrative p{color: #53606f}.features-section__heading h2,.features-word h2,.problem-copy h3,.section-heading h2,.pricing-card h3,.comparison-grid h3,.faq-grid h3,.public-card h2,.public-about-page .public-narrative strong{color: var(--launch-ink)}@keyframes launchFloat{0%,100%{transform: rotateX(9deg) rotateY(-14deg) rotateZ(2deg) translateY(1rem)}50%{transform: rotateX(7deg) rotateY(-11deg) rotateZ(1deg) translateY(-0.5rem)}}.reveal-section{opacity: 0;transform: translateY(24px);transition: opacity 0.72s ease,transform 0.72s ease}.marketing-hero.reveal-section,.features-hero.reveal-section,.pricing-hero.reveal-section,.public-hero.reveal-section,.help-centre-hero.reveal-section{opacity: 1;transform: none}.reveal-section.is-visible{opacity: 1;transform: translateY(0)}@keyframes productFloat{0%,100%{transform: rotate(1deg) translateY(0)}50%{transform: rotate(1deg) translateY(-12px)}}@media (prefers-reduced-motion: reduce){.hero-product,.reveal-section,.feature-icon-card,.pricing-card,.comparison-grid article,.faq-grid article,.public-card,.testimonial-grid figure,.help-centre-page .plain-card{animation: none;transition: none}.reveal-section{opacity: 1;transform: none}}@media (max-width: 1060px){.marketing-hero__grid,.features-hero__grid,.features-word__grid,.features-split,.features-preview-pair,.features-collage,.problem-section,.founder-story__grid{grid-template-columns: 1fr}.marketing-home h1{max-width: 13ch}.hero-product{transform: none;animation: none}.problem-section--reverse .problem-visual{order: 0}.testimonial-grid{grid-template-columns: 1fr}.comparison-grid,.faq-grid,.public-card-grid{grid-template-columns: 1fr}}@media (max-width: 760px){.marketing-container{width: min(100% - 24px,1180px)}.marketing-home{margin-top: -0.75rem}.marketing-hero{padding-top: 1.8rem}.marketing-actions,.marketing-actions .marketing-btn{width: 100%}.product-mockup{grid-template-columns: 1fr;min-height: 0}.product-sidebar{display: flex;gap: 0.4rem;overflow-x: auto;border-right: 0;border-bottom: 1px solid rgba(31,42,68,0.1)}.product-sidebar strong{flex: 0 0 auto;margin: 0 0.4rem 0 0}.product-sidebar span{flex: 0 0 auto}.product-topline,.hero-proof{display: grid}.hero-proof{grid-template-columns: repeat(2,minmax(0,1fr));gap: 0.65rem}.hero-proof div{display: block}.hero-proof dt{font-size: 1.8rem}.hero-proof dd{font-size: 0.86rem}.product-grid{grid-template-columns: 1fr}.writer-workspace{display: grid;gap: 0.75rem;min-height: 0;transform: none;animation: none}.writer-workspace::before{display: none}.workspace-manuscript,.workspace-card,.workspace-progress{position: relative;inset: auto;width: auto}.workspace-manuscript{min-height: 0}.workspace-progress{flex-direction: column;height: auto;border-radius: 18px}.mock-chart{min-height: 145px}.problem-section{min-height: 0;padding: 2.25rem 0}.problem-visual{min-height: 260px;border-radius: 18px}.visual-plot,.visual-series,.visual-threads{grid-template-columns: repeat(2,1fr);padding: 1rem}.visual-series span{min-height: 7.5rem}.visual-docs span,.visual-notes span{max-width: 12rem;font-size: 0.88rem}.founder-mark{max-width: 220px}.pricing-hero{padding-top: 1.8rem}.pricing-card-grid{grid-template-columns: 1fr}.public-hero{padding-top: 1.8rem}.public-footer__inner{align-items: flex-start;flex-direction: column}.public-footer__nav{justify-content: flex-start}}@media (max-width: 520px){.marketing-home h1{font-size: clamp(2.7rem,13vw,3.55rem);line-height: 1}.browser-frame{border-radius: 16px}.product-sidebar span:not(.is-active){display: none}.visual-flow span{font-size: 0.78rem}.person{width: 4.3rem;height: 4.3rem}}@media (max-width: 1200px){.timeline-filter-grid{grid-template-columns: repeat(auto-fit,minmax(150px,1fr))}.timeline-control-panel{align-items: stretch}.relationship-map-controls{grid-template-columns: repeat(2,minmax(150px,1fr))}.relationship-map-workspace{grid-template-columns: 1fr}.relationship-map-details{position: static;max-height: none}}@media (max-width: 760px){.workspace-heading,.page-heading,.context-header{align-items: stretch;flex-direction: column}.button-row{align-items: stretch}.button-row .btn,.button-row form{width: 100%}.attachment-preview-row{grid-template-columns: 1fr}.attachment-thumb{width: 100%;max-width: 260px}}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta),.public-about-page .public-hero,.public-contact-page .public-hero,.public-footer{color: #fffaf7}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) :where(h1,h2,h3,h4),.public-about-page .public-hero :where(h1,h2,h3,h4),.public-contact-page .public-hero :where(h1,h2,h3,h4),.public-footer :where(h1,h2,h3,h4,.public-footer__brand){color: #fffaf7 !important}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) :where(p,li,dd),.public-about-page .public-hero :where(p,li),.public-contact-page .public-hero :where(p,li),.public-footer :where(p,li,span){color: rgba(255,255,255,0.82) !important}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) :where(small,figcaption),.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) :where(.muted,.marketing-lead),.public-about-page .public-hero :where(.marketing-lead,small,.muted),.public-contact-page .public-hero :where(.marketing-lead,small,.muted),.public-footer__nav a{color: rgba(255,255,255,0.72) !important}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) .marketing-eyebrow,.public-about-page .public-hero .marketing-eyebrow,.public-contact-page .public-hero .marketing-eyebrow{color: #ffe19a !important}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) a:not(.marketing-btn),.public-about-page .public-hero a:not(.marketing-btn),.public-contact-page .public-hero a:not(.marketing-btn),.public-footer a{color: #ffe19a;text-decoration-color: rgba(255,225,154,0.55)}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) a:not(.marketing-btn):hover,.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) a:not(.marketing-btn):focus,.public-about-page .public-hero a:not(.marketing-btn):hover,.public-about-page .public-hero a:not(.marketing-btn):focus,.public-contact-page .public-hero a:not(.marketing-btn):hover,.public-contact-page .public-hero a:not(.marketing-btn):focus,.public-footer a:hover,.public-footer a:focus{color: #ffffff;text-decoration-color: rgba(255,255,255,0.72)}.features-showcase .feature-icon-card h3,.features-showcase .feature-icon-card strong,.features-showcase .features-did-you-know strong,.final-cta__inner h2{color: #fffaf7 !important}.features-showcase .feature-icon-card p,.features-showcase .feature-icon-card span,.features-showcase .features-did-you-know p,.final-cta__inner p,.final-cta__inner small{color: rgba(255,255,255,0.76) !important}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) .marketing-btn--secondary{color: #fffaf7;border-color: rgba(255,255,255,0.44);background: rgba(255,255,255,0.14)}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) .marketing-btn--secondary:hover,.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) .marketing-btn--secondary:focus{color: #07111f;border-color: #ffe19a;background: #ffe19a}.features-hero .features-hero__highlights article{border-color: rgba(255,255,255,0.2);background: rgba(255,255,255,0.12)}.features-hero .features-hero__highlights article strong,.features-hero .features-hero__highlights article h3,.features-hero .features-hero__highlights article h4{color: #ffffff !important}.features-hero .features-hero__highlights article span,.features-hero .features-hero__highlights article p,.features-hero .features-hero__highlights article small{color: rgba(255,255,255,0.78) !important}.marketing-home-page .problem-intro,.marketing-home-page .problem-stack,.marketing-home-page .problem-section,.marketing-home-page .problem-copy{color: #ffffff}.marketing-home-page .problem-intro :where(h1,h2,h3,h4),.marketing-home-page .problem-stack :where(h1,h2,h3,h4),.marketing-home-page .problem-section :where(h1,h2,h3,h4),.marketing-home-page .problem-copy :where(h1,h2,h3,h4){color: #ffffff !important}.marketing-home-page .problem-intro :where(p,li,span),.marketing-home-page .problem-stack :where(p,li,span),.marketing-home-page .problem-section :where(p,li,span),.marketing-home-page .problem-copy :where(p,li,span),.marketing-home-page .problem-copy p:not(.marketing-eyebrow){color: rgba(255,255,255,0.84) !important}.marketing-home-page .problem-intro :where(small,.muted),.marketing-home-page .problem-stack :where(small,.muted),.marketing-home-page .problem-section :where(small,.muted),.marketing-home-page .problem-copy :where(small,.muted){color: rgba(255,255,255,0.7) !important}.marketing-home-page .problem-intro .marketing-eyebrow,.marketing-home-page .problem-stack .marketing-eyebrow,.marketing-home-page .problem-section .marketing-eyebrow,.marketing-home-page .problem-copy .marketing-eyebrow{color: #ffe19a !important}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero) .marketing-lead,.features-hero .features-hero__highlights article span,.marketing-home :where(.features-showcase,.final-cta) p:not(.marketing-eyebrow),.features-showcase .features-showcase__intro p:not(.marketing-eyebrow),.features-showcase .feature-icon-card p,.final-cta__inner p,.marketing-home-page .problem-copy p:not(.marketing-eyebrow),.marketing-home-page .problem-intro p:not(.marketing-eyebrow){color: rgba(255,255,255,0.84) !important}.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.features-showcase,.final-cta) small,.features-page .final-cta small,.final-cta__inner small{color: rgba(255,255,255,0.7) !important}.marketing-home-page :where(.problem-intro,.problem-stack,.problem-section,.problem-copy){color: #07111f}.marketing-home-page :where(.problem-intro,.problem-stack,.problem-section,.problem-copy) :where(h1,h2,h3,h4){color: #07111f !important}.marketing-home-page :where(.problem-intro,.problem-stack,.problem-section,.problem-copy) :where(p,li,span),.marketing-home-page .problem-copy p:not(.marketing-eyebrow),.marketing-home-page .problem-intro p:not(.marketing-eyebrow){color: #53606f !important}.marketing-home-page :where(.problem-intro,.problem-stack,.problem-section,.problem-copy) :where(small,.muted){color: #667085 !important}.marketing-home-page :where(.problem-intro,.problem-stack,.problem-section,.problem-copy) .marketing-eyebrow{color: #7b4b13 !important}.marketing-home-page .problem-intro h1,.marketing-home-page .problem-intro h2,.marketing-home-page .problem-intro h3,.marketing-home-page .problem-stack .problem-copy h1,.marketing-home-page .problem-stack .problem-copy h2,.marketing-home-page .problem-stack .problem-copy h3,.marketing-home-page .problem-stack .problem-copy h4,.marketing-home-page .problem-section .problem-copy h1,.marketing-home-page .problem-section .problem-copy h2,.marketing-home-page .problem-section .problem-copy h3,.marketing-home-page .problem-section .problem-copy h4{color: #07111f !important}.marketing-home-page .problem-intro .marketing-eyebrow,.marketing-home-page .problem-stack .problem-copy .marketing-eyebrow,.marketing-home-page .problem-section .problem-copy .marketing-eyebrow{color: #7b4b13 !important}.marketing-home-page .problem-intro h1,.marketing-home-page .problem-intro h2,.marketing-home-page .problem-intro h3,.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy h1,.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy h2,.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy h3,.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy h4{color: #ffffff !important}.marketing-home-page .problem-intro p:not(.marketing-eyebrow),.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy p:not(.marketing-eyebrow){color: rgba(255,255,255,0.84) !important}.marketing-home-page .problem-intro .marketing-eyebrow,.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-copy .marketing-eyebrow{color: #ffe19a !important}.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-visual span,.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-visual strong,.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-visual p,.marketing-home-page .problem-stack .problem-section:nth-child(-n+2) .problem-visual small{color: #07111f !important}.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy h1,.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy h2,.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy h3,.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy h4{color: #07111f !important}.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy p:not(.marketing-eyebrow){color: #53606f !important}.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-copy .marketing-eyebrow{color: #7b4b13 !important}.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-visual span,.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-visual strong,.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-visual p,.marketing-home-page .problem-stack .problem-section:nth-child(n+3) .problem-visual small{color: #07111f !important}.marketing-home :where( .features-jump,.features-section,.features-word,.features-faq,.pricing-plans,.pricing-compare,.pricing-faq,.founder-story,.social-proof,.public-content-section,.public-mission ) .marketing-eyebrow{color: #7b4b13 !important}.marketing-home :where(h1,h2,h3){max-width: 100%;overflow-wrap: break-word;text-wrap: balance}.marketing-home :where(.marketing-hero,.features-hero) h1{font-size: clamp(3.25rem,5.8vw,5.9rem);line-height: 0.92}.marketing-home-page .marketing-hero h1{max-width: 12.5ch;font-size: clamp(3.1rem,4.8vw,5.25rem)}.features-hero h1{max-width: 9.5ch}.pricing-hero h1,.public-hero h1{max-width: 13ch;font-size: clamp(3.2rem,6.4vw,6.7rem);line-height: 0.9}.problem-intro h2,.problem-copy h3,.features-section__heading h2,.features-word h2,.section-heading h2,.public-mission h2{font-size: clamp(2.35rem,4.3vw,4.7rem);line-height: 0.94}.features-split__copy h3,.pricing-card h3,.comparison-grid h3,.faq-grid h3,.public-card h2,.public-policy h2{font-size: clamp(1.45rem,2vw,1.9rem);line-height: 1.08}.marketing-home .feature-icon-card h3{font-size: clamp(1.02rem,1.2vw,1.18rem);line-height: 1.16;overflow-wrap: anywhere;text-wrap: wrap}@media (max-width: 1060px){.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.public-hero) h1{max-width: 12ch;font-size: clamp(3rem,9vw,5rem)}.problem-intro h2,.problem-copy h3,.features-section__heading h2,.features-word h2,.section-heading h2,.public-mission h2{font-size: clamp(2.25rem,7vw,4.2rem)}}@media (max-width: 760px){.marketing-home :where(.marketing-hero,.features-hero,.pricing-hero,.public-hero) h1{max-width: 11ch;font-size: clamp(2.65rem,12vw,3.7rem);line-height: 0.96}.problem-intro h2,.problem-copy h3,.features-section__heading h2,.features-word h2,.section-heading h2,.public-mission h2{font-size: clamp(2rem,10vw,3.2rem);line-height: 0.98}} \ No newline at end of file From 2c7786e784f8b05af62caec5605d779d0fb2b2f7 Mon Sep 17 00:00:00 2001 From: Nick Beckley Date: Fri, 3 Jul 2026 14:18:38 +0100 Subject: [PATCH 3/4] Fixed drop down list sorting --- PlotLine/Models/WordCompanionApiModels.cs | 1 + .../109_DropdownListOrderingConsistency.sql | 244 ++++++++++++++++++ .../Sql/110_LocationLeafNameListOrdering.sql | 21 ++ PlotLine/wwwroot/js/word-companion-host.js | 5 + .../wwwroot/js/word-companion-host.min.js | 2 +- 5 files changed, 272 insertions(+), 1 deletion(-) create mode 100644 PlotLine/Sql/109_DropdownListOrderingConsistency.sql create mode 100644 PlotLine/Sql/110_LocationLeafNameListOrdering.sql diff --git a/PlotLine/Models/WordCompanionApiModels.cs b/PlotLine/Models/WordCompanionApiModels.cs index 99884c5..835a55a 100644 --- a/PlotLine/Models/WordCompanionApiModels.cs +++ b/PlotLine/Models/WordCompanionApiModels.cs @@ -16,6 +16,7 @@ public sealed class WordCompanionBookDto public int BookId { get; set; } public string Title { get; set; } = string.Empty; public string? Subtitle { get; set; } + public string DisplayTitle => BookTitleFormatter.DisplayTitle(Title, Subtitle); public int SortOrder { get; set; } public bool UsesExplicitScenes { get; set; } } diff --git a/PlotLine/Sql/109_DropdownListOrderingConsistency.sql b/PlotLine/Sql/109_DropdownListOrderingConsistency.sql new file mode 100644 index 0000000..2f3e089 --- /dev/null +++ b/PlotLine/Sql/109_DropdownListOrderingConsistency.sql @@ -0,0 +1,244 @@ +SET ANSI_NULLS ON; +GO +SET QUOTED_IDENTIFIER ON; +GO + +CREATE OR ALTER PROCEDURE dbo.StoryAsset_ListByProject + @ProjectID int +AS +BEGIN + SET NOCOUNT ON; + + CREATE TABLE #ProjectLocationPaths + ( + LocationID int NOT NULL PRIMARY KEY, + LocationName nvarchar(200) NOT NULL, + LocationPath nvarchar(max) NOT NULL + ); + + ;WITH ProjectLocationTree AS + ( + SELECT LocationID, LocationName, CAST(LocationName AS nvarchar(max)) AS LocationPath + FROM dbo.Locations + WHERE ProjectID = @ProjectID AND ParentLocationID IS NULL AND IsArchived = 0 + + UNION ALL + + SELECT child.LocationID, child.LocationName, CAST(parent.LocationPath + N' > ' + child.LocationName AS nvarchar(max)) AS LocationPath + FROM dbo.Locations child + INNER JOIN ProjectLocationTree parent ON parent.LocationID = child.ParentLocationID + WHERE child.ProjectID = @ProjectID AND child.IsArchived = 0 + ) + INSERT #ProjectLocationPaths (LocationID, LocationName, LocationPath) + SELECT LocationID, LocationName, LocationPath + FROM ProjectLocationTree; + + SELECT sa.StoryAssetID, sa.ProjectID, sa.AssetName, sa.AssetKindID, ak.KindName, sa.Description, sa.Importance, + sa.CurrentStateID, ast.StateName AS CurrentStateName, sa.CurrentLocationID, + location.LocationName AS CurrentLocationName, location.LocationPath AS CurrentLocationPath, + sa.IsResolved, sa.ShowInQuickAddBar, sa.ImagePath, sa.ThumbnailPath, sa.CreatedDate, sa.UpdatedDate, sa.IsArchived + FROM dbo.StoryAssets sa + INNER JOIN dbo.AssetKinds ak ON ak.AssetKindID = sa.AssetKindID + LEFT JOIN dbo.AssetStates ast ON ast.AssetStateID = sa.CurrentStateID + LEFT JOIN #ProjectLocationPaths location ON location.LocationID = sa.CurrentLocationID + WHERE sa.ProjectID = @ProjectID + AND sa.IsArchived = 0 + ORDER BY sa.AssetName, sa.StoryAssetID; +END; +GO + +CREATE OR ALTER PROCEDURE dbo.AssetTimeline_GetByProject + @ProjectID int, + @BookID int = NULL +AS +BEGIN + SET NOCOUNT ON; + + SELECT sa.StoryAssetID, sa.ProjectID, sa.AssetName, sa.AssetKindID, ak.KindName, sa.Description, sa.Importance, + sa.CurrentStateID, ast.StateName AS CurrentStateName, sa.CurrentLocationID, sa.IsResolved, + sa.ShowInQuickAddBar, sa.CreatedDate, sa.UpdatedDate, sa.IsArchived + FROM dbo.StoryAssets sa + INNER JOIN dbo.AssetKinds ak ON ak.AssetKindID = sa.AssetKindID + LEFT JOIN dbo.AssetStates ast ON ast.AssetStateID = sa.CurrentStateID + WHERE sa.ProjectID = @ProjectID AND sa.IsArchived = 0 AND (sa.Importance >= 5 OR sa.IsResolved = 0) + ORDER BY sa.AssetName, sa.StoryAssetID; + + SELECT ae.AssetEventID, ae.StoryAssetID, sa.ProjectID, sa.AssetName, sa.AssetKindID, ak.KindName, + ae.SceneID, ae.AssetEventTypeID, aet.TypeName AS AssetEventTypeName, aet.MarkerText, + ae.FromStateID, fs.StateName AS FromStateName, ae.ToStateID, ts.StateName AS ToStateName, + ae.EventTitle, ae.EventDescription, b.BookTitle, b.Subtitle AS BookSubtitle, + c.ChapterNumber, s.SceneNumber, s.SceneTitle, ae.CreatedDate, ae.UpdatedDate + FROM dbo.AssetEvents ae + INNER JOIN dbo.StoryAssets sa ON sa.StoryAssetID = ae.StoryAssetID + INNER JOIN dbo.AssetKinds ak ON ak.AssetKindID = sa.AssetKindID + INNER JOIN dbo.AssetEventTypes aet ON aet.AssetEventTypeID = ae.AssetEventTypeID + INNER JOIN dbo.Scenes s ON s.SceneID = ae.SceneID + INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID + INNER JOIN dbo.Books b ON b.BookID = c.BookID + LEFT JOIN dbo.AssetStates fs ON fs.AssetStateID = ae.FromStateID + LEFT JOIN dbo.AssetStates ts ON ts.AssetStateID = ae.ToStateID + WHERE sa.ProjectID = @ProjectID AND sa.IsArchived = 0 AND (@BookID IS NULL OR b.BookID = @BookID) + ORDER BY b.SortOrder, b.BookNumber, c.SortOrder, c.ChapterNumber, s.SortOrder, s.SceneNumber, sa.AssetName, ae.AssetEventID; +END; +GO + +CREATE OR ALTER PROCEDURE dbo.Location_ListByProject + @ProjectID int +AS +BEGIN + SET NOCOUNT ON; + + SELECT lp.LocationID, lp.ProjectID, lp.ParentLocationID, lp.LocationName, lp.LocationTypeID, lt.TypeName AS LocationTypeName, + lp.Description, lp.ShowInQuickAddBar, lp.ExcludeFromCompanionDetection, lp.DetectionPriority, + lp.LocationPath, lp.Depth, l.CreatedDate, l.UpdatedDate, l.IsArchived + FROM dbo.LocationPaths lp + INNER JOIN dbo.Locations l ON l.LocationID = lp.LocationID + LEFT JOIN dbo.LocationTypes lt ON lt.LocationTypeID = lp.LocationTypeID + WHERE lp.ProjectID = @ProjectID + ORDER BY lp.LocationPath, lp.LocationID; +END; +GO + +CREATE OR ALTER PROCEDURE dbo.PlotThread_ListByProject + @ProjectID int +AS +BEGIN + SET NOCOUNT ON; + + SELECT pt.PlotThreadID, pt.PlotLineID, pl.ProjectID, pl.PlotLineName, pt.ThreadTitle, + pt.ThreadTypeID, tt.TypeName AS ThreadTypeName, pt.ThreadStatusID, ts.StatusName AS ThreadStatusName, + pt.Importance, pt.Summary, pt.IntroducedSceneID, pt.PlannedResolutionSceneID, pt.ActualResolutionSceneID, + pt.CreatedDate, pt.UpdatedDate, pt.IsArchived + FROM dbo.PlotThreads pt + INNER JOIN dbo.PlotLines pl ON pl.PlotLineID = pt.PlotLineID + INNER JOIN dbo.ThreadTypes tt ON tt.ThreadTypeID = pt.ThreadTypeID + INNER JOIN dbo.ThreadStatuses ts ON ts.ThreadStatusID = pt.ThreadStatusID + WHERE pl.ProjectID = @ProjectID AND pl.IsArchived = 0 AND pt.IsArchived = 0 + ORDER BY pt.ThreadTitle, pl.PlotLineName, pt.PlotThreadID; +END; +GO + +CREATE OR ALTER PROCEDURE dbo.PlotThread_ListByPlotLine + @PlotLineID int +AS +BEGIN + SET NOCOUNT ON; + + SELECT pt.PlotThreadID, pt.PlotLineID, pl.ProjectID, pl.PlotLineName, pt.ThreadTitle, + pt.ThreadTypeID, tt.TypeName AS ThreadTypeName, pt.ThreadStatusID, ts.StatusName AS ThreadStatusName, + pt.Importance, pt.Summary, pt.IntroducedSceneID, pt.PlannedResolutionSceneID, pt.ActualResolutionSceneID, + pt.CreatedDate, pt.UpdatedDate, pt.IsArchived + FROM dbo.PlotThreads pt + INNER JOIN dbo.PlotLines pl ON pl.PlotLineID = pt.PlotLineID + INNER JOIN dbo.ThreadTypes tt ON tt.ThreadTypeID = pt.ThreadTypeID + INNER JOIN dbo.ThreadStatuses ts ON ts.ThreadStatusID = pt.ThreadStatusID + WHERE pt.PlotLineID = @PlotLineID AND pt.IsArchived = 0 + ORDER BY pt.ThreadTitle, pt.PlotThreadID; +END; +GO + +CREATE OR ALTER PROCEDURE dbo.WordCompanion_Book_ListByProject + @ProjectID int, + @UserID int +AS +BEGIN + SET NOCOUNT ON; + + IF NOT EXISTS + ( + SELECT 1 + FROM dbo.ProjectUserAccess pua + INNER JOIN dbo.Projects p ON p.ProjectID = pua.ProjectID + WHERE pua.ProjectID = @ProjectID + AND pua.UserID = @UserID + AND pua.IsActive = 1 + AND p.IsArchived = 0 + ) + RETURN; + + SELECT b.BookID AS BookId, + b.BookTitle AS Title, + b.Subtitle, + b.SortOrder, + b.UsesExplicitScenes + FROM dbo.Books b + WHERE b.ProjectID = @ProjectID + AND b.IsArchived = 0 + ORDER BY b.SortOrder, b.BookNumber, b.BookTitle, b.Subtitle, b.BookID; +END; +GO + +CREATE OR ALTER PROCEDURE dbo.WordCompanion_Book_Structure + @BookID int, + @UserID int +AS +BEGIN + SET NOCOUNT ON; + + IF NOT EXISTS + ( + SELECT 1 + FROM dbo.Books b + INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID + INNER JOIN dbo.ProjectUserAccess pua ON pua.ProjectID = p.ProjectID + WHERE b.BookID = @BookID + AND b.IsArchived = 0 + AND p.IsArchived = 0 + AND pua.UserID = @UserID + AND pua.IsActive = 1 + ) + RETURN; + + SELECT @BookID AS BookId; + + SELECT c.ChapterID AS ChapterId, c.ChapterTitle AS Title, c.SortOrder + FROM dbo.Chapters c + WHERE c.BookID = @BookID + AND c.IsArchived = 0 + ORDER BY c.SortOrder, c.ChapterNumber, c.ChapterTitle, c.ChapterID; + + SELECT s.ChapterID AS ChapterId, s.SceneID AS SceneId, s.SceneTitle AS Title, s.SortOrder, + rs.StatusName AS RevisionStatus, + sw.EstimatedWordCount AS EstimatedWords, + sw.ActualWordCount AS ActualWords + FROM dbo.Scenes s + INNER JOIN dbo.Chapters c ON c.ChapterID = s.ChapterID + INNER JOIN dbo.RevisionStatuses rs ON rs.RevisionStatusID = s.RevisionStatusID + LEFT JOIN dbo.SceneWorkflow sw ON sw.SceneID = s.SceneID + WHERE c.BookID = @BookID + AND c.IsArchived = 0 + AND s.IsArchived = 0 + ORDER BY c.SortOrder, c.ChapterNumber, s.SortOrder, s.SceneNumber, s.SceneTitle, s.SceneID; +END; +GO + +CREATE OR ALTER PROCEDURE dbo.WordCompanion_Chapter_List + @BookID int, + @UserID int +AS +BEGIN + SET NOCOUNT ON; + + IF NOT EXISTS + ( + SELECT 1 + FROM dbo.Books b + INNER JOIN dbo.Projects p ON p.ProjectID = b.ProjectID + INNER JOIN dbo.ProjectUserAccess pua ON pua.ProjectID = p.ProjectID + WHERE b.BookID = @BookID + AND b.IsArchived = 0 + AND p.IsArchived = 0 + AND pua.UserID = @UserID + AND pua.IsActive = 1 + ) + RETURN; + + SELECT c.ChapterID AS ChapterId, + c.ChapterTitle AS Title, + c.SortOrder + FROM dbo.Chapters c + WHERE c.BookID = @BookID + AND c.IsArchived = 0 + ORDER BY c.SortOrder, c.ChapterNumber, c.ChapterTitle, c.ChapterID; +END; +GO diff --git a/PlotLine/Sql/110_LocationLeafNameListOrdering.sql b/PlotLine/Sql/110_LocationLeafNameListOrdering.sql new file mode 100644 index 0000000..540b674 --- /dev/null +++ b/PlotLine/Sql/110_LocationLeafNameListOrdering.sql @@ -0,0 +1,21 @@ +SET ANSI_NULLS ON; +GO +SET QUOTED_IDENTIFIER ON; +GO + +CREATE OR ALTER PROCEDURE dbo.Location_ListByProject + @ProjectID int +AS +BEGIN + SET NOCOUNT ON; + + SELECT lp.LocationID, lp.ProjectID, lp.ParentLocationID, lp.LocationName, lp.LocationTypeID, lt.TypeName AS LocationTypeName, + lp.Description, lp.ShowInQuickAddBar, lp.ExcludeFromCompanionDetection, lp.DetectionPriority, + lp.LocationPath, lp.Depth, l.CreatedDate, l.UpdatedDate, l.IsArchived + FROM dbo.LocationPaths lp + INNER JOIN dbo.Locations l ON l.LocationID = lp.LocationID + LEFT JOIN dbo.LocationTypes lt ON lt.LocationTypeID = lp.LocationTypeID + WHERE lp.ProjectID = @ProjectID + ORDER BY lp.LocationName, lp.LocationPath, lp.LocationID; +END; +GO diff --git a/PlotLine/wwwroot/js/word-companion-host.js b/PlotLine/wwwroot/js/word-companion-host.js index d1da24b..8a98a9d 100644 --- a/PlotLine/wwwroot/js/word-companion-host.js +++ b/PlotLine/wwwroot/js/word-companion-host.js @@ -1132,6 +1132,11 @@ }; const bookDisplayTitle = (book) => { + const displayTitle = String(book?.displayTitle || "").trim(); + if (displayTitle) { + return displayTitle; + } + const title = String(book?.title || "").trim(); const subtitle = String(book?.subtitle || "").trim(); return subtitle ? `${title}: ${subtitle}` : title; diff --git a/PlotLine/wwwroot/js/word-companion-host.min.js b/PlotLine/wwwroot/js/word-companion-host.min.js index 7c94a5e..61add68 100644 --- a/PlotLine/wwwroot/js/word-companion-host.min.js +++ b/PlotLine/wwwroot/js/word-companion-host.min.js @@ -1 +1 @@ -(()=>{const e="plotdirector.word.projectId",t="plotdirector.word.bookId",n="plotdirector.word.activeTab",r={documentGuid:"plotdirector.word.documentGuid",bookId:"plotdirector.word.boundBookId",projectId:"plotdirector.word.boundProjectId",bindingVersion:"plotdirector.word.bindingVersion"},o=new Set(["scene","review","maintenance","diagnostics"]),a=document.querySelector(".word-companion-shell"),c=document.querySelector(".word-companion-tabs"),i=[...document.querySelectorAll("[data-tab-button]")],s=[...document.querySelectorAll("[data-tab-panel]")],d=document.querySelector("[data-linked-manuscript-card]"),l=document.querySelector("[data-linked-project-title]"),u=document.querySelector("[data-linked-book-title]"),p=document.querySelector("[data-first-run-wizard]"),h=document.querySelector("[data-first-run-project-select]"),m=document.querySelector("[data-first-run-book-select]"),y=document.querySelector("[data-first-run-new-book-title]"),g=document.querySelector("[data-first-run-create-book]"),f=document.querySelector("[data-first-run-scan]"),w=document.querySelector("[data-first-run-cancel]"),I=document.querySelector("[data-first-run-status]"),S=document.querySelector("[data-first-run-summary]"),b=document.querySelector("[data-first-run-character-section]"),C=document.querySelector("[data-first-run-character-status]"),k=document.querySelector("[data-first-run-character-candidates]"),v=document.querySelector("[data-first-run-character-actions]"),x=document.querySelector("[data-first-run-create-characters]"),N=document.querySelector("[data-first-run-skip-characters]"),E=document.querySelector("[data-first-run-continue]"),L=document.querySelector("[data-first-run-import-actions]"),P=document.querySelector("[data-first-run-import]"),q=document.querySelector("[data-first-run-import-cancel]"),D=document.querySelector("[data-first-run-replace-dialog]"),A=document.querySelector("[data-first-run-replace-confirm]"),$=document.querySelector("[data-first-run-replace-cancel]"),T=document.querySelector("[data-unlink-word-document-dialog]"),j=document.querySelector("[data-unlink-word-document-confirm]"),W=document.querySelector("[data-unlink-word-document-cancel]"),R=document.querySelector("[data-office-status]"),U=document.querySelector("[data-connection-status]"),M=document.querySelector("[data-summary-connection]"),O=document.querySelector("[data-summary-project]"),B=document.querySelector("[data-summary-book]"),G=document.querySelector("[data-project-select]"),H=document.querySelector("[data-book-select]"),F=document.querySelector("[data-runtime-book-selectors]"),V=document.querySelector("[data-project-message]"),Y=document.querySelector("[data-book-message]"),J=document.querySelector("[data-refresh-current-scene]"),_=document.querySelector("[data-refresh-document]"),z=document.querySelector("[data-current-chapter]"),K=document.querySelector("[data-current-scene]"),Q=document.querySelector("[data-current-word-count]"),X=document.querySelector("[data-scene-tracking-status]"),Z=document.querySelector("[data-document-message]"),ee=document.querySelector("[data-sync-note]"),te=document.querySelector("[data-document-outline]"),ne=document.querySelector("[data-analyse-manuscript-structure]"),re=document.querySelector("[data-apply-structure-sync]"),oe=document.querySelector("[data-structure-preview-status]"),ae=document.querySelector("[data-structure-preview-results]"),ce=document.querySelector("[data-refresh-plotdirector-scene]"),ie=document.querySelector("[data-plotdirector-scene-status]"),se=document.querySelector("[data-anchor-status]"),de=document.querySelector("[data-anchor-book-id]"),le=document.querySelector("[data-anchor-chapter-id]"),ue=document.querySelector("[data-anchor-scene-id]"),pe=document.querySelector("[data-attach-plotdirector-ids]"),he=document.querySelector("[data-unlink-word-document]"),me=document.querySelector("[data-plotdirector-scene-details]"),ye=document.querySelector("[data-plotdirector-scene-title]"),ge=document.querySelector("[data-plotdirector-revision-status]"),fe=document.querySelector("[data-plotdirector-estimated-words]"),we=document.querySelector("[data-plotdirector-actual-words]"),Ie=document.querySelector("[data-plotdirector-blocked-status]"),Se=document.querySelector("[data-plotdirector-blocked-reason-row]"),be=document.querySelector("[data-plotdirector-blocked-reason]"),Ce=document.querySelector("[data-runtime-last-sync]"),ke=document.querySelector("[data-sync-scene-progress]"),ve=document.querySelector("[data-sync-word-count]"),xe=document.querySelector("[data-sync-plotdirector-count]"),Ne=document.querySelector("[data-sync-last-synced]"),Ee=document.querySelector("[data-sync-status]"),Le=document.querySelector("[data-writing-brief-block]"),Pe=document.querySelector("[data-writing-brief]"),qe=document.querySelector("[data-plotdirector-link-groups]"),De=document.querySelector("[data-character-review-summary]"),Ae=document.querySelector("[data-asset-review-summary]"),$e=document.querySelector("[data-location-review-summary]"),Te=document.querySelector("[data-character-chips]"),je=document.querySelector("[data-asset-chips]"),We=(document.querySelector("[data-location-chips]"),document.querySelector("[data-primary-location-select]")),Re=document.querySelector("[data-save-scene-links]"),Ue=document.querySelector("[data-scene-links-status]"),Me=document.querySelector("[data-links-editing-scene]"),Oe=document.querySelector("[data-chapter-create-link]"),Be=document.querySelector("[data-chapter-create-link-chapter]"),Ge=document.querySelector("[data-create-plotdirector-chapter]"),He=document.querySelector("[data-link-existing-chapter]"),Fe=document.querySelector("[data-chapter-create-link-status]"),Ve=document.querySelector("[data-scene-create-link]"),Ye=document.querySelector("[data-create-link-chapter]"),Je=document.querySelector("[data-create-link-scene]"),_e=document.querySelector("[data-create-plotdirector-scene]"),ze=document.querySelector("[data-link-existing-scene]"),Ke=document.querySelector("[data-create-link-status]"),Qe=document.querySelector("[data-link-existing-dialog]"),Xe=document.querySelector("[data-link-scene-search]"),Ze=document.querySelector("[data-link-scene-options]"),et=document.querySelector("[data-link-selected-scene]"),tt=document.querySelector("[data-link-dialog-cancel]"),nt=document.querySelector("[data-link-dialog-status]"),rt=document.querySelector("[data-create-scene-dialog]"),ot=document.querySelector("[data-create-dialog-scene]"),at=document.querySelector("[data-create-dialog-chapter]"),ct=document.querySelector("[data-create-dialog-confirm]"),it=document.querySelector("[data-create-dialog-cancel]"),st=document.querySelector("[data-link-existing-chapter-dialog]"),dt=document.querySelector("[data-link-chapter-search]"),lt=document.querySelector("[data-link-chapter-options]"),ut=document.querySelector("[data-link-selected-chapter]"),pt=document.querySelector("[data-link-chapter-dialog-cancel]"),ht=document.querySelector("[data-link-chapter-dialog-status]"),mt=document.querySelector("[data-create-chapter-dialog]"),yt=document.querySelector("[data-create-chapter-dialog-chapter]"),gt=document.querySelector("[data-create-chapter-dialog-book]"),ft=document.querySelector("[data-create-chapter-dialog-confirm]"),wt=document.querySelector("[data-create-chapter-dialog-cancel]"),It=document.querySelector("[data-apply-structure-sync-dialog]"),St=document.querySelector("[data-apply-structure-sync-summary]"),bt=document.querySelector("[data-apply-structure-sync-confirm]"),Ct=document.querySelector("[data-apply-structure-sync-cancel]"),kt=document.querySelector("[data-resolve-project-id]"),vt=document.querySelector("[data-resolve-project-title]"),xt=document.querySelector("[data-resolve-book-id]"),Nt=document.querySelector("[data-resolve-book-title]"),Et=document.querySelector("[data-resolve-detected-chapter]"),Lt=document.querySelector("[data-resolve-detected-scene]"),Pt=document.querySelector("[data-resolve-request-chapter]"),qt=document.querySelector("[data-resolve-request-scene]"),Dt=document.querySelector("[data-resolve-result]"),At=document.querySelector("[data-resolve-chapter-id]"),$t=document.querySelector("[data-resolve-scene-id]"),Tt=document.querySelector("[data-run-diagnostics]"),jt=document.querySelector("[data-diagnostic-host]"),Wt=document.querySelector("[data-diagnostic-platform]"),Rt=document.querySelector("[data-diagnostic-ready]"),Ut=document.querySelector("[data-diagnostic-word-api]"),Mt=document.querySelector("[data-diagnostic-last-scan]"),Ot=document.querySelector("[data-diagnostic-last-error]"),Bt=document.querySelector("[data-diagnostic-anchor-type]"),Gt=document.querySelector("[data-diagnostic-stored-scene-id]"),Ht=document.querySelector("[data-diagnostic-stored-chapter-id]"),Ft=document.querySelector("[data-diagnostic-resolution-method]"),Vt=document.querySelector("[data-diagnostic-paragraphs]"),Yt=document.querySelector("[data-diagnostic-heading1]"),Jt=document.querySelector("[data-diagnostic-heading2]"),_t="true"===a?.dataset.authenticated;let zt=[],Kt=[],Qt=!1,Xt=!1,Zt="Unknown",en="Unknown",tn="",nn="",rn=null,on=null,an=null,cn=null,sn=null,dn=null,ln="",un="Title Match",pn=!1,hn=[],mn=null,yn=null,gn=[],fn=null,wn=null,In=null,Sn=null,bn=null,Cn=null,kn=null,vn=null,xn=null,Nn=null,En=[],Ln=!1,Pn=!1,qn=0,Dn=!1,An=!1,$n=!1,Tn=null,jn="Manual",Wn=!1,Rn=null,Un=!1,Mn=0,On=!1,Bn=0,Gn=null;const Hn=1200;let Fn=!1,Vn=!1,Yn=null,Jn=!1,_n=!1,zn=null,Kn=null,Qn=null,Xn=!1,Zn=!1,er=null,tr="",nr=[],rr=null,or="",ar=null,cr="",ir=[],sr=null,dr="",lr=null,ur="",pr=[],hr=null,mr="",yr="",gr="",fr="",wr=0,Ir={characters:[],assets:[],locations:[],primaryLocationId:null};const Sr=e=>{const t=Date.now();t-wr<1e3||(wr=t,console.debug(`[Word Companion Runtime] ${e}`))},br=e=>{console.debug(`[Word Companion Timing] ${e}`)},Cr=e=>{R&&(R.textContent=e)},kr=e=>"links"===e?"review":"structure"===e?"maintenance":e,vr=(e,t=!0)=>{const r=kr(e),a=o.has(r)&&i.some(e=>e.dataset.tabButton===r)?r:"scene";for(const e of i){const t=e.dataset.tabButton===a;e.classList.toggle("is-active",t),e.setAttribute("aria-selected",t?"true":"false")}for(const e of s){const t=e.dataset.tabPanel===a;e.classList.toggle("is-active",t),e.hidden=!t}t&&((e,t)=>{try{t?window.localStorage.setItem(e,String(t)):window.localStorage.removeItem(e)}catch{}})(n,a)},xr=()=>{const e=kr((e=>{try{return window.localStorage.getItem(e)||""}catch{return""}})(n));vr(o.has(e)?e:"scene",!1)},Nr=e=>{U&&(U.textContent=e),M&&(M.textContent=e)},Er=e=>{V&&(V.textContent=e)},Lr=e=>{Y&&(Y.textContent=e)},Pr=e=>{Z&&(Z.textContent=e)},qr=e=>{ie&&(ie.textContent=e)},Dr=e=>{const t=t=>Object.prototype.hasOwnProperty.call(e,t);t("anchorType")&&Co(Bt,zr(e.anchorType)),t("storedSceneId")&&Co(Gt,zr(e.storedSceneId)),t("storedChapterId")&&Co(Ht,zr(e.storedChapterId)),t("resolutionMethod")&&Co(Ft,zr(e.resolutionMethod))},Ar=()=>{const e=$o(),t=Number.isInteger(sn)&&sn>0&&cn===sn,n=!Number.isInteger(dn)||dn<=0||an===dn,r=t&&n;Co(se,r?"Attached to PlotDirector":"Not attached"),Co(de,e?.bookId?String(e.bookId):"-"),Co(le,Number.isInteger(dn)&&dn>0?String(dn):"-"),Co(ue,Number.isInteger(sn)&&sn>0?String(sn):"-"),pe&&(jr(pe,r&&!pn),pe.disabled=!sn||r&&!pn,pe.textContent=cn&&!r?"Reattach PlotDirector IDs":"Attach PlotDirector IDs"),Dr({anchorType:un||"Title Match",storedSceneId:cn,storedChapterId:an,resolutionMethod:ln})},$r=(e,t,n,r=null,o=null,a=null)=>{const c=e||"",i=t||"",s=Number.isInteger(n)?n:null,d=Number.isInteger(a)&&a>0?a:null,l=Number.isInteger(r)&&r>0?r:null,u=Number.isInteger(o)&&o>0?o:null,p=tn===c&&nn===i&&rn===s&&on===d&&an===l&&cn===u;tn=e||"",nn=t||"",rn=Number.isInteger(n)?n:null,on=Number.isInteger(a)&&a>0?a:null,an=Number.isInteger(r)&&r>0?r:null,cn=Number.isInteger(o)&&o>0?o:null,p||(z&&(z.textContent=e||"Not detected"),K&&(K.textContent=t||"Not detected"),Q&&(Q.textContent=Number.isInteger(n)?String(n):"-"),Co(ve,Number.isInteger(n)?String(n):"-"),Ar())},Tr=()=>{Yn&&(window.clearTimeout(Yn),Yn=null)},jr=(e,t)=>{e&&(e.hidden=t)},Wr=()=>{jr(he,!Sn)},Rr=e=>{Co(Ee,e)},Ur=e=>{Co(oe,e)},Mr=(e="Select a project and book to analyse manuscript structure.")=>{if(In=null,ae){ae.innerHTML="";const e=document.createElement("p");e.textContent="No preview generated.",ae.append(e)}Ur(e),Br()},Or=(e=In)=>((e=In)=>da.flatMap(t=>Array.isArray(e?.[t.key])?e[t.key]:[]))(e).filter(e=>"couldLink"===e.category||"wouldCreateChapters"===e.category||"wouldCreateScenes"===e.category),Br=()=>{re&&(re.disabled=$n||0===Or().length)},Gr=()=>{ne&&(ne.disabled=$n||!Ao()||!$o()),Br()},Hr=()=>{Me&&(Me.textContent=sn?`Editing links for: ${gr||nn||"Current scene"}`:"Link a PlotDirector scene first.")},Fr=()=>{const e=Wn||!sn,t=e||!dn||Jn;ke&&(ke.disabled=t),Re&&(Re.disabled=e),We&&(We.disabled=e);for(const t of[Te,je])for(const n of t?[...t.querySelectorAll("input[type='checkbox']")]:[])n.disabled=e},Vr=e=>{"Live"!==e&&"Manual"!==e||(jn=e),Co(X,e||jn||"Manual")},Yr=(e,t="")=>{Wn=!!e,Wn&&(Tr(),rc()),Co(X,Wn?"Stale":jn),Fr(),t&&(Pr(t),eo(t))},Jr=(e,t=null,n="")=>{sn=Number.isInteger(e)&&e>0?e:null,dn=Number.isInteger(t)&&t>0?t:null,ln=n||"",sn!==zn&&(Kn=null),sn||(Tr(),rc()),Fr(),Rr(Wn?"Refresh Current Scene before syncing.":sn?"Ready to sync.":"No resolved PlotDirector scene."),eo(Wn?"Refresh Current Scene before saving.":sn?"Ready to save.":"Link a PlotDirector scene first."),Hr(),Ar()},_r=e=>{J&&(J.disabled=e,J.textContent=e?"Refreshing...":"Refresh Current Scene")},zr=e=>null==e||""===e?"-":String(e),Kr=e=>{if(!e)return"-";const t=e instanceof Date?e:new Date(e);if(Number.isNaN(t.getTime()))return"-";const n=new Date;return`Last synced: ${t.toDateString()===n.toDateString()?"Today":t.toLocaleDateString()} ${t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}`},Qr=e=>{bn=e||null;const t=bn?.lastSyncUtc||bn?.manuscriptDocument?.lastSyncUtc;Co(Ce,Kr(t)),Co(Ne,Kr(t)),Do()},Xr=()=>{Cn=null,kn=null,vn=null,Bn+=1,Gn=null,oc(),ac(),cc(),Qr(null)},Zr=()=>{kn=null,vn=null},eo=e=>{Co(Ue,e)},to=e=>{Co(Ke,e)},no=e=>{Co(Fe,e)},ro=()=>!!$o()&&!!tn&&!dn,oo=()=>!!$o()&&!!nn&&Number.isInteger(dn)&&dn>0,ao=()=>{jr(Oe,!0),no(""),Ge&&(Ge.disabled=!0,Ge.textContent="Create Chapter in PlotDirector"),He&&(He.disabled=!0,He.textContent="Link to Existing Chapter")},co=(e="")=>{Co(Be,zr(tn)),jr(Oe,!1),no(e);const t=ro();Ge&&(Ge.disabled=!t,Ge.textContent="Create Chapter in PlotDirector"),He&&(He.disabled=!t,He.textContent="Link to Existing Chapter")},io=()=>{jr(Ve,!0),to(""),_e&&(_e.disabled=!0,_e.textContent="Create Scene in PlotDirector"),ze&&(ze.disabled=!0,ze.textContent="Link to Existing Scene")},so=(e="")=>{Co(Ye,zr(tn)),Co(Je,zr(nn)),jr(Ve,!1),to(e);const t=oo();_e&&(_e.disabled=!t,_e.textContent="Create Scene in PlotDirector"),ze&&(ze.disabled=!t,ze.textContent="Link to Existing Scene")},lo=e=>{qr(e),jr(me,!0),jr(Le,!0),jr(qe,!1),ao(),io(),ln="",gr="",fr="",un=cn?"SceneID Anchor":an?"ChapterID Anchor":"Title Match",pn=!1,Ir={characters:[],assets:[],locations:[],primaryLocationId:null},po(Te,[],"character"),po(je,[],"asset"),ho([],null,!1),_o(),Jr(null),Co(xe,"-"),Co(ye,"-"),Co(ge,"-"),Co(fe,"-"),Co(we,"-"),Co(Ie,"-"),Co(be,"-"),jr(Se,!0),Ar(),Hr()},uo=(e,t)=>"asset"===t?e?.assetId||e?.AssetId||e?.storyAssetId||e?.StoryAssetId||0:"location"===t?e?.locationId||e?.LocationId||0:e?.characterId||e?.CharacterId||0,po=(e,t,n,r=!1)=>{if(!e)return;e.innerHTML="";const o=Array.isArray(t)?t:[];if(0===o.length){const t=document.createElement("p");return t.className="word-companion-empty-list",t.textContent="None",void e.append(t)}for(const t of o){const o=Number.parseInt(uo(t,n),10);if(!Number.isInteger(o)||o<=0)continue;const a=document.createElement("label");a.className="word-companion-check-item";const c=document.createElement("input");c.type="checkbox",c.value=String(o),c.checked=!!t.linked,c.disabled=!r;const i=document.createElement("span");i.textContent=t.name||"Unnamed",a.append(c,i),e.append(a)}},ho=(e,t,n=!1)=>{if(!We)return;We.innerHTML="";const r=document.createElement("option");r.value="",r.textContent="None",We.append(r);const o=Number.parseInt(t||"",10);for(const t of Array.isArray(e)?e:[]){const e=Number.parseInt(uo(t,"location"),10);if(!Number.isInteger(e)||e<=0)continue;const n=document.createElement("option");n.value=String(e),n.textContent=t.name||"Unnamed",n.selected=e===o,We.append(n)}We.disabled=!n},mo=e=>String(e||"").trim().replace(/\s+/g," "),yo=(e,t)=>{const n=mo(e);if(!n)return"";const r=new RegExp(`^${"scene"===t?"scene":"chapter"}\\s+(?:\\d+|[ivxlcdm]+|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twenty)\\s*(?::|-|\\u2013|\\u2014)\\s*`,"i");return mo(n.replace(r,""))||n},go=e=>{const t=t=>Object.prototype.hasOwnProperty.call(e,t);t("projectId")&&Co(kt,zr(e.projectId)),t("projectTitle")&&Co(vt,zr(e.projectTitle)),t("bookId")&&Co(xt,zr(e.bookId)),t("bookTitle")&&Co(Nt,zr(e.bookTitle)),t("detectedChapter")&&Co(Et,zr(e.detectedChapter)),t("detectedScene")&&Co(Lt,zr(e.detectedScene)),t("requestChapter")&&Co(Pt,zr(e.requestChapter)),t("requestScene")&&Co(qt,zr(e.requestScene)),t("result")&&Co(Dt,zr(e.result)),t("chapterId")&&Co(At,zr(e.chapterId)),t("sceneId")&&Co($t,zr(e.sceneId))},fo=async e=>{if(vn===e&&Array.isArray(kn?.chapters))return kn.chapters;const t=await ja(`/api/word-companion/books/${e}/structure`);return vn=e,kn=t||null,Array.isArray(t?.chapters)?t.chapters:[]},wo=async e=>{const t=await ja(`/api/word-companion/books/${e}/chapters`);return Array.isArray(t?.chapters)?t.chapters:[]},Io=e=>{if(Number.isInteger(dn)&&dn>0){const t=e.find(e=>e.chapterId===dn);if(t)return t}const t=yo(tn,"chapter").toLocaleLowerCase();return t&&e.find(e=>yo(e.title,"chapter").toLocaleLowerCase()===t)||null},So=async()=>{const e=$o();return e?Io(await fo(e.bookId)):null},bo=async(e,t,n,r,o)=>{const a=await ja(`/api/word-companion/scenes/${t}/companion`);try{a.revisionStatus=await(async(e,t)=>{const n=await ja(`/api/word-companion/books/${e}/structure`),r=Array.isArray(n?.chapters)?n.chapters:[];for(const e of r){const n=(Array.isArray(e.scenes)?e.scenes:[]).find(e=>e.sceneId===t);if(n)return n.revisionStatus||""}return""})(e,t)}catch{a.revisionStatus=""}var c;un=o||"Title Match",pn=!1,Yr(!1),qr("Linked to PlotDirector"),Pr(""),ao(),io(),Jr(t,n,r),c=a,gr=c?.sceneTitle||nn||"",fr=c?.chapterTitle||tn||"",Co(ye,zr(c?.sceneTitle)),Co(ge,zr(c?.revisionStatus||c?.revisionStatusName||"Not provided")),Co(fe,zr(c?.estimatedWords)),Co(we,zr(c?.actualWords)),Co(xe,zr(c?.actualWords)),Co(Ie,c?.blocked?"Blocked":"Not blocked"),c?.blockedReason?(Co(be,c.blockedReason),jr(Se,!1)):(Co(be,"-"),jr(Se,!0)),Pe&&(Pe.textContent=c?.writingBrief||"No writing brief has been added for this scene."),Ir={characters:Array.isArray(c?.characters)?c.characters:[],assets:Array.isArray(c?.assets)?c.assets:[],locations:Array.isArray(c?.locations)?c.locations:[],primaryLocationId:c?.primaryLocationId??null},po(Te,Ir.characters,"character",!!sn&&!Wn),po(je,Ir.assets,"asset",!!sn&&!Wn),ho(Ir.locations,Ir.primaryLocationId,!!sn&&!Wn),_o(),Hr(),eo(Wn?"Refresh Current Scene before saving.":sn?"Ready to save.":"No resolved PlotDirector scene."),jr(me,!1),jr(Le,!1),jr(qe,!1),Ua(t,n),nc(),hc()},Co=(e,t)=>{if(e){const n=null==t?"":String(t);e.textContent!==n&&(e.textContent=n)}},ko=e=>{const t=t=>Object.prototype.hasOwnProperty.call(e,t);t("host")&&Co(jt,e.host),t("platform")&&Co(Wt,e.platform),t("ready")&&Co(Rt,e.ready),t("wordApi")&&Co(Ut,e.wordApi),t("lastScan")&&Co(Mt,e.lastScan),t("lastError")&&Co(Ot,e.lastError),t("paragraphs")&&Co(Vt,e.paragraphs),t("heading1")&&Co(Yt,e.heading1),t("heading2")&&Co(Jt,e.heading2)},vo=e=>{const t=[];return e?.name&&t.push(e.name),e?.code&&e.code!==e.name&&t.push(e.code),e?.message&&t.push(e.message),e?.debugInfo?.errorLocation&&t.push(`Location: ${e.debugInfo.errorLocation}`),t.length>0?t.join(": "):String(e)},xo=async()=>{if(!window.Office||"function"!=typeof window.Office.onReady)return Qt=!1,Xt=!1,Zt="Unavailable",en="Unavailable",ko({host:Zt,platform:en,ready:"No",wordApi:"No"}),null;const e=await window.Office.onReady();return Qt=!0,Zt=e?.host||"Unknown",en=e?.platform||"Unknown",Xt=!!window.Word&&!!window.Office.HostType&&e?.host===window.Office.HostType.Word,ko({host:Zt,platform:en,ready:"Yes",wordApi:Xt?"Yes":"No"}),e},No=e=>{try{const t=window.localStorage.getItem(e),n=Number.parseInt(t||"",10);return Number.isInteger(n)&&n>0?n:null}catch{return null}},Eo=(e,t)=>{try{t?window.localStorage.setItem(e,String(t)):window.localStorage.removeItem(e)}catch{}},Lo=(e,t)=>{if(!e)return;e.innerHTML="";const n=document.createElement("option");n.value="",n.textContent=t,e.append(n),e.disabled=!0},Po=(e,t,n,r,o)=>{if(!e)return;e.innerHTML="";const a=document.createElement("option");a.value="",a.textContent=t,e.append(a);for(const t of n){const n=document.createElement("option");n.value=String(t[r]),n.textContent=t[o],e.append(n)}e.disabled=0===n.length},qo=e=>{const t=String(e?.title||"").trim(),n=String(e?.subtitle||"").trim();return n?`${t}: ${n}`:t},Do=()=>{const e=!!Sn;jr(d,!e),jr(F,e),e&&(Co(l,bn?.projectTitle||Ao()?.title||"Project"),Co(u,bn?.bookTitle||qo($o())||"Book"))},Ao=()=>{const e=Number.parseInt(G?.value||"",10);return zt.find(t=>t.projectId===e)||null},$o=()=>{const e=Number.parseInt(H?.value||"",10);return Kt.find(t=>t.bookId===e)||null},To=()=>{const e=Number.parseInt(h?.value||"",10);return zt.find(t=>t.projectId===e)||null},jo=()=>{const e=Number.parseInt(m?.value||"",10);return Kt.find(t=>t.bookId===e)||null},Wo=e=>Co(I,e),Ro=()=>{const e=To(),t=jo(),n=Pn&&Date.now()-qn>=750;f&&(f.disabled=!e||!t||Dn),g&&(g.disabled=!e||!String(y?.value||"").trim()||Dn),P&&(P.disabled=!xn?.canImport||!Nn||Dn),x&&(x.disabled=!n||An||0===Bo().length)},Uo=e=>{jr(p,!e),jr(c,e),Wr(),Do();for(const t of s)jr(t,!!e||"scene"!==t.dataset.tabPanel&&!t.classList.contains("is-active"));e||xr()},Mo=()=>{if(!h)return;if(0===zt.length)return void Lo(h,"No projects available.");Po(h,"Choose a project",zt,"projectId","title");const e=Number.parseInt(G?.value||"",10);Number.isInteger(e)&&e>0&&(h.value=String(e))},Oo=(e="Select a Project and Book to begin.")=>{xn=null,Nn=null,En=[],Ln=!1,Pn=!1,qn=0,jr(S,!0),jr(L,!0),jr(b,!0),jr(v,!0),S&&(S.innerHTML=""),k&&(k.innerHTML=""),Co(C,""),Wo(e),Ro()},Bo=()=>k?[...k.querySelectorAll("input[type='checkbox']:checked")].map(e=>String(e.value||"").trim()).filter(Boolean):[],Go=e=>{if(En=Array.isArray(e)?e:[],b&&k){if(k.innerHTML="",jr(b,!1),jr(v,!Ln||0===En.length),jr(x,!1),jr(N,!1),jr(E,!0),0===En.length)return Co(C,"No likely major characters found."),void Ro();Co(C,`${En.length} likely major characters found.`);for(const e of En){const t=document.createElement("label");t.className="word-companion-character-candidate";const n=document.createElement("input");n.type="checkbox",n.value=e.text||"",n.checked="high"===String(e.confidence||"").trim().toLowerCase(),n.addEventListener("change",Ro);const r=document.createElement("strong");r.textContent=e.text||"";const o=document.createElement("em"),a=String(e.reason||"").trim();o.textContent=a?`${Number(e.mentionCount||0).toLocaleString()} mentions · ${a}`:`${Number(e.mentionCount||0).toLocaleString()} mentions`;const c=document.createElement("span");c.className="word-companion-character-candidate-text",c.append(r,o),t.append(n,c),k.append(t)}Ro()}},Ho=()=>{const e=window.Office?.context?.document?.settings;if(!e)return null;const t=String(e.get(r.documentGuid)||"").trim(),n=Number.parseInt(e.get(r.bookId)||"",10),o=Number.parseInt(e.get(r.projectId)||"",10),a=Number.parseInt(e.get(r.bindingVersion)||"",10);return!t||!Number.isInteger(n)||n<=0||!Number.isInteger(o)||o<=0?null:{documentGuid:t,bookId:n,projectId:o,bindingVersion:Number.isInteger(a)&&a>0?a:1}},Fo=()=>new Promise((e,t)=>{const n=window.Office?.context?.document?.settings;if(n){for(const e of Object.values(r))"function"==typeof n.remove?n.remove(e):n.set(e,"");n.saveAsync(n=>{n.status===window.Office.AsyncResultStatus.Succeeded?e():t(n.error||new Error("Unable to remove Word document metadata."))})}else t(new Error("Word document settings are unavailable."))}),Vo=()=>Sn?.documentGuid?Sn.documentGuid:window.crypto?.randomUUID?window.crypto.randomUUID():"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(Number(e)^16*Math.random()>>Number(e)/4).toString(16)),Yo=()=>Sn?.documentGuid||Ho()?.documentGuid||"",Jo=()=>{const e=Ao(),t=$o();O&&(O.textContent=e?.title||"(Not connected)"),B&&(B.textContent=t?qo(t):"(Not connected)"),ee&&(ee.textContent=t?"":"Select a PlotDirector book before refreshing."),Gr(),Do()},_o=()=>{const e=Array.isArray(Ir.characters)?Ir.characters.length:0,t=Array.isArray(Ir.assets)?Ir.assets.length:0,n=Array.isArray(Ir.locations)?Ir.locations.length:0;Co(De,`Characters (${e})`),Co(Ae,`Assets (${t})`),Co($e,`Locations (${n})`)},zo=e=>String(e?.styleBuiltIn||e?.style||"").replace(/\s+/g,"").toLowerCase(),Ko=(e,t)=>{const n=zo(e);return n===`heading${t}`||n.endsWith(`.heading${t}`)||n.includes(`heading${t}`)},Qo=e=>String(e||"").trim().split(/\s+/).filter(Boolean).length,Xo=(e,t)=>{const n=String(e||"").match(new RegExp(`^${t}-(\\d+)$`,"i"));if(!n)return null;const r=Number.parseInt(n[1],10);return Number.isInteger(r)&&r>0?r:null},Zo=e=>{try{return Array.isArray(e?.contentControls?.items)?e.contentControls.items:[]}catch(e){return console.warn("Word paragraph content controls were not available.",e),[]}},ea=(e,t)=>{const n=Zo(e);for(const e of n){const n=Xo(e.tag,t);if(n)return n}return null},ta=(e,t)=>{const n=[];let r=0,o=0,a=null,c=null;e.forEach((e,t)=>{const i=String(e.text||"").trim();if(i){if(Ko(e,1))return r+=1,a={index:n.length+1,paragraphIndex:t,title:i,anchorId:ea(e,"PD-CHAPTER"),scenes:[]},n.push(a),void(c=null);if(Ko(e,2)){if(o+=1,!a)return;return c={index:a.scenes.length+1,paragraphIndex:t,title:i,anchorId:ea(e,"PD-SCENE"),wordCount:0},void a.scenes.push(c)}c&&(c.wordCount+=Qo(i))}});const i=t.find(e=>String(e.text||"").trim()),s=i?e.findIndex(e=>{return t=e,n=i,String(t?.text||"").trim()===String(n?.text||"").trim()&&zo(t)===zo(n);var t,n}):-1,d=s>=0&&n.filter(e=>e.paragraphIndex<=s).at(-1)||null,l=d&&s>=0&&d.scenes.filter(e=>e.paragraphIndex<=s).at(-1)||null;return{chapters:n,currentChapter:d,currentScene:l,paragraphCount:e.length,heading1Count:r,heading2Count:o}},na=new Set(["***","###"]),ra=(e,t)=>{const n=String(e?.text||"").trim();return{index:t,text:n,styleBuiltIn:e?.styleBuiltIn||"",style:e?.style||"",wordCount:Qo(n),chapterAnchorId:null,sceneAnchorId:null}},oa=(e,t)=>{e&&(e.endParagraphIndex=t)},aa=(e,t)=>{e&&(e.endParagraphIndex=t,oa(e.scenes.at(-1),t))},ca=(e,t)=>{const n=(t||[]).find(e=>String(e.text||"").trim());if(!e||!n)return e?.currentParagraphIndex??-1;const r=e.paragraphs.filter(e=>((e,t)=>String(e?.text||"").trim()===String(t?.text||"").trim()&&zo(e)===zo(t))(e,n)).map(e=>e.index);return 0===r.length?e.currentParagraphIndex??-1:Number.isInteger(e.currentParagraphIndex)?r.reduce((t,n)=>Math.abs(n-e.currentParagraphIndex){if(!Cn)return!1;const t=((e,t)=>!e||!Number.isInteger(t)||t<0?null:e.chapters.filter(e=>e.startParagraphIndex<=t).at(-1)||null)(Cn,e),n=((e,t)=>!e||!Number.isInteger(t)||t<0?null:e.scenes.filter(e=>e.startParagraphIndex<=t).at(-1)||null)(t,e),r=t?.startParagraphIndex!==Cn.currentChapter?.startParagraphIndex||n?.startParagraphIndex!==Cn.currentScene?.startParagraphIndex||t?.anchorId!==Cn.currentChapter?.anchorId||n?.anchorId!==Cn.currentScene?.anchorId;return Cn.currentParagraphIndex=e,Cn.currentChapter=t,Cn.currentScene=n,!!r&&($r(t?.title,n?.title,n?.wordCount,t?.anchorId,n?.anchorId,t?.index),r)},sa=e=>{if(!te)return;if(te.innerHTML="",0===e.chapters.length){const e=document.createElement("p");return e.textContent="No chapters detected. Use Heading 1 for chapter titles.",void te.append(e)}if(!e.chapters.some(e=>e.scenes.length>0)){const e=document.createElement("p");e.textContent="No scenes detected. Use Heading 2 for scene titles.",te.append(e)}for(const t of e.chapters){const e=document.createElement("div");e.className="word-companion-outline-chapter";const n=document.createElement("strong");if(n.textContent=t.title,e.append(n),t.scenes.length>0){const n=document.createElement("ul");for(const e of t.scenes){const t=document.createElement("li");t.textContent=e.title,n.append(t)}e.append(n)}te.append(e)}},da=[{key:"alreadyLinked",title:"Already Linked"},{key:"couldLink",title:"Could Link"},{key:"wouldCreateChapters",title:"Would Create Chapters"},{key:"wouldCreateScenes",title:"Would Create Scenes"},{key:"manualReview",title:"Manual Review Required"}],la={alreadyLinked:"Already Linked",couldLink:"Could Link",wouldCreateChapter:"Would Create Chapter",wouldCreateScene:"Would Create Scene",manualReview:"Manual Review Required"},ua={alreadyLinked:"✓",couldLink:"~",wouldCreateChapter:"+",wouldCreateScene:"+",manualReview:"?"},pa=(e,t)=>yo(e,t).toLocaleLowerCase(),ha=({category:e,action:t,type:n,wordTitle:r,match:o="",anchorStatus:a="None",matches:c=[],pdChapter:i=null,pdScene:s=null,wordChapter:d=null,wordScene:l=null,parentItem:u=null})=>({id:`${n}-${d?.index||0}-${l?.index||0}-${d?.paragraphIndex??l?.paragraphIndex??0}`,category:e,action:t,type:n,wordTitle:r,match:o,anchorStatus:a,matches:c,pdChapter:i,pdScene:s,wordChapter:d,wordScene:l,parentItem:u,result:"Pending",error:""}),ma=(e,t)=>{Array.isArray(e[t.category])&&e[t.category].push(t)},ya=e=>Array.isArray(e?.scenes)?e.scenes:[],ga=(e,t,n)=>{const r=e.anchorId?`PD-CHAPTER-${e.anchorId}`:"None";if(e.anchorId){const o=t.find(t=>t.chapterId===e.anchorId);if(o){const t=ha({category:"alreadyLinked",action:"alreadyLinked",type:"Chapter",wordTitle:e.title,match:`Chapter ${o.chapterId}: ${o.title}`,anchorStatus:r,pdChapter:o,wordChapter:e});return ma(n,t),t}const a=ha({category:"manualReview",action:"manualReview",type:"Chapter",wordTitle:e.title,anchorStatus:`${r} not found`,matches:[],pdChapter:null,wordChapter:e});return ma(n,a),a}const o=t.filter(t=>pa(t.title,"chapter")===pa(e.title,"chapter"));if(1===o.length){const t=ha({category:"couldLink",action:"couldLink",type:"Chapter",wordTitle:e.title,match:`Chapter ${o[0].chapterId}: ${o[0].title}`,anchorStatus:r,pdChapter:o[0],wordChapter:e});return ma(n,t),t}if(o.length>1){const t=ha({category:"manualReview",action:"manualReview",type:"Chapter",wordTitle:e.title,anchorStatus:r,matches:o.map(e=>`Chapter ${e.chapterId}: ${e.title}`),pdChapter:null,wordChapter:e});return ma(n,t),t}const a=ha({category:"wouldCreateChapters",action:"wouldCreateChapter",type:"Chapter",wordTitle:e.title,anchorStatus:r,pdChapter:null,wordChapter:e});return ma(n,a),a},fa=(e,t,n,r)=>{const o=e.anchorId?`PD-SCENE-${e.anchorId}`:"None";if(e.anchorId){const a=((e,t)=>{for(const n of e){const e=ya(n).find(e=>e.sceneId===t);if(e)return{chapter:n,scene:e}}return null})(n,e.anchorId);return a?void ma(r,ha({category:"alreadyLinked",action:"alreadyLinked",type:"Scene",wordTitle:e.title,match:`Scene ${a.scene.sceneId}: ${a.scene.title}`,anchorStatus:o,pdChapter:a.chapter,pdScene:a.scene,wordChapter:t?.wordChapter,wordScene:e,parentItem:t})):void ma(r,ha({category:"manualReview",action:"manualReview",type:"Scene",wordTitle:e.title,anchorStatus:`${o} not found`,wordChapter:t?.wordChapter,wordScene:e,parentItem:t}))}if(!t?.pdChapter&&"manualReview"===t?.category)return void ma(r,ha({category:"manualReview",action:"manualReview",type:"Scene",wordTitle:e.title,anchorStatus:o,matches:["Parent chapter requires manual review."],wordChapter:t?.wordChapter,wordScene:e,parentItem:t}));if(!t?.pdChapter)return void ma(r,ha({category:"wouldCreateScenes",action:"wouldCreateScene",type:"Scene",wordTitle:e.title,anchorStatus:o,wordChapter:t?.wordChapter,wordScene:e,parentItem:t}));const a=ya(t.pdChapter).filter(t=>pa(t.title,"scene")===pa(e.title,"scene"));1!==a.length?a.length>1?ma(r,ha({category:"manualReview",action:"manualReview",type:"Scene",wordTitle:e.title,anchorStatus:o,matches:a.map(e=>`Scene ${e.sceneId}: ${e.title}`),wordChapter:t.wordChapter,wordScene:e,parentItem:t})):ma(r,ha({category:"wouldCreateScenes",action:"wouldCreateScene",type:"Scene",wordTitle:e.title,anchorStatus:o,pdChapter:t.pdChapter,wordChapter:t.wordChapter,wordScene:e,parentItem:t})):ma(r,ha({category:"couldLink",action:"couldLink",type:"Scene",wordTitle:e.title,match:`Scene ${a[0].sceneId}: ${a[0].title}`,anchorStatus:o,pdChapter:t.pdChapter,pdScene:a[0],wordChapter:t.wordChapter,wordScene:e,parentItem:t}))},wa=e=>{const t=document.createElement("article");t.className="word-companion-preview-item";const n=document.createElement("strong");n.textContent=`${ua[e.action]||""} ${e.type}: ${e.wordTitle}`,t.append(n);const r=document.createElement("span");if(r.textContent=`Anchor: ${e.anchorStatus||"None"}`,t.append(r),e.match){const n=document.createElement("span");n.textContent=`Match: ${e.match}`,t.append(n)}if(Array.isArray(e.matches)&&e.matches.length>0){const n=document.createElement("div");n.className="word-companion-preview-matches";const r=document.createElement("span");r.textContent="Matches:",n.append(r);const o=document.createElement("ul");for(const t of e.matches){const e=document.createElement("li");e.textContent=t,o.append(e)}n.append(o),t.append(n)}const o=document.createElement("span");if(o.textContent=`Action: ${la[e.action]||e.action}`,t.append(o),e.result&&"Pending"!==e.result){const n=document.createElement("span");n.textContent=e.error?`Result: ${e.result} - ${e.error}`:`Result: ${e.result}`,t.append(n)}return t},Ia=e=>{if(ae){ae.innerHTML="";for(const t of da){const n=document.createElement("section");n.className="word-companion-preview-group";const r=document.createElement("strong");r.textContent=t.title,n.append(r);const o=Array.isArray(e?.[t.key])?e[t.key]:[];if(0===o.length){const e=document.createElement("p");e.className="word-companion-empty-list",e.textContent="None",n.append(e)}else for(const e of o)n.append(wa(e));ae.append(n)}Br()}},Sa=async e=>{const t=e.document.body.paragraphs,n=e.document.getSelection().paragraphs;t.load("text,styleBuiltIn,style"),n.load("text,styleBuiltIn,style"),await e.sync();try{for(const e of t.items)(Ko(e,1)||Ko(e,2))&&e.contentControls.load("items/tag,title");await e.sync()}catch(e){console.warn("Unable to load Word heading content controls. Continuing without PlotDirector anchors.",e)}const r=ta(t.items,n.items);return r.bodyParagraphs=t.items,r},ba=async(e,t)=>{const n=e.document.body.paragraphs,r=e.document.getSelection().paragraphs;n.load("text,styleBuiltIn,style"),r.load("text,styleBuiltIn,style"),await e.sync();const o=((e,t)=>{const n=e.map(ra),r=[];let o=0,a=0,c=null,i=null,s=0;const d=(e,t=null,n=null)=>c?(oa(i,e.index-1),i={index:c.scenes.length+1,paragraphIndex:e.index,startParagraphIndex:e.index,endParagraphIndex:e.index,title:t||`Scene ${c.scenes.length+1}`,anchorId:n,wordCount:0},c.scenes.push(i),i):null;for(const e of n)e.text&&(Ko(e,1)?(aa(c,e.index-1),o+=1,c={index:r.length+1,paragraphIndex:e.index,startParagraphIndex:e.index,endParagraphIndex:e.index,title:e.text,anchorId:e.chapterAnchorId,wordCount:0,scenes:[]},r.push(c),i=null,d(e,"Scene 1",e.sceneAnchorId),s+=e.wordCount):c&&(t&&na.has(e.text)?(a+=1,d(e)):(c.wordCount+=e.wordCount,i&&(i.wordCount+=e.wordCount),s+=e.wordCount)));return aa(c,n.length-1),{paragraphs:n,chapters:r,usesExplicitScenes:!!t,paragraphCount:n.length,heading1Count:o,heading2Count:a,documentWordCount:s,currentParagraphIndex:null,currentChapter:null,currentScene:null}})(n.items,t),a=ca(o,r.items);return Cn=o,ia(a),Sr("Cache rebuilt."),o},Ca=()=>window.performance&&"function"==typeof window.performance.now?window.performance.now():Date.now(),ka=e=>!!e&&!e.stale&&e.generation===Bn&&e.documentGuid===Yo()&&e.sceneId===sn,va=async(e={})=>{const t=!!e.includeSelection,n=!1!==e.updateDisplay,r=Bn,o=Ca(),a=Ao(),c=$o(),i=Cn?.currentScene;if(!i||!Number.isInteger(i.startParagraphIndex)||!Number.isInteger(i.endParagraphIndex))return null;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return null;const s=Ca(),d=await window.Word.run(async e=>{const n=e.document.body.paragraphs;n.load("text");let r=null;return t&&(r=e.document.getSelection().paragraphs,r.load("text,styleBuiltIn,style")),await e.sync(),{bodyTexts:n.items.map(e=>String(e.text||"")),selectionParagraphs:t&&r?r.items.map(e=>({text:String(e.text||""),styleBuiltIn:e.styleBuiltIn,style:e.style})):[]}}),l=Math.round(Ca()-s);if(r!==Bn)return br(`Office snapshot: ${l}ms stale`),{stale:!0,generation:r};let u=!1;if(t){const e=ca(Cn,d.selectionParagraphs);u=ia(e)}const p=Cn?.currentScene;if(!p||!Number.isInteger(p.startParagraphIndex)||!Number.isInteger(p.endParagraphIndex))return null;const h=[];let m=0;const y=Math.min(p.endParagraphIndex,d.bodyTexts.length-1),g=Cn.currentChapter?.startParagraphIndex;for(let e=p.startParagraphIndex;e<=y;e+=1){const t=String(d.bodyTexts[e]||"").trim();t&&!na.has(t)&&e!==g&&(h.push(t),m+=Qo(t))}p.wordCount=m,n&&$r(Cn.currentChapter?.title,p.title,m,Cn.currentChapter?.anchorId,p.anchorId,Cn.currentChapter?.index);const f={documentGuid:Yo(),projectId:a?.projectId||null,bookId:c?.bookId||null,chapterId:dn,sceneId:sn,chapterTitle:Cn.currentChapter?.title||"",sceneTitle:p.title||"",sceneText:h.join("\n"),wordCount:m,selectionSignature:`${Cn.currentParagraphIndex??-1}:${p.startParagraphIndex}:${p.endParagraphIndex}`,selectionChanged:u,generation:r};return Gn=f,br(`Office snapshot: ${l}ms; scene words: ${m}; total snapshot: ${Math.round(Ca()-o)}ms`),f},xa=async()=>ka(Gn)?Gn:await va(),Na=async()=>{if(Pr(""),!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return $r(null,null,null),Pr("Word document access is unavailable."),ko({lastScan:"Failure",lastError:"Word document access is unavailable."}),!1;_&&(_.disabled=!0,_.textContent="Scanning..."),Pr("Scanning document structure...");try{const e=await window.Word.run(async e=>{const t=$o();return t?await ba(e,!!t.usesExplicitScenes):(Cn=null,await Sa(e))});return Cn||$r(e.currentChapter?.title,e.currentScene?.title,e.currentScene?.wordCount,e.currentChapter?.anchorId,e.currentScene?.anchorId,e.currentChapter?.index),lo("Not detected"),sa(e),Pr(""),ko({lastScan:"Success",lastError:"-",paragraphs:String(e.paragraphCount),heading1:String(e.heading1Count),heading2:String(e.heading2Count)}),!0}catch(e){const t=vo(e);return console.error("Unable to scan the Word document.",e),$r(null,null,null),Pr(`Unable to scan the Word document: ${t}`),ko({lastScan:"Failure",lastError:t}),!1}finally{_&&(_.disabled=!1,_.textContent="Refresh Document Structure")}},Ea=async()=>{const e=$o();if(!Ao()||!e)return Ur("Select a project and book to analyse manuscript structure."),!1;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return Ur("Word document access is unavailable."),ko({lastScan:"Failure",lastError:"Word document access is unavailable."}),!1;ne&&(ne.disabled=!0,ne.textContent="Analysing..."),Ur("Analysing manuscript structure...");try{const t=await window.Word.run(async e=>await Sa(e)),n=await ja(`/api/word-companion/books/${e.bookId}/structure`);return $r(t.currentChapter?.title,t.currentScene?.title,t.currentScene?.wordCount,t.currentChapter?.anchorId,t.currentScene?.anchorId,t.currentChapter?.index),sa(t),In=((e,t)=>{const n={alreadyLinked:[],couldLink:[],wouldCreateChapters:[],wouldCreateScenes:[],manualReview:[]},r=Array.isArray(t?.chapters)?t.chapters:[];for(const t of Array.isArray(e?.chapters)?e.chapters:[]){const e=ga(t,r,n);for(const o of ya(t))fa(o,e,r,n)}return n})(t,n),Ia(In),Ur("Preview generated. No changes have been applied."),ko({lastScan:"Success",lastError:"-",paragraphs:String(t.paragraphCount),heading1:String(t.heading1Count),heading2:String(t.heading2Count)}),!0}catch(e){return console.error("Unable to analyse manuscript structure.",e),Ur("Unable to analyse manuscript structure."),ko({lastScan:"Failure",lastError:vo(e)}),!1}finally{ne&&(ne.textContent="Analyse Manuscript Structure",Gr())}},La=e=>{Tn&&(Tn(e),Tn=null),It?.close?It.close():It&&(It.hidden=!0)},Pa=()=>{const e=((e=In)=>{const t=Or(e);return{linkChapters:t.filter(e=>"couldLink"===e.category&&"Chapter"===e.type).length,linkScenes:t.filter(e=>"couldLink"===e.category&&"Scene"===e.type).length,createChapters:t.filter(e=>"wouldCreateChapters"===e.category).length,createScenes:t.filter(e=>"wouldCreateScenes"===e.category).length,manualReview:Array.isArray(e?.manualReview)?e.manualReview.length:0}})();return(e=>{if(!St)return;St.innerHTML="";const t=[`Link ${e.linkChapters+e.linkScenes} chapters/scenes`,`Create ${e.createChapters} chapters`,`Create ${e.createScenes} scenes`],n=document.createElement("ul");for(const e of t){const t=document.createElement("li");t.textContent=e,n.append(t)}St.append(n)})(e),It?new Promise(e=>{Tn=e,It.showModal?It.showModal():It.hidden=!1}):Promise.resolve(window.confirm(`Apply Structure Sync?\n\nThis will:\n\n- Link ${e.linkChapters+e.linkScenes} chapters/scenes\n- Create ${e.createChapters} chapters\n- Create ${e.createScenes} scenes\n\nManual review items will be skipped.`))},qa=(e,t,n="")=>{e.result=t,e.error=n},Da=e=>Number.isInteger(e?.wordChapter?.index)&&e.wordChapter.index>0?10*e.wordChapter.index:null,Aa=e=>Number.isInteger(e?.wordScene?.index)&&e.wordScene.index>0?10*e.wordScene.index:null,$a=async(e,t)=>{const n=await Wa(`/api/word-companion/books/${e}/chapters`,{title:mo(t.wordTitle),sortOrder:Da(t)});if(!n?.chapterId)throw new Error("Chapter creation did not return a chapter ID.");Zr(),t.pdChapter={chapterId:n.chapterId,title:n.title||t.wordTitle,sortOrder:n.sortOrder||Da(t)||0,scenes:[]},t.match=`Chapter ${t.pdChapter.chapterId}: ${t.pdChapter.title}`},Ta=async(e,t)=>{const n=t.pdChapter||t.parentItem?.pdChapter;if(!n?.chapterId)throw new Error("Scene parent chapter is not available.");const r=await Wa(`/api/word-companion/books/${e}/chapters/${n.chapterId}/scenes`,{sceneTitle:mo(t.wordTitle),sortOrder:Aa(t)});if(!r?.sceneId)throw new Error("Scene creation did not return a scene ID.");Zr(),t.pdChapter=n,t.pdScene={sceneId:r.sceneId,title:t.wordTitle,sortOrder:Aa(t)||0},t.match=`Scene ${t.pdScene.sceneId}: ${t.pdScene.title}`},ja=async(e,t={})=>{const n=await window.fetch(e,{credentials:"same-origin",...t,headers:{Accept:"application/json",...t.headers||{}}});if(!n.ok)throw new Error(`Request failed: ${n.status}`);return await n.json()},Wa=(e,t)=>ja(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),Ra=async(e="")=>{Pn=!1,qn=0,En=[],k&&(k.innerHTML=""),jr(b,!0),Uo(!1),Wo(""),jr(v,!0),e&&Pr(e);const t=await Ma();e&&t&&tn&&Pr(e)},Ua=async(e=sn,t=dn)=>{const n=Ao(),r=$o(),o=Yo(),a=Number.parseInt(e||"",10),c=Number.parseInt(t||"",10);if(!n||!r||!o||!Number.isInteger(a)||a<=0||!Number.isInteger(c)||c<=0)return;const i=`${n.projectId}:${r.bookId}:${a}`;if(yr!==i){yr=i;try{await Wa("/api/word-companion/runtime/current-scene",{documentGuid:o,projectId:n.projectId,bookId:r.bookId,chapterId:c,sceneId:a}),Sr("Current scene follow event sent.")}catch(e){yr="",console.debug("Unable to notify PlotDirector of current scene.",e)}}},Ma=async()=>{const e=$o();if(!(e&&Qt&&Xt&&window.Word&&"function"==typeof window.Word.run))return!1;Pr("Reading manuscript position...");try{Zr(),await Promise.all([ic(!0),sc(!0),dc(!0)]),await fo(e.bookId);const t=await window.Word.run(async t=>await ba(t,!!e.usesExplicitScenes));return sa(t),ko({lastScan:"Success",lastError:"-",paragraphs:String(t.paragraphCount),heading1:String(t.heading1Count),heading2:String(t.heading2Count)}),tn?(nn?await yc():await mc(),Yr(!1),Vr("Live"),Pr(""),!0):(lo("Not detected"),Yr(!1),Vr("Live"),Pr("Manuscript linked. Click inside a chapter to show the current scene."),!0)}catch(e){return console.error("Unable to initialise bound manuscript runtime.",e),Cn=null,Vr("Manual"),Pr(`Unable to read manuscript position: ${vo(e)}`),ko({lastScan:"Failure",lastError:vo(e)}),!1}},Oa=async n=>{Sn=null,wc(),Tr(),Xr(),lo("Not detected"),Vr("Manual"),Nr("Connected"),Eo(e,null),Eo(t,null),G&&(G.value=""),Lo(H,"Select a project first"),Mo(),h&&(h.value=""),Lo(m,"Select a project first"),Oo(n||"Select a Project and Book to begin."),Pr(n||"Manuscript unlinked."),Rr("No resolved PlotDirector scene."),Uo(!0),Wr()},Ba=e=>e?[...e.querySelectorAll("input[type='checkbox']:checked")].map(e=>Number.parseInt(e.value||"",10)).filter(e=>Number.isInteger(e)&&e>0):[],Ga=()=>{const e=Number.parseInt(We?.value||"",10);return Number.isInteger(e)&&e>0?e:null},Ha=(e,t,n,r)=>{const o=((e,t)=>Zo(e).find(e=>Xo(e.tag,t))||null)(e,r),a=o||e.getRange().insertContentControl();return a.title=t,a.tag=n,a.appearance="Hidden",a},Fa=async(e="PlotDirector IDs attached successfully.")=>{if(!sn||!dn)return Pr("No resolved PlotDirector scene."),!1;if((cn&&cn!==sn||an&&an!==dn)&&!window.confirm("This scene is already linked. Replace the existing PlotDirector link?"))return!1;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return Pr("Word document access is unavailable."),!1;pe&&(pe.disabled=!0,pe.textContent="Attaching...");try{return await window.Word.run(async e=>{const t=await Sa(e);if(!t.currentChapter||!t.currentScene)throw new Error("No scene detected in Word. Use Heading 2 for scenes.");const n=t.bodyParagraphs[t.currentChapter.paragraphIndex],r=t.bodyParagraphs[t.currentScene.paragraphIndex];if(!n||!r)throw new Error("Unable to locate the current Word headings.");Ha(n,"PlotDirector Chapter",`PD-CHAPTER-${dn}`,"PD-CHAPTER"),Ha(r,"PlotDirector Scene",`PD-SCENE-${sn}`,"PD-SCENE"),await e.sync()}),an=dn,cn=sn,pn=!1,un="SceneID Anchor",ln="Anchor",Pr(e),ko({lastError:"-"}),Ar(),!0}catch(e){return console.error("Unable to attach PlotDirector IDs.",e),Pr("Unable to attach PlotDirector IDs."),ko({lastError:vo(e)}),Ar(),!1}finally{pe&&(pe.textContent=cn===sn?"Attach PlotDirector IDs":"Reattach PlotDirector IDs",Ar())}},Va=async e=>{if(!dn)return no("No resolved PlotDirector chapter."),!1;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return no("Word document access is unavailable."),!1;try{return await window.Word.run(async e=>{const t=await Sa(e);if(!t.currentChapter)throw new Error("No chapter detected in Word. Use Heading 1 for chapters.");const n=t.bodyParagraphs[t.currentChapter.paragraphIndex];if(!n)throw new Error("Unable to locate the current Word chapter heading.");Ha(n,"PlotDirector Chapter",`PD-CHAPTER-${dn}`,"PD-CHAPTER"),await e.sync()}),an=dn,pn=!1,un="ChapterID Anchor",ln="Chapter anchor",no(e),Pr(e),ko({lastError:"-"}),Ar(),!0}catch(e){return console.error("Unable to attach PlotDirector chapter ID.",e),no("Unable to attach PlotDirector chapter ID."),ko({lastError:vo(e)}),Ar(),!1}},Ya=async e=>{ao(),await yc(),Pr(e),no(e)},Ja=e=>{wn&&(wn(e),wn=null),mt?.close?mt.close():mt&&(mt.hidden=!0)},_a=()=>{if(!lt)return;const e=mo(dt?.value||"").toLocaleLowerCase(),t=gn.filter(t=>!e||String(t.title||"").toLocaleLowerCase().includes(e));if(lt.innerHTML="",fn=null,ut&&(ut.disabled=!0),0===t.length){const e=document.createElement("p");return e.className="word-companion-empty-list",e.textContent="No chapters found.",void lt.append(e)}for(const e of t){const t=Number.parseInt(e.chapterId||"",10);if(!Number.isInteger(t)||t<=0)continue;const n=document.createElement("label");n.className="word-companion-scene-option";const r=document.createElement("input");r.type="radio",r.name="word-companion-link-chapter",r.value=String(t),r.addEventListener("change",()=>{fn=t,ut&&(ut.disabled=!1)});const o=document.createElement("span");o.textContent=e.title||"Untitled chapter",n.append(r,o),lt.append(n)}},za=()=>{st?.close?st.close():st&&(st.hidden=!0)},Ka=async(e,t,n)=>{const r=$o();if(!r)return to("Select a PlotDirector book first."),!1;await bo(r.bookId,e,t,"Manual link","Title Match");return!!await Fa(n)&&(to(n),io(),!0)},Qa=e=>{yn&&(yn(e),yn=null),rt?.close?rt.close():rt&&(rt.hidden=!0)},Xa=()=>{if(!Ze)return;const e=mo(Xe?.value||"").toLocaleLowerCase(),t=hn.filter(t=>!e||String(t.title||"").toLocaleLowerCase().includes(e));if(Ze.innerHTML="",mn=null,et&&(et.disabled=!0),0===t.length){const e=document.createElement("p");return e.className="word-companion-empty-list",e.textContent="No scenes found.",void Ze.append(e)}for(const e of t){const t=Number.parseInt(e.sceneId||"",10);if(!Number.isInteger(t)||t<=0)continue;const n=document.createElement("label");n.className="word-companion-scene-option";const r=document.createElement("input");r.type="radio",r.name="word-companion-link-scene",r.value=String(t),r.addEventListener("change",()=>{mn=t,et&&(et.disabled=!1)});const o=document.createElement("span");o.textContent=e.title||"Untitled scene",n.append(r,o),Ze.append(n)}},Za=()=>{Qe?.close?Qe.close():Qe&&(Qe.hidden=!0)},ec=()=>{Jn=!1,Fr(),_n&&(_n=!1,nc(1e3))},tc=async(e={})=>{const t=e.source||"manual",n=Ca();if(!sn)return void Rr("No resolved PlotDirector scene.");if(!dn)return void Rr("No resolved PlotDirector chapter.");if(Wn)return void Rr("Refresh Current Scene before syncing.");const r=$o(),o=Yo();if(!r||!o)return void Rr("Bound manuscript metadata is unavailable.");if(Jn)return _n=!0,void Sr("Scene sync deferred; sync already running.");Tr(),Jn=!0,_n=!1;let a=e.snapshot||null;try{a=ka(a)?a:await xa()}catch(e){return Rr("Sync failed"),ko({lastError:vo(e)}),Sr("Scene sync failed."),void ec()}if(!ka(a))return Rr("Waiting for typing to pause"),Sr("Scene sync skipped (stale snapshot)."),void ec();const c=a.wordCount;if(!Number.isInteger(c)||c<0)return Rr("Sync failed"),Sr("Scene sync failed."),void ec();if(zn===a.sceneId&&Kn===c)return Rr("Synced"),Sr("Sync skipped (count unchanged)."),void ec();Sr("Scene word count changed."),ke&&(ke.disabled=!0,ke.textContent="Syncing..."),Rr("Syncing..."),Sr(`Scene sync started (${t}).`);try{const e=Ca(),t=await Wa("/api/word-companion/runtime/scene-word-count",{documentGuid:a.documentGuid||o,bookId:a.bookId||r.bookId,chapterId:a.chapterId,sceneId:a.sceneId,wordCount:c});if(br(`Word count sync API: ${Math.round(Ca()-e)}ms`),!ka(a))return void Sr("Scene sync result ignored (stale snapshot).");const i=t?.actualWords??c,s=new Date;zn=a.sceneId,Kn=i,Co(xe,zr(i)),Co(we,zr(i)),Co(Ne,Kr(s)),Co(Ce,Kr(s)),Rr("Synced"),Sr("Scene sync succeeded."),br(`Total word count sync: ${Math.round(Ca()-n)}ms`)}catch(e){Rr("Sync failed"),ko({lastError:vo(e)}),Sr("Scene sync failed.")}finally{ke&&(ke.textContent="Sync Current Scene"),ec()}},nc=(e=4e3)=>{Tr(),sn&&dn&&!Wn&&!Jn&&(Yn=window.setTimeout(()=>{Yn=null,tc({source:"automatic"})},e))},rc=()=>{Qn&&(window.clearTimeout(Qn),Qn=null)},oc=()=>{er=null,tr="",nr=[],rr=null,or="",rc()},ac=()=>{ar=null,cr="",ir=[],sr=null,dr=""},cc=()=>{lr=null,ur="",pr=[],hr=null,mr=""},ic=async(e=!1)=>{const t=Ao(),n=Yo();if(!t||!n)return nr=[],[];if(!e&&er===t.projectId&&tr===n&&nr.length>0)return nr;const r=await ja(`/api/word-companion/runtime/characters?projectId=${encodeURIComponent(t.projectId)}&documentGuid=${encodeURIComponent(n)}`);return er=t.projectId,tr=n,nr=Array.isArray(r?.characters)?r.characters:[],Sr("Character alias cache refreshed."),nr},sc=async(e=!1)=>{const t=Ao(),n=Yo();if(!t||!n)return ir=[],[];if(!e&&ar===t.projectId&&cr===n&&ir.length>0)return ir;const r=await ja(`/api/word-companion/runtime/assets?projectId=${encodeURIComponent(t.projectId)}&documentGuid=${encodeURIComponent(n)}`);return ar=t.projectId,cr=n,ir=Array.isArray(r?.assets)?r.assets:[],Sr(`Asset cache loaded: ${ir.length} aliases.`),ir},dc=async(e=!1)=>{const t=Ao(),n=Yo();if(!t||!n)return pr=[],[];if(!e&&lr===t.projectId&&ur===n&&pr.length>0)return pr;const r=await ja(`/api/word-companion/runtime/locations?projectId=${encodeURIComponent(t.projectId)}&documentGuid=${encodeURIComponent(n)}`);return lr=t.projectId,ur=n,pr=Array.isArray(r?.locations)?r.locations:[],Sr(`Location cache loaded: ${pr.length} aliases.`),pr},lc=(e,t)=>{const n=String(t||"").trim();if(!n)return!1;const r=(o=n,String(o||"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).replace(/\s+/g,"\\s+");var o;return new RegExp(`(^|[^\\p{L}\\p{N}_])${r}(?=$|[^\\p{L}\\p{N}_])`,"iu").test(e)},uc=e=>{if(e?.excludeFromCompanionDetection)return!1;const t=Number.parseInt(e?.detectionPriority||"0",10);return n=e?.matchText,String(n||"").trim().split(/\s+/).filter(Boolean).length>=2||Number.isInteger(t)&&t>=75;var n},pc=async()=>{if(Qn=null,!sn||Wn||!Yo())return;if(Xn)return Zn=!0,void Sr("Character suggestion detection deferred; detection already running.");Xn=!0,Zn=!1;const e=Ca();try{const t=await xa();if(!ka(t))return void Sr("Runtime suggestions skipped (stale snapshot).");const[n,r,o]=await Promise.all([ic(),sc(),dc()]);if(!ka(t))return void Sr("Runtime suggestions skipped after cache load (stale snapshot).");const a=t.sceneText||"",c=Ca(),i=((e,t)=>{if(!e||!Array.isArray(t)||0===t.length)return[];const n=new Map;for(const r of t){const t=Number.parseInt(r.characterId||"",10);!Number.isInteger(t)||t<=0||n.has(t)||lc(e,r.matchText)&&n.set(t,r.name||r.matchText||"Character")}return[...n.entries()].map(([e,t])=>({characterId:e,name:t}))})(a,n);br(`Character detection: ${Math.round(Ca()-c)}ms`);const s=i.map(e=>e.characterId),d=s.slice().sort((e,t)=>e-t).join(","),l=Ca(),u=((e,t)=>{if(!e||!Array.isArray(t)||0===t.length)return[];const n=new Map;for(const r of t){const t=Number.parseInt(r.assetId||"",10);!Number.isInteger(t)||t<=0||n.has(t)||lc(e,r.matchText)&&n.set(t,r.name||r.matchText||"Asset")}return[...n.entries()].map(([e,t])=>({assetId:e,name:t}))})(a,r);br(`Asset detection: ${Math.round(Ca()-l)}ms`);const p=u.map(e=>e.assetId),h=p.slice().sort((e,t)=>e-t).join(","),m=Ca(),y=((e,t)=>{if(!e||!Array.isArray(t)||0===t.length)return[];const n=new Map;for(const r of t){const t=Number.parseInt(r.locationId||"",10);!Number.isInteger(t)||t<=0||n.has(t)||!uc(r)||lc(e,r.matchText)&&n.set(t,r.name||r.matchText||"Location")}return[...n.entries()].map(([e,t])=>({locationId:e,name:t}))})(a,o);br(`Location detection: ${Math.round(Ca()-m)}ms`);const g=y.map(e=>e.locationId),f=g.slice().sort((e,t)=>e-t).join(",");if(!d||rr===sn&&or===d)Sr("Character suggestions skipped.");else{if(!ka(t))return void Sr("Character suggestions skipped before submit (stale snapshot).");const e=Ca(),n=await Wa("/api/word-companion/runtime/character-suggestions",{documentGuid:t.documentGuid,sceneId:t.sceneId,characterIds:s});if(br(`Character suggestion API: ${Math.round(Ca()-e)}ms`),!ka(t))return void Sr("Character suggestion result ignored (stale snapshot).");if(rr=t.sceneId,or=d,(n?.createdCount||0)>0){const e=i.slice(0,3).map(e=>e.name).join(", "),t=i.length>3?" +"+(i.length-3):"";Pr(e?`Characters detected: ${e}${t}`:n.message)}Sr(n?.message||"Character suggestions submitted.")}if(!h||sr===sn&&dr===h)Sr("Asset suggestions skipped.");else{if(!ka(t))return void Sr("Asset suggestions skipped before submit (stale snapshot).");Sr(`Asset matches found: ${u.map(e=>e.name).join(", ")}`);const e=Ca(),n=await Wa("/api/word-companion/runtime/asset-suggestions",{documentGuid:t.documentGuid,sceneId:t.sceneId,assetIds:p});if(br(`Asset suggestion API: ${Math.round(Ca()-e)}ms`),!ka(t))return void Sr("Asset suggestion result ignored (stale snapshot).");if(sr=t.sceneId,dr=h,(n?.createdCount||0)>0){const e=u.slice(0,3).map(e=>e.name).join(", "),t=u.length>3?" +"+(u.length-3):"";Pr(e?`Assets detected: ${e}${t}`:n.message)}Sr(n?.message||"Asset suggestions submitted.")}if(!f||hr===sn&&mr===f)Sr("Location suggestions skipped.");else{if(!ka(t))return void Sr("Location suggestions skipped before submit (stale snapshot).");Sr(`Location matches found: ${y.map(e=>e.name).join(", ")}`);const e=Ca(),n=await Wa("/api/word-companion/runtime/location-suggestions",{documentGuid:t.documentGuid,sceneId:t.sceneId,locationIds:g});if(br(`Location suggestion API: ${Math.round(Ca()-e)}ms`),!ka(t))return void Sr("Location suggestion result ignored (stale snapshot).");if(hr=t.sceneId,mr=f,(n?.createdCount||0)>0){const e=y.slice(0,3).map(e=>e.name).join(", "),t=y.length>3?" +"+(y.length-3):"";Pr(e?`Locations detected: ${e}${t}`:n.message)}Sr(n?.message||"Location suggestions submitted.")}br(`Total suggestion pass: ${Math.round(Ca()-e)}ms`)}catch(e){console.error("Unable to detect runtime suggestions.",e),ko({lastError:vo(e)})}finally{Xn=!1,Zn&&(Zn=!1,hc(1500))}},hc=(e=2500)=>{rc(),!sn||Wn||Xn?Xn&&(Zn=!0):Qn=window.setTimeout(()=>{pc()},e)},mc=async()=>{const e=Ao(),t=$o(),n=yo(tn,"chapter");if(go({projectId:e?.projectId,projectTitle:e?.title,bookId:t?.bookId,bookTitle:t?qo(t):void 0,detectedChapter:tn,detectedScene:nn,requestChapter:n,requestScene:"",result:"Not run",chapterId:null,sceneId:null}),!t)return lo("Not detected"),Pr("Select a PlotDirector book first."),!1;if(!tn)return lo("Not detected"),Pr("No chapter detected in Word. Use Heading 1 for chapters."),!1;lo("Not detected");try{const e=await wo(t.bookId),r=an?e.find(e=>e.chapterId===an):null,o=n.toLocaleLowerCase(),a=o?e.find(e=>yo(e.title,"chapter").toLocaleLowerCase()===o):null,c=r||a;return c?(ao(),Jr(null,c.chapterId,r?"Chapter anchor":"Chapter title"),un=r?"ChapterID Anchor":"Title Match",qr("Chapter linked to PlotDirector"),Pr("No scene detected in Word. Use Heading 2 for scenes."),go({result:"Chapter matched",chapterId:c.chapterId,sceneId:null}),!0):(Jr(null),qr("Chapter not found in PlotDirector."),Pr("Chapter not found in PlotDirector."),go({result:"Chapter not matched",chapterId:null,sceneId:null}),co("Chapter not found in PlotDirector."),!1)}catch(e){return lo("Not found in PlotDirector"),ko({lastError:vo(e)}),Pr("Unable to load PlotDirector chapter data."),!1}},yc=async()=>{const e=Ao(),t=$o(),n=yo(tn,"chapter"),r=yo(nn,"scene");if(go({projectId:e?.projectId,projectTitle:e?.title,bookId:t?.bookId,bookTitle:t?qo(t):void 0,detectedChapter:tn,detectedScene:nn,requestChapter:n,requestScene:r,result:"Not run",chapterId:null,sceneId:null}),Dr({anchorType:cn?"SceneID Anchor":an?"ChapterID Anchor":"Title Match",storedSceneId:cn,storedChapterId:an,resolutionMethod:"-"}),!t)return lo("Not detected"),Pr("Select a PlotDirector book first."),go({result:"Error"}),!1;if(!tn||!nn)return lo("Not detected"),Pr("No scene detected in Word. Use Heading 2 for scenes."),go({result:"Error"}),!1;ce&&(ce.disabled=!0,ce.textContent="Refreshing...");const o=()=>{ce&&(ce.disabled=!1,ce.textContent="Refresh PlotDirector Scene")};lo("Not detected"),Pr("Resolving PlotDirector scene...");try{if(cn){const e=await(async(e,t)=>{const n=await ja(`/api/word-companion/books/${e}/structure`),r=Array.isArray(n?.chapters)?n.chapters:[];for(const e of r){const n=Array.isArray(e.scenes)?e.scenes:[];for(const r of n)if(t(e,r))return{chapter:e,scene:r}}return null})(t.bookId,(e,t)=>t.sceneId===cn);if(e)return go({result:"Matched",chapterId:e.chapter.chapterId,sceneId:e.scene.sceneId}),await bo(t.bookId,e.scene.sceneId,e.chapter.chapterId,"Anchor","SceneID Anchor"),!0;pn=!0,un="SceneID Anchor",qr("Not found in PlotDirector"),Pr("Stored PlotDirector ID is invalid."),go({result:"Error",chapterId:an,sceneId:cn}),Dr({anchorType:"SceneID Anchor",storedSceneId:cn,storedChapterId:an,resolutionMethod:"Anchor"})}if(an){const e=(await fo(t.bookId)).find(e=>e.chapterId===an),n=e?(Array.isArray(e.scenes)?e.scenes:[]).find(e=>yo(e.title,"scene").toLocaleLowerCase()===r.toLocaleLowerCase()):null;if(n)return go({result:"Matched",chapterId:e.chapterId,sceneId:n.sceneId}),await bo(t.bookId,n.sceneId,e.chapterId,"Anchor","ChapterID Anchor"),!0;e&&!cn?(un="ChapterID Anchor",Jr(null,an,"Chapter anchor"),go({result:"Chapter matched",chapterId:an,sceneId:null})):cn||(un="ChapterID Anchor",go({result:"Chapter anchor not found",chapterId:an,sceneId:null}))}const e=await Wa(`/api/word-companion/books/${t.bookId}/resolve-scene`,{chapterTitle:n,sceneTitle:r});if(!e?.matched||!e.sceneId){const t=pn,n=Number.parseInt(e?.chapterId||"",10),r=Number.isInteger(dn)&&dn>0?dn:null,a=Number.isInteger(n)&&n>0?n:r,c=!!e?.chapterMatched||!!a;return lo("Not found in PlotDirector"),pn=t,c&&(Jr(null,a,a===r?"Chapter anchor":"Chapter title"),qr("Scene not found in PlotDirector.")),Pr(t?"Stored PlotDirector ID is invalid.":c?"Scene not found in PlotDirector.":"This chapter does not exist in PlotDirector. Create or link the chapter first."),go({result:"Not matched",chapterId:c?a:e?.chapterId,sceneId:e?.sceneId}),t||(c?(ao(),so("Scene not found in PlotDirector.")):(io(),co("Chapter not found in PlotDirector."))),o(),!1}const a=pn;return go({result:a?"Matched by title fallback":"Matched",chapterId:e.chapterId,sceneId:e.sceneId}),await bo(t.bookId,e.sceneId,e.chapterId,a?"Title fallback":"Title","Title Match"),a&&(pn=!0,Pr("Stored PlotDirector ID is invalid."),Ar()),!0}catch(e){const t=pn;return ko({lastError:vo(e)}),lo("Not found in PlotDirector"),pn=t,Pr(t?"Stored PlotDirector ID is invalid.":"Unable to load PlotDirector scene data."),go({result:"Error"}),!1}finally{o()}},gc=async()=>{if(Rn=null,Vn)return On=!0,void Sr("Runtime update deferred; update already running.");if(!_t||!$o())return Un=!1,void Sr("Runtime update skipped.");if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return Un=!1,Vr("Manual"),void Pr("Automatic scene tracking is unavailable in this Word version. Use Refresh Current Scene.");if(!Cn)return Un=!1,Vr("Manual"),void Pr("Document structure is not cached yet. Use Refresh Current Scene.");const e=Date.now()-Mn;if(Un&&e{Rn&&window.clearTimeout(Rn),Rn=window.setTimeout(gc,Math.max(0,e)),Vr("Waiting for typing to pause"),Sr("Runtime update scheduled.")},wc=()=>{Rn&&(window.clearTimeout(Rn),Rn=null),Un=!1,On=!1},Ic=()=>{((e="selection",t=1200)=>{if(Un=!0,Mn=Date.now(),Bn+=1,Gn=null,Tr(),rc(),Jn&&(_n=!0),Xn&&(Zn=!0),Sr(`${e} changed.`),Vn)return On=!0,void Vr("Waiting for typing to pause");fc(t)})("Selection")},Sc=()=>{if(Fn&&window.Office?.context?.document&&"function"==typeof window.Office.context.document.removeHandlerAsync&&window.Office?.EventType?.DocumentSelectionChanged)try{window.Office.context.document.removeHandlerAsync(window.Office.EventType.DocumentSelectionChanged,{handler:Ic}),Fn=!1}catch(e){console.warn("Unable to remove Word selection tracking handler.",e)}},bc=async(e,n)=>{if(Cn=null,Zr(),!e)return Kt=[],Lo(H,"Select a project first"),Lo(m,"Select a project first"),Lr(""),Eo(t,null),Jo(),lo("Not detected"),void Mr();Lo(H,"Loading books..."),Lr(""),lo("Not detected"),Mr("Select a book to analyse manuscript structure.");try{const r=await ja(`/api/word-companion/projects/${e}/books`);if(Kt=Array.isArray(r.books)?r.books:[],0===Kt.length)return Lo(H,"No books available."),Lo(m,"No books available."),Lr("No books available."),Eo(t,null),Jo(),void Oo("No books available.");Po(H,"Choose a book",Kt.map(e=>({...e,displayTitle:qo(e)})),"bookId","displayTitle");const o=Kt.find(e=>e.bookId===n);o&&H?(H.value=String(o.bookId),Eo(t,o.bookId)):Eo(t,null),((e=null)=>{if(!m)return;if(0===Kt.length)return void Lo(m,"No books available.");Po(m,"Choose a book",Kt.map(e=>({...e,displayTitle:qo(e)})),"bookId","displayTitle");const t=e||Number.parseInt(H?.value||"",10),n=Kt.find(e=>e.bookId===t);n&&(m.value=String(n.bookId)),Ro()})(o?.bookId||n),Jo(),lo(($o(),"Not detected")),Mr($o()?"Ready to analyse manuscript structure.":"Select a book to analyse manuscript structure."),Oo(jo()?"Ready to scan manuscript structure.":"Select a Book to begin.")}catch{Kt=[],Lo(H,"Unable to load books."),Lo(m,"Unable to load books."),Lr("Unable to load books."),Eo(t,null),Jo(),lo("Not detected"),Mr("Unable to load books."),Oo("Unable to load books.")}};for(const e of i)e.addEventListener("click",()=>vr(e.dataset.tabButton));xr(),G?.addEventListener("change",async()=>{const n=Number.parseInt(G.value||"",10);Xr(),h&&Number.isInteger(n)&&n>0&&(h.value=String(n)),Eo(e,Number.isInteger(n)&&n>0?n:null),Eo(t,null),lo("Not detected"),Mr(),Oo("Select a Book to begin."),await bc(n,null)}),H?.addEventListener("change",()=>{const e=Number.parseInt(H.value||"",10);Xr(),Eo(t,Number.isInteger(e)&&e>0?e:null),m&&Number.isInteger(e)&&e>0&&(m.value=String(e)),Jo(),lo("Not detected"),Mr($o()?"Ready to analyse manuscript structure.":"Select a book to analyse manuscript structure."),Oo(jo()?"Ready to scan manuscript structure.":"Select a Book to begin.")}),h?.addEventListener("change",async()=>{const n=Number.parseInt(h.value||"",10);Xr(),G&&Number.isInteger(n)&&n>0&&(G.value=String(n)),Eo(e,Number.isInteger(n)&&n>0?n:null),Eo(t,null),Oo("Select a Book to begin."),await bc(n,null)}),m?.addEventListener("change",()=>{const e=Number.parseInt(m.value||"",10);Xr(),H&&Number.isInteger(e)&&e>0&&(H.value=String(e)),Eo(t,Number.isInteger(e)&&e>0?e:null),Jo(),Oo(jo()?"Ready to scan manuscript structure.":"Select a Book to begin.")}),y?.addEventListener("input",Ro),g?.addEventListener("click",async()=>{const e=To(),t=String(y?.value||"").trim();if(e&&t){g.disabled=!0,Wo("Creating Book...");try{const n=await Wa(`/api/word-companion/projects/${e.projectId}/books`,{title:t});y&&(y.value=""),G&&(G.value=String(e.projectId)),await bc(e.projectId,n.bookId),m&&(m.value=String(n.bookId)),Wo("Ready to scan manuscript structure.")}catch(e){console.error("Unable to create Book from Word Companion.",e),Wo(`Unable to create Book: ${vo(e)}`)}finally{Ro()}}else Ro()}),f?.addEventListener("click",async()=>{const e=To(),t=jo();if(e&&t)if(Qt&&Xt&&window.Word&&"function"==typeof window.Word.run){f&&(f.disabled=!0,f.textContent="Scanning..."),Wo("Scanning manuscript structure...");try{const n=await window.Word.run(async e=>{const n=e.document.body.paragraphs;return n.load("text,styleBuiltIn,style"),await e.sync(),((e,t)=>{const n=[];let r=null,o=null,a=0;const c=[],i=new Set(["***","###"]),s=()=>{if(!r)return null;const e={title:`Scene ${r.scenes.length+1}`,sortOrder:10*(r.scenes.length+1),wordCount:0};return r.scenes.push(e),e};return e.forEach(e=>{const d=String(e.text||"").trim();if(!d)return;if(c.push(d),Ko(e,1))return r={title:d,sortOrder:10*(n.length+1),wordCount:0,scenes:[]},n.push(r),o=s(),void(a+=Qo(d));if(!r||!o)return;if(t&&i.has(d))return void(o=s());const l=Qo(d);r.wordCount+=l,o.wordCount+=l,a+=l}),{chapters:n,chapterCount:n.length,sceneCount:n.reduce((e,t)=>e+t.scenes.length,0),wordCount:a,documentText:c.join("\n")}})(n.items,!!t.usesExplicitScenes)});Nn=n,Ln=!1;const r=await Wa("/api/word-companion/manuscript/analyse",{projectId:e.projectId,bookId:t.bookId,documentGuid:Vo(),chapterCount:n.chapterCount,sceneCount:n.sceneCount,wordCount:n.wordCount});xn=r,(e=>{if(!S)return;S.innerHTML="";const t=document.createElement("strong");t.textContent="Manuscript Analysis",S.append(t);const n=document.createElement("dl"),r=[["Project",e.projectTitle],["Book",qo({title:e.bookTitle,subtitle:e.bookSubtitle})],["Chapters",Number(e.chapterCount||0).toLocaleString()],["Scenes",Number(e.sceneCount||0).toLocaleString()],["Words",Number(e.wordCount||0).toLocaleString()]];for(const[e,t]of r){const r=document.createElement("dt");r.textContent=e;const o=document.createElement("dd");o.textContent=t||"-",n.append(r,o)}S.append(n),jr(S,!1),jr(L,!1),Wo(e.message||"Preview generated."),Ro()})(r);try{const t=await Wa("/api/word-companion/manuscript/discover-characters",{projectId:e.projectId,documentText:n.documentText||""});En=Array.isArray(t?.candidates)?t.candidates:[],jr(b,!0),jr(v,!0)}catch(e){console.error("Unable to discover character candidates.",e),En=[],jr(b,!0),jr(v,!0)}ko({lastScan:"Success",lastError:"-",paragraphs:"-",heading1:String(n.chapterCount),heading2:"-"})}catch(e){console.error("Unable to scan manuscript for first-run import.",e),Oo(`Unable to scan manuscript: ${vo(e)}`),ko({lastScan:"Failure",lastError:vo(e)})}finally{f&&(f.textContent="Scan Manuscript"),Ro()}}else Oo("Word document access is unavailable.");else Oo("Select a Project and Book to begin.")}),P?.addEventListener("click",async()=>{const n=To(),o=jo();if(!(n&&o&&Nn&&xn?.canImport))return void Ro();let a=!1;if(!xn.requiresReplaceConfirmation||(a=await new Promise(e=>{if(!D||"function"!=typeof D.showModal)return void e(window.confirm("This Book already contains planned chapters and scenes.\n\nImporting this manuscript will replace the planned structure.\n\nContinue?"));const t=t=>{A?.removeEventListener("click",n),$?.removeEventListener("click",r),D?.removeEventListener("cancel",o),D?.close(),e(t)},n=()=>t(!0),r=()=>t(!1),o=e=>{e.preventDefault(),t(!1)};A?.addEventListener("click",n),$?.addEventListener("click",r),D?.addEventListener("cancel",o),D.showModal()}),a)){Dn=!0,Ro(),Wo("Importing manuscript structure...");try{const i=Vo(),s=await Wa("/api/word-companion/manuscript/import",{projectId:n.projectId,bookId:o.bookId,documentGuid:i,bindingVersion:1,replacePlanned:a,chapters:Nn.chapters});if(!s.imported)return xn={...xn,canImport:!s.requiresReplaceConfirmation,requiresReplaceConfirmation:!!s.requiresReplaceConfirmation,message:s.message||xn.message},Wo(s.message||"Import was not completed."),void Ro();const d=s.manuscriptDocument;await(c={documentGuid:d?.documentGuid||i,bookId:s.bookId,projectId:s.projectId,bindingVersion:d?.bindingVersion||1},new Promise((e,t)=>{const n=window.Office?.context?.document?.settings;n?(n.set(r.documentGuid,c.documentGuid),n.set(r.bookId,String(c.bookId)),n.set(r.projectId,String(c.projectId)),n.set(r.bindingVersion,String(c.bindingVersion||1)),n.saveAsync(n=>{n.status===window.Office.AsyncResultStatus.Succeeded?e():t(n.error||new Error("Unable to save Word document metadata."))})):t(new Error("Word document settings are unavailable."))})),Sn={documentGuid:d?.documentGuid||i,bookId:s.bookId,projectId:s.projectId,bindingVersion:d?.bindingVersion||1},Eo(e,s.projectId),Eo(t,s.bookId),G&&(G.value=String(s.projectId));const l=En;await bc(s.projectId,s.bookId),Nr("Connected"),Ln=!0,Pn=l.length>0,qn=Pn?Date.now():0,En=l,l.length>0?(Uo(!0),Go(l),jr(L,!0),jr(v,!1),Wo(s.message||"Manuscript structure imported."),Pr(s.message||"Manuscript structure imported."),window.setTimeout(Ro,750)):await Ra(s.message||"Manuscript structure imported.")}catch(e){console.error("Unable to import manuscript structure.",e),Wo(`Unable to import manuscript: ${vo(e)}`)}finally{Dn=!1,Ro()}var c}else Wo("Import cancelled.")}),x?.addEventListener("click",async()=>{const e=To()||Ao(),t=Bo();if(!Pn||Date.now()-qn<750||!e||0===t.length)Ro();else{An=!0,Ro(),Co(C,"Creating selected characters...");try{const n=await Wa("/api/word-companion/manuscript/create-discovered-characters",{projectId:e.projectId,candidateNames:t});Pr(n.message||"Characters created."),Co(C,`${n.createdCount||0} created, ${n.skippedCount||0} already existed.`),await Ra(n.message||"Characters created.")}catch(e){console.error("Unable to create discovered characters.",e),Co(C,`Unable to create characters: ${vo(e)}`)}finally{An=!1,Ro()}}}),N?.addEventListener("click",()=>Ra("Character creation skipped.")),E?.addEventListener("click",()=>Ra()),w?.addEventListener("click",()=>Uo(!1)),q?.addEventListener("click",()=>Oo("Import cancelled.")),_?.addEventListener("click",Na),ne?.addEventListener("click",Ea),re?.addEventListener("click",async()=>{const e=$o();if(!e||0===Or().length||$n)return void Br();if(!await Pa())return;$n=!0,Gr(),Ur("Applying structure sync...");const t={createdChapters:0,createdScenes:0,linkedChapters:0,linkedScenes:0,skipped:Array.isArray(In?.manualReview)?In.manualReview.length:0,failed:0},n=Or().filter(e=>"couldLink"===e.category&&"Chapter"===e.type),r=Or().filter(e=>"wouldCreateChapters"===e.category),o=Or().filter(e=>"couldLink"===e.category&&"Scene"===e.type),a=Or().filter(e=>"wouldCreateScenes"===e.category),c=[];let i="";const s=(e,t)=>{c.push({item:e,counterName:t})},d=async(e,n)=>{try{await(async e=>{if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)throw new Error("Word document access is unavailable.");await window.Word.run(async t=>{const n=await Sa(t),r="Chapter"===e.type?e.wordChapter:e.wordScene,o=Number.isInteger(r?.paragraphIndex)?n.bodyParagraphs[r.paragraphIndex]:null;if(!o)throw new Error("Unable to locate the Word heading.");if("Chapter"===e.type){const t=e.pdChapter?.chapterId;if(!t)throw new Error("Chapter ID is not available.");Ha(o,"PlotDirector Chapter",`PD-CHAPTER-${t}`,"PD-CHAPTER")}else{const t=e.pdScene?.sceneId;if(!t)throw new Error("Scene ID is not available.");Ha(o,"PlotDirector Scene",`PD-SCENE-${t}`,"PD-SCENE")}await t.sync()})})(e),qa(e,"Success"),t[n]+=1}catch(n){qa(e,"Failed",vo(n)),t.failed+=1}};try{for(const e of n)s(e,"linkedChapters");for(const n of r)try{await $a(e.bookId,n),s(n,"createdChapters")}catch(e){qa(n,"Failed",vo(e)),t.failed+=1}for(const e of o)s(e,"linkedScenes");for(const n of a)try{await Ta(e.bookId,n),s(n,"createdScenes")}catch(e){qa(n,"Failed",vo(e)),t.failed+=1}for(const e of c)await d(e.item,e.counterName);for(const e of In.manualReview||[])qa(e,"Skipped");Ia(In),i=(e=>`Structure Sync Complete. Created: ${e.createdChapters} Chapters, ${e.createdScenes} Scenes. Linked: ${e.linkedChapters} Chapters, ${e.linkedScenes} Scenes. Skipped: ${e.skipped} Manual Review items. Failed: ${e.failed} Items.`)(t),Ur(i)}finally{$n=!1,Gr(),i&&(Zr(),await Ea(),Ur(`${i} Preview refreshed.`))}}),bt?.addEventListener("click",()=>La(!0)),Ct?.addEventListener("click",()=>La(!1)),It?.addEventListener("cancel",e=>{e.preventDefault(),La(!1)}),ce?.addEventListener("click",yc),J?.addEventListener("click",async()=>{if(!$o())return Pr("Select a PlotDirector book first."),void lo("Not detected");wc(),_r(!0),Vr("Updating...");try{await Promise.all([ic(!0),sc(!0),dc(!0)]);if(!await Na())return;if(Yr(!1),!nn)return await mc(),void Vr("Current scene updated");await yc(),Vr("Current scene updated")}finally{_r(!1)}}),ke?.addEventListener("click",()=>tc({source:"manual"})),Re?.addEventListener("click",async()=>{if(sn)if(!Wn&&await(async()=>{if(!sn)return!1;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return Yr(!0,"The Word cursor is now in a different scene. Refresh Current Scene before saving."),!1;try{const e=await window.Word.run(async e=>await Sa(e)),t=e.currentChapter?.title||"",n=e.currentScene?.title||"",r=e.currentScene?.anchorId||null,o=e.currentChapter?.anchorId||null,a=Number.isInteger(r)&&r===sn,c=Number.isInteger(o)&&o===dn,i=yo(n,"scene").toLocaleLowerCase()===yo(gr||nn,"scene").toLocaleLowerCase(),s=yo(t,"chapter").toLocaleLowerCase()===yo(fr||tn,"chapter").toLocaleLowerCase();return a||i&&(c||s)?(Yr(!1),!0):(Yr(!0,"The Word cursor is now in a different scene. Refresh Current Scene before saving."),!1)}catch(e){return console.error("Unable to verify current Word scene before saving.",e),ko({lastError:vo(e)}),Yr(!0,"The Word cursor is now in a different scene. Refresh Current Scene before saving."),!1}})()){Re&&(Re.disabled=!0,Re.textContent="Saving...");try{await(e=`/api/word-companion/scenes/${sn}/links`,t={characterIds:Ba(Te),assetIds:Ba(je),locationIds:[],primaryLocationId:Ga()},ja(e,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})),(()=>{const e=new Set(Ba(Te)),t=new Set(Ba(je));Ir={characters:Ir.characters.map(t=>({...t,linked:e.has(Number.parseInt(uo(t,"character"),10))})),assets:Ir.assets.map(e=>({...e,linked:t.has(Number.parseInt(uo(e,"asset"),10))})),locations:Ir.locations,primaryLocationId:Ga()}})(),eo("Scene links saved successfully."),ko({lastError:"-"})}catch(e){eo("Unable to save scene links."),ko({lastError:vo(e)})}finally{Re&&(Re.disabled=!sn||Wn,Re.textContent="Save Scene Links")}var e,t}else eo("The Word cursor is now in a different scene. Refresh Current Scene before saving.");else eo("Link a PlotDirector scene first.")}),pe?.addEventListener("click",async()=>{await Fa()}),he?.addEventListener("click",async()=>{console.debug("Word Companion unlink clicked"),Pr("Preparing to unlink manuscript...");const e=(()=>{const e=Sn||Ho();if(e)return e;const t=bn?.manuscriptDocument?.documentGuid||"",n=Number.parseInt(bn?.bookId||"",10),r=Number.parseInt(bn?.projectId||"",10);return t&&Number.isInteger(n)&&n>0&&Number.isInteger(r)&&r>0?{documentGuid:t,bookId:n,projectId:r,bindingVersion:Number.parseInt(bn?.manuscriptDocument?.bindingVersion||"",10)||1}:null})();if(!e)return void Pr("This Word document is not linked.");if(!e.documentGuid||!Number.isInteger(e.bookId)||e.bookId<=0)return void Pr("Unable to unlink: bound document metadata is incomplete.");if(await new Promise(e=>{if(!T||"function"!=typeof T.showModal)return void e(window.confirm("This will remove PlotDirector binding metadata from this Word document.\n\nIf PlotDirector is reachable, it will also unlink this Book in PlotDirector.\n\nYour manuscript text will not be changed.\n\nContinue?"));const t=t=>{j?.removeEventListener("click",n),W?.removeEventListener("click",r),T?.removeEventListener("cancel",o),T?.close(),e(t)},n=()=>t(!0),r=()=>t(!1),o=e=>{e.preventDefault(),t(!1)};j?.addEventListener("click",n),W?.addEventListener("click",r),T?.addEventListener("cancel",o),T.showModal()})){Pr("Unlinking manuscript..."),he&&(he.disabled=!0,he.textContent="Unlinking...");try{await Wa("/api/word-companion/manuscript/unlink",{documentGuid:e.documentGuid,bookId:e.bookId}),await Fo(),await Oa("Manuscript unlinked.")}catch(e){console.error("Unable to unlink manuscript binding.",e),Pr("Unable to unlink from PlotDirector.");if(window.confirm("PlotDirector could not be updated, but you can still remove the binding from this Word document.\n\nYou may need to unlink the Book manually in PlotDirector later.\n\nRemove binding from this Word document only?"))try{await Fo(),await Oa("Word metadata removed. Unlink the Book manually in PlotDirector if it still shows as linked.")}catch(e){console.error("Unable to remove Word document metadata.",e),Pr(`Unable to remove Word metadata: ${vo(e)}`)}else Pr(`Unable to unlink manuscript: ${vo(e)}`)}finally{he&&(he.disabled=!1,he.textContent="Unlink this Word document"),Wr()}}else Pr("Unlink cancelled.")}),Ge?.addEventListener("click",async()=>{const e=$o();if(!e||!tn||dn)return void co("Chapter not found in PlotDirector.");const t=mo(tn),n=await((e,t)=>(Co(yt,`"${e}"`),Co(gt,`"${t}"`),mt?new Promise(e=>{wn=e,mt.showModal?mt.showModal():mt.hidden=!1}):Promise.resolve(window.confirm(`Create PlotDirector chapter:\n\n"${e}"\n\nin book:\n\n"${t}"\n\n?`))))(t,qo(e)||"selected book");if(n){Ge&&(Ge.disabled=!0,Ge.textContent="Creating...");try{const n=Number.isInteger(on)&&on>0?10*on:null,r=await Wa(`/api/word-companion/books/${e.bookId}/chapters`,{title:t,sortOrder:n});if(!r?.chapterId)throw new Error("Chapter creation did not return a chapter ID.");Zr(),Jr(null,r.chapterId,"Manual chapter link");if(!await Va("Chapter created and linked successfully."))return;await Ya("Chapter created and linked successfully.")}catch(e){no("Unable to create chapter."),ko({lastError:vo(e)})}finally{Ge&&(Ge.disabled=!ro(),Ge.textContent="Create Chapter in PlotDirector")}}}),He?.addEventListener("click",async()=>{const e=$o();if(e&&tn&&!dn){He&&(He.disabled=!0,He.textContent="Loading...");try{gn=await wo(e.bookId),fn=null,dt&&(dt.value=""),Co(ht,""),_a(),st?.showModal?st.showModal():st&&(st.hidden=!1)}catch(e){no("Unable to load chapters."),ko({lastError:vo(e)})}finally{He&&(He.disabled=!ro(),He.textContent="Link to Existing Chapter")}}else co("Chapter not found in PlotDirector.")}),dt?.addEventListener("input",_a),ut?.addEventListener("click",async()=>{const e=gn.find(e=>e.chapterId===fn);if(e){ut&&(ut.disabled=!0,ut.textContent="Linking...");try{Jr(null,e.chapterId,"Manual chapter link");if(!await Va("Chapter linked successfully."))return;za(),await Ya("Chapter linked successfully.")}catch(e){Co(ht,"Unable to link chapter."),no("Unable to link chapter."),ko({lastError:vo(e)})}finally{ut&&(ut.disabled=!fn,ut.textContent="Link Chapter")}}else Co(ht,"Select a chapter.")}),pt?.addEventListener("click",za),ft?.addEventListener("click",()=>Ja(!0)),wt?.addEventListener("click",()=>Ja(!1)),mt?.addEventListener("cancel",e=>{e.preventDefault(),Ja(!1)}),_e?.addEventListener("click",async()=>{const e=$o();if(!e||!nn)return void so("Scene not found in PlotDirector.");const t=yo(nn,"scene"),n=yo(tn,"chapter"),r=await((e,t)=>(Co(ot,`"${e}"`),Co(at,`"${t}"`),rt?new Promise(e=>{yn=e,rt.showModal?rt.showModal():rt.hidden=!1}):Promise.resolve(window.confirm(`Create PlotDirector scene:\n\n"${e}"\n\nwithin chapter:\n\n"${t}"\n\n?`))))(t,n);if(r){_e&&(_e.disabled=!0,_e.textContent="Creating...");try{const n=await So();if(!n)return void so("This chapter does not exist in PlotDirector. Create or link the chapter first.");const r=await Wa(`/api/word-companion/books/${e.bookId}/chapters/${n.chapterId}/scenes`,{sceneTitle:t});if(!r?.sceneId||!r?.chapterId)throw new Error("Scene creation did not return a scene ID.");Zr(),await Ka(r.sceneId,r.chapterId,"Scene created and linked successfully.")}catch(e){to("Unable to create scene."),ko({lastError:vo(e)})}finally{_e&&(_e.disabled=!oo(),_e.textContent="Create Scene in PlotDirector")}}}),ze?.addEventListener("click",async()=>{const e=$o();if(e&&nn){ze&&(ze.disabled=!0,ze.textContent="Loading...");try{const t=await fo(e.bookId),n=Io(t);if(!n)return void so("This chapter does not exist in PlotDirector. Create or link the chapter first.");hn=Array.isArray(n.scenes)?n.scenes:[],mn=null,Xe&&(Xe.value=""),Co(nt,""),Xa(),Qe?.showModal?Qe.showModal():Qe&&(Qe.hidden=!1)}catch(e){to("Unable to load scenes."),ko({lastError:vo(e)})}finally{ze&&(ze.disabled=!oo(),ze.textContent="Link to Existing Scene")}}else so("Scene not found in PlotDirector.")}),Xe?.addEventListener("input",Xa),et?.addEventListener("click",async()=>{const e=$o(),t=hn.find(e=>e.sceneId===mn);if(e&&t){et&&(et.disabled=!0,et.textContent="Linking...");try{const e=await So();if(!e)throw new Error("This chapter does not exist in PlotDirector. Create or link the chapter first.");Za(),await Ka(t.sceneId,e.chapterId,"Scene linked successfully.")}catch(e){Co(nt,"Unable to link scene."),to("Unable to link scene."),ko({lastError:vo(e)})}finally{et&&(et.disabled=!mn,et.textContent="Link Scene")}}else Co(nt,"Select a scene.")}),tt?.addEventListener("click",Za),ct?.addEventListener("click",()=>Qa(!0)),it?.addEventListener("click",()=>Qa(!1)),rt?.addEventListener("cancel",e=>{e.preventDefault(),Qa(!1)}),Tt?.addEventListener("click",async()=>{Tt&&(Tt.disabled=!0,Tt.textContent="Running...");try{if(await xo(),!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return void ko({lastScan:"Failure",lastError:"Word document access is unavailable.",paragraphs:"-",heading1:"-",heading2:"-"});const e=await window.Word.run(async e=>{const t=e.document.body.paragraphs;return t.load("items"),await e.sync(),t.items.length});ko({lastScan:"Success",lastError:"-",paragraphs:String(e)})}catch(e){console.error("Word Companion diagnostics failed.",e);const t=vo(e);ko({lastScan:"Failure",lastError:t}),Pr(`Unable to scan the Word document: ${t}`)}finally{Tt&&(Tt.disabled=!1,Tt.textContent="Run Diagnostics")}});const Cc=_t?(async()=>{Lo(G,"Loading projects..."),Lo(H,"Select a project first"),Lo(h,"Loading projects..."),Lo(m,"Select a project first"),Er(""),Lr("");try{const n=await ja("/api/word-companion/projects");if(zt=Array.isArray(n.projects)?n.projects:[],0===zt.length)return Lo(G,"No projects available."),Lo(h,"No projects available."),Er("No projects available."),Eo(e,null),Eo(t,null),Jo(),void Oo("No projects available.");Po(G,"Choose a project",zt,"projectId","title"),Mo();const r=No(e),o=zt.find(e=>e.projectId===r);o&&G?(G.value=String(o.projectId),h&&(h.value=String(o.projectId)),Eo(e,o.projectId),await bc(o.projectId,No(t))):(Eo(e,null),Eo(t,null),Jo(),Oo("Select a Project and Book to begin."))}catch{zt=[],Kt=[],Lo(G,"Unable to connect to PlotDirector."),Lo(H,"Select a project first"),Lo(h,"Unable to connect to PlotDirector."),Lo(m,"Select a project first"),Nr("Unable to connect to PlotDirector."),Er("Unable to connect to PlotDirector."),Eo(e,null),Eo(t,null),Jo(),Oo("Unable to connect to PlotDirector.")}})():Promise.resolve();if(_t||(Lo(G,"Please sign in to PlotDirector."),Lo(H,"Please sign in to PlotDirector."),Lo(h,"Please sign in to PlotDirector."),Lo(m,"Please sign in to PlotDirector."),Jo()),!window.Office||"function"!=typeof window.Office.onReady)return Cr("Word Companion ready"),Pr("Word document access is unavailable."),Vr("Manual"),void ko({host:"Unavailable",platform:"Unavailable",ready:"No",wordApi:"No"});xo().then(async()=>{Cr("Word Companion ready"),await Cc,await(async()=>{if(!_t||!Xt)return void Uo(!1);const n=Ho();if(n)try{const r=await ja(`/api/word-companion/runtime/book/${n.bookId}?documentGuid=${encodeURIComponent(n.documentGuid)}`),o=r?.manuscriptDocument;if(r?.bookId===n.bookId&&r?.projectId===n.projectId&&o&&String(o.documentGuid).toLowerCase()===n.documentGuid.toLowerCase())return Sn=n,Qr(r),Eo(e,r.projectId),Eo(t,r.bookId),G&&(G.value=String(r.projectId)),await bc(r.projectId,r.bookId),Uo(!1),Nr("Connected"),Lr("Bound manuscript detected."),void await Ma()}catch{}Sn=null,Xr(),Mo(),To()?await bc(To().projectId,null):Lo(m,"Select a project first"),Oo("Select a Project and Book to begin."),Uo(!0)})(),Xt?(()=>{if(_t){if(!window.Office?.context?.document||"function"!=typeof window.Office.context.document.addHandlerAsync||!window.Office?.EventType?.DocumentSelectionChanged)return Vr("Manual"),void Pr("Automatic scene tracking is unavailable in this Word version. Use Refresh Current Scene.");try{window.Office.context.document.addHandlerAsync(window.Office.EventType.DocumentSelectionChanged,Ic,e=>{e?.status===window.Office.AsyncResultStatus.Succeeded?(Fn=!0,Vr("Live")):(Vr("Manual"),Pr("Automatic scene tracking is unavailable in this Word version. Use Refresh Current Scene."))}),window.addEventListener("beforeunload",Sc)}catch(e){console.warn("Unable to register Word selection tracking handler.",e),Vr("Manual"),Pr("Automatic scene tracking is unavailable in this Word version. Use Refresh Current Scene.")}}})():(Pr("Word document access is unavailable."),Vr("Manual"))}).catch(e=>{console.error("Office readiness check failed.",e),Nr("Unable to connect to PlotDirector."),Cr("Word Companion unavailable"),Pr("Word document access is unavailable."),ko({ready:"No",wordApi:"No",lastScan:"Failure"})})})(); \ No newline at end of file +(()=>{const e="plotdirector.word.projectId",t="plotdirector.word.bookId",n="plotdirector.word.activeTab",r={documentGuid:"plotdirector.word.documentGuid",bookId:"plotdirector.word.boundBookId",projectId:"plotdirector.word.boundProjectId",bindingVersion:"plotdirector.word.bindingVersion"},o=new Set(["scene","review","maintenance","diagnostics"]),a=document.querySelector(".word-companion-shell"),c=document.querySelector(".word-companion-tabs"),i=[...document.querySelectorAll("[data-tab-button]")],s=[...document.querySelectorAll("[data-tab-panel]")],d=document.querySelector("[data-linked-manuscript-card]"),l=document.querySelector("[data-linked-project-title]"),u=document.querySelector("[data-linked-book-title]"),p=document.querySelector("[data-first-run-wizard]"),h=document.querySelector("[data-first-run-project-select]"),m=document.querySelector("[data-first-run-book-select]"),y=document.querySelector("[data-first-run-new-book-title]"),g=document.querySelector("[data-first-run-create-book]"),f=document.querySelector("[data-first-run-scan]"),w=document.querySelector("[data-first-run-cancel]"),I=document.querySelector("[data-first-run-status]"),S=document.querySelector("[data-first-run-summary]"),b=document.querySelector("[data-first-run-character-section]"),C=document.querySelector("[data-first-run-character-status]"),k=document.querySelector("[data-first-run-character-candidates]"),v=document.querySelector("[data-first-run-character-actions]"),x=document.querySelector("[data-first-run-create-characters]"),N=document.querySelector("[data-first-run-skip-characters]"),E=document.querySelector("[data-first-run-continue]"),L=document.querySelector("[data-first-run-import-actions]"),P=document.querySelector("[data-first-run-import]"),q=document.querySelector("[data-first-run-import-cancel]"),D=document.querySelector("[data-first-run-replace-dialog]"),A=document.querySelector("[data-first-run-replace-confirm]"),$=document.querySelector("[data-first-run-replace-cancel]"),T=document.querySelector("[data-unlink-word-document-dialog]"),j=document.querySelector("[data-unlink-word-document-confirm]"),W=document.querySelector("[data-unlink-word-document-cancel]"),R=document.querySelector("[data-office-status]"),U=document.querySelector("[data-connection-status]"),M=document.querySelector("[data-summary-connection]"),O=document.querySelector("[data-summary-project]"),B=document.querySelector("[data-summary-book]"),G=document.querySelector("[data-project-select]"),H=document.querySelector("[data-book-select]"),F=document.querySelector("[data-runtime-book-selectors]"),V=document.querySelector("[data-project-message]"),Y=document.querySelector("[data-book-message]"),J=document.querySelector("[data-refresh-current-scene]"),_=document.querySelector("[data-refresh-document]"),z=document.querySelector("[data-current-chapter]"),K=document.querySelector("[data-current-scene]"),Q=document.querySelector("[data-current-word-count]"),X=document.querySelector("[data-scene-tracking-status]"),Z=document.querySelector("[data-document-message]"),ee=document.querySelector("[data-sync-note]"),te=document.querySelector("[data-document-outline]"),ne=document.querySelector("[data-analyse-manuscript-structure]"),re=document.querySelector("[data-apply-structure-sync]"),oe=document.querySelector("[data-structure-preview-status]"),ae=document.querySelector("[data-structure-preview-results]"),ce=document.querySelector("[data-refresh-plotdirector-scene]"),ie=document.querySelector("[data-plotdirector-scene-status]"),se=document.querySelector("[data-anchor-status]"),de=document.querySelector("[data-anchor-book-id]"),le=document.querySelector("[data-anchor-chapter-id]"),ue=document.querySelector("[data-anchor-scene-id]"),pe=document.querySelector("[data-attach-plotdirector-ids]"),he=document.querySelector("[data-unlink-word-document]"),me=document.querySelector("[data-plotdirector-scene-details]"),ye=document.querySelector("[data-plotdirector-scene-title]"),ge=document.querySelector("[data-plotdirector-revision-status]"),fe=document.querySelector("[data-plotdirector-estimated-words]"),we=document.querySelector("[data-plotdirector-actual-words]"),Ie=document.querySelector("[data-plotdirector-blocked-status]"),Se=document.querySelector("[data-plotdirector-blocked-reason-row]"),be=document.querySelector("[data-plotdirector-blocked-reason]"),Ce=document.querySelector("[data-runtime-last-sync]"),ke=document.querySelector("[data-sync-scene-progress]"),ve=document.querySelector("[data-sync-word-count]"),xe=document.querySelector("[data-sync-plotdirector-count]"),Ne=document.querySelector("[data-sync-last-synced]"),Ee=document.querySelector("[data-sync-status]"),Le=document.querySelector("[data-writing-brief-block]"),Pe=document.querySelector("[data-writing-brief]"),qe=document.querySelector("[data-plotdirector-link-groups]"),De=document.querySelector("[data-character-review-summary]"),Ae=document.querySelector("[data-asset-review-summary]"),$e=document.querySelector("[data-location-review-summary]"),Te=document.querySelector("[data-character-chips]"),je=document.querySelector("[data-asset-chips]"),We=(document.querySelector("[data-location-chips]"),document.querySelector("[data-primary-location-select]")),Re=document.querySelector("[data-save-scene-links]"),Ue=document.querySelector("[data-scene-links-status]"),Me=document.querySelector("[data-links-editing-scene]"),Oe=document.querySelector("[data-chapter-create-link]"),Be=document.querySelector("[data-chapter-create-link-chapter]"),Ge=document.querySelector("[data-create-plotdirector-chapter]"),He=document.querySelector("[data-link-existing-chapter]"),Fe=document.querySelector("[data-chapter-create-link-status]"),Ve=document.querySelector("[data-scene-create-link]"),Ye=document.querySelector("[data-create-link-chapter]"),Je=document.querySelector("[data-create-link-scene]"),_e=document.querySelector("[data-create-plotdirector-scene]"),ze=document.querySelector("[data-link-existing-scene]"),Ke=document.querySelector("[data-create-link-status]"),Qe=document.querySelector("[data-link-existing-dialog]"),Xe=document.querySelector("[data-link-scene-search]"),Ze=document.querySelector("[data-link-scene-options]"),et=document.querySelector("[data-link-selected-scene]"),tt=document.querySelector("[data-link-dialog-cancel]"),nt=document.querySelector("[data-link-dialog-status]"),rt=document.querySelector("[data-create-scene-dialog]"),ot=document.querySelector("[data-create-dialog-scene]"),at=document.querySelector("[data-create-dialog-chapter]"),ct=document.querySelector("[data-create-dialog-confirm]"),it=document.querySelector("[data-create-dialog-cancel]"),st=document.querySelector("[data-link-existing-chapter-dialog]"),dt=document.querySelector("[data-link-chapter-search]"),lt=document.querySelector("[data-link-chapter-options]"),ut=document.querySelector("[data-link-selected-chapter]"),pt=document.querySelector("[data-link-chapter-dialog-cancel]"),ht=document.querySelector("[data-link-chapter-dialog-status]"),mt=document.querySelector("[data-create-chapter-dialog]"),yt=document.querySelector("[data-create-chapter-dialog-chapter]"),gt=document.querySelector("[data-create-chapter-dialog-book]"),ft=document.querySelector("[data-create-chapter-dialog-confirm]"),wt=document.querySelector("[data-create-chapter-dialog-cancel]"),It=document.querySelector("[data-apply-structure-sync-dialog]"),St=document.querySelector("[data-apply-structure-sync-summary]"),bt=document.querySelector("[data-apply-structure-sync-confirm]"),Ct=document.querySelector("[data-apply-structure-sync-cancel]"),kt=document.querySelector("[data-resolve-project-id]"),vt=document.querySelector("[data-resolve-project-title]"),xt=document.querySelector("[data-resolve-book-id]"),Nt=document.querySelector("[data-resolve-book-title]"),Et=document.querySelector("[data-resolve-detected-chapter]"),Lt=document.querySelector("[data-resolve-detected-scene]"),Pt=document.querySelector("[data-resolve-request-chapter]"),qt=document.querySelector("[data-resolve-request-scene]"),Dt=document.querySelector("[data-resolve-result]"),At=document.querySelector("[data-resolve-chapter-id]"),$t=document.querySelector("[data-resolve-scene-id]"),Tt=document.querySelector("[data-run-diagnostics]"),jt=document.querySelector("[data-diagnostic-host]"),Wt=document.querySelector("[data-diagnostic-platform]"),Rt=document.querySelector("[data-diagnostic-ready]"),Ut=document.querySelector("[data-diagnostic-word-api]"),Mt=document.querySelector("[data-diagnostic-last-scan]"),Ot=document.querySelector("[data-diagnostic-last-error]"),Bt=document.querySelector("[data-diagnostic-anchor-type]"),Gt=document.querySelector("[data-diagnostic-stored-scene-id]"),Ht=document.querySelector("[data-diagnostic-stored-chapter-id]"),Ft=document.querySelector("[data-diagnostic-resolution-method]"),Vt=document.querySelector("[data-diagnostic-paragraphs]"),Yt=document.querySelector("[data-diagnostic-heading1]"),Jt=document.querySelector("[data-diagnostic-heading2]"),_t="true"===a?.dataset.authenticated;let zt=[],Kt=[],Qt=!1,Xt=!1,Zt="Unknown",en="Unknown",tn="",nn="",rn=null,on=null,an=null,cn=null,sn=null,dn=null,ln="",un="Title Match",pn=!1,hn=[],mn=null,yn=null,gn=[],fn=null,wn=null,In=null,Sn=null,bn=null,Cn=null,kn=null,vn=null,xn=null,Nn=null,En=[],Ln=!1,Pn=!1,qn=0,Dn=!1,An=!1,$n=!1,Tn=null,jn="Manual",Wn=!1,Rn=null,Un=!1,Mn=0,On=!1,Bn=0,Gn=null;const Hn=1200;let Fn=!1,Vn=!1,Yn=null,Jn=!1,_n=!1,zn=null,Kn=null,Qn=null,Xn=!1,Zn=!1,er=null,tr="",nr=[],rr=null,or="",ar=null,cr="",ir=[],sr=null,dr="",lr=null,ur="",pr=[],hr=null,mr="",yr="",gr="",fr="",wr=0,Ir={characters:[],assets:[],locations:[],primaryLocationId:null};const Sr=e=>{const t=Date.now();t-wr<1e3||(wr=t,console.debug(`[Word Companion Runtime] ${e}`))},br=e=>{console.debug(`[Word Companion Timing] ${e}`)},Cr=e=>{R&&(R.textContent=e)},kr=e=>"links"===e?"review":"structure"===e?"maintenance":e,vr=(e,t=!0)=>{const r=kr(e),a=o.has(r)&&i.some(e=>e.dataset.tabButton===r)?r:"scene";for(const e of i){const t=e.dataset.tabButton===a;e.classList.toggle("is-active",t),e.setAttribute("aria-selected",t?"true":"false")}for(const e of s){const t=e.dataset.tabPanel===a;e.classList.toggle("is-active",t),e.hidden=!t}t&&((e,t)=>{try{t?window.localStorage.setItem(e,String(t)):window.localStorage.removeItem(e)}catch{}})(n,a)},xr=()=>{const e=kr((e=>{try{return window.localStorage.getItem(e)||""}catch{return""}})(n));vr(o.has(e)?e:"scene",!1)},Nr=e=>{U&&(U.textContent=e),M&&(M.textContent=e)},Er=e=>{V&&(V.textContent=e)},Lr=e=>{Y&&(Y.textContent=e)},Pr=e=>{Z&&(Z.textContent=e)},qr=e=>{ie&&(ie.textContent=e)},Dr=e=>{const t=t=>Object.prototype.hasOwnProperty.call(e,t);t("anchorType")&&Co(Bt,zr(e.anchorType)),t("storedSceneId")&&Co(Gt,zr(e.storedSceneId)),t("storedChapterId")&&Co(Ht,zr(e.storedChapterId)),t("resolutionMethod")&&Co(Ft,zr(e.resolutionMethod))},Ar=()=>{const e=$o(),t=Number.isInteger(sn)&&sn>0&&cn===sn,n=!Number.isInteger(dn)||dn<=0||an===dn,r=t&&n;Co(se,r?"Attached to PlotDirector":"Not attached"),Co(de,e?.bookId?String(e.bookId):"-"),Co(le,Number.isInteger(dn)&&dn>0?String(dn):"-"),Co(ue,Number.isInteger(sn)&&sn>0?String(sn):"-"),pe&&(jr(pe,r&&!pn),pe.disabled=!sn||r&&!pn,pe.textContent=cn&&!r?"Reattach PlotDirector IDs":"Attach PlotDirector IDs"),Dr({anchorType:un||"Title Match",storedSceneId:cn,storedChapterId:an,resolutionMethod:ln})},$r=(e,t,n,r=null,o=null,a=null)=>{const c=e||"",i=t||"",s=Number.isInteger(n)?n:null,d=Number.isInteger(a)&&a>0?a:null,l=Number.isInteger(r)&&r>0?r:null,u=Number.isInteger(o)&&o>0?o:null,p=tn===c&&nn===i&&rn===s&&on===d&&an===l&&cn===u;tn=e||"",nn=t||"",rn=Number.isInteger(n)?n:null,on=Number.isInteger(a)&&a>0?a:null,an=Number.isInteger(r)&&r>0?r:null,cn=Number.isInteger(o)&&o>0?o:null,p||(z&&(z.textContent=e||"Not detected"),K&&(K.textContent=t||"Not detected"),Q&&(Q.textContent=Number.isInteger(n)?String(n):"-"),Co(ve,Number.isInteger(n)?String(n):"-"),Ar())},Tr=()=>{Yn&&(window.clearTimeout(Yn),Yn=null)},jr=(e,t)=>{e&&(e.hidden=t)},Wr=()=>{jr(he,!Sn)},Rr=e=>{Co(Ee,e)},Ur=e=>{Co(oe,e)},Mr=(e="Select a project and book to analyse manuscript structure.")=>{if(In=null,ae){ae.innerHTML="";const e=document.createElement("p");e.textContent="No preview generated.",ae.append(e)}Ur(e),Br()},Or=(e=In)=>((e=In)=>da.flatMap(t=>Array.isArray(e?.[t.key])?e[t.key]:[]))(e).filter(e=>"couldLink"===e.category||"wouldCreateChapters"===e.category||"wouldCreateScenes"===e.category),Br=()=>{re&&(re.disabled=$n||0===Or().length)},Gr=()=>{ne&&(ne.disabled=$n||!Ao()||!$o()),Br()},Hr=()=>{Me&&(Me.textContent=sn?`Editing links for: ${gr||nn||"Current scene"}`:"Link a PlotDirector scene first.")},Fr=()=>{const e=Wn||!sn,t=e||!dn||Jn;ke&&(ke.disabled=t),Re&&(Re.disabled=e),We&&(We.disabled=e);for(const t of[Te,je])for(const n of t?[...t.querySelectorAll("input[type='checkbox']")]:[])n.disabled=e},Vr=e=>{"Live"!==e&&"Manual"!==e||(jn=e),Co(X,e||jn||"Manual")},Yr=(e,t="")=>{Wn=!!e,Wn&&(Tr(),rc()),Co(X,Wn?"Stale":jn),Fr(),t&&(Pr(t),eo(t))},Jr=(e,t=null,n="")=>{sn=Number.isInteger(e)&&e>0?e:null,dn=Number.isInteger(t)&&t>0?t:null,ln=n||"",sn!==zn&&(Kn=null),sn||(Tr(),rc()),Fr(),Rr(Wn?"Refresh Current Scene before syncing.":sn?"Ready to sync.":"No resolved PlotDirector scene."),eo(Wn?"Refresh Current Scene before saving.":sn?"Ready to save.":"Link a PlotDirector scene first."),Hr(),Ar()},_r=e=>{J&&(J.disabled=e,J.textContent=e?"Refreshing...":"Refresh Current Scene")},zr=e=>null==e||""===e?"-":String(e),Kr=e=>{if(!e)return"-";const t=e instanceof Date?e:new Date(e);if(Number.isNaN(t.getTime()))return"-";const n=new Date;return`Last synced: ${t.toDateString()===n.toDateString()?"Today":t.toLocaleDateString()} ${t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})}`},Qr=e=>{bn=e||null;const t=bn?.lastSyncUtc||bn?.manuscriptDocument?.lastSyncUtc;Co(Ce,Kr(t)),Co(Ne,Kr(t)),Do()},Xr=()=>{Cn=null,kn=null,vn=null,Bn+=1,Gn=null,oc(),ac(),cc(),Qr(null)},Zr=()=>{kn=null,vn=null},eo=e=>{Co(Ue,e)},to=e=>{Co(Ke,e)},no=e=>{Co(Fe,e)},ro=()=>!!$o()&&!!tn&&!dn,oo=()=>!!$o()&&!!nn&&Number.isInteger(dn)&&dn>0,ao=()=>{jr(Oe,!0),no(""),Ge&&(Ge.disabled=!0,Ge.textContent="Create Chapter in PlotDirector"),He&&(He.disabled=!0,He.textContent="Link to Existing Chapter")},co=(e="")=>{Co(Be,zr(tn)),jr(Oe,!1),no(e);const t=ro();Ge&&(Ge.disabled=!t,Ge.textContent="Create Chapter in PlotDirector"),He&&(He.disabled=!t,He.textContent="Link to Existing Chapter")},io=()=>{jr(Ve,!0),to(""),_e&&(_e.disabled=!0,_e.textContent="Create Scene in PlotDirector"),ze&&(ze.disabled=!0,ze.textContent="Link to Existing Scene")},so=(e="")=>{Co(Ye,zr(tn)),Co(Je,zr(nn)),jr(Ve,!1),to(e);const t=oo();_e&&(_e.disabled=!t,_e.textContent="Create Scene in PlotDirector"),ze&&(ze.disabled=!t,ze.textContent="Link to Existing Scene")},lo=e=>{qr(e),jr(me,!0),jr(Le,!0),jr(qe,!1),ao(),io(),ln="",gr="",fr="",un=cn?"SceneID Anchor":an?"ChapterID Anchor":"Title Match",pn=!1,Ir={characters:[],assets:[],locations:[],primaryLocationId:null},po(Te,[],"character"),po(je,[],"asset"),ho([],null,!1),_o(),Jr(null),Co(xe,"-"),Co(ye,"-"),Co(ge,"-"),Co(fe,"-"),Co(we,"-"),Co(Ie,"-"),Co(be,"-"),jr(Se,!0),Ar(),Hr()},uo=(e,t)=>"asset"===t?e?.assetId||e?.AssetId||e?.storyAssetId||e?.StoryAssetId||0:"location"===t?e?.locationId||e?.LocationId||0:e?.characterId||e?.CharacterId||0,po=(e,t,n,r=!1)=>{if(!e)return;e.innerHTML="";const o=Array.isArray(t)?t:[];if(0===o.length){const t=document.createElement("p");return t.className="word-companion-empty-list",t.textContent="None",void e.append(t)}for(const t of o){const o=Number.parseInt(uo(t,n),10);if(!Number.isInteger(o)||o<=0)continue;const a=document.createElement("label");a.className="word-companion-check-item";const c=document.createElement("input");c.type="checkbox",c.value=String(o),c.checked=!!t.linked,c.disabled=!r;const i=document.createElement("span");i.textContent=t.name||"Unnamed",a.append(c,i),e.append(a)}},ho=(e,t,n=!1)=>{if(!We)return;We.innerHTML="";const r=document.createElement("option");r.value="",r.textContent="None",We.append(r);const o=Number.parseInt(t||"",10);for(const t of Array.isArray(e)?e:[]){const e=Number.parseInt(uo(t,"location"),10);if(!Number.isInteger(e)||e<=0)continue;const n=document.createElement("option");n.value=String(e),n.textContent=t.name||"Unnamed",n.selected=e===o,We.append(n)}We.disabled=!n},mo=e=>String(e||"").trim().replace(/\s+/g," "),yo=(e,t)=>{const n=mo(e);if(!n)return"";const r=new RegExp(`^${"scene"===t?"scene":"chapter"}\\s+(?:\\d+|[ivxlcdm]+|one|two|three|four|five|six|seven|eight|nine|ten|eleven|twelve|thirteen|fourteen|fifteen|sixteen|seventeen|eighteen|nineteen|twenty)\\s*(?::|-|\\u2013|\\u2014)\\s*`,"i");return mo(n.replace(r,""))||n},go=e=>{const t=t=>Object.prototype.hasOwnProperty.call(e,t);t("projectId")&&Co(kt,zr(e.projectId)),t("projectTitle")&&Co(vt,zr(e.projectTitle)),t("bookId")&&Co(xt,zr(e.bookId)),t("bookTitle")&&Co(Nt,zr(e.bookTitle)),t("detectedChapter")&&Co(Et,zr(e.detectedChapter)),t("detectedScene")&&Co(Lt,zr(e.detectedScene)),t("requestChapter")&&Co(Pt,zr(e.requestChapter)),t("requestScene")&&Co(qt,zr(e.requestScene)),t("result")&&Co(Dt,zr(e.result)),t("chapterId")&&Co(At,zr(e.chapterId)),t("sceneId")&&Co($t,zr(e.sceneId))},fo=async e=>{if(vn===e&&Array.isArray(kn?.chapters))return kn.chapters;const t=await ja(`/api/word-companion/books/${e}/structure`);return vn=e,kn=t||null,Array.isArray(t?.chapters)?t.chapters:[]},wo=async e=>{const t=await ja(`/api/word-companion/books/${e}/chapters`);return Array.isArray(t?.chapters)?t.chapters:[]},Io=e=>{if(Number.isInteger(dn)&&dn>0){const t=e.find(e=>e.chapterId===dn);if(t)return t}const t=yo(tn,"chapter").toLocaleLowerCase();return t&&e.find(e=>yo(e.title,"chapter").toLocaleLowerCase()===t)||null},So=async()=>{const e=$o();return e?Io(await fo(e.bookId)):null},bo=async(e,t,n,r,o)=>{const a=await ja(`/api/word-companion/scenes/${t}/companion`);try{a.revisionStatus=await(async(e,t)=>{const n=await ja(`/api/word-companion/books/${e}/structure`),r=Array.isArray(n?.chapters)?n.chapters:[];for(const e of r){const n=(Array.isArray(e.scenes)?e.scenes:[]).find(e=>e.sceneId===t);if(n)return n.revisionStatus||""}return""})(e,t)}catch{a.revisionStatus=""}var c;un=o||"Title Match",pn=!1,Yr(!1),qr("Linked to PlotDirector"),Pr(""),ao(),io(),Jr(t,n,r),c=a,gr=c?.sceneTitle||nn||"",fr=c?.chapterTitle||tn||"",Co(ye,zr(c?.sceneTitle)),Co(ge,zr(c?.revisionStatus||c?.revisionStatusName||"Not provided")),Co(fe,zr(c?.estimatedWords)),Co(we,zr(c?.actualWords)),Co(xe,zr(c?.actualWords)),Co(Ie,c?.blocked?"Blocked":"Not blocked"),c?.blockedReason?(Co(be,c.blockedReason),jr(Se,!1)):(Co(be,"-"),jr(Se,!0)),Pe&&(Pe.textContent=c?.writingBrief||"No writing brief has been added for this scene."),Ir={characters:Array.isArray(c?.characters)?c.characters:[],assets:Array.isArray(c?.assets)?c.assets:[],locations:Array.isArray(c?.locations)?c.locations:[],primaryLocationId:c?.primaryLocationId??null},po(Te,Ir.characters,"character",!!sn&&!Wn),po(je,Ir.assets,"asset",!!sn&&!Wn),ho(Ir.locations,Ir.primaryLocationId,!!sn&&!Wn),_o(),Hr(),eo(Wn?"Refresh Current Scene before saving.":sn?"Ready to save.":"No resolved PlotDirector scene."),jr(me,!1),jr(Le,!1),jr(qe,!1),Ua(t,n),nc(),hc()},Co=(e,t)=>{if(e){const n=null==t?"":String(t);e.textContent!==n&&(e.textContent=n)}},ko=e=>{const t=t=>Object.prototype.hasOwnProperty.call(e,t);t("host")&&Co(jt,e.host),t("platform")&&Co(Wt,e.platform),t("ready")&&Co(Rt,e.ready),t("wordApi")&&Co(Ut,e.wordApi),t("lastScan")&&Co(Mt,e.lastScan),t("lastError")&&Co(Ot,e.lastError),t("paragraphs")&&Co(Vt,e.paragraphs),t("heading1")&&Co(Yt,e.heading1),t("heading2")&&Co(Jt,e.heading2)},vo=e=>{const t=[];return e?.name&&t.push(e.name),e?.code&&e.code!==e.name&&t.push(e.code),e?.message&&t.push(e.message),e?.debugInfo?.errorLocation&&t.push(`Location: ${e.debugInfo.errorLocation}`),t.length>0?t.join(": "):String(e)},xo=async()=>{if(!window.Office||"function"!=typeof window.Office.onReady)return Qt=!1,Xt=!1,Zt="Unavailable",en="Unavailable",ko({host:Zt,platform:en,ready:"No",wordApi:"No"}),null;const e=await window.Office.onReady();return Qt=!0,Zt=e?.host||"Unknown",en=e?.platform||"Unknown",Xt=!!window.Word&&!!window.Office.HostType&&e?.host===window.Office.HostType.Word,ko({host:Zt,platform:en,ready:"Yes",wordApi:Xt?"Yes":"No"}),e},No=e=>{try{const t=window.localStorage.getItem(e),n=Number.parseInt(t||"",10);return Number.isInteger(n)&&n>0?n:null}catch{return null}},Eo=(e,t)=>{try{t?window.localStorage.setItem(e,String(t)):window.localStorage.removeItem(e)}catch{}},Lo=(e,t)=>{if(!e)return;e.innerHTML="";const n=document.createElement("option");n.value="",n.textContent=t,e.append(n),e.disabled=!0},Po=(e,t,n,r,o)=>{if(!e)return;e.innerHTML="";const a=document.createElement("option");a.value="",a.textContent=t,e.append(a);for(const t of n){const n=document.createElement("option");n.value=String(t[r]),n.textContent=t[o],e.append(n)}e.disabled=0===n.length},qo=e=>{const t=String(e?.displayTitle||"").trim();if(t)return t;const n=String(e?.title||"").trim(),r=String(e?.subtitle||"").trim();return r?`${n}: ${r}`:n},Do=()=>{const e=!!Sn;jr(d,!e),jr(F,e),e&&(Co(l,bn?.projectTitle||Ao()?.title||"Project"),Co(u,bn?.bookTitle||qo($o())||"Book"))},Ao=()=>{const e=Number.parseInt(G?.value||"",10);return zt.find(t=>t.projectId===e)||null},$o=()=>{const e=Number.parseInt(H?.value||"",10);return Kt.find(t=>t.bookId===e)||null},To=()=>{const e=Number.parseInt(h?.value||"",10);return zt.find(t=>t.projectId===e)||null},jo=()=>{const e=Number.parseInt(m?.value||"",10);return Kt.find(t=>t.bookId===e)||null},Wo=e=>Co(I,e),Ro=()=>{const e=To(),t=jo(),n=Pn&&Date.now()-qn>=750;f&&(f.disabled=!e||!t||Dn),g&&(g.disabled=!e||!String(y?.value||"").trim()||Dn),P&&(P.disabled=!xn?.canImport||!Nn||Dn),x&&(x.disabled=!n||An||0===Bo().length)},Uo=e=>{jr(p,!e),jr(c,e),Wr(),Do();for(const t of s)jr(t,!!e||"scene"!==t.dataset.tabPanel&&!t.classList.contains("is-active"));e||xr()},Mo=()=>{if(!h)return;if(0===zt.length)return void Lo(h,"No projects available.");Po(h,"Choose a project",zt,"projectId","title");const e=Number.parseInt(G?.value||"",10);Number.isInteger(e)&&e>0&&(h.value=String(e))},Oo=(e="Select a Project and Book to begin.")=>{xn=null,Nn=null,En=[],Ln=!1,Pn=!1,qn=0,jr(S,!0),jr(L,!0),jr(b,!0),jr(v,!0),S&&(S.innerHTML=""),k&&(k.innerHTML=""),Co(C,""),Wo(e),Ro()},Bo=()=>k?[...k.querySelectorAll("input[type='checkbox']:checked")].map(e=>String(e.value||"").trim()).filter(Boolean):[],Go=e=>{if(En=Array.isArray(e)?e:[],b&&k){if(k.innerHTML="",jr(b,!1),jr(v,!Ln||0===En.length),jr(x,!1),jr(N,!1),jr(E,!0),0===En.length)return Co(C,"No likely major characters found."),void Ro();Co(C,`${En.length} likely major characters found.`);for(const e of En){const t=document.createElement("label");t.className="word-companion-character-candidate";const n=document.createElement("input");n.type="checkbox",n.value=e.text||"",n.checked="high"===String(e.confidence||"").trim().toLowerCase(),n.addEventListener("change",Ro);const r=document.createElement("strong");r.textContent=e.text||"";const o=document.createElement("em"),a=String(e.reason||"").trim();o.textContent=a?`${Number(e.mentionCount||0).toLocaleString()} mentions · ${a}`:`${Number(e.mentionCount||0).toLocaleString()} mentions`;const c=document.createElement("span");c.className="word-companion-character-candidate-text",c.append(r,o),t.append(n,c),k.append(t)}Ro()}},Ho=()=>{const e=window.Office?.context?.document?.settings;if(!e)return null;const t=String(e.get(r.documentGuid)||"").trim(),n=Number.parseInt(e.get(r.bookId)||"",10),o=Number.parseInt(e.get(r.projectId)||"",10),a=Number.parseInt(e.get(r.bindingVersion)||"",10);return!t||!Number.isInteger(n)||n<=0||!Number.isInteger(o)||o<=0?null:{documentGuid:t,bookId:n,projectId:o,bindingVersion:Number.isInteger(a)&&a>0?a:1}},Fo=()=>new Promise((e,t)=>{const n=window.Office?.context?.document?.settings;if(n){for(const e of Object.values(r))"function"==typeof n.remove?n.remove(e):n.set(e,"");n.saveAsync(n=>{n.status===window.Office.AsyncResultStatus.Succeeded?e():t(n.error||new Error("Unable to remove Word document metadata."))})}else t(new Error("Word document settings are unavailable."))}),Vo=()=>Sn?.documentGuid?Sn.documentGuid:window.crypto?.randomUUID?window.crypto.randomUUID():"10000000-1000-4000-8000-100000000000".replace(/[018]/g,e=>(Number(e)^16*Math.random()>>Number(e)/4).toString(16)),Yo=()=>Sn?.documentGuid||Ho()?.documentGuid||"",Jo=()=>{const e=Ao(),t=$o();O&&(O.textContent=e?.title||"(Not connected)"),B&&(B.textContent=t?qo(t):"(Not connected)"),ee&&(ee.textContent=t?"":"Select a PlotDirector book before refreshing."),Gr(),Do()},_o=()=>{const e=Array.isArray(Ir.characters)?Ir.characters.length:0,t=Array.isArray(Ir.assets)?Ir.assets.length:0,n=Array.isArray(Ir.locations)?Ir.locations.length:0;Co(De,`Characters (${e})`),Co(Ae,`Assets (${t})`),Co($e,`Locations (${n})`)},zo=e=>String(e?.styleBuiltIn||e?.style||"").replace(/\s+/g,"").toLowerCase(),Ko=(e,t)=>{const n=zo(e);return n===`heading${t}`||n.endsWith(`.heading${t}`)||n.includes(`heading${t}`)},Qo=e=>String(e||"").trim().split(/\s+/).filter(Boolean).length,Xo=(e,t)=>{const n=String(e||"").match(new RegExp(`^${t}-(\\d+)$`,"i"));if(!n)return null;const r=Number.parseInt(n[1],10);return Number.isInteger(r)&&r>0?r:null},Zo=e=>{try{return Array.isArray(e?.contentControls?.items)?e.contentControls.items:[]}catch(e){return console.warn("Word paragraph content controls were not available.",e),[]}},ea=(e,t)=>{const n=Zo(e);for(const e of n){const n=Xo(e.tag,t);if(n)return n}return null},ta=(e,t)=>{const n=[];let r=0,o=0,a=null,c=null;e.forEach((e,t)=>{const i=String(e.text||"").trim();if(i){if(Ko(e,1))return r+=1,a={index:n.length+1,paragraphIndex:t,title:i,anchorId:ea(e,"PD-CHAPTER"),scenes:[]},n.push(a),void(c=null);if(Ko(e,2)){if(o+=1,!a)return;return c={index:a.scenes.length+1,paragraphIndex:t,title:i,anchorId:ea(e,"PD-SCENE"),wordCount:0},void a.scenes.push(c)}c&&(c.wordCount+=Qo(i))}});const i=t.find(e=>String(e.text||"").trim()),s=i?e.findIndex(e=>{return t=e,n=i,String(t?.text||"").trim()===String(n?.text||"").trim()&&zo(t)===zo(n);var t,n}):-1,d=s>=0&&n.filter(e=>e.paragraphIndex<=s).at(-1)||null,l=d&&s>=0&&d.scenes.filter(e=>e.paragraphIndex<=s).at(-1)||null;return{chapters:n,currentChapter:d,currentScene:l,paragraphCount:e.length,heading1Count:r,heading2Count:o}},na=new Set(["***","###"]),ra=(e,t)=>{const n=String(e?.text||"").trim();return{index:t,text:n,styleBuiltIn:e?.styleBuiltIn||"",style:e?.style||"",wordCount:Qo(n),chapterAnchorId:null,sceneAnchorId:null}},oa=(e,t)=>{e&&(e.endParagraphIndex=t)},aa=(e,t)=>{e&&(e.endParagraphIndex=t,oa(e.scenes.at(-1),t))},ca=(e,t)=>{const n=(t||[]).find(e=>String(e.text||"").trim());if(!e||!n)return e?.currentParagraphIndex??-1;const r=e.paragraphs.filter(e=>((e,t)=>String(e?.text||"").trim()===String(t?.text||"").trim()&&zo(e)===zo(t))(e,n)).map(e=>e.index);return 0===r.length?e.currentParagraphIndex??-1:Number.isInteger(e.currentParagraphIndex)?r.reduce((t,n)=>Math.abs(n-e.currentParagraphIndex){if(!Cn)return!1;const t=((e,t)=>!e||!Number.isInteger(t)||t<0?null:e.chapters.filter(e=>e.startParagraphIndex<=t).at(-1)||null)(Cn,e),n=((e,t)=>!e||!Number.isInteger(t)||t<0?null:e.scenes.filter(e=>e.startParagraphIndex<=t).at(-1)||null)(t,e),r=t?.startParagraphIndex!==Cn.currentChapter?.startParagraphIndex||n?.startParagraphIndex!==Cn.currentScene?.startParagraphIndex||t?.anchorId!==Cn.currentChapter?.anchorId||n?.anchorId!==Cn.currentScene?.anchorId;return Cn.currentParagraphIndex=e,Cn.currentChapter=t,Cn.currentScene=n,!!r&&($r(t?.title,n?.title,n?.wordCount,t?.anchorId,n?.anchorId,t?.index),r)},sa=e=>{if(!te)return;if(te.innerHTML="",0===e.chapters.length){const e=document.createElement("p");return e.textContent="No chapters detected. Use Heading 1 for chapter titles.",void te.append(e)}if(!e.chapters.some(e=>e.scenes.length>0)){const e=document.createElement("p");e.textContent="No scenes detected. Use Heading 2 for scene titles.",te.append(e)}for(const t of e.chapters){const e=document.createElement("div");e.className="word-companion-outline-chapter";const n=document.createElement("strong");if(n.textContent=t.title,e.append(n),t.scenes.length>0){const n=document.createElement("ul");for(const e of t.scenes){const t=document.createElement("li");t.textContent=e.title,n.append(t)}e.append(n)}te.append(e)}},da=[{key:"alreadyLinked",title:"Already Linked"},{key:"couldLink",title:"Could Link"},{key:"wouldCreateChapters",title:"Would Create Chapters"},{key:"wouldCreateScenes",title:"Would Create Scenes"},{key:"manualReview",title:"Manual Review Required"}],la={alreadyLinked:"Already Linked",couldLink:"Could Link",wouldCreateChapter:"Would Create Chapter",wouldCreateScene:"Would Create Scene",manualReview:"Manual Review Required"},ua={alreadyLinked:"✓",couldLink:"~",wouldCreateChapter:"+",wouldCreateScene:"+",manualReview:"?"},pa=(e,t)=>yo(e,t).toLocaleLowerCase(),ha=({category:e,action:t,type:n,wordTitle:r,match:o="",anchorStatus:a="None",matches:c=[],pdChapter:i=null,pdScene:s=null,wordChapter:d=null,wordScene:l=null,parentItem:u=null})=>({id:`${n}-${d?.index||0}-${l?.index||0}-${d?.paragraphIndex??l?.paragraphIndex??0}`,category:e,action:t,type:n,wordTitle:r,match:o,anchorStatus:a,matches:c,pdChapter:i,pdScene:s,wordChapter:d,wordScene:l,parentItem:u,result:"Pending",error:""}),ma=(e,t)=>{Array.isArray(e[t.category])&&e[t.category].push(t)},ya=e=>Array.isArray(e?.scenes)?e.scenes:[],ga=(e,t,n)=>{const r=e.anchorId?`PD-CHAPTER-${e.anchorId}`:"None";if(e.anchorId){const o=t.find(t=>t.chapterId===e.anchorId);if(o){const t=ha({category:"alreadyLinked",action:"alreadyLinked",type:"Chapter",wordTitle:e.title,match:`Chapter ${o.chapterId}: ${o.title}`,anchorStatus:r,pdChapter:o,wordChapter:e});return ma(n,t),t}const a=ha({category:"manualReview",action:"manualReview",type:"Chapter",wordTitle:e.title,anchorStatus:`${r} not found`,matches:[],pdChapter:null,wordChapter:e});return ma(n,a),a}const o=t.filter(t=>pa(t.title,"chapter")===pa(e.title,"chapter"));if(1===o.length){const t=ha({category:"couldLink",action:"couldLink",type:"Chapter",wordTitle:e.title,match:`Chapter ${o[0].chapterId}: ${o[0].title}`,anchorStatus:r,pdChapter:o[0],wordChapter:e});return ma(n,t),t}if(o.length>1){const t=ha({category:"manualReview",action:"manualReview",type:"Chapter",wordTitle:e.title,anchorStatus:r,matches:o.map(e=>`Chapter ${e.chapterId}: ${e.title}`),pdChapter:null,wordChapter:e});return ma(n,t),t}const a=ha({category:"wouldCreateChapters",action:"wouldCreateChapter",type:"Chapter",wordTitle:e.title,anchorStatus:r,pdChapter:null,wordChapter:e});return ma(n,a),a},fa=(e,t,n,r)=>{const o=e.anchorId?`PD-SCENE-${e.anchorId}`:"None";if(e.anchorId){const a=((e,t)=>{for(const n of e){const e=ya(n).find(e=>e.sceneId===t);if(e)return{chapter:n,scene:e}}return null})(n,e.anchorId);return a?void ma(r,ha({category:"alreadyLinked",action:"alreadyLinked",type:"Scene",wordTitle:e.title,match:`Scene ${a.scene.sceneId}: ${a.scene.title}`,anchorStatus:o,pdChapter:a.chapter,pdScene:a.scene,wordChapter:t?.wordChapter,wordScene:e,parentItem:t})):void ma(r,ha({category:"manualReview",action:"manualReview",type:"Scene",wordTitle:e.title,anchorStatus:`${o} not found`,wordChapter:t?.wordChapter,wordScene:e,parentItem:t}))}if(!t?.pdChapter&&"manualReview"===t?.category)return void ma(r,ha({category:"manualReview",action:"manualReview",type:"Scene",wordTitle:e.title,anchorStatus:o,matches:["Parent chapter requires manual review."],wordChapter:t?.wordChapter,wordScene:e,parentItem:t}));if(!t?.pdChapter)return void ma(r,ha({category:"wouldCreateScenes",action:"wouldCreateScene",type:"Scene",wordTitle:e.title,anchorStatus:o,wordChapter:t?.wordChapter,wordScene:e,parentItem:t}));const a=ya(t.pdChapter).filter(t=>pa(t.title,"scene")===pa(e.title,"scene"));1!==a.length?a.length>1?ma(r,ha({category:"manualReview",action:"manualReview",type:"Scene",wordTitle:e.title,anchorStatus:o,matches:a.map(e=>`Scene ${e.sceneId}: ${e.title}`),wordChapter:t.wordChapter,wordScene:e,parentItem:t})):ma(r,ha({category:"wouldCreateScenes",action:"wouldCreateScene",type:"Scene",wordTitle:e.title,anchorStatus:o,pdChapter:t.pdChapter,wordChapter:t.wordChapter,wordScene:e,parentItem:t})):ma(r,ha({category:"couldLink",action:"couldLink",type:"Scene",wordTitle:e.title,match:`Scene ${a[0].sceneId}: ${a[0].title}`,anchorStatus:o,pdChapter:t.pdChapter,pdScene:a[0],wordChapter:t.wordChapter,wordScene:e,parentItem:t}))},wa=e=>{const t=document.createElement("article");t.className="word-companion-preview-item";const n=document.createElement("strong");n.textContent=`${ua[e.action]||""} ${e.type}: ${e.wordTitle}`,t.append(n);const r=document.createElement("span");if(r.textContent=`Anchor: ${e.anchorStatus||"None"}`,t.append(r),e.match){const n=document.createElement("span");n.textContent=`Match: ${e.match}`,t.append(n)}if(Array.isArray(e.matches)&&e.matches.length>0){const n=document.createElement("div");n.className="word-companion-preview-matches";const r=document.createElement("span");r.textContent="Matches:",n.append(r);const o=document.createElement("ul");for(const t of e.matches){const e=document.createElement("li");e.textContent=t,o.append(e)}n.append(o),t.append(n)}const o=document.createElement("span");if(o.textContent=`Action: ${la[e.action]||e.action}`,t.append(o),e.result&&"Pending"!==e.result){const n=document.createElement("span");n.textContent=e.error?`Result: ${e.result} - ${e.error}`:`Result: ${e.result}`,t.append(n)}return t},Ia=e=>{if(ae){ae.innerHTML="";for(const t of da){const n=document.createElement("section");n.className="word-companion-preview-group";const r=document.createElement("strong");r.textContent=t.title,n.append(r);const o=Array.isArray(e?.[t.key])?e[t.key]:[];if(0===o.length){const e=document.createElement("p");e.className="word-companion-empty-list",e.textContent="None",n.append(e)}else for(const e of o)n.append(wa(e));ae.append(n)}Br()}},Sa=async e=>{const t=e.document.body.paragraphs,n=e.document.getSelection().paragraphs;t.load("text,styleBuiltIn,style"),n.load("text,styleBuiltIn,style"),await e.sync();try{for(const e of t.items)(Ko(e,1)||Ko(e,2))&&e.contentControls.load("items/tag,title");await e.sync()}catch(e){console.warn("Unable to load Word heading content controls. Continuing without PlotDirector anchors.",e)}const r=ta(t.items,n.items);return r.bodyParagraphs=t.items,r},ba=async(e,t)=>{const n=e.document.body.paragraphs,r=e.document.getSelection().paragraphs;n.load("text,styleBuiltIn,style"),r.load("text,styleBuiltIn,style"),await e.sync();const o=((e,t)=>{const n=e.map(ra),r=[];let o=0,a=0,c=null,i=null,s=0;const d=(e,t=null,n=null)=>c?(oa(i,e.index-1),i={index:c.scenes.length+1,paragraphIndex:e.index,startParagraphIndex:e.index,endParagraphIndex:e.index,title:t||`Scene ${c.scenes.length+1}`,anchorId:n,wordCount:0},c.scenes.push(i),i):null;for(const e of n)e.text&&(Ko(e,1)?(aa(c,e.index-1),o+=1,c={index:r.length+1,paragraphIndex:e.index,startParagraphIndex:e.index,endParagraphIndex:e.index,title:e.text,anchorId:e.chapterAnchorId,wordCount:0,scenes:[]},r.push(c),i=null,d(e,"Scene 1",e.sceneAnchorId),s+=e.wordCount):c&&(t&&na.has(e.text)?(a+=1,d(e)):(c.wordCount+=e.wordCount,i&&(i.wordCount+=e.wordCount),s+=e.wordCount)));return aa(c,n.length-1),{paragraphs:n,chapters:r,usesExplicitScenes:!!t,paragraphCount:n.length,heading1Count:o,heading2Count:a,documentWordCount:s,currentParagraphIndex:null,currentChapter:null,currentScene:null}})(n.items,t),a=ca(o,r.items);return Cn=o,ia(a),Sr("Cache rebuilt."),o},Ca=()=>window.performance&&"function"==typeof window.performance.now?window.performance.now():Date.now(),ka=e=>!!e&&!e.stale&&e.generation===Bn&&e.documentGuid===Yo()&&e.sceneId===sn,va=async(e={})=>{const t=!!e.includeSelection,n=!1!==e.updateDisplay,r=Bn,o=Ca(),a=Ao(),c=$o(),i=Cn?.currentScene;if(!i||!Number.isInteger(i.startParagraphIndex)||!Number.isInteger(i.endParagraphIndex))return null;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return null;const s=Ca(),d=await window.Word.run(async e=>{const n=e.document.body.paragraphs;n.load("text");let r=null;return t&&(r=e.document.getSelection().paragraphs,r.load("text,styleBuiltIn,style")),await e.sync(),{bodyTexts:n.items.map(e=>String(e.text||"")),selectionParagraphs:t&&r?r.items.map(e=>({text:String(e.text||""),styleBuiltIn:e.styleBuiltIn,style:e.style})):[]}}),l=Math.round(Ca()-s);if(r!==Bn)return br(`Office snapshot: ${l}ms stale`),{stale:!0,generation:r};let u=!1;if(t){const e=ca(Cn,d.selectionParagraphs);u=ia(e)}const p=Cn?.currentScene;if(!p||!Number.isInteger(p.startParagraphIndex)||!Number.isInteger(p.endParagraphIndex))return null;const h=[];let m=0;const y=Math.min(p.endParagraphIndex,d.bodyTexts.length-1),g=Cn.currentChapter?.startParagraphIndex;for(let e=p.startParagraphIndex;e<=y;e+=1){const t=String(d.bodyTexts[e]||"").trim();t&&!na.has(t)&&e!==g&&(h.push(t),m+=Qo(t))}p.wordCount=m,n&&$r(Cn.currentChapter?.title,p.title,m,Cn.currentChapter?.anchorId,p.anchorId,Cn.currentChapter?.index);const f={documentGuid:Yo(),projectId:a?.projectId||null,bookId:c?.bookId||null,chapterId:dn,sceneId:sn,chapterTitle:Cn.currentChapter?.title||"",sceneTitle:p.title||"",sceneText:h.join("\n"),wordCount:m,selectionSignature:`${Cn.currentParagraphIndex??-1}:${p.startParagraphIndex}:${p.endParagraphIndex}`,selectionChanged:u,generation:r};return Gn=f,br(`Office snapshot: ${l}ms; scene words: ${m}; total snapshot: ${Math.round(Ca()-o)}ms`),f},xa=async()=>ka(Gn)?Gn:await va(),Na=async()=>{if(Pr(""),!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return $r(null,null,null),Pr("Word document access is unavailable."),ko({lastScan:"Failure",lastError:"Word document access is unavailable."}),!1;_&&(_.disabled=!0,_.textContent="Scanning..."),Pr("Scanning document structure...");try{const e=await window.Word.run(async e=>{const t=$o();return t?await ba(e,!!t.usesExplicitScenes):(Cn=null,await Sa(e))});return Cn||$r(e.currentChapter?.title,e.currentScene?.title,e.currentScene?.wordCount,e.currentChapter?.anchorId,e.currentScene?.anchorId,e.currentChapter?.index),lo("Not detected"),sa(e),Pr(""),ko({lastScan:"Success",lastError:"-",paragraphs:String(e.paragraphCount),heading1:String(e.heading1Count),heading2:String(e.heading2Count)}),!0}catch(e){const t=vo(e);return console.error("Unable to scan the Word document.",e),$r(null,null,null),Pr(`Unable to scan the Word document: ${t}`),ko({lastScan:"Failure",lastError:t}),!1}finally{_&&(_.disabled=!1,_.textContent="Refresh Document Structure")}},Ea=async()=>{const e=$o();if(!Ao()||!e)return Ur("Select a project and book to analyse manuscript structure."),!1;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return Ur("Word document access is unavailable."),ko({lastScan:"Failure",lastError:"Word document access is unavailable."}),!1;ne&&(ne.disabled=!0,ne.textContent="Analysing..."),Ur("Analysing manuscript structure...");try{const t=await window.Word.run(async e=>await Sa(e)),n=await ja(`/api/word-companion/books/${e.bookId}/structure`);return $r(t.currentChapter?.title,t.currentScene?.title,t.currentScene?.wordCount,t.currentChapter?.anchorId,t.currentScene?.anchorId,t.currentChapter?.index),sa(t),In=((e,t)=>{const n={alreadyLinked:[],couldLink:[],wouldCreateChapters:[],wouldCreateScenes:[],manualReview:[]},r=Array.isArray(t?.chapters)?t.chapters:[];for(const t of Array.isArray(e?.chapters)?e.chapters:[]){const e=ga(t,r,n);for(const o of ya(t))fa(o,e,r,n)}return n})(t,n),Ia(In),Ur("Preview generated. No changes have been applied."),ko({lastScan:"Success",lastError:"-",paragraphs:String(t.paragraphCount),heading1:String(t.heading1Count),heading2:String(t.heading2Count)}),!0}catch(e){return console.error("Unable to analyse manuscript structure.",e),Ur("Unable to analyse manuscript structure."),ko({lastScan:"Failure",lastError:vo(e)}),!1}finally{ne&&(ne.textContent="Analyse Manuscript Structure",Gr())}},La=e=>{Tn&&(Tn(e),Tn=null),It?.close?It.close():It&&(It.hidden=!0)},Pa=()=>{const e=((e=In)=>{const t=Or(e);return{linkChapters:t.filter(e=>"couldLink"===e.category&&"Chapter"===e.type).length,linkScenes:t.filter(e=>"couldLink"===e.category&&"Scene"===e.type).length,createChapters:t.filter(e=>"wouldCreateChapters"===e.category).length,createScenes:t.filter(e=>"wouldCreateScenes"===e.category).length,manualReview:Array.isArray(e?.manualReview)?e.manualReview.length:0}})();return(e=>{if(!St)return;St.innerHTML="";const t=[`Link ${e.linkChapters+e.linkScenes} chapters/scenes`,`Create ${e.createChapters} chapters`,`Create ${e.createScenes} scenes`],n=document.createElement("ul");for(const e of t){const t=document.createElement("li");t.textContent=e,n.append(t)}St.append(n)})(e),It?new Promise(e=>{Tn=e,It.showModal?It.showModal():It.hidden=!1}):Promise.resolve(window.confirm(`Apply Structure Sync?\n\nThis will:\n\n- Link ${e.linkChapters+e.linkScenes} chapters/scenes\n- Create ${e.createChapters} chapters\n- Create ${e.createScenes} scenes\n\nManual review items will be skipped.`))},qa=(e,t,n="")=>{e.result=t,e.error=n},Da=e=>Number.isInteger(e?.wordChapter?.index)&&e.wordChapter.index>0?10*e.wordChapter.index:null,Aa=e=>Number.isInteger(e?.wordScene?.index)&&e.wordScene.index>0?10*e.wordScene.index:null,$a=async(e,t)=>{const n=await Wa(`/api/word-companion/books/${e}/chapters`,{title:mo(t.wordTitle),sortOrder:Da(t)});if(!n?.chapterId)throw new Error("Chapter creation did not return a chapter ID.");Zr(),t.pdChapter={chapterId:n.chapterId,title:n.title||t.wordTitle,sortOrder:n.sortOrder||Da(t)||0,scenes:[]},t.match=`Chapter ${t.pdChapter.chapterId}: ${t.pdChapter.title}`},Ta=async(e,t)=>{const n=t.pdChapter||t.parentItem?.pdChapter;if(!n?.chapterId)throw new Error("Scene parent chapter is not available.");const r=await Wa(`/api/word-companion/books/${e}/chapters/${n.chapterId}/scenes`,{sceneTitle:mo(t.wordTitle),sortOrder:Aa(t)});if(!r?.sceneId)throw new Error("Scene creation did not return a scene ID.");Zr(),t.pdChapter=n,t.pdScene={sceneId:r.sceneId,title:t.wordTitle,sortOrder:Aa(t)||0},t.match=`Scene ${t.pdScene.sceneId}: ${t.pdScene.title}`},ja=async(e,t={})=>{const n=await window.fetch(e,{credentials:"same-origin",...t,headers:{Accept:"application/json",...t.headers||{}}});if(!n.ok)throw new Error(`Request failed: ${n.status}`);return await n.json()},Wa=(e,t)=>ja(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)}),Ra=async(e="")=>{Pn=!1,qn=0,En=[],k&&(k.innerHTML=""),jr(b,!0),Uo(!1),Wo(""),jr(v,!0),e&&Pr(e);const t=await Ma();e&&t&&tn&&Pr(e)},Ua=async(e=sn,t=dn)=>{const n=Ao(),r=$o(),o=Yo(),a=Number.parseInt(e||"",10),c=Number.parseInt(t||"",10);if(!n||!r||!o||!Number.isInteger(a)||a<=0||!Number.isInteger(c)||c<=0)return;const i=`${n.projectId}:${r.bookId}:${a}`;if(yr!==i){yr=i;try{await Wa("/api/word-companion/runtime/current-scene",{documentGuid:o,projectId:n.projectId,bookId:r.bookId,chapterId:c,sceneId:a}),Sr("Current scene follow event sent.")}catch(e){yr="",console.debug("Unable to notify PlotDirector of current scene.",e)}}},Ma=async()=>{const e=$o();if(!(e&&Qt&&Xt&&window.Word&&"function"==typeof window.Word.run))return!1;Pr("Reading manuscript position...");try{Zr(),await Promise.all([ic(!0),sc(!0),dc(!0)]),await fo(e.bookId);const t=await window.Word.run(async t=>await ba(t,!!e.usesExplicitScenes));return sa(t),ko({lastScan:"Success",lastError:"-",paragraphs:String(t.paragraphCount),heading1:String(t.heading1Count),heading2:String(t.heading2Count)}),tn?(nn?await yc():await mc(),Yr(!1),Vr("Live"),Pr(""),!0):(lo("Not detected"),Yr(!1),Vr("Live"),Pr("Manuscript linked. Click inside a chapter to show the current scene."),!0)}catch(e){return console.error("Unable to initialise bound manuscript runtime.",e),Cn=null,Vr("Manual"),Pr(`Unable to read manuscript position: ${vo(e)}`),ko({lastScan:"Failure",lastError:vo(e)}),!1}},Oa=async n=>{Sn=null,wc(),Tr(),Xr(),lo("Not detected"),Vr("Manual"),Nr("Connected"),Eo(e,null),Eo(t,null),G&&(G.value=""),Lo(H,"Select a project first"),Mo(),h&&(h.value=""),Lo(m,"Select a project first"),Oo(n||"Select a Project and Book to begin."),Pr(n||"Manuscript unlinked."),Rr("No resolved PlotDirector scene."),Uo(!0),Wr()},Ba=e=>e?[...e.querySelectorAll("input[type='checkbox']:checked")].map(e=>Number.parseInt(e.value||"",10)).filter(e=>Number.isInteger(e)&&e>0):[],Ga=()=>{const e=Number.parseInt(We?.value||"",10);return Number.isInteger(e)&&e>0?e:null},Ha=(e,t,n,r)=>{const o=((e,t)=>Zo(e).find(e=>Xo(e.tag,t))||null)(e,r),a=o||e.getRange().insertContentControl();return a.title=t,a.tag=n,a.appearance="Hidden",a},Fa=async(e="PlotDirector IDs attached successfully.")=>{if(!sn||!dn)return Pr("No resolved PlotDirector scene."),!1;if((cn&&cn!==sn||an&&an!==dn)&&!window.confirm("This scene is already linked. Replace the existing PlotDirector link?"))return!1;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return Pr("Word document access is unavailable."),!1;pe&&(pe.disabled=!0,pe.textContent="Attaching...");try{return await window.Word.run(async e=>{const t=await Sa(e);if(!t.currentChapter||!t.currentScene)throw new Error("No scene detected in Word. Use Heading 2 for scenes.");const n=t.bodyParagraphs[t.currentChapter.paragraphIndex],r=t.bodyParagraphs[t.currentScene.paragraphIndex];if(!n||!r)throw new Error("Unable to locate the current Word headings.");Ha(n,"PlotDirector Chapter",`PD-CHAPTER-${dn}`,"PD-CHAPTER"),Ha(r,"PlotDirector Scene",`PD-SCENE-${sn}`,"PD-SCENE"),await e.sync()}),an=dn,cn=sn,pn=!1,un="SceneID Anchor",ln="Anchor",Pr(e),ko({lastError:"-"}),Ar(),!0}catch(e){return console.error("Unable to attach PlotDirector IDs.",e),Pr("Unable to attach PlotDirector IDs."),ko({lastError:vo(e)}),Ar(),!1}finally{pe&&(pe.textContent=cn===sn?"Attach PlotDirector IDs":"Reattach PlotDirector IDs",Ar())}},Va=async e=>{if(!dn)return no("No resolved PlotDirector chapter."),!1;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return no("Word document access is unavailable."),!1;try{return await window.Word.run(async e=>{const t=await Sa(e);if(!t.currentChapter)throw new Error("No chapter detected in Word. Use Heading 1 for chapters.");const n=t.bodyParagraphs[t.currentChapter.paragraphIndex];if(!n)throw new Error("Unable to locate the current Word chapter heading.");Ha(n,"PlotDirector Chapter",`PD-CHAPTER-${dn}`,"PD-CHAPTER"),await e.sync()}),an=dn,pn=!1,un="ChapterID Anchor",ln="Chapter anchor",no(e),Pr(e),ko({lastError:"-"}),Ar(),!0}catch(e){return console.error("Unable to attach PlotDirector chapter ID.",e),no("Unable to attach PlotDirector chapter ID."),ko({lastError:vo(e)}),Ar(),!1}},Ya=async e=>{ao(),await yc(),Pr(e),no(e)},Ja=e=>{wn&&(wn(e),wn=null),mt?.close?mt.close():mt&&(mt.hidden=!0)},_a=()=>{if(!lt)return;const e=mo(dt?.value||"").toLocaleLowerCase(),t=gn.filter(t=>!e||String(t.title||"").toLocaleLowerCase().includes(e));if(lt.innerHTML="",fn=null,ut&&(ut.disabled=!0),0===t.length){const e=document.createElement("p");return e.className="word-companion-empty-list",e.textContent="No chapters found.",void lt.append(e)}for(const e of t){const t=Number.parseInt(e.chapterId||"",10);if(!Number.isInteger(t)||t<=0)continue;const n=document.createElement("label");n.className="word-companion-scene-option";const r=document.createElement("input");r.type="radio",r.name="word-companion-link-chapter",r.value=String(t),r.addEventListener("change",()=>{fn=t,ut&&(ut.disabled=!1)});const o=document.createElement("span");o.textContent=e.title||"Untitled chapter",n.append(r,o),lt.append(n)}},za=()=>{st?.close?st.close():st&&(st.hidden=!0)},Ka=async(e,t,n)=>{const r=$o();if(!r)return to("Select a PlotDirector book first."),!1;await bo(r.bookId,e,t,"Manual link","Title Match");return!!await Fa(n)&&(to(n),io(),!0)},Qa=e=>{yn&&(yn(e),yn=null),rt?.close?rt.close():rt&&(rt.hidden=!0)},Xa=()=>{if(!Ze)return;const e=mo(Xe?.value||"").toLocaleLowerCase(),t=hn.filter(t=>!e||String(t.title||"").toLocaleLowerCase().includes(e));if(Ze.innerHTML="",mn=null,et&&(et.disabled=!0),0===t.length){const e=document.createElement("p");return e.className="word-companion-empty-list",e.textContent="No scenes found.",void Ze.append(e)}for(const e of t){const t=Number.parseInt(e.sceneId||"",10);if(!Number.isInteger(t)||t<=0)continue;const n=document.createElement("label");n.className="word-companion-scene-option";const r=document.createElement("input");r.type="radio",r.name="word-companion-link-scene",r.value=String(t),r.addEventListener("change",()=>{mn=t,et&&(et.disabled=!1)});const o=document.createElement("span");o.textContent=e.title||"Untitled scene",n.append(r,o),Ze.append(n)}},Za=()=>{Qe?.close?Qe.close():Qe&&(Qe.hidden=!0)},ec=()=>{Jn=!1,Fr(),_n&&(_n=!1,nc(1e3))},tc=async(e={})=>{const t=e.source||"manual",n=Ca();if(!sn)return void Rr("No resolved PlotDirector scene.");if(!dn)return void Rr("No resolved PlotDirector chapter.");if(Wn)return void Rr("Refresh Current Scene before syncing.");const r=$o(),o=Yo();if(!r||!o)return void Rr("Bound manuscript metadata is unavailable.");if(Jn)return _n=!0,void Sr("Scene sync deferred; sync already running.");Tr(),Jn=!0,_n=!1;let a=e.snapshot||null;try{a=ka(a)?a:await xa()}catch(e){return Rr("Sync failed"),ko({lastError:vo(e)}),Sr("Scene sync failed."),void ec()}if(!ka(a))return Rr("Waiting for typing to pause"),Sr("Scene sync skipped (stale snapshot)."),void ec();const c=a.wordCount;if(!Number.isInteger(c)||c<0)return Rr("Sync failed"),Sr("Scene sync failed."),void ec();if(zn===a.sceneId&&Kn===c)return Rr("Synced"),Sr("Sync skipped (count unchanged)."),void ec();Sr("Scene word count changed."),ke&&(ke.disabled=!0,ke.textContent="Syncing..."),Rr("Syncing..."),Sr(`Scene sync started (${t}).`);try{const e=Ca(),t=await Wa("/api/word-companion/runtime/scene-word-count",{documentGuid:a.documentGuid||o,bookId:a.bookId||r.bookId,chapterId:a.chapterId,sceneId:a.sceneId,wordCount:c});if(br(`Word count sync API: ${Math.round(Ca()-e)}ms`),!ka(a))return void Sr("Scene sync result ignored (stale snapshot).");const i=t?.actualWords??c,s=new Date;zn=a.sceneId,Kn=i,Co(xe,zr(i)),Co(we,zr(i)),Co(Ne,Kr(s)),Co(Ce,Kr(s)),Rr("Synced"),Sr("Scene sync succeeded."),br(`Total word count sync: ${Math.round(Ca()-n)}ms`)}catch(e){Rr("Sync failed"),ko({lastError:vo(e)}),Sr("Scene sync failed.")}finally{ke&&(ke.textContent="Sync Current Scene"),ec()}},nc=(e=4e3)=>{Tr(),sn&&dn&&!Wn&&!Jn&&(Yn=window.setTimeout(()=>{Yn=null,tc({source:"automatic"})},e))},rc=()=>{Qn&&(window.clearTimeout(Qn),Qn=null)},oc=()=>{er=null,tr="",nr=[],rr=null,or="",rc()},ac=()=>{ar=null,cr="",ir=[],sr=null,dr=""},cc=()=>{lr=null,ur="",pr=[],hr=null,mr=""},ic=async(e=!1)=>{const t=Ao(),n=Yo();if(!t||!n)return nr=[],[];if(!e&&er===t.projectId&&tr===n&&nr.length>0)return nr;const r=await ja(`/api/word-companion/runtime/characters?projectId=${encodeURIComponent(t.projectId)}&documentGuid=${encodeURIComponent(n)}`);return er=t.projectId,tr=n,nr=Array.isArray(r?.characters)?r.characters:[],Sr("Character alias cache refreshed."),nr},sc=async(e=!1)=>{const t=Ao(),n=Yo();if(!t||!n)return ir=[],[];if(!e&&ar===t.projectId&&cr===n&&ir.length>0)return ir;const r=await ja(`/api/word-companion/runtime/assets?projectId=${encodeURIComponent(t.projectId)}&documentGuid=${encodeURIComponent(n)}`);return ar=t.projectId,cr=n,ir=Array.isArray(r?.assets)?r.assets:[],Sr(`Asset cache loaded: ${ir.length} aliases.`),ir},dc=async(e=!1)=>{const t=Ao(),n=Yo();if(!t||!n)return pr=[],[];if(!e&&lr===t.projectId&&ur===n&&pr.length>0)return pr;const r=await ja(`/api/word-companion/runtime/locations?projectId=${encodeURIComponent(t.projectId)}&documentGuid=${encodeURIComponent(n)}`);return lr=t.projectId,ur=n,pr=Array.isArray(r?.locations)?r.locations:[],Sr(`Location cache loaded: ${pr.length} aliases.`),pr},lc=(e,t)=>{const n=String(t||"").trim();if(!n)return!1;const r=(o=n,String(o||"").replace(/[.*+?^${}()|[\]\\]/g,"\\$&")).replace(/\s+/g,"\\s+");var o;return new RegExp(`(^|[^\\p{L}\\p{N}_])${r}(?=$|[^\\p{L}\\p{N}_])`,"iu").test(e)},uc=e=>{if(e?.excludeFromCompanionDetection)return!1;const t=Number.parseInt(e?.detectionPriority||"0",10);return n=e?.matchText,String(n||"").trim().split(/\s+/).filter(Boolean).length>=2||Number.isInteger(t)&&t>=75;var n},pc=async()=>{if(Qn=null,!sn||Wn||!Yo())return;if(Xn)return Zn=!0,void Sr("Character suggestion detection deferred; detection already running.");Xn=!0,Zn=!1;const e=Ca();try{const t=await xa();if(!ka(t))return void Sr("Runtime suggestions skipped (stale snapshot).");const[n,r,o]=await Promise.all([ic(),sc(),dc()]);if(!ka(t))return void Sr("Runtime suggestions skipped after cache load (stale snapshot).");const a=t.sceneText||"",c=Ca(),i=((e,t)=>{if(!e||!Array.isArray(t)||0===t.length)return[];const n=new Map;for(const r of t){const t=Number.parseInt(r.characterId||"",10);!Number.isInteger(t)||t<=0||n.has(t)||lc(e,r.matchText)&&n.set(t,r.name||r.matchText||"Character")}return[...n.entries()].map(([e,t])=>({characterId:e,name:t}))})(a,n);br(`Character detection: ${Math.round(Ca()-c)}ms`);const s=i.map(e=>e.characterId),d=s.slice().sort((e,t)=>e-t).join(","),l=Ca(),u=((e,t)=>{if(!e||!Array.isArray(t)||0===t.length)return[];const n=new Map;for(const r of t){const t=Number.parseInt(r.assetId||"",10);!Number.isInteger(t)||t<=0||n.has(t)||lc(e,r.matchText)&&n.set(t,r.name||r.matchText||"Asset")}return[...n.entries()].map(([e,t])=>({assetId:e,name:t}))})(a,r);br(`Asset detection: ${Math.round(Ca()-l)}ms`);const p=u.map(e=>e.assetId),h=p.slice().sort((e,t)=>e-t).join(","),m=Ca(),y=((e,t)=>{if(!e||!Array.isArray(t)||0===t.length)return[];const n=new Map;for(const r of t){const t=Number.parseInt(r.locationId||"",10);!Number.isInteger(t)||t<=0||n.has(t)||!uc(r)||lc(e,r.matchText)&&n.set(t,r.name||r.matchText||"Location")}return[...n.entries()].map(([e,t])=>({locationId:e,name:t}))})(a,o);br(`Location detection: ${Math.round(Ca()-m)}ms`);const g=y.map(e=>e.locationId),f=g.slice().sort((e,t)=>e-t).join(",");if(!d||rr===sn&&or===d)Sr("Character suggestions skipped.");else{if(!ka(t))return void Sr("Character suggestions skipped before submit (stale snapshot).");const e=Ca(),n=await Wa("/api/word-companion/runtime/character-suggestions",{documentGuid:t.documentGuid,sceneId:t.sceneId,characterIds:s});if(br(`Character suggestion API: ${Math.round(Ca()-e)}ms`),!ka(t))return void Sr("Character suggestion result ignored (stale snapshot).");if(rr=t.sceneId,or=d,(n?.createdCount||0)>0){const e=i.slice(0,3).map(e=>e.name).join(", "),t=i.length>3?" +"+(i.length-3):"";Pr(e?`Characters detected: ${e}${t}`:n.message)}Sr(n?.message||"Character suggestions submitted.")}if(!h||sr===sn&&dr===h)Sr("Asset suggestions skipped.");else{if(!ka(t))return void Sr("Asset suggestions skipped before submit (stale snapshot).");Sr(`Asset matches found: ${u.map(e=>e.name).join(", ")}`);const e=Ca(),n=await Wa("/api/word-companion/runtime/asset-suggestions",{documentGuid:t.documentGuid,sceneId:t.sceneId,assetIds:p});if(br(`Asset suggestion API: ${Math.round(Ca()-e)}ms`),!ka(t))return void Sr("Asset suggestion result ignored (stale snapshot).");if(sr=t.sceneId,dr=h,(n?.createdCount||0)>0){const e=u.slice(0,3).map(e=>e.name).join(", "),t=u.length>3?" +"+(u.length-3):"";Pr(e?`Assets detected: ${e}${t}`:n.message)}Sr(n?.message||"Asset suggestions submitted.")}if(!f||hr===sn&&mr===f)Sr("Location suggestions skipped.");else{if(!ka(t))return void Sr("Location suggestions skipped before submit (stale snapshot).");Sr(`Location matches found: ${y.map(e=>e.name).join(", ")}`);const e=Ca(),n=await Wa("/api/word-companion/runtime/location-suggestions",{documentGuid:t.documentGuid,sceneId:t.sceneId,locationIds:g});if(br(`Location suggestion API: ${Math.round(Ca()-e)}ms`),!ka(t))return void Sr("Location suggestion result ignored (stale snapshot).");if(hr=t.sceneId,mr=f,(n?.createdCount||0)>0){const e=y.slice(0,3).map(e=>e.name).join(", "),t=y.length>3?" +"+(y.length-3):"";Pr(e?`Locations detected: ${e}${t}`:n.message)}Sr(n?.message||"Location suggestions submitted.")}br(`Total suggestion pass: ${Math.round(Ca()-e)}ms`)}catch(e){console.error("Unable to detect runtime suggestions.",e),ko({lastError:vo(e)})}finally{Xn=!1,Zn&&(Zn=!1,hc(1500))}},hc=(e=2500)=>{rc(),!sn||Wn||Xn?Xn&&(Zn=!0):Qn=window.setTimeout(()=>{pc()},e)},mc=async()=>{const e=Ao(),t=$o(),n=yo(tn,"chapter");if(go({projectId:e?.projectId,projectTitle:e?.title,bookId:t?.bookId,bookTitle:t?qo(t):void 0,detectedChapter:tn,detectedScene:nn,requestChapter:n,requestScene:"",result:"Not run",chapterId:null,sceneId:null}),!t)return lo("Not detected"),Pr("Select a PlotDirector book first."),!1;if(!tn)return lo("Not detected"),Pr("No chapter detected in Word. Use Heading 1 for chapters."),!1;lo("Not detected");try{const e=await wo(t.bookId),r=an?e.find(e=>e.chapterId===an):null,o=n.toLocaleLowerCase(),a=o?e.find(e=>yo(e.title,"chapter").toLocaleLowerCase()===o):null,c=r||a;return c?(ao(),Jr(null,c.chapterId,r?"Chapter anchor":"Chapter title"),un=r?"ChapterID Anchor":"Title Match",qr("Chapter linked to PlotDirector"),Pr("No scene detected in Word. Use Heading 2 for scenes."),go({result:"Chapter matched",chapterId:c.chapterId,sceneId:null}),!0):(Jr(null),qr("Chapter not found in PlotDirector."),Pr("Chapter not found in PlotDirector."),go({result:"Chapter not matched",chapterId:null,sceneId:null}),co("Chapter not found in PlotDirector."),!1)}catch(e){return lo("Not found in PlotDirector"),ko({lastError:vo(e)}),Pr("Unable to load PlotDirector chapter data."),!1}},yc=async()=>{const e=Ao(),t=$o(),n=yo(tn,"chapter"),r=yo(nn,"scene");if(go({projectId:e?.projectId,projectTitle:e?.title,bookId:t?.bookId,bookTitle:t?qo(t):void 0,detectedChapter:tn,detectedScene:nn,requestChapter:n,requestScene:r,result:"Not run",chapterId:null,sceneId:null}),Dr({anchorType:cn?"SceneID Anchor":an?"ChapterID Anchor":"Title Match",storedSceneId:cn,storedChapterId:an,resolutionMethod:"-"}),!t)return lo("Not detected"),Pr("Select a PlotDirector book first."),go({result:"Error"}),!1;if(!tn||!nn)return lo("Not detected"),Pr("No scene detected in Word. Use Heading 2 for scenes."),go({result:"Error"}),!1;ce&&(ce.disabled=!0,ce.textContent="Refreshing...");const o=()=>{ce&&(ce.disabled=!1,ce.textContent="Refresh PlotDirector Scene")};lo("Not detected"),Pr("Resolving PlotDirector scene...");try{if(cn){const e=await(async(e,t)=>{const n=await ja(`/api/word-companion/books/${e}/structure`),r=Array.isArray(n?.chapters)?n.chapters:[];for(const e of r){const n=Array.isArray(e.scenes)?e.scenes:[];for(const r of n)if(t(e,r))return{chapter:e,scene:r}}return null})(t.bookId,(e,t)=>t.sceneId===cn);if(e)return go({result:"Matched",chapterId:e.chapter.chapterId,sceneId:e.scene.sceneId}),await bo(t.bookId,e.scene.sceneId,e.chapter.chapterId,"Anchor","SceneID Anchor"),!0;pn=!0,un="SceneID Anchor",qr("Not found in PlotDirector"),Pr("Stored PlotDirector ID is invalid."),go({result:"Error",chapterId:an,sceneId:cn}),Dr({anchorType:"SceneID Anchor",storedSceneId:cn,storedChapterId:an,resolutionMethod:"Anchor"})}if(an){const e=(await fo(t.bookId)).find(e=>e.chapterId===an),n=e?(Array.isArray(e.scenes)?e.scenes:[]).find(e=>yo(e.title,"scene").toLocaleLowerCase()===r.toLocaleLowerCase()):null;if(n)return go({result:"Matched",chapterId:e.chapterId,sceneId:n.sceneId}),await bo(t.bookId,n.sceneId,e.chapterId,"Anchor","ChapterID Anchor"),!0;e&&!cn?(un="ChapterID Anchor",Jr(null,an,"Chapter anchor"),go({result:"Chapter matched",chapterId:an,sceneId:null})):cn||(un="ChapterID Anchor",go({result:"Chapter anchor not found",chapterId:an,sceneId:null}))}const e=await Wa(`/api/word-companion/books/${t.bookId}/resolve-scene`,{chapterTitle:n,sceneTitle:r});if(!e?.matched||!e.sceneId){const t=pn,n=Number.parseInt(e?.chapterId||"",10),r=Number.isInteger(dn)&&dn>0?dn:null,a=Number.isInteger(n)&&n>0?n:r,c=!!e?.chapterMatched||!!a;return lo("Not found in PlotDirector"),pn=t,c&&(Jr(null,a,a===r?"Chapter anchor":"Chapter title"),qr("Scene not found in PlotDirector.")),Pr(t?"Stored PlotDirector ID is invalid.":c?"Scene not found in PlotDirector.":"This chapter does not exist in PlotDirector. Create or link the chapter first."),go({result:"Not matched",chapterId:c?a:e?.chapterId,sceneId:e?.sceneId}),t||(c?(ao(),so("Scene not found in PlotDirector.")):(io(),co("Chapter not found in PlotDirector."))),o(),!1}const a=pn;return go({result:a?"Matched by title fallback":"Matched",chapterId:e.chapterId,sceneId:e.sceneId}),await bo(t.bookId,e.sceneId,e.chapterId,a?"Title fallback":"Title","Title Match"),a&&(pn=!0,Pr("Stored PlotDirector ID is invalid."),Ar()),!0}catch(e){const t=pn;return ko({lastError:vo(e)}),lo("Not found in PlotDirector"),pn=t,Pr(t?"Stored PlotDirector ID is invalid.":"Unable to load PlotDirector scene data."),go({result:"Error"}),!1}finally{o()}},gc=async()=>{if(Rn=null,Vn)return On=!0,void Sr("Runtime update deferred; update already running.");if(!_t||!$o())return Un=!1,void Sr("Runtime update skipped.");if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return Un=!1,Vr("Manual"),void Pr("Automatic scene tracking is unavailable in this Word version. Use Refresh Current Scene.");if(!Cn)return Un=!1,Vr("Manual"),void Pr("Document structure is not cached yet. Use Refresh Current Scene.");const e=Date.now()-Mn;if(Un&&e{Rn&&window.clearTimeout(Rn),Rn=window.setTimeout(gc,Math.max(0,e)),Vr("Waiting for typing to pause"),Sr("Runtime update scheduled.")},wc=()=>{Rn&&(window.clearTimeout(Rn),Rn=null),Un=!1,On=!1},Ic=()=>{((e="selection",t=1200)=>{if(Un=!0,Mn=Date.now(),Bn+=1,Gn=null,Tr(),rc(),Jn&&(_n=!0),Xn&&(Zn=!0),Sr(`${e} changed.`),Vn)return On=!0,void Vr("Waiting for typing to pause");fc(t)})("Selection")},Sc=()=>{if(Fn&&window.Office?.context?.document&&"function"==typeof window.Office.context.document.removeHandlerAsync&&window.Office?.EventType?.DocumentSelectionChanged)try{window.Office.context.document.removeHandlerAsync(window.Office.EventType.DocumentSelectionChanged,{handler:Ic}),Fn=!1}catch(e){console.warn("Unable to remove Word selection tracking handler.",e)}},bc=async(e,n)=>{if(Cn=null,Zr(),!e)return Kt=[],Lo(H,"Select a project first"),Lo(m,"Select a project first"),Lr(""),Eo(t,null),Jo(),lo("Not detected"),void Mr();Lo(H,"Loading books..."),Lr(""),lo("Not detected"),Mr("Select a book to analyse manuscript structure.");try{const r=await ja(`/api/word-companion/projects/${e}/books`);if(Kt=Array.isArray(r.books)?r.books:[],0===Kt.length)return Lo(H,"No books available."),Lo(m,"No books available."),Lr("No books available."),Eo(t,null),Jo(),void Oo("No books available.");Po(H,"Choose a book",Kt.map(e=>({...e,displayTitle:qo(e)})),"bookId","displayTitle");const o=Kt.find(e=>e.bookId===n);o&&H?(H.value=String(o.bookId),Eo(t,o.bookId)):Eo(t,null),((e=null)=>{if(!m)return;if(0===Kt.length)return void Lo(m,"No books available.");Po(m,"Choose a book",Kt.map(e=>({...e,displayTitle:qo(e)})),"bookId","displayTitle");const t=e||Number.parseInt(H?.value||"",10),n=Kt.find(e=>e.bookId===t);n&&(m.value=String(n.bookId)),Ro()})(o?.bookId||n),Jo(),lo(($o(),"Not detected")),Mr($o()?"Ready to analyse manuscript structure.":"Select a book to analyse manuscript structure."),Oo(jo()?"Ready to scan manuscript structure.":"Select a Book to begin.")}catch{Kt=[],Lo(H,"Unable to load books."),Lo(m,"Unable to load books."),Lr("Unable to load books."),Eo(t,null),Jo(),lo("Not detected"),Mr("Unable to load books."),Oo("Unable to load books.")}};for(const e of i)e.addEventListener("click",()=>vr(e.dataset.tabButton));xr(),G?.addEventListener("change",async()=>{const n=Number.parseInt(G.value||"",10);Xr(),h&&Number.isInteger(n)&&n>0&&(h.value=String(n)),Eo(e,Number.isInteger(n)&&n>0?n:null),Eo(t,null),lo("Not detected"),Mr(),Oo("Select a Book to begin."),await bc(n,null)}),H?.addEventListener("change",()=>{const e=Number.parseInt(H.value||"",10);Xr(),Eo(t,Number.isInteger(e)&&e>0?e:null),m&&Number.isInteger(e)&&e>0&&(m.value=String(e)),Jo(),lo("Not detected"),Mr($o()?"Ready to analyse manuscript structure.":"Select a book to analyse manuscript structure."),Oo(jo()?"Ready to scan manuscript structure.":"Select a Book to begin.")}),h?.addEventListener("change",async()=>{const n=Number.parseInt(h.value||"",10);Xr(),G&&Number.isInteger(n)&&n>0&&(G.value=String(n)),Eo(e,Number.isInteger(n)&&n>0?n:null),Eo(t,null),Oo("Select a Book to begin."),await bc(n,null)}),m?.addEventListener("change",()=>{const e=Number.parseInt(m.value||"",10);Xr(),H&&Number.isInteger(e)&&e>0&&(H.value=String(e)),Eo(t,Number.isInteger(e)&&e>0?e:null),Jo(),Oo(jo()?"Ready to scan manuscript structure.":"Select a Book to begin.")}),y?.addEventListener("input",Ro),g?.addEventListener("click",async()=>{const e=To(),t=String(y?.value||"").trim();if(e&&t){g.disabled=!0,Wo("Creating Book...");try{const n=await Wa(`/api/word-companion/projects/${e.projectId}/books`,{title:t});y&&(y.value=""),G&&(G.value=String(e.projectId)),await bc(e.projectId,n.bookId),m&&(m.value=String(n.bookId)),Wo("Ready to scan manuscript structure.")}catch(e){console.error("Unable to create Book from Word Companion.",e),Wo(`Unable to create Book: ${vo(e)}`)}finally{Ro()}}else Ro()}),f?.addEventListener("click",async()=>{const e=To(),t=jo();if(e&&t)if(Qt&&Xt&&window.Word&&"function"==typeof window.Word.run){f&&(f.disabled=!0,f.textContent="Scanning..."),Wo("Scanning manuscript structure...");try{const n=await window.Word.run(async e=>{const n=e.document.body.paragraphs;return n.load("text,styleBuiltIn,style"),await e.sync(),((e,t)=>{const n=[];let r=null,o=null,a=0;const c=[],i=new Set(["***","###"]),s=()=>{if(!r)return null;const e={title:`Scene ${r.scenes.length+1}`,sortOrder:10*(r.scenes.length+1),wordCount:0};return r.scenes.push(e),e};return e.forEach(e=>{const d=String(e.text||"").trim();if(!d)return;if(c.push(d),Ko(e,1))return r={title:d,sortOrder:10*(n.length+1),wordCount:0,scenes:[]},n.push(r),o=s(),void(a+=Qo(d));if(!r||!o)return;if(t&&i.has(d))return void(o=s());const l=Qo(d);r.wordCount+=l,o.wordCount+=l,a+=l}),{chapters:n,chapterCount:n.length,sceneCount:n.reduce((e,t)=>e+t.scenes.length,0),wordCount:a,documentText:c.join("\n")}})(n.items,!!t.usesExplicitScenes)});Nn=n,Ln=!1;const r=await Wa("/api/word-companion/manuscript/analyse",{projectId:e.projectId,bookId:t.bookId,documentGuid:Vo(),chapterCount:n.chapterCount,sceneCount:n.sceneCount,wordCount:n.wordCount});xn=r,(e=>{if(!S)return;S.innerHTML="";const t=document.createElement("strong");t.textContent="Manuscript Analysis",S.append(t);const n=document.createElement("dl"),r=[["Project",e.projectTitle],["Book",qo({title:e.bookTitle,subtitle:e.bookSubtitle})],["Chapters",Number(e.chapterCount||0).toLocaleString()],["Scenes",Number(e.sceneCount||0).toLocaleString()],["Words",Number(e.wordCount||0).toLocaleString()]];for(const[e,t]of r){const r=document.createElement("dt");r.textContent=e;const o=document.createElement("dd");o.textContent=t||"-",n.append(r,o)}S.append(n),jr(S,!1),jr(L,!1),Wo(e.message||"Preview generated."),Ro()})(r);try{const t=await Wa("/api/word-companion/manuscript/discover-characters",{projectId:e.projectId,documentText:n.documentText||""});En=Array.isArray(t?.candidates)?t.candidates:[],jr(b,!0),jr(v,!0)}catch(e){console.error("Unable to discover character candidates.",e),En=[],jr(b,!0),jr(v,!0)}ko({lastScan:"Success",lastError:"-",paragraphs:"-",heading1:String(n.chapterCount),heading2:"-"})}catch(e){console.error("Unable to scan manuscript for first-run import.",e),Oo(`Unable to scan manuscript: ${vo(e)}`),ko({lastScan:"Failure",lastError:vo(e)})}finally{f&&(f.textContent="Scan Manuscript"),Ro()}}else Oo("Word document access is unavailable.");else Oo("Select a Project and Book to begin.")}),P?.addEventListener("click",async()=>{const n=To(),o=jo();if(!(n&&o&&Nn&&xn?.canImport))return void Ro();let a=!1;if(!xn.requiresReplaceConfirmation||(a=await new Promise(e=>{if(!D||"function"!=typeof D.showModal)return void e(window.confirm("This Book already contains planned chapters and scenes.\n\nImporting this manuscript will replace the planned structure.\n\nContinue?"));const t=t=>{A?.removeEventListener("click",n),$?.removeEventListener("click",r),D?.removeEventListener("cancel",o),D?.close(),e(t)},n=()=>t(!0),r=()=>t(!1),o=e=>{e.preventDefault(),t(!1)};A?.addEventListener("click",n),$?.addEventListener("click",r),D?.addEventListener("cancel",o),D.showModal()}),a)){Dn=!0,Ro(),Wo("Importing manuscript structure...");try{const i=Vo(),s=await Wa("/api/word-companion/manuscript/import",{projectId:n.projectId,bookId:o.bookId,documentGuid:i,bindingVersion:1,replacePlanned:a,chapters:Nn.chapters});if(!s.imported)return xn={...xn,canImport:!s.requiresReplaceConfirmation,requiresReplaceConfirmation:!!s.requiresReplaceConfirmation,message:s.message||xn.message},Wo(s.message||"Import was not completed."),void Ro();const d=s.manuscriptDocument;await(c={documentGuid:d?.documentGuid||i,bookId:s.bookId,projectId:s.projectId,bindingVersion:d?.bindingVersion||1},new Promise((e,t)=>{const n=window.Office?.context?.document?.settings;n?(n.set(r.documentGuid,c.documentGuid),n.set(r.bookId,String(c.bookId)),n.set(r.projectId,String(c.projectId)),n.set(r.bindingVersion,String(c.bindingVersion||1)),n.saveAsync(n=>{n.status===window.Office.AsyncResultStatus.Succeeded?e():t(n.error||new Error("Unable to save Word document metadata."))})):t(new Error("Word document settings are unavailable."))})),Sn={documentGuid:d?.documentGuid||i,bookId:s.bookId,projectId:s.projectId,bindingVersion:d?.bindingVersion||1},Eo(e,s.projectId),Eo(t,s.bookId),G&&(G.value=String(s.projectId));const l=En;await bc(s.projectId,s.bookId),Nr("Connected"),Ln=!0,Pn=l.length>0,qn=Pn?Date.now():0,En=l,l.length>0?(Uo(!0),Go(l),jr(L,!0),jr(v,!1),Wo(s.message||"Manuscript structure imported."),Pr(s.message||"Manuscript structure imported."),window.setTimeout(Ro,750)):await Ra(s.message||"Manuscript structure imported.")}catch(e){console.error("Unable to import manuscript structure.",e),Wo(`Unable to import manuscript: ${vo(e)}`)}finally{Dn=!1,Ro()}var c}else Wo("Import cancelled.")}),x?.addEventListener("click",async()=>{const e=To()||Ao(),t=Bo();if(!Pn||Date.now()-qn<750||!e||0===t.length)Ro();else{An=!0,Ro(),Co(C,"Creating selected characters...");try{const n=await Wa("/api/word-companion/manuscript/create-discovered-characters",{projectId:e.projectId,candidateNames:t});Pr(n.message||"Characters created."),Co(C,`${n.createdCount||0} created, ${n.skippedCount||0} already existed.`),await Ra(n.message||"Characters created.")}catch(e){console.error("Unable to create discovered characters.",e),Co(C,`Unable to create characters: ${vo(e)}`)}finally{An=!1,Ro()}}}),N?.addEventListener("click",()=>Ra("Character creation skipped.")),E?.addEventListener("click",()=>Ra()),w?.addEventListener("click",()=>Uo(!1)),q?.addEventListener("click",()=>Oo("Import cancelled.")),_?.addEventListener("click",Na),ne?.addEventListener("click",Ea),re?.addEventListener("click",async()=>{const e=$o();if(!e||0===Or().length||$n)return void Br();if(!await Pa())return;$n=!0,Gr(),Ur("Applying structure sync...");const t={createdChapters:0,createdScenes:0,linkedChapters:0,linkedScenes:0,skipped:Array.isArray(In?.manualReview)?In.manualReview.length:0,failed:0},n=Or().filter(e=>"couldLink"===e.category&&"Chapter"===e.type),r=Or().filter(e=>"wouldCreateChapters"===e.category),o=Or().filter(e=>"couldLink"===e.category&&"Scene"===e.type),a=Or().filter(e=>"wouldCreateScenes"===e.category),c=[];let i="";const s=(e,t)=>{c.push({item:e,counterName:t})},d=async(e,n)=>{try{await(async e=>{if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)throw new Error("Word document access is unavailable.");await window.Word.run(async t=>{const n=await Sa(t),r="Chapter"===e.type?e.wordChapter:e.wordScene,o=Number.isInteger(r?.paragraphIndex)?n.bodyParagraphs[r.paragraphIndex]:null;if(!o)throw new Error("Unable to locate the Word heading.");if("Chapter"===e.type){const t=e.pdChapter?.chapterId;if(!t)throw new Error("Chapter ID is not available.");Ha(o,"PlotDirector Chapter",`PD-CHAPTER-${t}`,"PD-CHAPTER")}else{const t=e.pdScene?.sceneId;if(!t)throw new Error("Scene ID is not available.");Ha(o,"PlotDirector Scene",`PD-SCENE-${t}`,"PD-SCENE")}await t.sync()})})(e),qa(e,"Success"),t[n]+=1}catch(n){qa(e,"Failed",vo(n)),t.failed+=1}};try{for(const e of n)s(e,"linkedChapters");for(const n of r)try{await $a(e.bookId,n),s(n,"createdChapters")}catch(e){qa(n,"Failed",vo(e)),t.failed+=1}for(const e of o)s(e,"linkedScenes");for(const n of a)try{await Ta(e.bookId,n),s(n,"createdScenes")}catch(e){qa(n,"Failed",vo(e)),t.failed+=1}for(const e of c)await d(e.item,e.counterName);for(const e of In.manualReview||[])qa(e,"Skipped");Ia(In),i=(e=>`Structure Sync Complete. Created: ${e.createdChapters} Chapters, ${e.createdScenes} Scenes. Linked: ${e.linkedChapters} Chapters, ${e.linkedScenes} Scenes. Skipped: ${e.skipped} Manual Review items. Failed: ${e.failed} Items.`)(t),Ur(i)}finally{$n=!1,Gr(),i&&(Zr(),await Ea(),Ur(`${i} Preview refreshed.`))}}),bt?.addEventListener("click",()=>La(!0)),Ct?.addEventListener("click",()=>La(!1)),It?.addEventListener("cancel",e=>{e.preventDefault(),La(!1)}),ce?.addEventListener("click",yc),J?.addEventListener("click",async()=>{if(!$o())return Pr("Select a PlotDirector book first."),void lo("Not detected");wc(),_r(!0),Vr("Updating...");try{await Promise.all([ic(!0),sc(!0),dc(!0)]);if(!await Na())return;if(Yr(!1),!nn)return await mc(),void Vr("Current scene updated");await yc(),Vr("Current scene updated")}finally{_r(!1)}}),ke?.addEventListener("click",()=>tc({source:"manual"})),Re?.addEventListener("click",async()=>{if(sn)if(!Wn&&await(async()=>{if(!sn)return!1;if(!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return Yr(!0,"The Word cursor is now in a different scene. Refresh Current Scene before saving."),!1;try{const e=await window.Word.run(async e=>await Sa(e)),t=e.currentChapter?.title||"",n=e.currentScene?.title||"",r=e.currentScene?.anchorId||null,o=e.currentChapter?.anchorId||null,a=Number.isInteger(r)&&r===sn,c=Number.isInteger(o)&&o===dn,i=yo(n,"scene").toLocaleLowerCase()===yo(gr||nn,"scene").toLocaleLowerCase(),s=yo(t,"chapter").toLocaleLowerCase()===yo(fr||tn,"chapter").toLocaleLowerCase();return a||i&&(c||s)?(Yr(!1),!0):(Yr(!0,"The Word cursor is now in a different scene. Refresh Current Scene before saving."),!1)}catch(e){return console.error("Unable to verify current Word scene before saving.",e),ko({lastError:vo(e)}),Yr(!0,"The Word cursor is now in a different scene. Refresh Current Scene before saving."),!1}})()){Re&&(Re.disabled=!0,Re.textContent="Saving...");try{await(e=`/api/word-companion/scenes/${sn}/links`,t={characterIds:Ba(Te),assetIds:Ba(je),locationIds:[],primaryLocationId:Ga()},ja(e,{method:"PUT",headers:{"Content-Type":"application/json"},body:JSON.stringify(t)})),(()=>{const e=new Set(Ba(Te)),t=new Set(Ba(je));Ir={characters:Ir.characters.map(t=>({...t,linked:e.has(Number.parseInt(uo(t,"character"),10))})),assets:Ir.assets.map(e=>({...e,linked:t.has(Number.parseInt(uo(e,"asset"),10))})),locations:Ir.locations,primaryLocationId:Ga()}})(),eo("Scene links saved successfully."),ko({lastError:"-"})}catch(e){eo("Unable to save scene links."),ko({lastError:vo(e)})}finally{Re&&(Re.disabled=!sn||Wn,Re.textContent="Save Scene Links")}var e,t}else eo("The Word cursor is now in a different scene. Refresh Current Scene before saving.");else eo("Link a PlotDirector scene first.")}),pe?.addEventListener("click",async()=>{await Fa()}),he?.addEventListener("click",async()=>{console.debug("Word Companion unlink clicked"),Pr("Preparing to unlink manuscript...");const e=(()=>{const e=Sn||Ho();if(e)return e;const t=bn?.manuscriptDocument?.documentGuid||"",n=Number.parseInt(bn?.bookId||"",10),r=Number.parseInt(bn?.projectId||"",10);return t&&Number.isInteger(n)&&n>0&&Number.isInteger(r)&&r>0?{documentGuid:t,bookId:n,projectId:r,bindingVersion:Number.parseInt(bn?.manuscriptDocument?.bindingVersion||"",10)||1}:null})();if(!e)return void Pr("This Word document is not linked.");if(!e.documentGuid||!Number.isInteger(e.bookId)||e.bookId<=0)return void Pr("Unable to unlink: bound document metadata is incomplete.");if(await new Promise(e=>{if(!T||"function"!=typeof T.showModal)return void e(window.confirm("This will remove PlotDirector binding metadata from this Word document.\n\nIf PlotDirector is reachable, it will also unlink this Book in PlotDirector.\n\nYour manuscript text will not be changed.\n\nContinue?"));const t=t=>{j?.removeEventListener("click",n),W?.removeEventListener("click",r),T?.removeEventListener("cancel",o),T?.close(),e(t)},n=()=>t(!0),r=()=>t(!1),o=e=>{e.preventDefault(),t(!1)};j?.addEventListener("click",n),W?.addEventListener("click",r),T?.addEventListener("cancel",o),T.showModal()})){Pr("Unlinking manuscript..."),he&&(he.disabled=!0,he.textContent="Unlinking...");try{await Wa("/api/word-companion/manuscript/unlink",{documentGuid:e.documentGuid,bookId:e.bookId}),await Fo(),await Oa("Manuscript unlinked.")}catch(e){console.error("Unable to unlink manuscript binding.",e),Pr("Unable to unlink from PlotDirector.");if(window.confirm("PlotDirector could not be updated, but you can still remove the binding from this Word document.\n\nYou may need to unlink the Book manually in PlotDirector later.\n\nRemove binding from this Word document only?"))try{await Fo(),await Oa("Word metadata removed. Unlink the Book manually in PlotDirector if it still shows as linked.")}catch(e){console.error("Unable to remove Word document metadata.",e),Pr(`Unable to remove Word metadata: ${vo(e)}`)}else Pr(`Unable to unlink manuscript: ${vo(e)}`)}finally{he&&(he.disabled=!1,he.textContent="Unlink this Word document"),Wr()}}else Pr("Unlink cancelled.")}),Ge?.addEventListener("click",async()=>{const e=$o();if(!e||!tn||dn)return void co("Chapter not found in PlotDirector.");const t=mo(tn),n=await((e,t)=>(Co(yt,`"${e}"`),Co(gt,`"${t}"`),mt?new Promise(e=>{wn=e,mt.showModal?mt.showModal():mt.hidden=!1}):Promise.resolve(window.confirm(`Create PlotDirector chapter:\n\n"${e}"\n\nin book:\n\n"${t}"\n\n?`))))(t,qo(e)||"selected book");if(n){Ge&&(Ge.disabled=!0,Ge.textContent="Creating...");try{const n=Number.isInteger(on)&&on>0?10*on:null,r=await Wa(`/api/word-companion/books/${e.bookId}/chapters`,{title:t,sortOrder:n});if(!r?.chapterId)throw new Error("Chapter creation did not return a chapter ID.");Zr(),Jr(null,r.chapterId,"Manual chapter link");if(!await Va("Chapter created and linked successfully."))return;await Ya("Chapter created and linked successfully.")}catch(e){no("Unable to create chapter."),ko({lastError:vo(e)})}finally{Ge&&(Ge.disabled=!ro(),Ge.textContent="Create Chapter in PlotDirector")}}}),He?.addEventListener("click",async()=>{const e=$o();if(e&&tn&&!dn){He&&(He.disabled=!0,He.textContent="Loading...");try{gn=await wo(e.bookId),fn=null,dt&&(dt.value=""),Co(ht,""),_a(),st?.showModal?st.showModal():st&&(st.hidden=!1)}catch(e){no("Unable to load chapters."),ko({lastError:vo(e)})}finally{He&&(He.disabled=!ro(),He.textContent="Link to Existing Chapter")}}else co("Chapter not found in PlotDirector.")}),dt?.addEventListener("input",_a),ut?.addEventListener("click",async()=>{const e=gn.find(e=>e.chapterId===fn);if(e){ut&&(ut.disabled=!0,ut.textContent="Linking...");try{Jr(null,e.chapterId,"Manual chapter link");if(!await Va("Chapter linked successfully."))return;za(),await Ya("Chapter linked successfully.")}catch(e){Co(ht,"Unable to link chapter."),no("Unable to link chapter."),ko({lastError:vo(e)})}finally{ut&&(ut.disabled=!fn,ut.textContent="Link Chapter")}}else Co(ht,"Select a chapter.")}),pt?.addEventListener("click",za),ft?.addEventListener("click",()=>Ja(!0)),wt?.addEventListener("click",()=>Ja(!1)),mt?.addEventListener("cancel",e=>{e.preventDefault(),Ja(!1)}),_e?.addEventListener("click",async()=>{const e=$o();if(!e||!nn)return void so("Scene not found in PlotDirector.");const t=yo(nn,"scene"),n=yo(tn,"chapter"),r=await((e,t)=>(Co(ot,`"${e}"`),Co(at,`"${t}"`),rt?new Promise(e=>{yn=e,rt.showModal?rt.showModal():rt.hidden=!1}):Promise.resolve(window.confirm(`Create PlotDirector scene:\n\n"${e}"\n\nwithin chapter:\n\n"${t}"\n\n?`))))(t,n);if(r){_e&&(_e.disabled=!0,_e.textContent="Creating...");try{const n=await So();if(!n)return void so("This chapter does not exist in PlotDirector. Create or link the chapter first.");const r=await Wa(`/api/word-companion/books/${e.bookId}/chapters/${n.chapterId}/scenes`,{sceneTitle:t});if(!r?.sceneId||!r?.chapterId)throw new Error("Scene creation did not return a scene ID.");Zr(),await Ka(r.sceneId,r.chapterId,"Scene created and linked successfully.")}catch(e){to("Unable to create scene."),ko({lastError:vo(e)})}finally{_e&&(_e.disabled=!oo(),_e.textContent="Create Scene in PlotDirector")}}}),ze?.addEventListener("click",async()=>{const e=$o();if(e&&nn){ze&&(ze.disabled=!0,ze.textContent="Loading...");try{const t=await fo(e.bookId),n=Io(t);if(!n)return void so("This chapter does not exist in PlotDirector. Create or link the chapter first.");hn=Array.isArray(n.scenes)?n.scenes:[],mn=null,Xe&&(Xe.value=""),Co(nt,""),Xa(),Qe?.showModal?Qe.showModal():Qe&&(Qe.hidden=!1)}catch(e){to("Unable to load scenes."),ko({lastError:vo(e)})}finally{ze&&(ze.disabled=!oo(),ze.textContent="Link to Existing Scene")}}else so("Scene not found in PlotDirector.")}),Xe?.addEventListener("input",Xa),et?.addEventListener("click",async()=>{const e=$o(),t=hn.find(e=>e.sceneId===mn);if(e&&t){et&&(et.disabled=!0,et.textContent="Linking...");try{const e=await So();if(!e)throw new Error("This chapter does not exist in PlotDirector. Create or link the chapter first.");Za(),await Ka(t.sceneId,e.chapterId,"Scene linked successfully.")}catch(e){Co(nt,"Unable to link scene."),to("Unable to link scene."),ko({lastError:vo(e)})}finally{et&&(et.disabled=!mn,et.textContent="Link Scene")}}else Co(nt,"Select a scene.")}),tt?.addEventListener("click",Za),ct?.addEventListener("click",()=>Qa(!0)),it?.addEventListener("click",()=>Qa(!1)),rt?.addEventListener("cancel",e=>{e.preventDefault(),Qa(!1)}),Tt?.addEventListener("click",async()=>{Tt&&(Tt.disabled=!0,Tt.textContent="Running...");try{if(await xo(),!Qt||!Xt||!window.Word||"function"!=typeof window.Word.run)return void ko({lastScan:"Failure",lastError:"Word document access is unavailable.",paragraphs:"-",heading1:"-",heading2:"-"});const e=await window.Word.run(async e=>{const t=e.document.body.paragraphs;return t.load("items"),await e.sync(),t.items.length});ko({lastScan:"Success",lastError:"-",paragraphs:String(e)})}catch(e){console.error("Word Companion diagnostics failed.",e);const t=vo(e);ko({lastScan:"Failure",lastError:t}),Pr(`Unable to scan the Word document: ${t}`)}finally{Tt&&(Tt.disabled=!1,Tt.textContent="Run Diagnostics")}});const Cc=_t?(async()=>{Lo(G,"Loading projects..."),Lo(H,"Select a project first"),Lo(h,"Loading projects..."),Lo(m,"Select a project first"),Er(""),Lr("");try{const n=await ja("/api/word-companion/projects");if(zt=Array.isArray(n.projects)?n.projects:[],0===zt.length)return Lo(G,"No projects available."),Lo(h,"No projects available."),Er("No projects available."),Eo(e,null),Eo(t,null),Jo(),void Oo("No projects available.");Po(G,"Choose a project",zt,"projectId","title"),Mo();const r=No(e),o=zt.find(e=>e.projectId===r);o&&G?(G.value=String(o.projectId),h&&(h.value=String(o.projectId)),Eo(e,o.projectId),await bc(o.projectId,No(t))):(Eo(e,null),Eo(t,null),Jo(),Oo("Select a Project and Book to begin."))}catch{zt=[],Kt=[],Lo(G,"Unable to connect to PlotDirector."),Lo(H,"Select a project first"),Lo(h,"Unable to connect to PlotDirector."),Lo(m,"Select a project first"),Nr("Unable to connect to PlotDirector."),Er("Unable to connect to PlotDirector."),Eo(e,null),Eo(t,null),Jo(),Oo("Unable to connect to PlotDirector.")}})():Promise.resolve();if(_t||(Lo(G,"Please sign in to PlotDirector."),Lo(H,"Please sign in to PlotDirector."),Lo(h,"Please sign in to PlotDirector."),Lo(m,"Please sign in to PlotDirector."),Jo()),!window.Office||"function"!=typeof window.Office.onReady)return Cr("Word Companion ready"),Pr("Word document access is unavailable."),Vr("Manual"),void ko({host:"Unavailable",platform:"Unavailable",ready:"No",wordApi:"No"});xo().then(async()=>{Cr("Word Companion ready"),await Cc,await(async()=>{if(!_t||!Xt)return void Uo(!1);const n=Ho();if(n)try{const r=await ja(`/api/word-companion/runtime/book/${n.bookId}?documentGuid=${encodeURIComponent(n.documentGuid)}`),o=r?.manuscriptDocument;if(r?.bookId===n.bookId&&r?.projectId===n.projectId&&o&&String(o.documentGuid).toLowerCase()===n.documentGuid.toLowerCase())return Sn=n,Qr(r),Eo(e,r.projectId),Eo(t,r.bookId),G&&(G.value=String(r.projectId)),await bc(r.projectId,r.bookId),Uo(!1),Nr("Connected"),Lr("Bound manuscript detected."),void await Ma()}catch{}Sn=null,Xr(),Mo(),To()?await bc(To().projectId,null):Lo(m,"Select a project first"),Oo("Select a Project and Book to begin."),Uo(!0)})(),Xt?(()=>{if(_t){if(!window.Office?.context?.document||"function"!=typeof window.Office.context.document.addHandlerAsync||!window.Office?.EventType?.DocumentSelectionChanged)return Vr("Manual"),void Pr("Automatic scene tracking is unavailable in this Word version. Use Refresh Current Scene.");try{window.Office.context.document.addHandlerAsync(window.Office.EventType.DocumentSelectionChanged,Ic,e=>{e?.status===window.Office.AsyncResultStatus.Succeeded?(Fn=!0,Vr("Live")):(Vr("Manual"),Pr("Automatic scene tracking is unavailable in this Word version. Use Refresh Current Scene."))}),window.addEventListener("beforeunload",Sc)}catch(e){console.warn("Unable to register Word selection tracking handler.",e),Vr("Manual"),Pr("Automatic scene tracking is unavailable in this Word version. Use Refresh Current Scene.")}}})():(Pr("Word document access is unavailable."),Vr("Manual"))}).catch(e=>{console.error("Office readiness check failed.",e),Nr("Unable to connect to PlotDirector."),Cr("Word Companion unavailable"),Pr("Word document access is unavailable."),ko({ready:"No",wordApi:"No",lastScan:"Failure"})})})(); \ No newline at end of file From 5d5b34bb11b351e99e01bf289b18afaec10620be Mon Sep 17 00:00:00 2001 From: Nick Beckley Date: Fri, 3 Jul 2026 20:39:56 +0100 Subject: [PATCH 4/4] Added Phase-20-Story-Intelligence-Onboarding document --- .../Phase-20-Story-Intelligence-Onboarding.md | 332 ++++++++++++++++++ 1 file changed, 332 insertions(+) create mode 100644 PlotLine/Docs/Features/Phase-20-Story-Intelligence-Onboarding.md diff --git a/PlotLine/Docs/Features/Phase-20-Story-Intelligence-Onboarding.md b/PlotLine/Docs/Features/Phase-20-Story-Intelligence-Onboarding.md new file mode 100644 index 0000000..4ddc1a3 --- /dev/null +++ b/PlotLine/Docs/Features/Phase-20-Story-Intelligence-Onboarding.md @@ -0,0 +1,332 @@ +# Phase 20 -- Story Intelligence Onboarding + +## Functional Design Specification + +### Overview + +The purpose of the Story Intelligence Onboarding Wizard is to transform +a new user's manuscript into a structured PlotDirector project with as +little manual effort as possible. + +Rather than expecting the user to manually create chapters, scenes, +characters and summaries, PlotDirector will guide them through an +onboarding process appropriate to the way they write. + +The wizard has two distinct objectives: + +1. Remove the "blank project" experience that new users currently + encounter. +2. Demonstrate PlotDirector's capabilities immediately by building a + rich story model from the user's existing manuscript. + +The wizard is website-led throughout. The PlotDirector Word Companion +acts only as a document scanner and synchronisation agent where +Microsoft Word is used. + +------------------------------------------------------------------------ + +# Design Principles + +- The onboarding should feel like a conversation rather than a + configuration screen. +- The user should never be presented with options that are irrelevant + to the software they use. +- AI is entirely optional. +- The user always remains in control. +- No manuscript is analysed using AI without explicit consent. +- The Word Companion remains the preferred workflow but is never + mandatory. + +------------------------------------------------------------------------ + +# Wizard Flow + +## Step 1 -- Welcome + +Display a friendly welcome explaining that PlotDirector will tailor the +setup to the author's workflow. + +------------------------------------------------------------------------ + +## Step 2 -- Where are you in your writing journey? + +- I'm planning a brand new story +- I've already started writing +- My manuscript is largely complete + +------------------------------------------------------------------------ + +## Step 3 -- What software do you write in? + +- Microsoft Word (Recommended) +- Google Docs +- Scrivener +- LibreOffice / OpenOffice +- Markdown / Obsidian +- Other + +Store this preference against the user profile. + +------------------------------------------------------------------------ + +## Step 4 -- Create your first project + +Collect: + +- Project Name +- Optional Description + +------------------------------------------------------------------------ + +## Step 5 -- Create your first book + +Collect: + +- Book Title +- Subtitle +- Genre +- Estimated Word Count (optional) +- Cover Image (optional) + +------------------------------------------------------------------------ + +# Path A -- Microsoft Word + +## A1 -- Install the Word Companion + +Provide: + +- Download button +- Installation guide +- Short demonstration video +- Troubleshooting link + +------------------------------------------------------------------------ + +## A2 -- Open the manuscript + +The user opens the manuscript in Word, starts the Companion, signs in +and links the document to the selected Project and Book. + +------------------------------------------------------------------------ + +## A3 -- Companion Detection + +The Companion silently registers itself with PlotDirector, including: + +- User +- Companion Version +- Current Document +- Linked Project +- Linked Book +- SignalR Session + +The website updates immediately to show **Word Companion Connected**. + +Until this point the Companion status is hidden from the application +header. + +------------------------------------------------------------------------ + +## A4 -- Scan Manuscript + +The website instructs the Companion (via SignalR) to scan the document. + +The Companion detects: + +- Chapters +- Scenes +- Word Counts +- Character Candidates +- Hidden Document IDs +- Document Metadata + +Progress is streamed continuously back to PlotDirector. + +------------------------------------------------------------------------ + +## A5 -- Review Scan + +Display the detected: + +- Chapters +- Scenes +- Character Suggestions + +Allow editing before import. + +------------------------------------------------------------------------ + +## A6 -- Import Structure + +Create: + +- Chapters +- Scenes +- Characters +- Initial Scene Metadata + +Return created IDs to the Companion so hidden document markers can be +updated. + +------------------------------------------------------------------------ + +## A7 -- Story Intelligence (Optional) + +Explain that PlotDirector can analyse the manuscript using AI. + +Explain: + +- Entirely optional. +- Manuscript is securely processed using the OpenAI API. +- API content is not used to train AI models. +- Show estimated time. +- Show cost or included credits. + +Buttons: + +- Analyse Now +- Skip + +------------------------------------------------------------------------ + +# Path B -- Other Writing Software + +## B1 -- Export + +Guide the user to export their manuscript as **.docx**. + +## B2 -- Upload + +Upload the document. + +Use the same scanning engine as the Word Companion. + +## B3 -- Review + +Display detected structure. + +## B4 -- Import + +Create the project structure. + +Explain that future updates can be imported by uploading a fresh Word +export. + +## B5 -- Story Intelligence + +Offer the same optional AI analysis. + +------------------------------------------------------------------------ + +# Story Intelligence Pipeline + +The pipeline should progressively build a structured Story Model. + +1. Scene analysis +2. Character profiles +3. Relationship summaries +4. Location summaries +5. Asset summaries +6. Plot thread suggestions +7. Timeline observations +8. Continuity and warning generation + +Each stage should consume structured data from earlier stages wherever +possible rather than repeatedly analysing the manuscript. + +------------------------------------------------------------------------ + +# Progress Experience + +Progress should be streamed live using SignalR. + +Example messages: + +- Preparing manuscript +- Reading Chapter 12 of 38 +- Summarising Scene 54 +- Identifying recurring characters +- Building relationship map +- Finding important locations +- Tracking story assets +- Constructing timeline +- Generating character biographies +- Building your Story Model +- Finalising project + +Display live counters for: + +- Chapters +- Scenes +- Characters +- Locations +- Assets +- Relationships +- Plot Threads + +------------------------------------------------------------------------ + +# Completion Screen + +Present a dedicated completion page. + +Example summary: + +- 42 Chapters +- 186 Scenes +- 38 Characters +- 24 Locations +- 18 Assets +- 31 Relationships +- 11 Plot Threads +- 315 AI Suggestions + +Buttons: + +- Review AI Suggestions +- Open Project Overview +- Open Writer Workspace +- Take a Quick Tour + +------------------------------------------------------------------------ + +# Dashboard Behaviour + +If Microsoft Word was selected but the Companion has never connected: + +Display a dashboard reminder. + +Once connected: + +- Hide installation prompts. +- Show Companion status in the application header. +- Future connections occur silently. + +------------------------------------------------------------------------ + +# Future Enhancements + +- Automatic manuscript update detection. +- Incremental re-analysis. +- Selective AI regeneration. +- AI confidence scores. +- Author approval queue. +- Background processing. +- Analysis history. +- Version comparison. +- Additional writing platform support. + +------------------------------------------------------------------------ + +# Guiding Philosophy + +The onboarding wizard is not simply importing a manuscript. + +It is constructing a structured **Story Model** that powers +PlotDirector's timelines, continuity analysis, relationships, locations, +assets, plot threads, reports and writing tools. + +The end result should leave authors feeling that PlotDirector has +genuinely understood their story rather than simply copied their +document into a database.