diff --git a/PlotLine/wwwroot/css/site.css b/PlotLine/wwwroot/css/site.css index 24bb95f..3a5a7c8 100644 --- a/PlotLine/wwwroot/css/site.css +++ b/PlotLine/wwwroot/css/site.css @@ -2439,24 +2439,43 @@ body.timeline-inspector-resizing { .timeline-navigation-card { display: grid; - grid-template-columns: auto minmax(0, 1fr) auto; - gap: 14px; + 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, 0.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, 0.98), rgba(255, 255, 255, 0.94)); box-shadow: 0 10px 26px rgba(30, 37, 43, 0.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; @@ -2468,6 +2487,11 @@ body.timeline-inspector-resizing { 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); @@ -2482,10 +2506,11 @@ body.timeline-inspector-resizing { } .timeline-navigation-card-actions { + grid-area: actions; display: flex; flex-wrap: wrap; gap: 8px; - justify-content: flex-end; + justify-content: center; } .timeline-horizontal-overflow { @@ -2529,6 +2554,12 @@ body.timeline-inspector-resizing { box-shadow: inset 18px 0 18px -20px rgba(244, 234, 220, 0.55), inset -18px 0 18px -20px rgba(244, 234, 220, 0.55); } +@media (prefers-reduced-motion: reduce) { + .timeline-navigation-card { + transition: opacity 0.12s ease; + } +} + .timeline-scene-card.filter-dim, .timeline-scene-card.focus-dim, .lane-dim { @@ -4118,6 +4149,9 @@ body.dragging-location [data-drag-type="location"] { } .timeline-navigation-card { + grid-template-areas: + "copy" + "actions"; grid-template-columns: 1fr; } @@ -4126,7 +4160,7 @@ body.dragging-location [data-drag-type="location"] { } .timeline-navigation-card-actions { - justify-content: flex-start; + justify-content: center; } .story-bible-search, diff --git a/PlotLine/wwwroot/css/site.min.css b/PlotLine/wwwroot/css/site.min.css index fc59086..5324dc1 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}.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}.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)}.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-line-svg-path{fill:none;stroke-width:4;stroke-linecap:round;opacity:.72}.plot-line-svg-connector{fill:none;stroke-width:3;stroke-linecap:round;opacity:.58}.plot-line-svg-path.plotline-state-neglected{stroke-dasharray:9 8;opacity:.44}.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;stroke-dasharray:5 7;opacity:.5}.plot-event-svg-node.plotline-state-questionable circle,.plot-event-svg-node.plotline-state-resolved circle{fill:#8c9491}.plot-event-svg-node.plotline-state-abandoned circle,.plot-event-svg-node.plotline-state-abandoned path{fill:#9b2f36;stroke:#ffffff}.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 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}.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 path{stroke:#ffffff;stroke-width:2}.plot-event-svg-node line{stroke:#8b1e2d;stroke-width:4;stroke-linecap:round}.plot-event-svg-node-reveal circle{stroke-width:3}.plot-event-svg-node-resolve circle:last-child{stroke:currentColor;stroke-width:2}.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}.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:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,255,255,.62)}.thread-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid color-mix(in srgb,var(--plot-colour),#000 18%);border-radius:999px;padding:0 7px;color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 78%);font-size:.72rem;font-weight:800;text-decoration:none}.plot-lane-board [data-plot-event-node]{opacity:0}.thread-marker:hover{color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 58%)}.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-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)}.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}.scene-inspector-form{display:grid;gap:14px}.inspector-section{border-top:1px solid var(--plotline-line);padding-top:12px}.inspector-section:first-of-type{border-top:0;padding-top:0}.inspector-section h3{margin:0 0 10px;font-size:.95rem;color:var(--plotline-accent-dark)}.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}.scene-inspector-root{display:grid;gap:12px}.scene-overview-card{display:grid;gap:10px;border:1px solid rgba(47,111,99,.18);border-radius:10px;padding:12px;background:linear-gradient(180deg,rgba(47,111,99,.08),rgba(255,255,255,.88))}.scene-overview-card h3{margin:0;font-size:1.05rem}.scene-overview-card .muted{display:flex;flex-wrap:wrap;gap:7px;margin:0}.breadcrumb-trail,.context-nav,.inspector-nav-links,.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)}.inspector-quick-nav{position:sticky;top:0;z-index:5;display:grid;gap:8px;border:1px solid var(--plotline-line);border-radius:10px;padding:10px;background:rgba(255,255,255,.94);box-shadow:0 10px 24px rgba(55,48,39,.08);backdrop-filter:blur(8px)}.inspector-nav-links a{border:1px solid var(--plotline-line);border-radius:999px;padding:4px 8px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-decoration:none}.inspector-nav-links a.active,.inspector-nav-links a:hover{color:var(--plotline-accent-dark);border-color:rgba(47,111,99,.35);background:rgba(47,111,99,.08)}.inspector-accordion-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;border:0;padding:0;color:var(--plotline-ink);font-size:.95rem;font-weight:900;text-align:left;background:0 0}.inspector-accordion-toggle::before{content:"+";display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:999px;margin-right:7px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.09)}.inspector-section.is-open>.inspector-accordion-toggle::before{content:"-"}.inspector-accordion-toggle span:first-child{margin-right:auto}.accordion-count{color:var(--plotline-muted);font-size:.75rem}.inspector-subheading{margin:14px 0 8px;color:var(--plotline-muted);font-size:.88rem;font-weight:900}.inspector-accordion-body{display:none;margin-top:12px}.inspector-section.is-open>.inspector-accordion-body{display:block}.inspector-section.is-filtered-out{display:none}.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)}.timeline-navigation-card{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:14px;align-items: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;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)}.timeline-navigation-card[hidden]{display:none}.timeline-navigation-card-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 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{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}.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)}.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)}.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.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)}.inspector-actions{position:sticky;bottom:-16px;display:flex;gap:8px;border-top:1px solid var(--plotline-line);margin:2px -16px -16px;padding:12px 16px;background:rgba(255,255,255,.95);backdrop-filter:blur(8px)}.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,.inspector-quick-nav,.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-columns:1fr}.timeline-navigation-card-icon{display:none}.timeline-navigation-card-actions{justify-content:flex-start}.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}} \ 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:#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}.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}.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)}.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-line-svg-path{fill:none;stroke-width:4;stroke-linecap:round;opacity:.72}.plot-line-svg-connector{fill:none;stroke-width:3;stroke-linecap:round;opacity:.58}.plot-line-svg-path.plotline-state-neglected{stroke-dasharray:9 8;opacity:.44}.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;stroke-dasharray:5 7;opacity:.5}.plot-event-svg-node.plotline-state-questionable circle,.plot-event-svg-node.plotline-state-resolved circle{fill:#8c9491}.plot-event-svg-node.plotline-state-abandoned circle,.plot-event-svg-node.plotline-state-abandoned path{fill:#9b2f36;stroke:#ffffff}.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 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}.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 path{stroke:#ffffff;stroke-width:2}.plot-event-svg-node line{stroke:#8b1e2d;stroke-width:4;stroke-linecap:round}.plot-event-svg-node-reveal circle{stroke-width:3}.plot-event-svg-node-resolve circle:last-child{stroke:currentColor;stroke-width:2}.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}.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:flex-start;gap:5px;min-height:46px;border:1px dashed #d8ddd8;border-radius:8px;padding:7px;background:rgba(255,255,255,.62)}.thread-marker{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:24px;border:1px solid color-mix(in srgb,var(--plot-colour),#000 18%);border-radius:999px;padding:0 7px;color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 78%);font-size:.72rem;font-weight:800;text-decoration:none}.plot-lane-board [data-plot-event-node]{opacity:0}.thread-marker:hover{color:var(--plotline-ink);background:color-mix(in srgb,var(--plot-colour),#fff 58%)}.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-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)}.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}.scene-inspector-form{display:grid;gap:14px}.inspector-section{border-top:1px solid var(--plotline-line);padding-top:12px}.inspector-section:first-of-type{border-top:0;padding-top:0}.inspector-section h3{margin:0 0 10px;font-size:.95rem;color:var(--plotline-accent-dark)}.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}.scene-inspector-root{display:grid;gap:12px}.scene-overview-card{display:grid;gap:10px;border:1px solid rgba(47,111,99,.18);border-radius:10px;padding:12px;background:linear-gradient(180deg,rgba(47,111,99,.08),rgba(255,255,255,.88))}.scene-overview-card h3{margin:0;font-size:1.05rem}.scene-overview-card .muted{display:flex;flex-wrap:wrap;gap:7px;margin:0}.breadcrumb-trail,.context-nav,.inspector-nav-links,.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)}.inspector-quick-nav{position:sticky;top:0;z-index:5;display:grid;gap:8px;border:1px solid var(--plotline-line);border-radius:10px;padding:10px;background:rgba(255,255,255,.94);box-shadow:0 10px 24px rgba(55,48,39,.08);backdrop-filter:blur(8px)}.inspector-nav-links a{border:1px solid var(--plotline-line);border-radius:999px;padding:4px 8px;color:var(--plotline-muted);font-size:.76rem;font-weight:800;text-decoration:none}.inspector-nav-links a.active,.inspector-nav-links a:hover{color:var(--plotline-accent-dark);border-color:rgba(47,111,99,.35);background:rgba(47,111,99,.08)}.inspector-accordion-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;border:0;padding:0;color:var(--plotline-ink);font-size:.95rem;font-weight:900;text-align:left;background:0 0}.inspector-accordion-toggle::before{content:"+";display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:999px;margin-right:7px;color:var(--plotline-accent-dark);background:rgba(47,111,99,.09)}.inspector-section.is-open>.inspector-accordion-toggle::before{content:"-"}.inspector-accordion-toggle span:first-child{margin-right:auto}.accordion-count{color:var(--plotline-muted);font-size:.75rem}.inspector-subheading{margin:14px 0 8px;color:var(--plotline-muted);font-size:.88rem;font-weight:900}.inspector-accordion-body{display:none;margin-top:12px}.inspector-section.is-open>.inspector-accordion-body{display:block}.inspector-section.is-filtered-out{display:none}.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)}.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)}.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.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)}.inspector-actions{position:sticky;bottom:-16px;display:flex;gap:8px;border-top:1px solid var(--plotline-line);margin:2px -16px -16px;padding:12px 16px;background:rgba(255,255,255,.95);backdrop-filter:blur(8px)}.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,.inspector-quick-nav,.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}} \ No newline at end of file diff --git a/PlotLine/wwwroot/js/site.js b/PlotLine/wwwroot/js/site.js index 5769b45..d106cd6 100644 --- a/PlotLine/wwwroot/js/site.js +++ b/PlotLine/wwwroot/js/site.js @@ -1260,9 +1260,32 @@ let dismissedForPage = false; let isDemoing = false; let isArmed = false; + let dismissTimer = null; const knownLeft = new WeakMap(); const rememberPosition = (container) => knownLeft.set(container, container.scrollLeft); + const prefersReducedMotion = () => window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches; + + const showCard = () => { + window.clearTimeout(dismissTimer); + card.hidden = false; + card.classList.remove("is-dismissing"); + }; + + const hideCard = (animate = false) => { + window.clearTimeout(dismissTimer); + if (!animate || prefersReducedMotion() || card.hidden) { + card.classList.remove("is-dismissing"); + card.hidden = true; + return; + } + + card.classList.add("is-dismissing"); + dismissTimer = window.setTimeout(() => { + card.hidden = true; + card.classList.remove("is-dismissing"); + }, 1300); + }; const updateEdgeIndicators = (container) => { const hasOverflow = hasHorizontalOverflow(container); @@ -1274,13 +1297,17 @@ const updateGuidanceState = () => { const shouldShow = hasHorizontalOverflow(primaryScrollContainer()) && !readDiscovered() && !dismissedForPage; - card.hidden = !shouldShow; + if (shouldShow) { + showCard(); + } else if (!card.classList.contains("is-dismissing")) { + hideCard(false); + } allScrollContainers().forEach(updateEdgeIndicators); }; const markDiscovered = () => { dismissedForPage = true; - card.hidden = true; + hideCard(true); try { localStorage.setItem(navigationDiscoveryKey, "true"); } catch { diff --git a/PlotLine/wwwroot/js/site.min.js b/PlotLine/wwwroot/js/site.min.js index b4e6982..c027478 100644 --- a/PlotLine/wwwroot/js/site.min.js +++ b/PlotLine/wwwroot/js/site.min.js @@ -1 +1 @@ -(()=>{const e="plotline.theme",t=document.querySelectorAll("[data-theme-choice]"),a=a=>{const n="dark"===a?"dark":"light";document.documentElement.dataset.theme=n,document.documentElement.dataset.bsTheme=n,(t=>{try{localStorage.setItem(e,t)}catch{}})(n),t.forEach(e=>{const t=e.dataset.themeChoice===n;e.classList.toggle("active",t),e.setAttribute("aria-pressed",String(t))})};t.forEach(e=>{e.addEventListener("click",()=>a(e.dataset.themeChoice))}),a((()=>{try{return localStorage.getItem(e)}catch{return null}})()||"light")})(),(()=>{const e=document.querySelector("[data-trial-banner]");if(!e)return;const t=`plotline.trialBanner.dismissed.${e.dataset.trialBannerKey||"current"}`;try{if("true"===localStorage.getItem(t))return void(e.hidden=!0)}catch{}e.querySelector("[data-trial-banner-dismiss]")?.addEventListener("click",()=>{e.hidden=!0;try{localStorage.setItem(t,"true")}catch{}})})(),(()=>{const e=document.querySelectorAll(".scene-inspector-root");if(!e.length)return;e.forEach(e=>{e.addEventListener("submit",e=>{const t=e.target;if(!(t instanceof HTMLFormElement))return;let a=t.querySelector("input[name='ReturnUrl']");a||(a=document.createElement("input"),a.type="hidden",a.name="ReturnUrl",t.appendChild(a)),a.value=`${window.location.pathname}${window.location.search}${window.location.hash}`},!0)})})(),(()=>{const e=document.getElementById("plotlineConfirmModal"),t=e&&window.bootstrap?new bootstrap.Modal(e):null,a=e?.querySelector("#plotlineConfirmModalTitle"),n=e?.querySelector("#plotlineConfirmModalMessage"),r=e?.querySelector("[data-confirm-submit]"),o=e?.querySelector("[data-delete-confirm-field]"),s=e?.querySelector("[data-delete-confirm-input]");let i=null,l=null;e?.addEventListener("hidden.bs.modal",()=>{i=null,l=null,s&&(s.value=""),o?.classList.add("d-none"),r?.removeAttribute("disabled")}),s?.addEventListener("input",()=>{"true"===i?.dataset.requireDeleteText&&r&&(r.disabled="DELETE"!==s.value.trim())}),r?.addEventListener("click",()=>{if(i){if("true"===i.dataset.requireDeleteText){const e=i.querySelector("[data-delete-confirm-target], [name='confirmationText']");e&&(e.value=s?.value.trim()||"")}i.dataset.confirmed="true",t?.hide(),i.requestSubmit&&l?i.requestSubmit(l):i.requestSubmit?i.requestSubmit():i.submit()}}),document.addEventListener("submit",c=>{const d=c.target;if(!(d instanceof HTMLFormElement)||"true"===d.dataset.confirmed||"true"===d.dataset.confirmSkip||"true"===d.dataset.noDeleteConfirm)return;const p=d.dataset.confirmMessage,u=c.submitter instanceof HTMLElement?c.submitter:d.querySelector("button[type='submit']"),m=u?.textContent||"",h=d.getAttribute("action")||"",g=/restore/i.test(m)||/\/restore\b/i.test(h),f=/delete forever/i.test(m)||/\/deleteforever\b/i.test(h),y=!g&&!f&&(/archive/i.test(m)||/\/archive\b/i.test(h)),v=!f&&/(delete|remove)/i.test(m);if(!(p||y||g||v||f))return;const L=p||(y?"Archive this item?\n\nThis will hide it from active lists and timelines, but the data will be kept and can be restored later.":g?"Restore this item?\n\nThis will return it to active lists and timelines where applicable.":f?"Permanently delete this item?\n\nThis cannot be undone. Any linked planning data may also be removed or become unavailable. Only continue if you are certain.":"Remove this item?\n\nThis removes the link or supporting record. Major story items are archived instead of permanently deleted.");if(!(t&&e&&a&&n&&r))return;c.preventDefault();const S=(e=>{const t=e.split(/\n\s*\n/);return{title:t.shift()?.trim()||"Confirm action",body:t.join("\n\n").trim()}})(L);i=d,l=u,a.textContent=d.dataset.confirmTitle||S.title,n.textContent=d.dataset.confirmBody||S.body,r.textContent=d.dataset.confirmButtonText||m.trim()||"Confirm",r.className=`btn ${d.dataset.confirmButtonClass||(g?"btn-primary":"btn-danger")}`;const w="true"===d.dataset.requireDeleteText||f;o?.classList.toggle("d-none",!w),w&&r&&(r.disabled=!0,s?.focus()),t.show(),w&&window.setTimeout(()=>s?.focus(),200)})})(),(()=>{const e=document.querySelectorAll("[data-help-icon]");if(!e.length||!window.bootstrap)return;const t=new Map;let a=null;const n=e=>e.querySelector("[data-help-tooltip]")||e,r=e=>bootstrap.Tooltip.getInstance(n(e))?.hide(),o=(e=null)=>{a&&a!==e&&bootstrap.Popover.getInstance(a)?.hide()},s=()=>e.forEach(e=>r(e));e.forEach(e=>{const i=n(e),l=i.dataset.helpMicro||"Help article not found.",c=e.dataset.helpTitle||"Help unavailable",d=e.dataset.helpSummary||"Help content has not yet been written for this feature.";bootstrap.Tooltip.getOrCreateInstance(i,{title:l,trigger:"hover focus",placement:"top",container:"body"});const p=bootstrap.Popover.getOrCreateInstance(e,{title:c,trigger:"click",placement:"auto",container:"body",html:!0,customClass:"plotline-help-popover",content(){const t=document.createElement("div"),a=document.createElement("p");a.className="mb-2",a.textContent=d;const n=document.createElement("a");return n.href="#",n.textContent="More...",n.className="plotline-help-more",n.addEventListener("click",t=>{t.preventDefault(),o(),s(),e.dispatchEvent(new CustomEvent("plotline:help-more",{bubbles:!0,detail:{key:e.dataset.helpKey||""}}))}),t.append(a,n),t}});t.set(e,p),e.addEventListener("click",t=>{window.PlotLineHelpDrawer?.isActive?.()&&(t.preventDefault(),t.stopPropagation(),o(),r(e),window.PlotLineHelpPopovers?.hideAll(),window.PlotLineHelpDrawer.open(e.dataset.helpKey||""))}),e.addEventListener("show.bs.popover",t=>{window.PlotLineHelpDrawer?.isActive?.()?t.preventDefault():(o(e),r(e))}),e.addEventListener("shown.bs.popover",()=>{a=e,r(e)}),e.addEventListener("hidden.bs.popover",()=>{a===e&&(a=null)})}),document.addEventListener("click",e=>{const t=e.target instanceof Element?e.target:null;if(!t||!a)return;if(t.closest("[data-help-icon]"))return;const n=document.querySelector(`#${a.getAttribute("aria-describedby")}`);n?.contains(t)||o()}),document.addEventListener("keydown",e=>{"Escape"===e.key&&o()}),window.PlotLineHelpPopovers={hideAll(){t.forEach(e=>e.hide()),s(),a=null}}})(),(()=>{const e=document.querySelector("[data-help-layout]"),t=document.querySelector("[data-help-drawer]"),a=document.querySelector("[data-help-content]"),n=document.querySelector("[data-help-splitter]"),r=document.querySelector("[data-help-close]"),o=document.querySelector("[data-help-collapse]"),s=document.querySelector("[data-help-expand]"),i=document.querySelector("[data-help-pin]"),l=document.querySelector("[data-help-drawer-heading]");if(!e||!t||!a)return;const c="plotline.helpDrawer.width",d="plotline.helpDrawer.pinned",p="plotline.helpDrawer.key",u="plotline.helpDrawer.collapsed",m=e=>{try{return"true"===localStorage.getItem(e)}catch{return!1}},h=(e,t)=>{try{localStorage.setItem(e,t)}catch{}},g=t=>{const a=`${((e,t,a)=>Math.min(a,Math.max(t,e)))(Number.parseFloat(t)||25,20,50)}%`;e.style.setProperty("--help-drawer-width",a),h(c,a)},f=e=>{h(d,String(e)),i?.setAttribute("aria-pressed",String(e)),i&&(i.textContent=e?"Unpin":"Pin")},y=t=>{e.classList.toggle("help-collapsed",t),h(u,String(t)),o&&(o.textContent=t?"Expand":"Collapse")},v=async(t,n={})=>{const r=t||"";e.classList.add("help-open"),n.keepCollapsed||y(!1),h(p,r),l&&(l.textContent=r||"Help"),a.innerHTML='
Loading help...
';try{const e=await fetch(`/HelpDrawer/Article?key=${encodeURIComponent(r)}`,{headers:{"X-Requested-With":"XMLHttpRequest"}});a.innerHTML=e.ok?await e.text():'Help for this feature has not yet been written.
';const t=a.querySelector(".help-drawer-article h2")?.textContent?.trim();l&&t&&(l.textContent=t)}catch{a.innerHTML='Help for this feature has not yet been written.
'}};window.PlotLineHelpDrawer={isActive:()=>e.classList.contains("help-open"),open:e=>v(e)},g(localStorage.getItem(c)||"25%"),f(m(d)),y(m(u)),document.addEventListener("plotline:help-more",e=>{const t=e.detail?.key||e.target?.dataset?.helpKey||"";window.PlotLineHelpPopovers?.hideAll(),v(t)}),document.addEventListener("click",e=>{const t=e.target instanceof Element?e.target.closest("[data-help-open]"):null;t&&(e.preventDefault(),window.PlotLineHelpPopovers?.hideAll(),v(t.dataset.helpOpen||""))}),r?.addEventListener("click",()=>{e.classList.remove("help-open","help-collapsed"),f(!1)}),o?.addEventListener("click",()=>y(!e.classList.contains("help-collapsed"))),s?.addEventListener("click",()=>y(!1)),s?.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),y(!1))}),i?.addEventListener("click",()=>f(!m(d))),n?.addEventListener("pointerdown",t=>{if(!e.classList.contains("help-open")||e.classList.contains("help-collapsed"))return;t.preventDefault(),document.body.classList.add("help-resizing"),n.setPointerCapture?.(t.pointerId);const a=t=>{const a=e.getBoundingClientRect(),n=(a.right-t.clientX)/a.width*100;g(n)},r=()=>{document.body.classList.remove("help-resizing"),document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",r)};document.addEventListener("pointermove",a),document.addEventListener("pointerup",r)});const L=(()=>{try{return localStorage.getItem(p)||""}catch{return""}})();m(d)&&L&&v(L,{keepCollapsed:!0})})(),(()=>{const e=document.querySelectorAll(".scene-inspector-root");if(!e.length)return;e.forEach(e=>{const t=`plotline.inspector.${e.dataset.sceneId||e.querySelector(".scene-inspector-form [name='SceneID']")?.value||"new"}.`,a=new Set(["overview","timing","characters"]),n=[...e.querySelectorAll(".inspector-section")],r=e.querySelector(".scene-inspector-form"),o=e.querySelector("[data-scene-time-editor]");if(r&&o&&"true"!==o.dataset.enhanced){o.dataset.enhanced="true";const e=r.querySelector("[name='TimeModeID']"),t=o.dataset.exactDatetimeModeId||"",a=o.dataset.exactDateModeId||"",n=[...o.querySelectorAll("[data-time-part-field]")],s={StartDateTime:o.querySelector("[data-date-part-for='StartDateTime']"),EndDateTime:o.querySelector("[data-date-part-for='EndDateTime']")},i={StartDateTime:o.querySelector("[data-time-part-for='StartDateTime']"),EndDateTime:o.querySelector("[data-time-part-for='EndDateTime']")},l={StartDateTime:r.querySelector("input[type='hidden'][name='StartDateTime']"),EndDateTime:r.querySelector("input[type='hidden'][name='EndDateTime']")},c=()=>e?.value===t,d=()=>e?.value===a,p=()=>{const e=c();n.forEach(t=>{t.hidden=!e,t.classList.toggle("d-none",!e)})},u=e=>{const t=l[e],a=s[e]?.value||"",n=i[e]?.value||"";if(!t)return;if(!a)return void(t.value="");if(c())return void(t.value=`${a}T${n||"00:00"}`);if(d())return void(t.value=a);const r=t.value.match(/^\\d{4}-\\d{2}-\\d{2}T(\\d{2}:\\d{2})/)?.[1];t.value=r?`${a}T${r}`:a},m=()=>{u("StartDateTime"),u("EndDateTime")};e?.addEventListener("change",p),r.addEventListener("submit",m),p()}n.forEach(e=>{if("true"===e.dataset.enhanced)return;const n=e.querySelector("h3, h2"),r=e.dataset.sectionTitle||n?.textContent?.trim()||"Overview",o=r.toLowerCase().replace(/&/g,"and").replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");const s=e.dataset.sectionId||`inspector-${o}`,i=s.replace(/^inspector-/,"");e.id=s,e.dataset.searchText=`${r} ${e.textContent}`.toLowerCase(),e.dataset.enhanced="true";const l=document.createElement("div");for(l.className="inspector-accordion-body";e.firstChild;)l.appendChild(e.firstChild);const c=document.createElement("button");c.type="button",c.className="inspector-accordion-toggle",c.setAttribute("aria-expanded","false"),e.append(c,l);const d=l.querySelectorAll(".asset-event-item, .thread-event-item, .warning-mini-card, .dependency-card, .metric-slider").length;c.innerHTML=`${r}${d||""}`;const p=localStorage.getItem(`${t}${i}`),u=null===p?a.has(i):"open"===p;e.classList.toggle("is-open",u),c.setAttribute("aria-expanded",String(u)),c.addEventListener("click",()=>{const a=!e.classList.contains("is-open");e.classList.toggle("is-open",a),c.setAttribute("aria-expanded",String(a)),localStorage.setItem(`${t}${i}`,a?"open":"closed")})}),e.querySelectorAll(".inspector-nav-links a").forEach(t=>{t.addEventListener("click",a=>{const n=e.querySelector(t.getAttribute("href"));n&&(a.preventDefault(),n.classList.add("is-open"),n.querySelector(".inspector-accordion-toggle")?.setAttribute("aria-expanded","true"),n.scrollIntoView({behavior:"smooth",block:"start"}))})});const s=e.querySelector("[data-inspector-search]");if(s?.addEventListener("input",()=>{const e=s.value.trim().toLowerCase();n.forEach(t=>{const a=!e||t.dataset.searchText.includes(e);t.classList.toggle("is-filtered-out",!a),a&&e&&(t.classList.add("is-open"),t.querySelector(".inspector-accordion-toggle")?.setAttribute("aria-expanded","true"))})}),"IntersectionObserver"in window){const t=[...e.querySelectorAll(".inspector-nav-links a")],a=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&t.forEach(t=>{t.classList.toggle("active",t.getAttribute("href")===`#${e.target.id}`)})})},{root:e.closest(".scene-inspector-panel")||null,rootMargin:"-10% 0px -70% 0px"});n.forEach(e=>a.observe(e))}})})(),(()=>{const e=document.querySelectorAll("[data-metric-shape-chart]");if(!e.length)return;const t=["#2f6f63","#b35f3b","#6750a4","#c58b2b","#7d3f52","#33759b","#9c4d8f","#a33d3d","#6f8f3d","#d08a2f","#444b57"],a=new Set(["Overall Intensity","Tension","Emotional Weight","Action"]),n=[],r=()=>{window.requestAnimationFrame(()=>{n.forEach(e=>e.resize())})};window.PlotLineMetricCharts={resizeAll:r},window.addEventListener("plotline:timeline-layout-changed",r);const o={id:"plotlineChapterGuides",afterDraw(e){const t=e.config.options.plugins.plotlineScenes||[],{ctx:a,chartArea:n,scales:r}=e;if(!t.length||!r.x)return;a.save(),a.strokeStyle="rgba(47, 111, 99, 0.16)",a.fillStyle="rgba(82, 75, 65, 0.58)",a.lineWidth=1,a.font="700 10px system-ui, -apple-system, Segoe UI, sans-serif";const o=[];t.forEach((e,a)=>{a&&e.chapterLabel===t[a-1].chapterLabel||o.push({scene:e,index:a})});const s=o.filter(e=>!e.scene.isPlaceholder),i=s.length>40?5:s.length>24?4:s.length>14?2:1;s.forEach((e,t)=>{const{scene:o,index:l}=e,c=r.x.getPixelForValue(l+.5);a.beginPath(),a.moveTo(c,n.top),a.lineTo(c,n.bottom),a.stroke();const d=Number.parseInt(String(o.chapterLabel).replace(/[^0-9]/g,""),10);(0===t||t===s.length-1||1===i||Number.isFinite(d)&&d%i===0)&&a.fillText(o.chapterLabel,Math.min(c+4,n.right-70),n.bottom+22)}),a.restore()}};window.Chart&&Chart.register(o),e.forEach(e=>{const r=e.querySelector("script[type='application/json']"),o=e.querySelector("canvas"),s=e.querySelector("[data-metric-toggles]"),i=e.querySelector("[data-chart-fallback]"),l=e.querySelector("[data-timeline-metric-edit-toolbar]"),c=e.querySelector("[data-edit-metric-status]"),d=e.hasAttribute("data-timeline-metric-editor")&&l&&c;if(!r||!o)return;let p;try{p=JSON.parse(r.textContent||"{}")}catch{return void i?.classList.remove("d-none")}if(!window.Chart||!p.scenes?.length||!p.metrics?.length)return void i?.classList.remove("d-none");const u=new Set(p.defaultMetrics?.length?p.defaultMetrics:a),m=p.scenes.length,h=m>80?10:m>40?5:m>24?4:m>14?2:1,g=p.metrics.map((e,a)=>{const n=new Map(e.points.map(e=>[e.sceneId,e.value])),r=t[a%t.length];return{label:e.metricName,metricTypeId:e.metricTypeId,minValue:Number.isFinite(e.minValue)?e.minValue:1,maxValue:Number.isFinite(e.maxValue)?e.maxValue:10,data:p.scenes.map((e,t)=>{const a=n.get(e.sceneId);return null==a?{x:t+.5,y:null,sceneId:e.sceneId}:{x:t+.5,y:a,sceneId:e.sceneId}}),borderColor:r,backgroundColor:r,pointBackgroundColor:r,pointBorderColor:"#fff",pointBorderWidth:1.5,pointRadius:3,pointHoverRadius:5,borderWidth:2,tension:.35,spanGaps:!0,hidden:!u.has(e.metricName)}});let f=null,y=!1;const v=e=>{c&&(c.textContent=e)},L=()=>g.map((e,t)=>t).filter(e=>b?.isDatasetVisible(e)),S=()=>{const e=L();return 1===e.length?e[0]:-1},w=()=>{if(!d)return;const e=S();g.forEach((t,a)=>{t.pointRadius=a===e?5:3,t.pointHoverRadius=a===e?7:5,t.borderWidth=a===e?3:2});const t=L(),a=e>=0;o.classList.toggle("metric-curve-editing",a),c.classList.toggle("d-none",0===t.length),0===t.length?v(""):v(a?"Drag points up or down to edit this metric.":"Show only one metric line to edit its curve."),b?.update()};s.innerHTML="",g.forEach((e,t)=>{const a=`metric-toggle-${Math.random().toString(36).slice(2)}-${t}`,n=document.createElement("label");n.className="metric-toggle-pill",n.style.setProperty("--metric-colour",e.borderColor),n.innerHTML=`${e.label}`,s.appendChild(n),n.querySelector("input").addEventListener("change",e=>{b.setDatasetVisibility(t,e.target.checked),w(),b.update()})});const b=new Chart(o,{type:"line",data:{datasets:g},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"nearest",intersect:!1},scales:{y:{min:1,max:10,ticks:{stepSize:1},grid:{color:"rgba(82, 75, 65, 0.10)"}},x:{type:"linear",min:0,max:m,bounds:"ticks",ticks:{maxRotation:0,autoSkip:!1,maxTicksLimit:16,callback(e){const t=Math.floor(Number(e));if(t<0||t>=m)return"";const a=p.scenes[t];return 0!==t&&t!==m-1&&t%h!==0||a?.isPlaceholder?"":a?.axisLabel||""}},afterBuildTicks(e){e.ticks=p.scenes.map((e,t)=>({value:t+.5}))},grid:{display:!1}}},plugins:{legend:{display:!1},plotlineScenes:p.scenes,tooltip:{callbacks:{title(e){const t=Math.floor(e[0].parsed.x),a=p.scenes[t];return a.isPlaceholder?a.sceneTitle||"No scene":`${a.chapterLabel}, Scene ${a.sceneNumber}: ${a.sceneTitle}`},label:e=>`${e.dataset.label}: ${e.formattedValue}`,afterBody(e){const t=Math.floor(e[0].parsed.x),a=p.scenes[t],n=[];return a.characterPresence?n.push(a.characterPresence):void 0!==a.characterAppears&&n.push(a.characterAppears?"Character appears":"Character does not appear"),a.bookTitle&&n.push(a.bookTitle),n}}}}}});d&&(w(),o.addEventListener("pointerdown",e=>{f=(e=>{if(!d)return null;const t=S();if(t<0)return null;const a=b.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0).find(e=>e.datasetIndex===t);if(!a)return null;const n=b.data.datasets[a.datasetIndex],r=n?.data?.[a.index];return r?.sceneId&&null!=r.y?{datasetIndex:a.datasetIndex,pointIndex:a.index,previousValue:r.y}:null})(e),f&&(e.preventDefault(),o.setPointerCapture?.(e.pointerId),y=!0)}),o.addEventListener("pointermove",e=>{if(!f)return;const t=b.data.datasets[f.datasetIndex],a=t?.data?.[f.pointIndex];t&&a&&(a.y=((e,t)=>{const a=b.scales.y.getValueForPixel(e.offsetY),n=Math.round(a);return Math.max(t.minValue,Math.min(t.maxValue,n))})(e,t),b.update("none"))}),o.addEventListener("pointerup",async t=>{if(!f)return;const a=f;f=null,o.releasePointerCapture?.(t.pointerId),await(async t=>{const a=b.data.datasets[t.datasetIndex],n=a?.data?.[t.pointIndex];if(!a||!n?.sceneId)return;const r=l?.querySelector("input[name='__RequestVerificationToken']")?.value||"";v("Saving...");try{const t=await fetch(e.dataset.updateUrl||"/SceneMetrics/UpdateSceneMetricValue",{method:"POST",headers:{"Content-Type":"application/json",RequestVerificationToken:r},body:JSON.stringify({sceneId:Number(n.sceneId),metricId:Number(a.metricTypeId),value:Number(n.y)})}),o=await t.json().catch(()=>({}));if(!t.ok||!o.success)throw new Error(o.message||"Save failed");n.y=o.value,v("Saved"),b.update()}catch{n.y=t.previousValue,v("Save failed"),b.update()}})(a),window.setTimeout(()=>{y=!1},0)}),o.addEventListener("pointercancel",e=>{if(!f)return;const t=b.data.datasets[f.datasetIndex],a=t?.data?.[f.pointIndex];a&&(a.y=f.previousValue),f=null,o.releasePointerCapture?.(e.pointerId),y=!1,b.update()})),o.addEventListener("click",e=>{if(y)return void e.preventDefault();const t=b.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0);if(!t.length)return;const a=b.data.datasets[t[0].datasetIndex]?.data?.[t[0].index],n=a?Math.floor(a.x):t[0].index,r=p.scenes[n];r?.timelineUrl&&(window.PlotLineTimelineScroll?.save(),window.location.href=r.timelineUrl)}),n.push(b);const E=window.ResizeObserver?new ResizeObserver(()=>b.resize()):null;E&&(E.observe(e),E.observe(e.querySelector(".metric-chart-frame")||e))})})(),(()=>{const e=document.querySelector("[data-timeline-root]"),t=document.querySelector("[data-timeline-controls]");if(!e||!t)return;const a="plotline.timeline.visibility",n={"scene-cards":!0,"plot-lines":!0,assets:!0,characters:!0,locations:!0,warnings:!0,metrics:!0},r=t=>{Object.entries(t).forEach(([t,a])=>{e.classList.toggle(`hide-${t}`,!a),document.querySelectorAll(`[data-timeline-section='${t}']`).forEach(e=>{e.classList.toggle("timeline-section-hidden",!a)})}),document.querySelectorAll("[data-location-marker]").forEach(e=>{e.classList.toggle("timeline-section-hidden",!t.locations)}),document.querySelectorAll("[data-warning-marker]").forEach(e=>{e.classList.toggle("timeline-section-hidden",!t.warnings)}),document.querySelector("[data-visibility-json]")?.setAttribute("value",JSON.stringify(t))},o=(()=>{try{return{...n,...JSON.parse(localStorage.getItem(a)||"{}")}}catch{return{...n}}})();t.querySelectorAll("[data-timeline-toggle]").forEach(e=>{const t=e.dataset.timelineToggle;e.checked=o[t]??!0,e.addEventListener("change",()=>{o[t]=e.checked,localStorage.setItem(a,JSON.stringify(o)),r(o)})}),t.querySelector("[data-timeline-preset-form]")?.addEventListener("submit",()=>{document.querySelector("[data-visibility-json]")?.setAttribute("value",JSON.stringify(o))}),r(o)})(),(()=>{const e=document.querySelector("[data-timeline-root]");if(!e)return;const t=e.querySelector(".timeline-workspace")||e,a=document.querySelector("[data-timeline-density]"),n=document.querySelector("[data-timeline-zoom]"),r=document.querySelector("[data-timeline-search]"),o=e.querySelector("[data-timeline-minimap]"),s=document.querySelectorAll("[data-timeline-jump], [data-timeline-warning-jump], [data-timeline-entity-jump]"),i=[...e.querySelectorAll(".timeline-scene-card[data-scene-id]")],l="plotline.timeline.collapsed",c="plotline.timeline.density",d="plotline.timeline.zoom",p="plotline.timeline.pending-scroll",u="plotdirector.timelineNavigationDiscovered",m="plotline.timeline.inspectorWidth",h=[".timeline-shell",".plot-lane-board",".asset-lane-board",".character-lane-board",".metric-graph-stack","[data-timeline-minimap]"].join(","),g=["compact","comfortable","expanded"],f=["book","chapter","scene-detail"],y=e.querySelector("[data-inspector-drawer]"),v=e.querySelector("[data-inspector-resizer]"),L=e.querySelector("[data-inspector-close]"),S=null!==localStorage.getItem(l),w=(e=>{try{return new Set(JSON.parse(localStorage.getItem(e)||"[]"))}catch{return new Set}})(l),b=()=>[...e.querySelectorAll(h)],E=t=>{if(!y)return;const{minimum:a,maximum:n,defaultWidth:r}=(()=>{const t=e.getBoundingClientRect().width||window.innerWidth,a=Math.min(420,Math.max(320,t-360)),n=Math.max(a,Math.min(.65*t,t-420));return{minimum:a,maximum:n,defaultWidth:Math.max(a,Math.min(n,.4*t))}})(),o=Math.max(a,Math.min(n,Number(t)||r));e.style.setProperty("--timeline-inspector-width",`${Math.round(o)}px`)};y&&(E(localStorage.getItem(m)),window.addEventListener("resize",()=>E(localStorage.getItem(m)))),(()=>{const r=e.querySelector("[data-timeline-navigation-card]");if(!r)return;const o=r.querySelector("[data-timeline-navigation-dismiss]"),s=r.querySelector("[data-timeline-navigation-demo]"),i=()=>e.querySelector(".timeline-shell"),l=e=>Boolean(e&&e.scrollWidth>e.clientWidth+8),c=e=>Math.max(0,e.scrollWidth-e.clientWidth),d=()=>[t,...b()].filter((e,t,a)=>e&&a.indexOf(e)===t);let p=!1,m=!1,h=!1;const g=new WeakMap,f=e=>g.set(e,e.scrollLeft),y=e=>{const t=l(e),a=c(e);e.classList.toggle("timeline-horizontal-overflow",t),e.classList.toggle("has-scroll-left",t&&e.scrollLeft>8),e.classList.toggle("has-scroll-right",t&&e.scrollLeftLoading help...
';try{const e=await fetch(`/HelpDrawer/Article?key=${encodeURIComponent(r)}`,{headers:{"X-Requested-With":"XMLHttpRequest"}});a.innerHTML=e.ok?await e.text():'Help for this feature has not yet been written.
';const t=a.querySelector(".help-drawer-article h2")?.textContent?.trim();l&&t&&(l.textContent=t)}catch{a.innerHTML='Help for this feature has not yet been written.
'}};window.PlotLineHelpDrawer={isActive:()=>e.classList.contains("help-open"),open:e=>v(e)},g(localStorage.getItem(c)||"25%"),f(m(d)),y(m(u)),document.addEventListener("plotline:help-more",e=>{const t=e.detail?.key||e.target?.dataset?.helpKey||"";window.PlotLineHelpPopovers?.hideAll(),v(t)}),document.addEventListener("click",e=>{const t=e.target instanceof Element?e.target.closest("[data-help-open]"):null;t&&(e.preventDefault(),window.PlotLineHelpPopovers?.hideAll(),v(t.dataset.helpOpen||""))}),r?.addEventListener("click",()=>{e.classList.remove("help-open","help-collapsed"),f(!1)}),o?.addEventListener("click",()=>y(!e.classList.contains("help-collapsed"))),s?.addEventListener("click",()=>y(!1)),s?.addEventListener("keydown",e=>{"Enter"!==e.key&&" "!==e.key||(e.preventDefault(),y(!1))}),i?.addEventListener("click",()=>f(!m(d))),n?.addEventListener("pointerdown",t=>{if(!e.classList.contains("help-open")||e.classList.contains("help-collapsed"))return;t.preventDefault(),document.body.classList.add("help-resizing"),n.setPointerCapture?.(t.pointerId);const a=t=>{const a=e.getBoundingClientRect(),n=(a.right-t.clientX)/a.width*100;g(n)},r=()=>{document.body.classList.remove("help-resizing"),document.removeEventListener("pointermove",a),document.removeEventListener("pointerup",r)};document.addEventListener("pointermove",a),document.addEventListener("pointerup",r)});const L=(()=>{try{return localStorage.getItem(p)||""}catch{return""}})();m(d)&&L&&v(L,{keepCollapsed:!0})})(),(()=>{const e=document.querySelectorAll(".scene-inspector-root");if(!e.length)return;e.forEach(e=>{const t=`plotline.inspector.${e.dataset.sceneId||e.querySelector(".scene-inspector-form [name='SceneID']")?.value||"new"}.`,a=new Set(["overview","timing","characters"]),n=[...e.querySelectorAll(".inspector-section")],r=e.querySelector(".scene-inspector-form"),o=e.querySelector("[data-scene-time-editor]");if(r&&o&&"true"!==o.dataset.enhanced){o.dataset.enhanced="true";const e=r.querySelector("[name='TimeModeID']"),t=o.dataset.exactDatetimeModeId||"",a=o.dataset.exactDateModeId||"",n=[...o.querySelectorAll("[data-time-part-field]")],s={StartDateTime:o.querySelector("[data-date-part-for='StartDateTime']"),EndDateTime:o.querySelector("[data-date-part-for='EndDateTime']")},i={StartDateTime:o.querySelector("[data-time-part-for='StartDateTime']"),EndDateTime:o.querySelector("[data-time-part-for='EndDateTime']")},l={StartDateTime:r.querySelector("input[type='hidden'][name='StartDateTime']"),EndDateTime:r.querySelector("input[type='hidden'][name='EndDateTime']")},c=()=>e?.value===t,d=()=>e?.value===a,p=()=>{const e=c();n.forEach(t=>{t.hidden=!e,t.classList.toggle("d-none",!e)})},u=e=>{const t=l[e],a=s[e]?.value||"",n=i[e]?.value||"";if(!t)return;if(!a)return void(t.value="");if(c())return void(t.value=`${a}T${n||"00:00"}`);if(d())return void(t.value=a);const r=t.value.match(/^\\d{4}-\\d{2}-\\d{2}T(\\d{2}:\\d{2})/)?.[1];t.value=r?`${a}T${r}`:a},m=()=>{u("StartDateTime"),u("EndDateTime")};e?.addEventListener("change",p),r.addEventListener("submit",m),p()}n.forEach(e=>{if("true"===e.dataset.enhanced)return;const n=e.querySelector("h3, h2"),r=e.dataset.sectionTitle||n?.textContent?.trim()||"Overview",o=r.toLowerCase().replace(/&/g,"and").replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");const s=e.dataset.sectionId||`inspector-${o}`,i=s.replace(/^inspector-/,"");e.id=s,e.dataset.searchText=`${r} ${e.textContent}`.toLowerCase(),e.dataset.enhanced="true";const l=document.createElement("div");for(l.className="inspector-accordion-body";e.firstChild;)l.appendChild(e.firstChild);const c=document.createElement("button");c.type="button",c.className="inspector-accordion-toggle",c.setAttribute("aria-expanded","false"),e.append(c,l);const d=l.querySelectorAll(".asset-event-item, .thread-event-item, .warning-mini-card, .dependency-card, .metric-slider").length;c.innerHTML=`${r}${d||""}`;const p=localStorage.getItem(`${t}${i}`),u=null===p?a.has(i):"open"===p;e.classList.toggle("is-open",u),c.setAttribute("aria-expanded",String(u)),c.addEventListener("click",()=>{const a=!e.classList.contains("is-open");e.classList.toggle("is-open",a),c.setAttribute("aria-expanded",String(a)),localStorage.setItem(`${t}${i}`,a?"open":"closed")})}),e.querySelectorAll(".inspector-nav-links a").forEach(t=>{t.addEventListener("click",a=>{const n=e.querySelector(t.getAttribute("href"));n&&(a.preventDefault(),n.classList.add("is-open"),n.querySelector(".inspector-accordion-toggle")?.setAttribute("aria-expanded","true"),n.scrollIntoView({behavior:"smooth",block:"start"}))})});const s=e.querySelector("[data-inspector-search]");if(s?.addEventListener("input",()=>{const e=s.value.trim().toLowerCase();n.forEach(t=>{const a=!e||t.dataset.searchText.includes(e);t.classList.toggle("is-filtered-out",!a),a&&e&&(t.classList.add("is-open"),t.querySelector(".inspector-accordion-toggle")?.setAttribute("aria-expanded","true"))})}),"IntersectionObserver"in window){const t=[...e.querySelectorAll(".inspector-nav-links a")],a=new IntersectionObserver(e=>{e.forEach(e=>{e.isIntersecting&&t.forEach(t=>{t.classList.toggle("active",t.getAttribute("href")===`#${e.target.id}`)})})},{root:e.closest(".scene-inspector-panel")||null,rootMargin:"-10% 0px -70% 0px"});n.forEach(e=>a.observe(e))}})})(),(()=>{const e=document.querySelectorAll("[data-metric-shape-chart]");if(!e.length)return;const t=["#2f6f63","#b35f3b","#6750a4","#c58b2b","#7d3f52","#33759b","#9c4d8f","#a33d3d","#6f8f3d","#d08a2f","#444b57"],a=new Set(["Overall Intensity","Tension","Emotional Weight","Action"]),n=[],r=()=>{window.requestAnimationFrame(()=>{n.forEach(e=>e.resize())})};window.PlotLineMetricCharts={resizeAll:r},window.addEventListener("plotline:timeline-layout-changed",r);const o={id:"plotlineChapterGuides",afterDraw(e){const t=e.config.options.plugins.plotlineScenes||[],{ctx:a,chartArea:n,scales:r}=e;if(!t.length||!r.x)return;a.save(),a.strokeStyle="rgba(47, 111, 99, 0.16)",a.fillStyle="rgba(82, 75, 65, 0.58)",a.lineWidth=1,a.font="700 10px system-ui, -apple-system, Segoe UI, sans-serif";const o=[];t.forEach((e,a)=>{a&&e.chapterLabel===t[a-1].chapterLabel||o.push({scene:e,index:a})});const s=o.filter(e=>!e.scene.isPlaceholder),i=s.length>40?5:s.length>24?4:s.length>14?2:1;s.forEach((e,t)=>{const{scene:o,index:l}=e,c=r.x.getPixelForValue(l+.5);a.beginPath(),a.moveTo(c,n.top),a.lineTo(c,n.bottom),a.stroke();const d=Number.parseInt(String(o.chapterLabel).replace(/[^0-9]/g,""),10);(0===t||t===s.length-1||1===i||Number.isFinite(d)&&d%i===0)&&a.fillText(o.chapterLabel,Math.min(c+4,n.right-70),n.bottom+22)}),a.restore()}};window.Chart&&Chart.register(o),e.forEach(e=>{const r=e.querySelector("script[type='application/json']"),o=e.querySelector("canvas"),s=e.querySelector("[data-metric-toggles]"),i=e.querySelector("[data-chart-fallback]"),l=e.querySelector("[data-timeline-metric-edit-toolbar]"),c=e.querySelector("[data-edit-metric-status]"),d=e.hasAttribute("data-timeline-metric-editor")&&l&&c;if(!r||!o)return;let p;try{p=JSON.parse(r.textContent||"{}")}catch{return void i?.classList.remove("d-none")}if(!window.Chart||!p.scenes?.length||!p.metrics?.length)return void i?.classList.remove("d-none");const u=new Set(p.defaultMetrics?.length?p.defaultMetrics:a),m=p.scenes.length,h=m>80?10:m>40?5:m>24?4:m>14?2:1,g=p.metrics.map((e,a)=>{const n=new Map(e.points.map(e=>[e.sceneId,e.value])),r=t[a%t.length];return{label:e.metricName,metricTypeId:e.metricTypeId,minValue:Number.isFinite(e.minValue)?e.minValue:1,maxValue:Number.isFinite(e.maxValue)?e.maxValue:10,data:p.scenes.map((e,t)=>{const a=n.get(e.sceneId);return null==a?{x:t+.5,y:null,sceneId:e.sceneId}:{x:t+.5,y:a,sceneId:e.sceneId}}),borderColor:r,backgroundColor:r,pointBackgroundColor:r,pointBorderColor:"#fff",pointBorderWidth:1.5,pointRadius:3,pointHoverRadius:5,borderWidth:2,tension:.35,spanGaps:!0,hidden:!u.has(e.metricName)}});let f=null,y=!1;const v=e=>{c&&(c.textContent=e)},L=()=>g.map((e,t)=>t).filter(e=>b?.isDatasetVisible(e)),w=()=>{const e=L();return 1===e.length?e[0]:-1},S=()=>{if(!d)return;const e=w();g.forEach((t,a)=>{t.pointRadius=a===e?5:3,t.pointHoverRadius=a===e?7:5,t.borderWidth=a===e?3:2});const t=L(),a=e>=0;o.classList.toggle("metric-curve-editing",a),c.classList.toggle("d-none",0===t.length),0===t.length?v(""):v(a?"Drag points up or down to edit this metric.":"Show only one metric line to edit its curve."),b?.update()};s.innerHTML="",g.forEach((e,t)=>{const a=`metric-toggle-${Math.random().toString(36).slice(2)}-${t}`,n=document.createElement("label");n.className="metric-toggle-pill",n.style.setProperty("--metric-colour",e.borderColor),n.innerHTML=`${e.label}`,s.appendChild(n),n.querySelector("input").addEventListener("change",e=>{b.setDatasetVisibility(t,e.target.checked),S(),b.update()})});const b=new Chart(o,{type:"line",data:{datasets:g},options:{responsive:!0,maintainAspectRatio:!1,interaction:{mode:"nearest",intersect:!1},scales:{y:{min:1,max:10,ticks:{stepSize:1},grid:{color:"rgba(82, 75, 65, 0.10)"}},x:{type:"linear",min:0,max:m,bounds:"ticks",ticks:{maxRotation:0,autoSkip:!1,maxTicksLimit:16,callback(e){const t=Math.floor(Number(e));if(t<0||t>=m)return"";const a=p.scenes[t];return 0!==t&&t!==m-1&&t%h!==0||a?.isPlaceholder?"":a?.axisLabel||""}},afterBuildTicks(e){e.ticks=p.scenes.map((e,t)=>({value:t+.5}))},grid:{display:!1}}},plugins:{legend:{display:!1},plotlineScenes:p.scenes,tooltip:{callbacks:{title(e){const t=Math.floor(e[0].parsed.x),a=p.scenes[t];return a.isPlaceholder?a.sceneTitle||"No scene":`${a.chapterLabel}, Scene ${a.sceneNumber}: ${a.sceneTitle}`},label:e=>`${e.dataset.label}: ${e.formattedValue}`,afterBody(e){const t=Math.floor(e[0].parsed.x),a=p.scenes[t],n=[];return a.characterPresence?n.push(a.characterPresence):void 0!==a.characterAppears&&n.push(a.characterAppears?"Character appears":"Character does not appear"),a.bookTitle&&n.push(a.bookTitle),n}}}}}});d&&(S(),o.addEventListener("pointerdown",e=>{f=(e=>{if(!d)return null;const t=w();if(t<0)return null;const a=b.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0).find(e=>e.datasetIndex===t);if(!a)return null;const n=b.data.datasets[a.datasetIndex],r=n?.data?.[a.index];return r?.sceneId&&null!=r.y?{datasetIndex:a.datasetIndex,pointIndex:a.index,previousValue:r.y}:null})(e),f&&(e.preventDefault(),o.setPointerCapture?.(e.pointerId),y=!0)}),o.addEventListener("pointermove",e=>{if(!f)return;const t=b.data.datasets[f.datasetIndex],a=t?.data?.[f.pointIndex];t&&a&&(a.y=((e,t)=>{const a=b.scales.y.getValueForPixel(e.offsetY),n=Math.round(a);return Math.max(t.minValue,Math.min(t.maxValue,n))})(e,t),b.update("none"))}),o.addEventListener("pointerup",async t=>{if(!f)return;const a=f;f=null,o.releasePointerCapture?.(t.pointerId),await(async t=>{const a=b.data.datasets[t.datasetIndex],n=a?.data?.[t.pointIndex];if(!a||!n?.sceneId)return;const r=l?.querySelector("input[name='__RequestVerificationToken']")?.value||"";v("Saving...");try{const t=await fetch(e.dataset.updateUrl||"/SceneMetrics/UpdateSceneMetricValue",{method:"POST",headers:{"Content-Type":"application/json",RequestVerificationToken:r},body:JSON.stringify({sceneId:Number(n.sceneId),metricId:Number(a.metricTypeId),value:Number(n.y)})}),o=await t.json().catch(()=>({}));if(!t.ok||!o.success)throw new Error(o.message||"Save failed");n.y=o.value,v("Saved"),b.update()}catch{n.y=t.previousValue,v("Save failed"),b.update()}})(a),window.setTimeout(()=>{y=!1},0)}),o.addEventListener("pointercancel",e=>{if(!f)return;const t=b.data.datasets[f.datasetIndex],a=t?.data?.[f.pointIndex];a&&(a.y=f.previousValue),f=null,o.releasePointerCapture?.(e.pointerId),y=!1,b.update()})),o.addEventListener("click",e=>{if(y)return void e.preventDefault();const t=b.getElementsAtEventForMode(e,"nearest",{intersect:!0},!0);if(!t.length)return;const a=b.data.datasets[t[0].datasetIndex]?.data?.[t[0].index],n=a?Math.floor(a.x):t[0].index,r=p.scenes[n];r?.timelineUrl&&(window.PlotLineTimelineScroll?.save(),window.location.href=r.timelineUrl)}),n.push(b);const E=window.ResizeObserver?new ResizeObserver(()=>b.resize()):null;E&&(E.observe(e),E.observe(e.querySelector(".metric-chart-frame")||e))})})(),(()=>{const e=document.querySelector("[data-timeline-root]"),t=document.querySelector("[data-timeline-controls]");if(!e||!t)return;const a="plotline.timeline.visibility",n={"scene-cards":!0,"plot-lines":!0,assets:!0,characters:!0,locations:!0,warnings:!0,metrics:!0},r=t=>{Object.entries(t).forEach(([t,a])=>{e.classList.toggle(`hide-${t}`,!a),document.querySelectorAll(`[data-timeline-section='${t}']`).forEach(e=>{e.classList.toggle("timeline-section-hidden",!a)})}),document.querySelectorAll("[data-location-marker]").forEach(e=>{e.classList.toggle("timeline-section-hidden",!t.locations)}),document.querySelectorAll("[data-warning-marker]").forEach(e=>{e.classList.toggle("timeline-section-hidden",!t.warnings)}),document.querySelector("[data-visibility-json]")?.setAttribute("value",JSON.stringify(t))},o=(()=>{try{return{...n,...JSON.parse(localStorage.getItem(a)||"{}")}}catch{return{...n}}})();t.querySelectorAll("[data-timeline-toggle]").forEach(e=>{const t=e.dataset.timelineToggle;e.checked=o[t]??!0,e.addEventListener("change",()=>{o[t]=e.checked,localStorage.setItem(a,JSON.stringify(o)),r(o)})}),t.querySelector("[data-timeline-preset-form]")?.addEventListener("submit",()=>{document.querySelector("[data-visibility-json]")?.setAttribute("value",JSON.stringify(o))}),r(o)})(),(()=>{const e=document.querySelector("[data-timeline-root]");if(!e)return;const t=e.querySelector(".timeline-workspace")||e,a=document.querySelector("[data-timeline-density]"),n=document.querySelector("[data-timeline-zoom]"),r=document.querySelector("[data-timeline-search]"),o=e.querySelector("[data-timeline-minimap]"),s=document.querySelectorAll("[data-timeline-jump], [data-timeline-warning-jump], [data-timeline-entity-jump]"),i=[...e.querySelectorAll(".timeline-scene-card[data-scene-id]")],l="plotline.timeline.collapsed",c="plotline.timeline.density",d="plotline.timeline.zoom",p="plotline.timeline.pending-scroll",u="plotdirector.timelineNavigationDiscovered",m="plotline.timeline.inspectorWidth",h=[".timeline-shell",".plot-lane-board",".asset-lane-board",".character-lane-board",".metric-graph-stack","[data-timeline-minimap]"].join(","),g=["compact","comfortable","expanded"],f=["book","chapter","scene-detail"],y=e.querySelector("[data-inspector-drawer]"),v=e.querySelector("[data-inspector-resizer]"),L=e.querySelector("[data-inspector-close]"),w=null!==localStorage.getItem(l),S=(e=>{try{return new Set(JSON.parse(localStorage.getItem(e)||"[]"))}catch{return new Set}})(l),b=()=>[...e.querySelectorAll(h)],E=t=>{if(!y)return;const{minimum:a,maximum:n,defaultWidth:r}=(()=>{const t=e.getBoundingClientRect().width||window.innerWidth,a=Math.min(420,Math.max(320,t-360)),n=Math.max(a,Math.min(.65*t,t-420));return{minimum:a,maximum:n,defaultWidth:Math.max(a,Math.min(n,.4*t))}})(),o=Math.max(a,Math.min(n,Number(t)||r));e.style.setProperty("--timeline-inspector-width",`${Math.round(o)}px`)};y&&(E(localStorage.getItem(m)),window.addEventListener("resize",()=>E(localStorage.getItem(m)))),(()=>{const r=e.querySelector("[data-timeline-navigation-card]");if(!r)return;const o=r.querySelector("[data-timeline-navigation-dismiss]"),s=r.querySelector("[data-timeline-navigation-demo]"),i=()=>e.querySelector(".timeline-shell"),l=e=>Boolean(e&&e.scrollWidth>e.clientWidth+8),c=e=>Math.max(0,e.scrollWidth-e.clientWidth),d=()=>[t,...b()].filter((e,t,a)=>e&&a.indexOf(e)===t);let p=!1,m=!1,h=!1,g=null;const f=new WeakMap,y=e=>f.set(e,e.scrollLeft),v=(e=!1)=>{if(window.clearTimeout(g),!e||window.matchMedia?.("(prefers-reduced-motion: reduce)")?.matches||r.hidden)return r.classList.remove("is-dismissing"),void(r.hidden=!0);r.classList.add("is-dismissing"),g=window.setTimeout(()=>{r.hidden=!0,r.classList.remove("is-dismissing")},1300)},L=e=>{const t=l(e),a=c(e);e.classList.toggle("timeline-horizontal-overflow",t),e.classList.toggle("has-scroll-left",t&&e.scrollLeft>8),e.classList.toggle("has-scroll-right",t&&e.scrollLeft