.plot-workspace-heading { align-items: end; }
.plot-workspace-controls { position: sticky; top: .75rem; z-index: 15; margin-bottom: 2rem; padding: 1rem; border: 1px solid var(--bs-border-color); border-radius: 1rem; background: color-mix(in srgb, var(--bs-body-bg) 94%, transparent); box-shadow: 0 .5rem 2rem rgba(22, 30, 40, .08); backdrop-filter: blur(12px); }
.plot-control-row { display: grid; grid-template-columns: minmax(10rem, .8fr) minmax(13rem, 1fr) minmax(14rem, 1.4fr) auto; gap: .75rem; align-items: end; }
.plot-control-row label { display: grid; gap: .3rem; font-size: .82rem; font-weight: 650; }
.plot-control-row .plot-toggle { display: flex; align-items: center; gap: .5rem; min-height: 2.4rem; }
.plot-line-picker { display: flex; flex-wrap: wrap; gap: .5rem; margin-top: .9rem; padding: 0; border: 0; }
.plot-line-picker legend { float: left; width: auto; margin: .5rem .25rem 0 0; font-size: .78rem; font-weight: 750; text-transform: uppercase; letter-spacing: .05em; }
.plot-line-choice { display: flex; align-items: center; gap: .4rem; padding: .42rem .65rem; border: 1px solid var(--bs-border-color); border-radius: 999px; cursor: pointer; }
.plot-line-choice:has(input:checked) { border-color: var(--line-colour); box-shadow: inset 0 0 0 1px var(--line-colour); }
.plot-line-choice input { position: absolute; opacity: 0; pointer-events: none; }
.plot-line-choice small { color: var(--bs-secondary-color); }
.plot-line-dot { display: inline-block; width: .7rem; height: .7rem; border-radius: 50%; background: var(--line-colour); }
.plot-unattributed-link { align-self: center; margin-left: auto; font-size: .9rem; }
.plot-thread-filter { margin-top: .75rem; font-size: .9rem; }
.plot-thread-filter > div { display: flex; flex-wrap: wrap; gap: .8rem; padding-top: .5rem; }
.plot-thread-filter label { display: flex; gap: .35rem; align-items: center; }
.plot-thread-filter small { color: var(--bs-secondary-color); }
.plot-attribution-audit { display: grid; grid-template-columns: 1fr 1fr; gap: 1.5rem; }
.plot-audit-column { display: grid; align-content: start; gap: .55rem; }
.plot-audit-column h2 span, .plot-suggestion-panel h2 span { color: var(--bs-secondary-color); font-size: .8em; }
.plot-audit-scene, .plot-suggestion-panel button { display: grid; gap: .15rem; padding: .8rem; border: 1px solid var(--bs-border-color); border-radius: .7rem; background: var(--bs-body-bg); color: inherit; text-align: left; }
.plot-audit-scene small, .plot-suggestion-panel button span { color: var(--bs-secondary-color); }
.plot-suggestion-panel { display: grid; gap: .5rem; margin: 2rem 0; padding: 1rem; border: 1px solid var(--bs-border-color); border-radius: 1rem; }
.plot-inspector-backdrop { position: fixed; inset: 0; z-index: 1035; background: rgba(10, 15, 25, .35); }
.plot-inspector { position: fixed; z-index: 1040; top: 0; right: 0; width: min(34rem, 94vw); height: 100dvh; overflow: auto; padding: 1.25rem; border-left: 1px solid var(--bs-border-color); background: var(--bs-body-bg); box-shadow: -1rem 0 3rem rgba(10, 15, 25, .18); transform: translateX(102%); transition: transform .2s ease; }
.plot-inspector[aria-hidden="false"] { transform: translateX(0); }
.plot-inspector-header { display: flex; justify-content: space-between; gap: 1rem; }
.plot-inspector-header h2 { margin: 0; }
.plot-inspector-tabs { display: flex; overflow-x: auto; gap: .25rem; margin: 1.25rem 0 1rem; border-bottom: 1px solid var(--bs-border-color); }
.plot-inspector-tabs button { padding: .55rem .7rem; border: 0; border-bottom: 2px solid transparent; background: transparent; color: var(--bs-secondary-color); }
.plot-inspector-tabs button.active { border-color: var(--bs-primary); color: var(--bs-body-color); }
.plot-inspector-membership { padding-left: .8rem; border-left: .3rem solid var(--line-colour); }
.plot-inspector-membership article, .plot-evidence { margin-bottom: .8rem; padding: .75rem; border-radius: .6rem; background: var(--bs-tertiary-bg); }
.plot-facts { display: grid; grid-template-columns: 6rem 1fr; gap: .5rem; }
.plot-facts dt { color: var(--bs-secondary-color); }
.plot-manuscript { margin-top: 1rem; padding: 1rem; border: 1px solid var(--bs-border-color); border-radius: .6rem; }
.plot-manuscript > div { max-height: 45vh; overflow: auto; white-space: pre-wrap; font-family: Georgia, serif; line-height: 1.65; }
.plot-inspector-loading { padding: 3rem; color: var(--bs-secondary-color); text-align: center; }
@media (max-width: 800px) {
    .plot-control-row, .plot-attribution-audit { grid-template-columns: 1fr; }
    .plot-workspace-controls { position: static; }
}
.plot-map-toolbar { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:1rem; margin-bottom:1rem; }
.plot-map-toolbar label { display:flex; align-items:center; gap:.5rem; }
.plot-map-scroll { overflow:auto; border:1px solid var(--bs-border-color); border-radius:.8rem; margin-bottom:2rem; background:var(--bs-body-bg); max-height:85vh; }
.plot-narrative-map { --step:224px; position:relative; min-width:100%; isolation:isolate; }
.plot-horizontal-route { position:absolute; left:0; right:20px; height:6px; background:var(--line-colour); border-radius:3px; z-index:1; }
.plot-lane-label { position:sticky; left:0; width:204px; min-height:65px; padding:.65rem; border-left:5px solid var(--line-colour); background:var(--bs-body-bg); z-index:8; margin-bottom:-65px; box-shadow:8px 0 12px var(--bs-body-bg); }
.plot-lane-label strong { display:block; font-size:.85rem; }
.plot-lane-label strong span { display:inline-grid; place-items:center; border:1px solid var(--line-colour); border-radius:50%; width:1.4rem; height:1.4rem; }
.plot-map-marker, .plot-scene-stem, .plot-map-callout, .plot-thread-section, .plot-map-gap, .plot-chapter-guide, .plot-explicit-target { position:absolute; left:calc(260px + var(--column) * var(--step)); }
.plot-map-marker { width:14px; height:14px; transform:translate(-50%,-4px); border:3px solid var(--bs-body-bg); border-radius:50%; background:var(--line-colour); box-shadow:0 0 0 2px var(--line-colour); z-index:4; }
.plot-map-marker.is-accent { border-radius:2px; transform:translate(-50%,-4px) rotate(45deg); }
.plot-scene-stem { width:2px; background:var(--bs-secondary-color); z-index:2; }
.plot-scene-stem.is-shared { width:4px; border-left:1px solid var(--bs-body-bg); }
.plot-map-callout { width:190px; transform:translateX(-40px); z-index:5; }
.plot-map-callout button { position:relative; display:grid; gap:3px; width:100%; min-height:100px; padding:.6rem .7rem; border:1px solid var(--bs-border-color); border-radius:.6rem; background:var(--bs-body-bg); color:var(--bs-body-color); text-align:left; }
.plot-map-callout strong { font-size:.9rem; overflow:hidden; white-space:nowrap; text-overflow:ellipsis; }
.plot-map-callout small { font-size:.68rem; color:var(--bs-secondary-color); }
.plot-callout-role { max-height:2.5rem; overflow:auto; }
.plot-map-callout:focus-within, .plot-map-callout:hover { z-index:10; }
.plot-callout-preview { display:none; font-size:.8rem; color:var(--bs-secondary-color); max-height:9rem; overflow:auto; }
.plot-map-callout button:hover .plot-callout-preview, .plot-map-callout button:focus .plot-callout-preview { display:block; }
.plot-map-callout button:focus-visible, .plot-line-choice:focus-within { outline:3px solid var(--bs-primary); outline-offset:3px; }
.plot-warning-marker { position:absolute; right:5px; top:3px; font-size:.65rem; color:var(--bs-secondary-color); }
.plot-map-gap { transform:translateX(-175px); width:130px; font-size:.68rem; text-align:center; border-top:3px dashed var(--bs-secondary-color); background:var(--bs-body-bg); color:var(--bs-secondary-color); z-index:3; }
.plot-map-gap small { display:block; }
.plot-thread-section { width:180px; font-size:.72rem; border-left:2px solid var(--line-colour); padding-left:.4rem; color:var(--bs-secondary-color); white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.plot-chapter-guide { top:0; bottom:0; border-left:1px dashed var(--bs-border-color); color:var(--bs-secondary-color); pointer-events:none; }
.plot-chapter-guide small { display:block; padding:.3rem; font-size:.65rem; max-width:190px; }
.plot-explicit-target { margin-left:12px; border-left:2px dashed var(--bs-primary); z-index:3; color:var(--bs-primary); font-size:.65rem; }
.plot-explicit-target small { position:absolute; top:50%; left:4px; background:var(--bs-body-bg); }
.plot-map-empty { position:absolute; left:230px; top:70px; color:var(--bs-secondary-color); }
.plot-scene-strip { display:flex; gap:.5rem; overflow:auto; padding:.5rem 0; max-height:180px; }
.plot-scene-strip button { flex:0 0 170px; display:grid; gap:.25rem; padding:.5rem; border:1px solid var(--bs-border-color); border-radius:.5rem; background:var(--bs-body-bg); color:var(--bs-body-color); text-align:left; }
.plot-scene-strip strong { font-size:.8rem; }
.plot-scene-strip small { font-size:.7rem; color:var(--bs-secondary-color); }
.plot-scene-strip button[aria-pressed=true], .plot-lane-label.is-drop-target { outline:3px solid var(--bs-primary); outline-offset:-3px; }
.plot-association-dialog { width:min(680px,94vw); max-height:88vh; overflow:auto; padding:1.5rem; background:var(--bs-body-bg); color:var(--bs-body-color); border:1px solid var(--bs-border-color); border-radius:.8rem; }
.plot-association-dialog::backdrop { background:color-mix(in srgb,var(--bs-body-color) 30%,transparent); }
.plot-association-dialog .form-group { display:grid; margin:.7rem 0; }
.plot-association-dialog input, .plot-association-dialog select, .plot-association-dialog textarea { max-width:100%; }
.plot-lane-label-row { position:absolute; left:0; right:0; z-index:8; pointer-events:none; }
.plot-lane-label-row .plot-lane-label { pointer-events:auto; margin:0; }
.plot-dependency-overlay { position:absolute; inset:0; pointer-events:none; z-index:2; overflow:visible; }
.plot-dependency-overlay path { stroke:var(--bs-secondary-color); stroke-width:1.5; stroke-dasharray:4 5; fill:none; pointer-events:stroke; opacity:.65; }
.plot-map-callout { width:min(190px, calc(var(--step) - 20px)); }
/* The page owns vertical movement; the canvas only scrolls horizontally. */
.plot-map-scroll { max-height:none; overflow-x:auto; overflow-y:hidden; }
.plot-horizontal-route { height:30px; margin-top:-12px; background:transparent; z-index:4; }
.plot-horizontal-route::before { content:""; position:absolute; inset:12px 0; background:var(--line-colour); border-radius:3px; pointer-events:none; }
.plot-horizontal-route.is-drop-target { background:color-mix(in srgb,var(--line-colour) 18%,transparent); outline:2px dashed var(--line-colour); outline-offset:3px; }
.plot-map-marker { pointer-events:none; z-index:5; }
.plot-map-callout button { height:100px; min-height:0; grid-template-rows:auto auto 1fr; }
.plot-callout-role { border-left:3px solid var(--line-colour); padding-left:.35rem; }
.plot-map-callout:has(.plot-callout-role:nth-of-type(3)) .plot-callout-role { font-size:.62rem; }
.plot-callout-preview { position:absolute; left:-1px; top:100%; width:calc(100% + 2px); height:auto; max-height:min(20rem, 50vh); padding:.6rem; background:var(--bs-body-bg); border:1px solid var(--bs-border-color); border-top:0; border-radius:0 0 .5rem .5rem; z-index:10; }
.plot-scene-stem { visibility:hidden; }
.plot-membership-overlay { position:absolute; inset:0; pointer-events:none; z-index:2; }
.plot-membership-overlay path { fill:none; stroke-width:1.5; }
.plot-membership-overlay path.is-shared { stroke-dasharray:3 3; }
.plot-colour-edit { font-size:.7rem; color:var(--bs-secondary-color); }
.plot-association-dialog details { margin:.8rem 0; }
.plot-callout-memberships { display:grid; gap:2px; max-height:42px; overflow:auto; }
.plot-callout-role { display:block; }
.plot-map-gap { z-index:6; pointer-events:none; }

/* Keep manuscript scenes available while the page scrolls through association targets. */
.plot-associating .plot-workspace-controls { position:static; }
.plot-associating #plot-association-strip { position:sticky; top:var(--plot-tray-top, 6px); z-index:20; padding:.5rem .75rem; margin-bottom:.75rem; border:1px solid var(--bs-border-color); border-radius:.6rem; background:var(--bs-body-bg); box-shadow:0 .3rem .8rem color-mix(in srgb, var(--bs-body-color) 10%, transparent); }
.plot-associating #plot-association-strip > p { margin:0 0 .25rem; font-size:.75rem; }
.plot-associating .plot-scene-strip { padding:.25rem 0; max-height:none; }
.plot-associating .plot-scene-strip button { gap:.1rem; padding:.35rem .5rem; }
.plot-associating .plot-scene-strip strong { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.plot-associating #plot-association-status { margin:.25rem 0 0; }
.plot-map-callout button:has(.plot-callout-preview:hover), .plot-map-callout button:focus { border-radius:.6rem .6rem 0 0; }
.plot-health-summary { display:block; border:0; padding:.1rem 0; background:transparent; color:var(--bs-secondary-color); font-size:.68rem; text-align:left; text-decoration:underline dotted; }
.plot-health-position { position:absolute; left:calc(260px + var(--column) * var(--step) + 12px); z-index:1; width:20px; height:20px; line-height:16px; border:1px solid var(--bs-border-color); border-radius:50%; background:var(--bs-body-bg); color:var(--bs-secondary-color); font-size:.8rem; }
.plot-associating .plot-health-position { pointer-events:none; opacity:.55; }
.plot-health-thread { margin:1rem 0; padding-top:.75rem; border-top:1px solid var(--bs-border-color); }
.plot-health-thread h3 { font-size:1.05rem; }
.plot-health-finding { margin:.75rem 0; padding:.7rem; background:var(--bs-tertiary-bg); border:1px solid var(--bs-border-color); border-radius:.5rem; }
.plot-health-finding h4 { font-size:1rem; margin:.3rem 0; }
.plot-health-finding small, .plot-health-evidence { color:var(--bs-secondary-color); font-size:.8rem; }
.plot-health-evidence { display:grid; gap:.3rem; margin:.6rem 0; }
.plot-health-evidence a { justify-self:start; }
.plot-health-partial { padding:.6rem; border:1px dashed var(--bs-border-color); }
.plot-lane-label:has(.plot-health-summary) { flex-wrap:wrap; gap:0 .4rem; }
.plot-lane-label:has(.plot-health-summary) [data-lane-name], .plot-health-summary { flex:1 0 100%; }
.plot-lane-label:has(.plot-health-summary) .plot-associate-action { max-width:100%; white-space:normal; }
